原创
维护遗留代码(3)——缺少JTAG接口的遗憾
早在代码移交阶段,我就向第三方提出过电路板上缺少给FPGA预留的JTAG调试接口的问题。电路板上本来已经给CPLD预留了JTAG下载接口,把FPGA连接到已有的JTAG链路中并不是什么难事。可是由于我们看到PCB设计时电路板已经投产,并且是最终要交付用户使用的量产版,即使是这样微小的改动也无法加入了。要改动,只有飞线。
riple 在搭建仿真环境工作的后期,我曾经一度想通过JTAG接口捕获CPU给FPGA中的寄存器写入的命令和参数信息,由于从遗留代码的波形激励文件中能够得到一组有效的FPGA寄存器配置信息,这一需求变得不那么迫切起来。在接下来的两个月中,我一直忙于给FPGA设计增加时序约束,并没有着手这一工作。直到时序约束和调整工作完成后,我才有时间开始解决遗留的bug,这时增加JTAG调试接口的需求又一次突显了出来。
riple 这一次,我花费了两天的时间完成了缺失的JTAG外围电路的设计和下载电缆转接电路板的焊接,又请组长Tom帮忙完成了飞线,这才把JTAG调试通路打通。有了这个调试手段,我很快通过SignalTap II观察到了CPU接口和MDIO接口的读写波形。更重要的是,我
捕获到了完整的CPU配置信息,完善了仿真环境,减少了仿真环境与真实器件运行状况的差异,提高了在仿真环境中发现和解决问题的能力。
riple 保留JTAG接口对于FPGA项目维护工作的助益是长远的:通过JTAG接口,发生在FPGA内部的逻辑问题都可以被观察到,甚至可以对FPGA的内部逻辑施加恰当的控制。就像在PCB设计之初应该考虑给FPGA预留JTAG调试接口一样,我在接手这一项目之初就应该通过飞线把这一接口增加到电路板上,而不应该采用其它手段绕道而行,一直等待到应用JTAG接口进行调试的需求变得如此迫切之时才动手(换句话说,如果我要责备PCB设计工程师没有预留JTAG接口,那么我也应该责备自己没有在意识到这一问题时立即解决这一问题;缺少JTAG接口的遗憾是PCB设计工程师的,也是我自己的)。如果从项目移交伊始,我就通过JTAG接口捕获了所有的CPU配置信息、观察到了所有的底层信号波形,那么我对维护这一FPGA项目的信心就会更早地建立起来,这一项目的进展就会大为改观。
riple 在以往的FPGA开发、调试、维护工作中,我对JTAG调试接口是很依赖的,这一接口给我提供了极大的便利。这一次,在缺少JTAG接口的情况下,我宁肯舍弃这一便利,转而探寻其它的解决方法,真可谓是“舍近求远”。我要承认,自己在对JTAG外围电路设计的认识上存在盲点,往引脚间距很小的表贴器件上焊接飞线也并不是我擅长的工作。我对这一本应是“举手之劳”的工作的畏难情绪,是阻碍项目进展的一个主观因素。现在看来,我在克服自己的畏难情绪、说服自己开始着手不熟悉的工作上花费的时间,比真正用于完成这一工作的时间要长得多。在今后的工作和学习中,我应该警惕和识别自己的这种畏难情绪,少一些犹豫,多一些果断。
riple 相关链接:
基于Quartus II的在线调试方法江湖越老,胆子越小?July 17 2009 - July 23 2009, November 20 2009 - November 24 2009
用户1359795 2010-11-30 11:16