目前的顶级FPGA在容量和性能方面均提供巨大的能力。例如,Xilinx Virtex-5家族成员包含成千上万可以配置成逻辑、RAM或移位寄存器的逻辑单元。此外,这种可编程逻辑可与硬IP块搭配使用,如工作频率全部高达550MHz的兆位RAM以及数百个25×18乘法器/DSP功能。
这些可能还包含多个硬和/或软处理器内核和相关外围器件的设备可以用作ASIC和片上系统(SoC)元器件的功能强大的原型平台。
新工具、改进的方法以及更高的抽象级正在帮助工程师实践不同的宏架构和微架构,并帮助他们提高其总设计生产力。
对于验证而言,这些设计的绝对规模和复杂度再加上大幅增加的软件内容使得FPGA原型对于通过硬件加速提高验证吞吐能力以及提供一个早期的软件开发平台都是一个极具吸引力的选择方案。但是,成功的原型要求当设备无法按预期工作时对发生的状况和工程师必须调试的对象予以应有的考虑。
如上文所述,分析和调试原型设计的关键因素在于难以观察内部信号。问题在于可能有成千上万个这样的信号,但是这些信号可能仅通过设备上的有限个输入/输出(I/O)引脚暴露在外界。
此外,观察内部信号的操作会影响设计和验证。选择要监视的合适信号是一个并不琐细的任务,修改设计以观察这些信号会耗费工程和FPGA资源。同样,捕获、转出和记录要观察的信号值也要花时间。
访问和分析FPGA内部信号的任务复杂、繁琐而耗时,这取决于所用的方法。话虽如此,不过总过程也可以分成五个主要步骤:1. 确定一组要观察的信号;2. 修改设计,以观察所选的信号;3. 当FPGA在原位工作时观察并找回数据;4. 将找回的数据映射至最初的RTL表示法;5. 计算不在最初观察的信号组中的其它信号的数据。
本文首先讨论与执行这些活动有关的现有技术的局限性。然后介绍新兴的可视性增强技术;这种新的技术包括一组缩减的要观察的信号的自动交互选择以及填充“遗漏片段”(未观察到的信号值)的“数据扩展”技术。
传统技术的局限性
就像刚才提到的,采用传统技术定位、分析和调试FPGA中的问题可能极其繁琐和耗时。其中的原因可以简单地进行总结。
这个过程的第一步是决定哪些信号需要进行观察(捕获和转出)。但是要观察的信号量的增加会增加捕获信号所需的逻辑资源以及将其数据值传达给外界所用的时间。由于这些原因,因此可能只能在特定时间(即特定的验证运行)观察有限个信号。
这里的问题在于选择要监视的最佳信号是一个并不琐细的任务。例如,看起来是监视的最佳选择的寄存器可能实际上只能为设计的操作提供有限的可视性。相比之下,表面上无害的寄存器可能为设计提供极高的可视性。
一旦选定一组要监视的信号,必须对设计进行修改以便允许直接观察信号,或者允许捕获信号并将其转出到外界。广义上讲,这叫可调试性设计(Design-for-Debug,DFD)。在以前的技术案例中,设计可以通过多路复用器和控制逻辑进行扩展,多路复用器和控制逻辑可以用来通过主要输出引脚来将所选的内部信号呈现到外界。一般而言,这种技术实现往往是一种内部的专门技术,这些实现需要大量工作来有限地了解芯片内部正在发生的状况。
替代技术是采用内部逻辑分析仪(ILA)。这些分析仪可能是内部技术,但是FPGA供应商或专业的第三方供应商一般都提供这些分析仪(以及相应的配置应用)。每个ILA都是采用可配置逻辑单元和RAM区块的组合而构造的。ILA的控制逻辑被设计成允许特定的触发条件(或组合的触发条件)开始捕获一个或更多特定信号并将与这些信号相关的属性(如数据值和时间戳记)存储在片上内存中。在某个阶段,这些值必须被转出到外界。这种情况下的一般技术是采用芯片的JTAG端口。
设计你自己的ILA不仅耗时而且费力。事实上很难确定是自动调试设计的还是ILA在调试设计。甚至在使用FPGA供应商的经过验证的鲁棒ILA时,每次选定要监视的一组新的信号时仍然需要对设计进行重新编译。重新编译的工作可能要花几个小时,因此最好最大限度地减少需要执行这个任务的次数。
在设计修改和设计重新编译阶段之后,进行验证运行,并捕获来自内部信号的数据。为了让这些数据可用于下游调试工具,数据必须包含特定的属性。除了数据本身的逻辑值之外,数据必须包含信号的完整分层实例名以及每个数据转换的相对操作时间(时间戳记)。此外,转出数据的文件格式应为工业标准,如VCD或FSDB。
在专有解决方案案例中,有必要将这些属性添加到信号数据流和/或将内部格式转换成其对应的工业标准格式。幸运的是,FPGA供应商和专业供应商提供的ILA一般捕获必需的数据并使用工业标准格式。
从ILA收集的数据通常与FPGA的门级视图有关。但是设计工程师更熟悉设计的RTL表示法。因此,为了为调试过程提供便利,有必要将门级实例映射成RTL视图。这并不像听起来那样简单,因为大多数情况下,门级实例和RTL视图之间并没有一一对应关系。许多传统的内部解决方案都无法提供这种能力。
验证运行之后,访问和分析其它信号以对问题进行跟踪始终都是有必要的。当采用传统设计流程时,设计工程师必须返回上述五个步骤中的第一步。即,他们必须选择一组新的信号、修改设计并对其进行重新编译、执行新的验证运行、将新数据映射至RTL,然后分析结果。这个过程必须重复多次。
目前的顶级FPGA在容量和性能方面均提供巨大的能力。例如,Xilinx Virtex-5家族成员包含成千上万可以配置成逻辑、RAM或移位寄存器的逻辑单元。此外,这种可编程逻辑可与硬IP块搭配使用,如工作频率全部高达550MHz的兆位RAM以及数百个25×18乘法器/DSP功能。
这些可能还包含多个硬和/或软处理器内核和相关外围器件的设备可以用作ASIC和片上系统(SoC)元器件的功能强大的原型平台。
新工具、改进的方法以及更高的抽象级正在帮助工程师实践不同的宏架构和微架构,并帮助他们提高其总设计生产力。
对于验证而言,这些设计的绝对规模和复杂度再加上大幅增加的软件内容使得FPGA原型对于通过硬件加速提高验证吞吐能力以及提供一个早期的软件开发平台都是一个极具吸引力的选择方案。但是,成功的原型要求当设备无法按预期工作时对发生的状况和工程师必须调试的对象予以应有的考虑。
如上文所述,分析和调试原型设计的关键因素在于难以观察内部信号。问题在于可能有成千上万个这样的信号,但是这些信号可能仅通过设备上的有限个输入/输出(I/O)引脚暴露在外界。
此外,观察内部信号的操作会影响设计和验证。选择要监视的合适信号是一个并不琐细的任务,修改设计以观察这些信号会耗费工程和FPGA资源。同样,捕获、转出和记录要观察的信号值也要花时间。
访问和分析FPGA内部信号的任务复杂、繁琐而耗时,这取决于所用的方法。话虽如此,不过总过程也可以分成五个主要步骤:1. 确定一组要观察的信号;2. 修改设计,以观察所选的信号;3. 当FPGA在原位工作时观察并找回数据;4. 将找回的数据映射至最初的RTL表示法;5. 计算不在最初观察的信号组中的其它信号的数据。
本文首先讨论与执行这些活动有关的现有技术的局限性。然后介绍新兴的可视性增强技术;这种新的技术包括一组缩减的要观察的信号的自动交互选择以及填充“遗漏片段”(未观察到的信号值)的“数据扩展”技术。
传统技术的局限性
就像刚才提到的,采用传统技术定位、分析和调试FPGA中的问题可能极其繁琐和耗时。其中的原因可以简单地进行总结。
这个过程的第一步是决定哪些信号需要进行观察(捕获和转出)。但是要观察的信号量的增加会增加捕获信号所需的逻辑资源以及将其数据值传达给外界所用的时间。由于这些原因,因此可能只能在特定时间(即特定的验证运行)观察有限个信号。
这里的问题在于选择要监视的最佳信号是一个并不琐细的任务。例如,看起来是监视的最佳选择的寄存器可能实际上只能为设计的操作提供有限的可视性。相比之下,表面上无害的寄存器可能为设计提供极高的可视性。
一旦选定一组要监视的信号,必须对设计进行修改以便允许直接观察信号,或者允许捕获信号并将其转出到外界。广义上讲,这叫可调试性设计(Design-for-Debug,DFD)。在以前的技术案例中,设计可以通过多路复用器和控制逻辑进行扩展,多路复用器和控制逻辑可以用来通过主要输出引脚来将所选的内部信号呈现到外界。一般而言,这种技术实现往往是一种内部的专门技术,这些实现需要大量工作来有限地了解芯片内部正在发生的状况。
替代技术是采用内部逻辑分析仪(ILA)。这些分析仪可能是内部技术,但是FPGA供应商或专业的第三方供应商一般都提供这些分析仪(以及相应的配置应用)。每个ILA都是采用可配置逻辑单元和RAM区块的组合而构造的。ILA的控制逻辑被设计成允许特定的触发条件(或组合的触发条件)开始捕获一个或更多特定信号并将与这些信号相关的属性(如数据值和时间戳记)存储在片上内存中。在某个阶段,这些值必须被转出到外界。这种情况下的一般技术是采用芯片的JTAG端口。
设计你自己的ILA不仅耗时而且费力。事实上很难确定是自动调试设计的还是ILA在调试设计。甚至在使用FPGA供应商的经过验证的鲁棒ILA时,每次选定要监视的一组新的信号时仍然需要对设计进行重新编译。重新编译的工作可能要花几个小时,因此最好最大限度地减少需要执行这个任务的次数。
在设计修改和设计重新编译阶段之后,进行验证运行,并捕获来自内部信号的数据。为了让这些数据可用于下游调试工具,数据必须包含特定的属性。除了数据本身的逻辑值之外,数据必须包含信号的完整分层实例名以及每个数据转换的相对操作时间(时间戳记)。此外,转出数据的文件格式应为工业标准,如VCD或FSDB。
在专有解决方案案例中,有必要将这些属性添加到信号数据流和/或将内部格式转换成其对应的工业标准格式。幸运的是,FPGA供应商和专业供应商提供的ILA一般捕获必需的数据并使用工业标准格式。
从ILA收集的数据通常与FPGA的门级视图有关。但是设计工程师更熟悉设计的RTL表示法。因此,为了为调试过程提供便利,有必要将门级实例映射成RTL视图。这并不像听起来那样简单,因为大多数情况下,门级实例和RTL视图之间并没有一一对应关系。许多传统的内部解决方案都无法提供这种能力。
验证运行之后,访问和分析其它信号以对问题进行跟踪始终都是有必要的。当采用传统设计流程时,设计工程师必须返回上述五个步骤中的第一步。即,他们必须选择一组新的信号、修改设计并对其进行重新编译、执行新的验证运行、将新数据映射至RTL,然后分析结果。这个过程必须重复多次。
举报