本文记录了在使用NIOS中遇到的一些问题和相关的原因分析及解决办法,做个总结方便以后查阅。也希望可以帮到有同样问题的攻城狮。本文长期更新,遇到了就写下。
本人使用软件版本:QuartusII 13.0sp1,NIOS13.0sp1
[TIPS] NIOS 工程的一些基本设置
这里简单的介绍一下自己在使用 NIOS 中我常有的一些操作,用来保证整个使用过程中错误的警报数量减少。
- Qsys 中,自定义 IP 核,在 Tools 中 Option 添加 V 文件所在路径
- NIOS 中,Project -->> Properities中添加 include 路径,防止出现 include 后变量查找不到的情况
- 在下载 ELF 程序时,Run Config 钟勾选两个 ignore 选项框
[ERROR] Qsys 添加自定义 IP 核时综合错误
很多时候我们都需要使用自定义的 IP 核来完成我们所需要的操作,操作步骤就是在 New Components -->> Files 中添加了编写好的 V 文件然后进行综合。
- 错误产生现象:弹出错误提示框,综合失败。
- 错误原因定位:编写的 V 文件存在语法错误。
- 对应修改处理:检查编写的 V 文件,找出错误所在。当工程不大的时候,可以使用一个简便方法,将编写的V文件设置为顶层 TOP 文件然后编译,根据提示错误进行更改,编译通过后再去 Qsys 中就不会有错误产生啦。
[ERROR] NIOS 程序 ELF 文件下载失败
- 错误产生现象:下载 SOF 文件后下载 ELF 文件失败
- 错误原因定位:Qsys 中 NIOS 核时钟的检查
- 对应修改处理:检查修改 Qsys 中 NIOS 核的时钟,将其改正为正确值。
[ERROR] 片上 RAM 资源不足
- 错误产生现象:在 NIOS 中编译失败,提示改错误
- 错误原因定位:
- 片上 RAM 资源空间分配不够
- BSP 设置不当
- 对应修改处理:
- 检查 Qsys 中 On-Chip RAM 的配置空间是否设置过小,如果是将其调大(最大数值可以再 QuartusII 中看器件信息得知)。
- 如果 Qsys 中的资源足够仍编译不通过,打开 BSP Editor,勾选
enable_small_library
、忘记了后面补充,囧
。
[ERROR] NIOS 中断持续触发
- 错误产生现象:程序下载后持续触发中断
- 错误原因定位:
- 进入中断后,需要跳出中断方可
- Qsys 中 NIOS 核的选择类型是否正确,选择精简型即可
- 对应修改处理:
- 在执行完操作后跳出中断,即为中断信号(可以通过读或写寄存器的方式)
- Qsys 中 NIOS 核选择精简型即可,复杂型的需要额外考虑一些知识,暂时还没有使用场景
[ERROR] NIOS 下载固化后重新上电程序未能正常运行
- 错误产生现象:elf 和 sof 文件固化下载后断电重启程序未能正常运行,在线写入 NIOS 后正常,再次固化断电重启仍然异常。
- 错误原因定位:
- 疑似NIOS中的输出 printf() 造成了一些寄存器的阻塞,但未能实际确定是此原因
- 最终定位为 BSP Editor 中仍然为 JTAG 模式造成了该异常
- 对应修改处理:
- 将 BSP Editor 中的 stderr、stdin、stdout 由 jtag_uart 更改为 none,然后重新生成 bsp 文件再次编译工程即可,这里一定要记得再次编译工程。