利用F-Sight提高采用FPGA嵌入式处理器的系统调试效率

时间:2008-09-04

  目前,越来越多的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多种类型的闪存。即使所使用的闪存不在已支持列表中,也可以通过图形用户界面方便地手工增加相应条目。

  作者:Jorge Carrillo, Raj Nagarajan

  赛灵思公司

  Koji Imanishi, Nobuhiro Nishiguchi , Ayako Suzuki

  Computex有限公司

  Email: jorge.carrillo@xilinx.com,

  ima@computex.co.jp,

  raj.nagarajan@xilinx.com,

  nishi@computex.co.jp,

  suzuki@computex.co.jp

  欢迎转载,信息来自维库电子市场网(www.dzsc.com)

上一篇:照明十大老牌企业
下一篇:ISO系列 Pt100热电阻温度隔离变送器 IC

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。