《FPGA NiosII篇》Part 1工程创建与注意点
配置环境:
QuratusII 11.0
Nios II 11.0
*1、FPGA编译过程中出现错误,NIOSII核中一个自建实例出现异常,报错无实体定义。 Error: Node instance " "instantiates undefined entity " ".(未定义实体。) 前两天才出现这个问题,当时解决了,昨天又出这个问题,一时想不起怎么解决的了。今早到网上查了一下找到了原因,因为是从原先的调试用工程下边拷过来的顶层文件,而没有加入底层文件。于是将实例的.qip文件(在QSYS工程的文件夹下,不是.v文件)拷到(或添加到)现在的工程下边,在quantus的工具栏的file->open,打开该.vhd文件,然后在project->add current file to project,重新编译即通过。把问题和解决办法贴在空间里,以后再犯错的时候方便查找。
注意:
有时候会提示加入的.v文件导致Instance产生ambiguous,这是要根据提示,找到文件夹下的对应文件,将它们全部删掉,再重新Start Analysis & Synthesis。
2、在编译Qsys时会出现导入qsys文件报错,这时将报错的文件目录删除即可。
注意:工作空间的文件夹不要随便删,NiosII这个软件Bug太多了,不经意删除一个文件导致一堆错误。
*3、Qsys文件与原理图的命名不能相同,否则生成的模块无法拖入原理图中编辑。
*4、Nios II Eclipse新建工程时报错对话框“ Failed to execute:./creat-this-app --no-make ”
解决方法:以管理员身份运行Nios II 11.0 Software Build Tools for Eclipse(我的电脑中NIOS II IDE与Nios II 11.0 Software Build Tools for Eclipse是不大一样的,尤其在新建项目时表现特别明显,当然网上有的解决方法就是直接以管理员的身份运行Nios II IDE也可以解决问题,视具体的软件版本和情况而定)即可,可以解决只显示.bsp文件夹而不显示其他文件夹的问题。
注意:
假如我在NiosII中创建了一个sdram的项目,创建结束后发现有时候只有一个sdram_bsp的文件夹在左边界面上,而
另外一个包含了main函数的sdram文件夹没法显示!
解决方法:
1)、在Quartus II中创建完.bdf的原理图并成功编译后,选择Tools—>Nios II Software Build Tools for eclipse,进入NiosII界面,第一步,Switch Workspace(转换工作空间),选择和quartusII中工程相同的文件夹,然后关闭eclipse。
2)、第二步,进入桌面以管理员身份运行Nios II 11.0 Software Build Tools for Eclipse。
3)、第三步,新建NiosII application and BSP from Template,载入内核文件,命名sdram,Finish。此时可见两个文件夹:sdram和sdram_bsp.
4)、第四步,修改sdram文件夹下面的hello_world.c文件为sdram.c文件,.c一定要保留,否则可能报错。打开该文件,加入相应的源代码。
5)、第五步,右击sdram文件夹,选择NiosII—>BSP Editor—>在界面中选择树型结构上面的setting—>勾选enable_exit、enable_reduced_device_drivers、enable_small_c_library、enable_sopc_sysid_check。
6)、第六步,单击右下角的Generate—>生成完毕后退出对话框。
7)、第七步,右击sdram文件夹,选择Build Project。
8)、第八步,返回QuratusII,选择Programmer下载调试.sof(针对JTAG口的下载文件,还有一个.eof文件),start,下载结束后,保存,关闭对话框。
9)、第九步,回到NiosII,右击sdram文件夹,run as—>NiosII Hardware。
10)、第十步,run as—>run configurations,进入对话框,进入Target Connection栏,refresh connection后,查看System ID Properties,没有空白或者对话框上方没有报错时,选择Apply,然后Run。
5、在NiosII中改Hello World.c文件时,记得把.c带上,否则会报错。
6、IOWR_ALTERA_AVALON_PIO_DATA这个函数使用时总是报无法找到相应的头文件altera_avalon_pio_regs.h时,我们可以直接改用其他的基本函数来替换它。
解决办法:如给IOWR(LED_BASE, 0, 0x1);这个函数,可以直接给LED_BASE赋值。该函数在io.h中,文件加上#include