从一个研发的周期来看,设计所占的比重其实是很小的。往往耗费设计人员大量的时间和精力的是仿真和调试。工程师可以通过仿真工具对自己的设计进行验证。但不同于软件,PLD的仿真毕竟脱离了具体的硬件环境和业务环境,与真实的应用还是有一段距离。特别是在板子上出现的问题无法通过仿真复现的时候,工程师就特别需要一个在线调试的工具。
示波器是其中一种。但示波器只能观察到芯片IO上的信息,不能深入探测信号在逻辑内部是如何传递的。如果要探测内部的信号,就必须要修改设计,将内部信号引到IO上。这就增加了调试的复杂度。而且示波器受探头数量的限制,能检测的信号有限,也不能实现复杂的触发条件。
成熟的EDA厂家都会提供PLD的在线调试工具。通过一个JTAG电缆,就可以捕获到芯片内部的信号,而且不需要工程师修改设计文件。这就大大简化了调试的流程。是深受PLD开发者青睐的一项功能。
每一个厂家都为自己的调试工具起了不同的名字。Xilinx的叫Chipscope,IntelPSG的是Signaltap,Lattice的工具是Reveal。这仅仅是名字的不同。其实现的基本原理是一样的:利用PLD内部的Block RAM,当触发条件成立时,将待检测的信号写入Block RAM,通过JTAG I/F读取并显示出来。在实现的具体细节上,各个厂家略有不同。对此我们没有必要判定哪个更好,这与设计这款软件的工程师的脑回路有关。当然如果你有更好的建议,可以通过代理商或原厂的渠道反馈。一个负责任的公司会认真考虑用户的需求的。
大家在使用在线调试工具的时候,有一个重要的概念要清楚:在线调试工具采用的是同步采样。根据香农定理(也有叫奈奎斯特定理的),对模拟信号的采集,采样频率至少要2倍于待采信号才能准确的恢复信号的原貌。对数字信号,这个采样频率的要求会更高。用过示波器的都知道,示波器的采样频率一般至少是输入信号频率的10倍以上。
同步采样要求待检测的信号必须是在采样时钟域下的信号,或者采样时钟频率是待采信号的10倍以上。如果不能满足这个要求,你通过在线调试工具看到的信号就会与实际的信号有比较大的误差。
下面这个例子,我用120MHz的采样时钟去抓取一个44.33MHz变化的信号。信号原来的占空比是50%。实际上看到的信号,占空比是变化的。
如果要采集的信号分属于不同的时钟域,我们就需要在工具中创建不同的在线调试模块。在后面我们的讨论中,我们涉及到这个话题。
为了便于讨论,后面我们会以Lattice的Reveal为例,介绍在线调试工具的使用和一些注意事项。