非常有用的Virtual JTAG——比串口还好用
0赞今天加了一会儿班,把节前调通的网络接口芯片操作程序整理了一下。
这个Tcl程序用于控制一个Virtual JTAG接口,通过Virtual JTAG给FPGA输入控制信号,通过FPGA内部的逻辑产生网络接口芯片的控制波形,实现对网络接口芯片的读写操作。
通过一段时间的调试,当前这个Tcl程序已经比较完善了。在调试过程中,我愈发认识到了Virtual JTAG在FPGA调试中的作用:在没有Virtual JTAG之前,我只能借助于电路板上的按键和串口,或者是一个有串口控制平台的CPU芯片给FPGA施加控制信号;反馈信息只能借助于7段数码管或者串口才能显示。有了Virtual JTAG,复杂的控制输入、详细的反馈信息显示和处理都可以在Tcl中实现,在PC机的命令行中显示。如果核心程序稳定下来,还可以借助Tk制作一个图形化的人机交互界面。Tcl + Virtual JTAG真的是FPGA调试中的绝配。
采用Virtual JTAG进行调试,适用于渐进式的开发流程。FPGA往往是一个被动系统,没有激励就不会自己动作。当部分代码开发完成后,往往不能独立上板调试:缺乏控制输入和输出显示。即使采用外部辅助电路,也只能实现比较简单的控制和显示功能。采用Tcl + Virtual JTAG,可以对这个尚未完成的系统施加复杂的控制激励,对于反馈的输出也能够进行细致的分析和处理。随着代码逐步完善,可以调整Virtual JTAG的接口,逐步用已经实现的电路代替Tcl的功能,实现渐进式的板级调试和验证。
从施加激励和检查响应的角度看,Tcl + Virtual JTAG是一种板级的验证平台,就像使用testbench在Modelsim中验证一样。
需要说明的一点是,上面这句话仅仅强调了VJI调试与Modelsim仿真二者在功能上的近似性。除了上面这一点近似性外,调试与仿真的差异还很多,比如运行速度、控制和观察信号的难易程度、开发成本等等。总体来说,仿真比调试的性价比高得多。采用VJI进行调试仅仅适用于仿真不能胜任的情况,比如仿真模型不存在或功能不完善或者开发仿真模型的成本和难度太大的情况下。再有一种情况是由FPGA对外部的芯片进行主动控制时,由于编写和调试复杂状态机的难度很大,可以考虑用Tcl+VJI模拟需要进行的控制操作,用一种类似于嵌入式软件编程的方法调试外部芯片,待调试成功后再总结操作程序,据此编制控制状态机。