




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
开发环境 Quartues II 6 0 sp1 Nios II EDS 6 0 上个例子中 我们使用 VHDL 语言 根据 FPGA 管脚与数码管和按键管脚的连接 通过 一系列的语句控制管脚电平的高低 从而让 FPGA 实现数码管显示功能 可见 对于比较简单 的功能实现 可以像这个例子中那样 直接控制最底层资源 甚至对每个管脚在每个时刻的电 平输出了如指掌 但是 如果设计稍显复杂 那么对底层细节的过多关注就会成为一种累赘 试想我们平时在电脑上编写 C 程序 比如在显示器上输出一行字 我们只用一句 printf 即 可完成 至于打印命令怎么传到显示芯片上 哪个芯片管脚怎么变化 又怎么传到显示器上输 出 诸如此类涉及底层硬件的问题 我们没必要关注太多 于是 我们把用 printf 这类高级 语言描述设计逻辑的工作称为软件设计 显然 软件只是一种抽象的看不见摸不着的东西 它 的结构接近于人类思维逻辑 无论软件再怎样构思精妙 只有在硬件上才能体现出实际效果 做计算机开发应用程序的时候 硬件是现成的 软硬件之间的桥梁早就由操作系统给你 搭好了 我们只需专心完成软件的构思和设计就 OK 显而易见 软硬件的分工会给电子设计带来极大的方便 自然有人把这种分工方式引进 FPGA 设计领域 琢磨着怎么在小小的 FPGA 上也搞个软硬件协同设计 负责硬件设计的和负 责软件的各司其职 最后 pia 一整合 效率倍增 来看看 nios 是怎么做的 拿出 DE2 开发板 上面很多外设接口和与之连接的芯片 那 是硬件 中间有一块大的 CycloneII 芯片 里面是空的 等着我们编写程序下载到里面运行 前篇文章我们用最原始的方法写了个数码管控制器 这次我们换种方法 同样是数码管控制器 用软硬件协同设计来完成 跟计算机对比 硬件我们有了 软件就用 C 语言来写 但是 nios 系统可没提供 WinXP 也就是说软件和硬件之间的那座桥还得自己解决 看上图 这座桥分为 3 个层次 硬件控制层 设备驱动层 硬件抽象层 简称 HAL 既然 是软硬件的过渡部分 那么这 3 层的设计需要对硬件和软件都有一定程度的了解 姑且称之为 软硬件混杂设计 吧 每一层所要完成的任务 就是整合和简化硬件操作细节 整合 再整合 使其一目了然 硬件控制层 与硬件直接打交道的是硬件控制层 上面提到 搭 桥 的目的是让软件设计人员可以完全忽略硬件操作细节 因此 我们希望 所有的硬件细节都能在这层解决 并向设备驱动层提供整齐的 接口 之前的例子可看作硬件 控制器的雏形 但还缺少与设备驱动层的接口 何为 整齐 呢 比如说 设计数码管控制器 我想让它显示数字 5 最好的方法是 我 将数据 5 和表示 显示 的命令从设备驱动层传给硬件控制层 直接告诉它 我要 数码管 显 示 5 至于要控制哪个管脚电平高低才能显示 5 全由硬件控制层负责 类似这样分工合作的例子在日常生活中屡见不鲜 比如说 邮局要将一封信送给家住 A 小区的张三 邮递员把信放入 A 小区的信箱 小区物业再去确认张三的具体住处 把信最终送 到张三手中 类比可见 邮局相当于设备驱动 物业相当于硬件管理器 张三则是具体的硬件 邮局 和物业之间的接口是物业提供的信箱 设备驱动和硬件管理层之间的接口 我们称之为 寄存器 同样由硬件管理层提供 寄存器 是两层之间得以明确分工和相互联系的关键 设备驱动开发人员眼中的硬件就是一组寄存器的抽象 通过读写寄存器间接控制硬件行 为 那么 在数码管控制器里加入一个数据寄存器和一个命令寄存器 data reg 存储待显示的数据 cmd reg 为 1 时显示 为 0 时清空 Avalon 总线 你可能会说 这有什么 在每个硬件管理器和设备驱动之间都建立一个通道呗 这是最 直接的办法 但显然不是最好的办法 试想 城市为什么要建高速公路呢 多修几十根羊肠小 道不也一样能跑车吗 有人回答 为了收养路费呗 小路上开车 速度慢且不说 管理协调是个大问题 是一条大公路容易管理 还是几十根羊肠容易理顺 好了 回到正题 nios 系统需要一条 高速公路 称为 总线 总线仲裁器 则行使 交 通管理局 的角色 控制数据的进出 并为每个硬件提供一个进出 高速公路 的接口 用 地址 来标识这个接口的位置 nios 采用的是 Avalon 总线 它有着一套接口规范 同步时钟 clk 片选信号 chipselect 地址 address 读请求 read 读传输 readdata 写请求 write 写传输 writedata 这些是比较重要的接口信号 其它的不一一列举了 硬件控制器要接入总线 必须遵循 接口规范 就像高速公路出口必须摆个收费站一样 那么在在数码管控制器里加入 Avalon 总线信号 既然加入了两个寄存器和 avalon 信号 就需要对硬件逻辑进行必要改动 大致过程是 当 chipselect 和 write 有效时 将 write data 赋给 address 对应的寄存器 当 chipselect 和 read 有效时 将 address 对应寄存器的值赋给 read data 另外 根据这两个寄存器的内容 决定数码管输出信号 oSEG0 代码不贴出来了 具体见工程压缩包 设备驱动程序 其实 总线仲裁器 也可看作一种硬件控制器 只不过它管的不是具体的硬件 而是负责 数据的传输 那么它也有自己的设备驱动 封装了总线操作的细节 既然总线是现成的 我们 秉承 拿来主义 的原则 甭管它怎么实现的 会用就行 例如 数码管设备驱动要把数据 5 和 显示 命令传给数码管控制器 设计两个函数 由 于数据和命令的传递必须经过总线 那么需调用总线驱动函数 IOWR 基地址 偏移量 数据 另外 读取寄存器用到 IORD 基地址 偏移量 这两个函数在里 的路径是 altera kits nios2 60 components altera nios2 HAL inc 至此 桥 搭完 函数功能从字面上很好理解 刚才定义两个寄存器时 data reg 在前面 所以偏移量是 0 cmd reg 在后面 偏移量是 1 REG MSK 称为掩码 avalon 总线数据接口共 32 位 但我们设计的 data reg 位宽是 4 cmd reg 位宽为 1 掩码的作用在于告知寄存器宽度 知道就行 实际上用不着 REG OFST 是寄存器内的偏移量 这里同样用不着 先写上 吧 OK 我们的数码管设备驱动文件正式出炉了 看看是不是简洁明了很多啊 硬件抽象层 HAL 设备驱动程序封装的仅仅是对某个寄存器的一次读写操作 功能单一 需要在硬件抽象层 再做一次封装 直接将这些函数列出来 一目了然 不作多余的解释了 至此 桥 搭完 接下来在把我们的 数码管控制器 加入 sopc builder 系统中 现在几乎所有讲 nios 的书都会提及自定义用户外设 而且用的都是 altera 官方提供的 例子 PWM 本文的 数码管控制器 就是照着它依葫芦画瓢改过来的 呵呵 惭愧惭愧 之所 以想改它 一是因为它用的是 verilog 而不是 VHDL 而大多数人先接触却是 VHDL 二来 PWM 的显示效果似乎不太明显 改成数码管显示相对比较有成就感 第三 PWM 的逻辑稍微 有一点点复杂 我们的重点在于说明怎样自定义外设 当然例子越简单越好 既然是照着 PWM 原样改的 所以本文工程的结构与之保持高度一致 将其加入 sopc builder 的步骤也差不多 这里我就不再码字了 各位照着书上做吧 SOPC 嵌入式系统基础教程 周立功等著 第 8 章 再接下来 建立一个包含 数码管控制器 的 nios 系统 并编写应用程序 实现从 0 到 9 计数 贴张官方的 nios 设计流程图 看起来很漂亮是吧 不愧是 altera 的东西 大而全而不 乱 先说最中间的 SOPC Builder 它的任务是建立一个 以 Nios CPU 为核心 以 Avalon 总线为纽带 将各种硬件设备连接起来 的 nios 系统 这个系统要在 FPGA 中运行 所以必须 挂靠一个 Quartus II 工程 用左边的 Quartus II 进行分配引脚等等工作 生成硬件系统 接 着 右边的 Nios II IDE 就可以在这个硬件系统上设计应用程序了 最后将硬件系统和软件程 序分别下载到 FPGA 芯片上 大功告成 下面 step by step Quartus II 新建一个工程名 工程名 DE2 SEG7 Tool SOPC Builder 打开 SOPC Builder System Name nios2 system 选 VHDL 一个包含 数码管控制器 的最小系统至少由 3 部分组成 CPU 必不可少 RAM 存储代码 还有刚才设计的 seg7 avalon 加入 Nios II Processor 选 Nios II e 精简型够用了 加入 On Chip Memory 类型选 RAM 位宽默认 32 bits Total Memory 选 48Kbytes 等会儿软件要占用四十多 K 空间 加入 seg7 avalon 将这三个组件的名称改好看点 然后设定 RAM 的基地址为 0 x00000000 再右 键锁定基地址 如图 为什么要锁定 RAM 的基地址为 0 呢 点选第二个选项卡 可以看到 Reset Address 对应 着 RAM 系统的复位肯定要从地址 0 开始 由于刚才人为改动了地址分配 弄乱了 让系统自动再分配一次 当然被锁定的 RAM 基地址是不会变的 System Auto Assign Base Addresses 最终系统组件列 表如下 注意 seg7 的地址范围是 0 x00010800 0 x00010807 占 8 个地址 nios 系统的地 址按字节分配 也就是说 每个字节占用一个地址 数码管控制器中定义了两个寄存器 avalon 总线规定每个寄存器占 32 位 实际上是不是 32 位它就不管了 反正按最大 32 位分 配 这样两个寄存器共占去 8 个字节 自然需要 8 个地址 点击 Generate 生成 nios 系统 回到 Quartus II 新建一个顶层文件 File New Block Diagram Schematic File 引入 nios II 系统 增加输入输出引脚 然后 Assignment Import Assignment 添加引 脚分配文件 在 DE2 光盘目录下的 DE2 tutorials design files DE2 pin assignments csv 改动顶层文件的引脚名称使 其与 csv 文件中保持一致 编译 查看编译报告 可见 48K 的 RAM 占用了芯片 83 的 memory bits 差不多 耗光了 硬件部分已经搞定 关掉 Quartus II 打开 Nios II IDE 切换到工作目录下 File New C C Application SOPC Builder System 选择 nios2 system ptf 就是刚才 Generate Nios II 系统生成的东东 再选模板 Hello World 纯属偷懒 顶上的 name 改成 se
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乐理音程考试题库及答案
- 森林防护巡护知识培训课件
- 森林家庭防火知识培训课件
- 棋王课件中职
- 海南省养老护理员职业资格技师考试题(含答案)
- 2025年精细化工作业面试宝典涵盖各类工艺作业预测题
- 2025年裁判台球考试题及答案
- 2025年公路水运安全员(交安abc)考试考核题库答案
- 2025年项目经理从业资格认证考试模拟试题集及答题技巧
- 2025年软件工程师职称评定预测试题及答案参考
- 2025年秋季学期(统编版)二年级上册语文教学工作计划及教学进度表
- 2025年福建省厦门市【辅警协警】笔试真题(含答案)
- (2025年标准)委托他人要账协议书
- 2025年广西中考语文试题卷(含答案)
- JB-T 4088.1-2022 日用管状电热元件 第1部分:通用要求
- 重点单位消防八本台帐
- 售后维修服务单
- 中小学教师违反职业道德行为处理办法课件
- 《复变函数》课程说课
- 医院免疫检验报告(性激素6项)
- 表单-公司董监高、股东、核心技术人员调查表(上市或尽调使用)
评论
0/150
提交评论