之前没怎么用ALTERA的器件,最近用MAX10做嵌入式NIOS,MAX10是ALTERA推出的低价FPGA,且内置FLASH,比较适合成本敏感,且要求功能又复杂的应用。
我用的是Quartus Prime 17.1,在Quartus软件中启动Platform designer软件,搭建NIOS系统。系统主要有时钟、NIOS CPU、RAM、FLASH等外设。
搭建完成之后,点击System菜单,分配地址和中断号。之后点击Generate菜单,生成HDL文件。
将生成的xx_bb.v和xx_inst.v的部分代码复制到你自己设计的例化CPU的HDL代码中,然后在Quartus左侧的文件列表中添加synthesis目录下的xxx.qip文件。此处xxx是你自己命名保持的platform工程名。
然后综合、分配管脚和编译。
完成之后,打开NIOS软件。
设置工作目录。
选择新建NIOS 应用和BSP,选择生成的xx.sopcinfo文件。
由于我的程序是运行在ram中,所以选择hello_world_small应用,点击finish完成应用程序创建。
用USB连接MAX10到电脑,并点击programmer,选择JTAG方式下载Quartus生成的.sof文件。
下载完成后,修改hello_world_small.c代码,并编译。如果增加或者删除C文件,需要右键工程,清一下工程。
选择,Run->Run Configurations ,在Nios II Hardware下添加一个new ***并自己起个名字,在Project的name下选择eclipse的工程名,同时会出现相关.elf文件的位置,再选择Target Connection,正常这里已经连接上了。
选择RUN,就可以在串口看到打印信息了。
我用的方式是程序从FLASH启动,在RAM运行,所以在NIOS配置了FLASH和RAM。配置界面如下。
NIOS配置
RAM配置
FLASH配置,我是程序和数据放在一起不压缩烧写,如果有其它要求,需要改变这里的配置。
需要注意的是NIOS的data master要连接到FLASH的CSR上面。
首先需要更改C代码编译的Linker选项。
右键单击,选择NIOS II->BSP Editor,把几个linker全部打上勾。
右键应用工程,选择Make Targets生成目标文件,选择Build。选择 mem_init_generate。
在对应目录下就会生成onchip_flash_0.hex文件。
打开Quartus软件,找到文件转换器(Convert Programming Files)
打开文件转换器,选择internal Configuration
然后再选择左侧的Options/Boot Info,
把Configure device from CFM0 only前面打上对勾,
UFM source选择Load momory file,然后再指定上一章节中生成的hex文件,点OK关闭此页面。在Input files to convert里面添加SOF文件。
在File Name栏中指定输出的文件位置,并设置输出文件名称。
在最下方点Generate生成POF文件。
最后将POF文件烧写到MAX10中,此次不再赘述如何烧写。