随着基于FPGA进行原型设计的复杂性不断增加,市场对更好调试技术的需求也日益增加。FPGA原型设计可用于验证、早期软件开发、概念证明等,因此变得非常重要。它的主要职责仍然是执行这些任务,而不是试图找出因原型构建错误而造成的问题。
根据可用的设计或现有任务类型,可能需要不同的调试技术。采用合适的调试技术还可以缩短FPGA设计的验证周期。
本文描述了有关FPGA的一些调试技术,采用这些技术可以加快验证过程,文章同时也指出了它们的局限性。这些调试技术可以用于硅前验证过程中所面临的各种挑战或问题,后面我们将会讨论。
RTL仿真
在RTL还没有完全稳定时,原型设计的一个主要需求是访问和监控内部信号的活动,这有助于找到造成问题的根源,无论问题是由于原型错误还是RTL本身的一些异常造成的。
测试时,RTL仿真需要在模块周围建立一个完整的原型验证仿真环境,能够给予激励,满足内存要求(如果有的话),监控设计错误等。
图1显示了此类RTL仿真设计模型。
图1:RTL仿真模型
图字:要求 验证计划 原型RTL仿真 原型RTL模型 执行板上工作 找到Bug? 去除bug执行所有工作?
假设/优势
● 此调试方法非常适用,而且在处理设计规模问题时,可以进行调整,目前验证工具可以轻松地处理设计规模问题,但要求仿真时间不能很长,否则会使这种工作几乎没有ROI(投资回报率),而要配备复杂的测试台。
● 如果是一个已经获得验证的设计,它能重新使用现有的验证测试平台,这样就不需要从头开始构建,可以节省时间和精力。
● 工作重点应该侧重于调整现有测试平台,以便使其不需要任何大的更改,就能够运行验证测试套件。
● 可以缩小问题,选择只运行失败仿真,减少对仿真的依赖,检查可能引起问题的信号的仿真波形。
局限性
● 如果是大规模设计,几乎不可能查看设计中的每个信号、监控其行为。
● 采用这种方法的一个前提条件是,验证工程师或软件工程师应该对设计和内部信号具有良好的洞察。
● 此方法比较费时,而且需要软件开发人员付出额外的努力。
● 在设计被分区的情况下,RTL仿真可能没有帮助。假设我们主要试图“再利用”顶层验证环境,并使其轻松为“受测设备原型”工作,要创建更多的层次和设计分区,则会需要进行额外的工作,以修改安装在独立验证环境中的内部信号探针。
● 调试涉及复杂处理的大规模快速流输出数据设计可能具有挑战性,因为这个问题可能在设计层次的各个层级存在。
在复杂的设计中,必须考虑一些更好、更快的调试方式,我们将在后面的章节中讨论。
使用逻辑分析仪的硬件调试
当调试总线位于FPGA的外部引脚上,并通过逻辑分析仪观察它们时,硬件调试涉及内部信号的呈现。这种调试技术对小型逻辑设计真的非常有帮助,因为验证工程师也可以使用逻辑分析仪观察到内部设计信号,从而使调试更加方便快捷。
图2显示了此调试模型。
图2:使用逻辑分析仪的硬件调试
图字:逻辑分析仪 逻辑设计
在这里,可编程的逻辑设计在目标系统中高速运行,可以在真实环境下查看逻辑行为。
假设/优势
● 如无法利用验证测试平台仿真环境,可以采用这种方法进行调试,因为从头开始建立验证测试平台的仿真环境可能既繁琐又费时。
● 此方法可以加快调试过程,因为它使验证工程师能查看内部设计信号的活动。
● 此方法提供了一个进入运行设备的窗口,不需要执行任何额外的软件任务。
● 由于所有验证情况都在FPGA板上执行,因此这种方法可以用于设计,否则一般需要相当长的仿真时间。
局限性
● 设计人员需要手工调试设计,每次都需要手工编辑进行重复调试。调试需要内部节点,没有在设计顶层就必须将它们路由到顶层。
● 电路板上的可用引脚数量制约着探针数量。
● 此方法需要在逻辑分析仪查看器中输入信号名称,以便跟踪所显示的设计信号,因而变得很繁琐。
● 设计中的路由探针可能会导致设备运行或定时问题。
因此,用逻辑分析仪进行调试会非常耗时,丧失活力,不能用于调试复杂的设计。
插入板上调试逻辑
具有复杂逻辑实施的设计通常需要实时调试功能。这些都是更深入地洞察设计所必需的,无需建立复杂的测试平台架构或实施外部硬件。
a) 插入调试逻辑以及基于FPGA的设计只需在初始时付出一些一次性的努力,因而可以节省调试时间和原本很大的精力。这将涉及编写驱动的综合逻辑,监控可以与设计本身集成、并可以移植到FPGA的IP。图3显示了使用板上调试逻辑的调试模型。
图3:使用板上逻辑的调试模型
图字:AHB,IPS通用界面 驱动IP 测试中的模块 监控IP
另外,此板上逻辑可以使存储器映射,以便通过调试器提取结果或在运行中驱动输入。
b) 可以采用另一种方法读取调试信号--使它们的存储器映射。然后,可以使用调试器读出这些值或通过CPU将这些值与这些信号的预测值进行比较。如果从设计输 出数据出现的速度比读出的速度更快,则可以实施FIFO。输入数据能以更快的速率存储,以更低的调试器时钟频率读出。考虑到这两个时钟的频率,可以确定 FIFO的深度。
假设/优势
● 垫或GPIO消除可能因外部连接所引起的问题,因而不需要从外部驱动激励。
● 频率没有被外部驱动频率限制。
● 驱动激励和监控结果是实时的,使调试速度更快。
● 显示器完全不需要获得外部引脚上的节点,因为可以从内部检查它们,使用那些存储器被映射的寄存器标记错误。
● 不需要位文件生成任何额外的循环来增加调试总线信号。
局限性
● 驱动器和显示器需要是可综合的,因此可能无法在验证测试平台重新使用它们。
● 驱动器和显示器所使用的逻辑可能会导致过度利用FPGA资源。
● 采用此方法可能出现以下情况:如果其中任何一个有内存要求,而且超过了可用的FPGA资源,就不能实施驱动器和监视器。
● 添加额外的逻辑(如驱动器或监视器)可能导致难以满足设计所需的时序要求。
实时调试工具
这些调试工具不需要在板的顶层提取内部设计信号,并提供信号探测功能,以及实时调试。
在此类别中有多种工具,可用于实时调试设备。选择合适工具的最佳方式将取决于设计的复杂性和功能以及所使用的FPGA技 术。这些工具在设计中用于插入探针,以便转储数据,并可控制启动数据存储的特定触发器。设计得到检测后,通过综合、布局、布线在某个设备上实施,这样,工 具提供的GUI界面可以用来检查结果。使用这些工具可观察到设计层次中的任何层级,因而不需要为了在设计顶层获得它们而执行额外任务。
这样的工具很少利用FPGA自身资源,像板上存储器,用于储存数据,而且它们不需要任何外部硬件。图4显示了此调试方法。
图4:使用板上资源的调试工具
图字:将波形从电路板中倒出,进行调试 信号探测 板上存储器 逻辑设计
但这类工具所面临的问题是:插装探针后,设计在工作频率和路由拥塞方面会有不可测的操作。
当然还有一些其他工具,也具有实时功能,可灵活配置运行触发器。这些工具都配有相关硬件,因而提供必要的数据储存,不使用任何FPGA资源。图5显示了这种调试方法。
图5:使用外部硬件的调试工具
图字:信号探测 将波形从电路板中倒出,进行调试 外部硬件(特定工具) 逻辑设计
假设/优势
● 对于I/O数量相对较大的设计可以采用此调试方法,因为它不需要在电路板的顶层提取内部信号。
● 此方法可以用于设计仿真良好、但一旦集成到FPGA中、就不显示预期行为的情况。同样,调试这些问题需要不仅提供实时调试,而且还有信号探测功能的工具。
● 这些工具使调试过程变得相对容易,因为它们通常将波形/数据转储为使用最常用的仿真工具可以打开的格式。
● 这样的调试工具还能储存在自己的相关存储器中捕获的波形,它消耗FPGA板的资源,因而通常不用限制设计。
局限性
● 必需安装外部硬件和软件。
● 调试节点有数量限制。
● 设计层次的可见性取决于用于储存转储数据的存储器。
● 可获得的频率降低。
解决方法之一是:采用来自一个特定分层体或模块的插装信号创建同步build,这样,可以采用调试模块或块的信号在比特流上运行一组测试。在执行阶段遇到问题后,这肯定会节省创建build的时间。
本文小结
很显然,现在还没有出现公认的通用调试技术,而且没有适合所有设计验证的调试技术。不同的调试技术有不同的局限性和限制,但是,如果选择得当,这些调试工具/技术真的可以有助于减少调试工作,缩短调试周期。
缩短调试时间可能成为加快硅前验证的一个伟大的里程碑。加快硅前验证是首要要求,这样才能满足上市时间需求,能够推出第一个全功能硅。