一种新的嵌入式处理器在线调试方法
4. 3 实际验证和使用情况
在应用UDM 之前,首先通过NC - verilog 对其进行了仿真,部分仿真波形如图3 所示。图中反映的是当作为DI 的信号pdm_ int 产生了之后,PicoBlaze怎样转入执行DR 的,限于篇幅,验证其他各种功能的仿真波形不在此赘述。
图3 UDM 的部分仿真波形
为了进一步对UDM 的功能和性能进行完备的检验,在FPGA 中建立了如下简单的PicoBlaze 处理器系统。PicoBlaze 外部只接一块252X8bit 的RAM和UDM,PicoBlaze 上的目标程序流程为如下的死循环: 将s0 ~ sb 依次置入0 ~ 11,再反过来依次置入11 ~ 0; 将64byte 的RAM 依次写入0 ~ 63,再反过来写入63 ~ 0; 将外部的RAM 依次写入0 ~ 251,再反过来写入255 ~ 4。这样的一种简单设计,可以保证从输出的调试信息直接看出处理器在哪行代码处响应了断点。
如图4 所示为在调试主机上进行调试控制的界面。偏移地址0x184 处的1040 表明在38 与44 两行代码处设置了断点,事实上从地址0x180 ~ 0x1ff处都可以设置断点。地址0x200 处为当前的PC 值,通过向地址0x208 处写1 可使其更新; 地址0x202处为UDM 的使能位,当其为1 时UDM 才被使能; 地址0x204 为调试命令寄存器,向其写1 使处理器从断点退出,写2 使处理器刷新调试信息,写3 使处理器强制进入DR 输出调试信息; 地址0x206 处表示调试状态,当其为3 时表明处理器在运行DR,并且调试信息已经输出完毕。
图4 使用UDM 调试的控制界面
显示调试信息的界面如图5 所示,地址0x00 ~0x0b 显示寄存器s0 ~ sb 的数据,地址0x0c ~ 0x3b显示内部64byte 存储器的数据,地址0x4c ~ 0x14b显示PicoBlaze 外部Memory 空间的数据。由于图5中断点正好设置在完成依次向PicoBlaze 的Memory空间依次写0 ~ 251 之后,因此显示的数据是递增的。当断点正好设置在完成依次向Pico Blaze 的Memory 空间依次写255 ~ 4 之后,所显示的数据就变为递减。在很多其他断点处显示的调试信息与断点设置的位置也符合预期的情况,因此UDM 完全可以正确而高效地工作。
图5 在第44 行断点处显示的调试信息
在开发一款信号处理芯片的FPGA 原型设计中,跟踪处理、电文处理、整体流程控制分别由一个PicoBlaze 完成,并且由于FPGA 资源的限制采用大型处理器来替代上述处理器几乎不可能。由于输入PicoBlaze 的数据和控制信号复杂,仿真验证不能很好地覆盖各种实际的使用情形。通过使用这里的基于PicoBlaze 处理器设计的UDM,方便地实现了对上述3 个PicoBlaze 的在线调试,对提高开发效率发挥了重要作用。在其他使用PicoBlaze 的工程应用中,上述UDM 也得到了很好的推广。
5 结束语
设计了一种通用调试模块,用于辅助无调试接口的处理器建立标准的调试机制。通过该模块的使用,提出了一种通用、标准、方便的调试方法,很好地满足了在SOPC 系统中对多个没有调试接口的小巧型处理器实现在线调试的迫切需求。新方法通过产生调试中断使处理器跳转到调试服务程序中的方式实现处理器的挂起,通过基于双端口RAM 中一种巧妙的地址映射机制实现同时对多行代码设置断点的功能,通过调试服务程序实现数据搬移等调试命令。新方法还具有易于扩展,可以同时调试多个嵌入式处理器的优点。新的调试方法在工程实践中对提高调试效率发挥了重要作用,是一种普适的,应用价值明显的调试方法。
linux操作系统文章专题:linux操作系统详解(linux不再难懂)
评论