目前,越来越多的FPGA设计开始采用嵌入式处理器,如PowerPC和赛灵思(Xilinx)的MicroBlaze处理器来完成控制任务,采用C语言等软件语言描述这些控制任务,要比使用VHDL或Verilog等硬件语言描述更加容易。
当进行嵌入式系统设计时,绝大部份的设计时间可能花费在除错阶段,因此缩短发现问题并解决问题的时间非常重要。作为一款整合除错器,Computex公司的F-Sight同时具备硬件和软件除错能力。一方面,它支持FPGA内部嵌入式处理器的全方位软件除错。另一方面,它还支持监视FPGA硬件讯号。本文将介绍如何利用F-Sight提高除错效率。
启动除错器
Computex公司的除错器非常适合用来实现FPGA内部嵌入式处理器的除错。对于MicroBlaze处理器来说,工程师可以利用MicroBlaze除错模块(MDM)控制处理器的执行过程并进行除错,也可以利用赛灵思公司的MicroBlaze追踪核心(XMTC)以非侵入方式监控处理器程序的执行情况。
由于FPGA的接脚限制,减少输出到接脚的讯号数量非常重要。XMTC提供了编码指令和数据追踪功能,所需要的接脚数量仅为非编码讯号所需的10%。
为了使除错器实现追踪功能,只需要将MDM和XMTC核心分别连接到MicroBlaze处理器的除错和追踪接口,然后将编码后的追踪讯号引到FPGA接脚以便F-Sight收集数据。完成FPGA设计后,再将F-Sight除错器连接到电路板的Mictor连接器。如果使用赛灵思不带Mictor连接器的ML400系列、ML500系列或Sparta-3E/3A/3AN FPGA板,那么在Computex F-Sight配接器帮助下仍可以使用F-Sight中的处理器追踪功能。图1是利用F-Sight配接器将F-Sight连接到Spartan-3板上的照片。
图1:F-Sight透过配接器连接到Spartan-3电路板。
使用处理器追踪功能
处理器追踪功能可以在不中断处理器执行的情况下监控程序执行情况,因此用户可以长时间对程序进行分析,以确定程序代码中的问题,而不会改变处理器的执行状态。Computex F-Sight提供的处理器追踪能力已证明适用在许多情况。
试想一段程序总是不停地产生例外。例外可能产生在程序的任何位置;工程师面临的挑战在于找出并厘清例外之处。为了解决这个问题,可以在例外产生之前或在例外向量中设置断点,这样当程序到达断点时就会暂停。当程序停止时,可查看F-Sight记录的执行历史数据,可从中发现在进入例外处理前执行了哪些指令。
在嵌入式系统中堆栈溢出也是一个常见的问题。程序突然开始从看起来不太正常的地方执行。堆栈可能由于溢出而被破坏。如果怀疑产生了这样的问题,可以透过设计触发器来开始或停止追踪数据的采集。透过设置触发器条件进行堆栈指针和堆栈上限之间的比较,当条件满足时,程序将及时中止,然后用户就可以很容易地确认堆栈溢出以及产生的地方。
在某些实时系统中,为了除错目的而停止处理器的执行过程并非很好的选择,因为停止执行本身可能会改变程序行为。有时候问题可能极少出现,因此可能需要长时间监控程序执行情况。F-Sight可以用来设置复杂的触发条件并收集追踪数据,然后透过事后分析来除错问题。
探测内部讯号
FPGA除错经常从设计模拟开始。尽管仿真器能够发现设计中的错误,但却不能发现与技术指标相关的问题。而且还经常产生设计在模拟时通过了所有测试、但在FPGA中实现时却无法工作的情况。产生这种情况时,设计人员将被迫利用逻辑分析仪在实际的目标系统中进行除错。
当试图将讯号从FPGA中引出以便让逻辑分析仪监视其波形时,问题就出现了。对于大规模嵌入式系统设计来说,在大多数情况下即使只有很小的修改(例如将所需要的讯号引到组件外部接脚),也可能需要很长时间才能完成FPGA的重新合成和实体建置。此外,还可能会由于不同的布局和布线而带来时序问题。执行实体建置工具所需要的实际时间依赖于电路的规模以及主计算机的性能,但很可能一天内只够完成几次除错。
幸运的是,Computex F-sight提供了一项非常有用的功能,它不需要重新执行合成和实体实现工具就能透过设计修改把内部FPGA讯号引到组件外部接脚。这一功能被称为‘探测’(Probing)。只需在显示HDL原始程序代码的视图中简单地选择内部FPGA讯号(图2),F-Sight将自动完成其余工作,并根据上述选择为测试接脚分配合适的布线资源。这是透过利用Xilinx ISE软件工具中包含的FPGA编辑器实现的。有了这一功能,除错时必须花在逻辑合成和布局布在线的时间被缩到了最短,因而可以有更多时间用在监视讯号波形上。
图2:F-Sight探测。
协同除错
当系统工作不正常时,唯一能做的就是根据实际产生的事件检查问题产生的原因。在有些情况下,利用硬件来实现事件追踪会更容易;而在其它情况下,利用软件可能更容易一些。例如,在使用硬件的情况中,如果能够确定显示例外的讯号,那么可以将这个讯号设为触发讯号。在使用软件的情况中,如果例外处理被调用,那么可以在例外处理程序处设置断点并执行用户程序。这样事件产生的过程将被撷取进F-Sight的追踪缓冲器中。
然而,这儿的问题是即使撷取了事件的产生过程,确定原因仍然需要很长的时间,除非了解硬件和软件之间的相关性。针对这一点,Computex实现了协同除错功能,即可以在F-Sight中实现硬件(分析仪)和软件(追踪)历史之间的同步。利用这一功能,可以在相同时间轴上检查事件产生时的波形和程序行为。当在分析仪窗口中滚动显示波形时,程序执行历史和原始程序代码视图也相应滚动(图3)。协同除错功能的强大之处在于能够透过硬件和软件协同除错快速确定问题原因。
图3:F-Sight协同除错。
对闪存除错
FPGA内部存储器经常被用来储存嵌入式处理器程序。然而,如果程序太大,内部存储器的容量经常不够用。一种可行的方法是利用外部闪存来储存用户程序。
虽然有些除错器不支持闪存写入功能,但F-Sight却能够像除错位于内部存储器中的程序一样,全面对外部闪存中的程序除错。例如,它可以用来下载用户程序,对内存的某部份加上外挂程序,或在闪存中设置软件断点。
F-Sight支持1000多种类型的闪存。即使所使用的闪存不在已支持列表中,也可以透过图形化用户接口方便地手工增加相应项目。