电子说
调试代码对于懂程序的你来说不难,但一定麻烦。尤其在初次接触一个程序而又尚未能完全理解时,你可能不清楚要如何才能快速找准需要调试之处,全程设置断点进入Debug模式是一种很糟心的做法。如果你有接触英特尔® Max 10 开发套件片上闪存的代码,会不会想要动手调试一些功能呢?
MAX 10 FPGA开发电路板
首先,我们需要了解英特尔® MAX 10 FPGA设备中片上闪存的结构与功能。它分为两个部分:
配置闪存:用于存储硬件配置数据
用户闪存:用于存储用户数据/软件应用
其中,片上闪存IP是用于访问UFM的唯一IP。片上闪存IP内核在Quartus Prime安装过程就可以完成安装,我们可从英特尔® FPGA IP库选择这个IP并为其设置参数。UFM内存结构根据f片上闪存IP内核参数编辑器中指定的配置模式而改变。那么它总共有多少种内部配置模式呢?请看下图。
5种内部配置模式
Nios II从UFM就地执行,能够最大限度地降低RAM使用率。因此该启动解决方案十分适合需要限制片上内存使用率的Nios II处理器应用。从UFM就地执行时,基于BSP设置,数据段(.radata、.rwdata或.eceptions)将从启动内存复制到RAM中,而只读代码段仍存放在片上闪存区域。
如何调试存储在Max 10开发套件片上闪存中的代码
Nios II处理器复位向量指向UFM的基地址,因此系统重置后,代码会从UFM执行,如果您使用源码级调试工具调试应用,则需要使用硬件断点进行调试,因为UFM不支持随机内存存取。
那么具体该如何调试代码呢?
我们可以创造一个从UFM就地执行的Nios II应用,并使用Nios II软件构建工具中的调试工具调试存储在UFM中的代码。先创建一个Quartus项目和Qsys系统,如下图,这是一个在Platform Designer中创建的设计。
如前所述,我们需要使用硬件断点调试应用。因此,在Qsys设计中,我们需要启用硬件断点。具体操作步骤详见视频。【滑稽】不过一定要将硬件断点要启用到位,具体可通过选择JTAG调试选项卡查看。同时要注意,我们最多可以启用四个硬件断点。此外,片上闪存IP一定要添加到设计中,这样能便于访问UFM闪存。
在上面这个设计中,我们选择使用的配置模式是单个未压缩映像。接下来,可以将Nios II处理器中复位向量设置为片上闪存IP内核,以通过从UFM就地执行启动Nios应用。完成这些设置后,才能够去生成系统。
接下来,我们可以在Quartus中编译这个设计,创建SOF文件。同时,也可以在Nios II软件构建工具中创建一个简单的Nios II应用。在创建完硬件设计和软件应用后,我们可以使用转换编程文件工具,创建包含UFM数据和SOF文件的POF文件。然后,可以使用Quartus编程工具将POF文件编程至Max 10中。
如上图,已将POF文件编程至Max 10中,并重启电路板。接下来才是真正开始调试存储在片上闪存中的代码。插入断点后,想要调试该应用,就得进行“应用”、“调试”、“选择配置”等一系列操作。(如有不明白的,请详细看上面的视频)在调试配置中,由于代码存储在片上闪存中,所以可能没有选项“将elf下载到选中的目标系统”选择以启动处理器并重置选中的目标系统。
重点来了!
这个时候如果选择“启动停止”,则最多用一个硬件断点,这也意味着您只能在代码上设置另外三个断点。而如果插入断点超过4个,就会在开始调试代码时遇到错误,因为只能使用四个硬件断点。
全部0条评论
快来发表一下你的评论吧 !