基于Quartus Prime的NiosII基础开发流程
本文原始文档及代码工程上传至https://download.youkuaiyun.com/download/botao_li/10804031
也许对新入门FPGA的朋友有所帮助
软件版本:Quartus Prime Standard Edition 18.0 Windows
1. 建立工程
启动Quartus Prime选择New Project Wizard
设置工程名及工作目录
根据提示使用默认配置直到器件选择页面,选择FPGA型号
2. 建立顶层模块
在File菜单选择New
在弹出窗口中选择Block Diagram/Schematic File
完成后弹出模块图设计界面
3. 添加时钟模块
板上时钟进入FPGA即使频率保持不变,最好也经过时钟模块以保证FPGA内的时钟质量
在Tools菜单选择IP Catalog
在IP Catalog页选择PLL Intel FPGA IP,双击
在弹出窗口输入模块名称及保存路径
在弹出的配置窗口中进行PLL功能配置
在弹出的确认窗口中选择将生成的IP加入当前工程
双击模块图设计界面的空白处,选择加入时钟模块
保存当前模块图设计
保存后的模块图设计界面
4. 创建Platform Designer模块(原QSys)
在Tools菜单选择Platform Designer
Platform Designer窗口的File菜单选择保存
在System Contents页双击clk_0
在弹出的Parameters页设置时钟频率与时钟模块输出频率一致
5. 添加片上ROM和RAM
Nios工作必须像PC一样连接ROM和RAM,ROM用于存储程序文件,RAM用于程序运行。
一般情况下使用板上外接的ROM(比如Flash)和RAM(比如SDRAM)。
由于本演示程序规模极小(而且试验板上没有外接),因此使用片上ROM和RAM。两者都是使用FPGA的RAM资源。
由于ROM数据在FPGA烧写时才能写入,因此完成Nios软件编程后,需要重新编译FPGA工程。
**在后续的Nios软件编写过程中发现此处设置的存储空间太小了,不足以存储Nios程序,因此ROM和RAM的存储空间大小都应当放大。**目前试验的空间大小为65536 bytes。见[Nios软件编写](#17. Nios软件编写)章节。
片上ROM
在IP Catalog页双击On-Chip Memory (RAM or ROM) Intel FPGA IP
在弹出的配置窗口作如下配置
为区分,在System Contents页右键Rename改名为onchip_memory2_rom
片上RAM
在IP Catalog页双击On-Chip Memory (RAM or ROM) Intel FPGA IP
在弹出的配置窗口作如下配置
为区分,在System Contents页右键Rename改名为onchip_memory2_ram
6. 添加CPU模块
在Platform Designer窗口的IP Catalog页(与Quartus的IP Catalog页内容不同)双击Nios II Processor
在弹出的配置窗口的Main页中选择Nios II/f
在Caches and Memory Interface页,选择设置Data Cache的Size为None
Data Cache相当于CPU内的数据高速缓冲,用于保证数据传输速度,而将部分数据打包进行传输。如果处理数据量较少并且需要突发处理,使用Data Cache可能导致数据在缓冲中保存而不会完成传输,在这种情况下可以设置Size为None,或者使用most-significant address位置1的方式将寄存器的最高位设置为1,使用该寄存器的数据传输不经过Data Cache
7. 添加System ID模块
用于自动校验的一个只读模块,用于确保软件程序与Nios的硬件配置相匹配
由Platform Designer的IP Catalog页查找并且添加System ID Peripheral Intel FPGA IP,保持默认参数
8. 添加JTAG UART模块
JTAG UART模块可以通过JTAG实现PC与Nios的串口通信
由Platform Designer的IP Catalog页查找并且添加JTAG UART Intel FPGA IP,保持默认参数
9. 连接各模块信号
添加完上述各模块后的System Contents页如下
上图左侧中的空心圆圈表示信号可连接但是未连接,鼠标点击空心圆圈后变成实心圆圈,表示建立连接。
简单起见,可以把所有的空心圆圈全部建立连接。
10. 分配基地址
给各模块分配基地址用于基功能寄存器的操作,选择System菜单的Assign Base Addresses
对于已分配地址空间的模块,在添加新模块重新执行该指令时会被重新分配地址,在开发过程中为了防止出现地址变化,可以将已分配的地址空间锁定,锁定方法为鼠标点击Base地址旁的锁图标,由开锁状态转为闭锁状态
11. 生成
设置CPU的Vector
在Vectors页,设置Reset vector memory和Exception vector memory
Reset Vector指的是CPU复位后启动时指向的存储器类型和地址偏移量,一般为掉电不可擦除型,如外接的Flash
Exception Vector指的是CPU异常情况时指向的存储器类型和地址偏移量,存储器为掉电即擦除型,如SDRAM
——“NiosII的奇幻漂流”——不理解
在Platform Designer的Generate菜单选择Generate HDL