如何调试数字硬件设计
扫描二维码
随时随地手机看文章
工程设计项目中最令人振奋的时刻之一就是第一次将硬件移到实验室准备开始集成测试的时候。开发过程中的这个阶段通常需要很长时间,也会对所有的项目工程师造成很大的压力。不过,现有的工具和方法能减轻压力,帮助推进项目进展。
让我们来看一下,如何在将设计推进到更高层面的过程中最大限度地减少可能发生的任何问题,以及如何快速顺利地通过调试阶段。
从第一天起就要设想如何进行测试
所有工程师都知道,随着开发进程的推进,修改问题的成本也会相应增加。一旦设计方案最终定型并投产,再修改引脚输出错误的成本必然高于早期设计评估时修改的成本。此外,在测试与集成方面也同样存在成本问题,越早考虑硬件、FPGA、系统等的测试问题并编写测试规范,就越便于工程设计团队考虑到必要的测试点、连接和功能性。测试的目的是确保能推出可满足用户具体要求的安全系统。因此,我们必须确保测试能体现所有要求,而功能测试则要求应能实现流程传递并可跟踪设计要求(即每个测试均应满足其所对应的需求)。
此外,对设计验证模型进行编辑也是一种非常好的做法,能详细说明测试每项功能要求的方法,如具体的测试、分析或读取方法(条件是在另一个项目上较早明确或测试了相关要求)。文档(图1)可能还涉及哪些测试需用于设计验证,以及哪些用于生产运行。在项目阶段早期即完成上述文档,可确保系统设计团队和测试设备的设计团队获得明确的基本方法。
但是,在进行功能性测试之前,设计工程师还必须确保底层硬件的正确性。他们通常需要包含电源、性能和硬件基本验证等内容的硬件级测试规范,而硬件基本验证需在功能测试之前进行。
明确需要何种测试设备以及什么样的性能非常重要,例如需要分析信号发生器和逻辑分析器是否能提供足够的存储深度和工作频率?此外,还需明确是否需要更专业化的测试设备,如任意波形生成器、高稳定性频率参考等。
设计阶段应包括的内容
在硬件的设计过程中,或许应包括几项设计特性和功能,以使电路板的测试能够更方便。相关要求可能比较简单,也可能较有深度。
最简单也是最常见的测试规定是在所有电压源上放置测试点,这避免了探询焊接点时造成损坏的可能性。不过,还有一种比较好的办法,是让连接接地(0V)返回的焊盘靠近电压测试点,从而简化测试工作。若采用高值电阻来保护这个测试点,就能限制测试中意外短路情况下的电流。我们也可考虑给这些焊盘添加测试引脚,使其连接到可随后在生产运行期间记录结果的自动测试系统上。
此外,监控时钟和复位输出的功能至关重要。因此,在复位线路上放置测试点不矢为一种好办法。另外,还应确保正确端接不使用的时钟缓冲器并添加测试点,从而便于对时钟进行探询。此外还可考虑添加测试端口,通过信号发生器、逻辑分析仪或其他测试工具来实现信号的注入和提取。
为了帮助原型设计达到功耗要求,如果可能,通常比较好的做法是在电压调整器的输出端串联低值电阻(10毫欧、100毫欧等),以便精确测量电源轨上的电流。
图1:非常实用的工具:用验证表详细列出测试每个功能要求的方法
众多FPGA器件也都能提供采用温度二极管监控芯片温度的方法。需要想办法为二极管提供恒定电流。测定芯片温度有助于我们确保结温不超出额定值。
要确保所有组件都适当就位,明确是否符合设计方案的要求,特别是如果只有一个上拉或下拉电阻应就位并选择配置模式时更是如此。
检查完印刷电路板上的各组件之后,下一步就是首次给电路板加电。对于任何工程师来说,这都是非常紧张的时刻。但是,在设计阶段(测试点、电流感测电阻等)编制的测试规定将在这时发挥很大的协助作用。第一步是确保负载点和其他稳压器的功率输出不发生短路返回。您可能会在带载器件(具有高电流要求)的电源轨上发现低阻抗,不过阻抗应大于1欧姆。
对于业界率先实现的同类型设计(即新产品首次进行实际构建)而言,我们或许应该制定更深入的设计决策,例如将电源与下游电子器件进行分离处理。这样,我们就能确保电源和上电顺序都能正常工作,从而避免下游组件的应力过大或损坏。更详尽的前端设计阶段有助于测试工作的例子还有一个,那就是确保JTAG端口除了在系统中对所有FPGA或处理器进行编程之外还能有更多用处,例如通过边界扫描测试来进行初始的硬件验证等。边界扫描测试对在测试阶段早期减少硬件设计风险非常有用,同时也要求对设计方案进行优化,以确保最大限度地覆盖边界扫描器件。
明确硬件特性
系统第一次到达实验室时,您要做的第一件事情就是确定硬件底层模块是否适合做进一步的测试。相关检查包括模块的初步通电测试,这是个紧张的过程。刚拿到模块,您希望确保其准确投产,能够成功实现首次通电启动。第一步就是确保所有的组件都各就其位,引脚“1”正确定位,而且任何带极性的组件都准确放置。设计中通常可能包含众多无需检查定位的组件,例如那些适合不同版本或不同构建选项的组件。
如果您确定所有电源轨都没有短路,那么下一步就该加电了。初次加电时,我倾向于采用分两个阶段进行的方案。第一个阶段是采用低电压(0.5V)和低电流,以确保不错过信号层或电压轨之间的任何短路情况;第二个阶段是用正确的工作电压在设定的电流限值内加电,看看是否获得预期电流(不要忘了突入电流问题)。
成功给设计方案加电后,下一步就是确定电源上电的排序、复位以及时钟是否能按设想的工作。切记,要确保复位时长超过所有时钟,并在释放之前处于稳定状态。
明确硬件特性的下一步就是确保能通过JTAG链看到硬件,这使我们不仅能对FPGA编程,而且还能执行边界扫描测试。边界扫描测试能帮助我们快速测试器件之间的互连,通过测试存储器可确保其正常工作,如开发回环接插件也可回转输入输出。JTAG和边界扫描测试可在进一步详细的测试之前消除设计风险。
致力于简化RTL
如果您的设计在硬件和FPGA层面上都很复杂,那么简化版的RTL将有助于测试开发板以及FPGA和外设(图2)之间的接口。对高速接口设计而言,更是如此。我们可结合采用优化的RTL和赛灵思 ChipScope工具来捕获数据,以及预载了数据模式的Block BRAM来发挥激励作用。这种方法对采用ADC和DAC连接FPGA的情况尤其有用。在此情况下,您应发挥FPGA的可再编程特性来最大限度地进行设计开发,实现ADC和DAC的参数测试,比如噪声/功率比、无杂散动态范围和有效比特位数(effective-number-of-bit)计算等。
此外,您还应该充分利用FPGA提供的资源,尤其是赛灵思System Monitor和XADC,非常有利于监控芯片上的电压轨,进而还能有助于验证在设计阶段所执行的电源完整性分析。此外,上述技术还能方便地报告芯片温度,这对环境测试以及芯片温度的功耗关联等都有帮助。
多数情况下,简化RTL设计并采用FPGA提供的资源对精确定位未按预期工作的区域都有极大的帮助。
遇到问题怎么办?
在一步步推进测试计划的过程中,您可能会遇到一两个问题,如未能实现预期的功能,或在功能方面无法满足所需的性能水平。不要担心,我们能通过许多调查方法来确定问题根源和所需的纠正措施。
在上述情况下,不要急于马上做出修改。首先,要重新检查设计方案,特别是原理图和数据手册等设计信息。如果问题与FPGA有关,则应检查引脚约束文件是否适合设计需要,因为有可能文件与设计不同步。
如果一时找不出什么明显错误,则不妨发挥一下互联网的优势,去网上看看其他工程师是否也遇到过跟您同样的问题。网上有很多论坛,您可在那里向其他设计人员提问。Programmable Planet和赛灵思论坛都可为基于FPGA的设计提供广泛的支持。
说到底,硬件调试是工程设计中极富挑战,但又极具收获的组成部分。若在设计早期阶段即考虑到测试问题,并在设计中包含测试所需的各元素,就能显著简化调试工作。采用ChipScope、System Monitor和XADC等所有可用的资源来调试系统,外加合理利用传统测试设备,我们就能成功完成开发工作。
图2:这里的优化代码是从连接输出的简单DAC接口到已知状态的代码片段,能够生成Fs/2的正弦波。此类代码的标准版可能有数百行的长度。