FPGA设计基于团队的最佳实践2_IP及设计重用&功能验证&时序收敛

IP及设计重用

概述

a)好处

1)利用现有资源、结果可预期、缩短验证周期、更快投入市场

2)使工程师能集中精力发挥自己的核心能力。设计中的某些元件可能不是设计师本人精通的领域。若能利用该领域专家设计的模块,则设计师就可以致力于自己的专长。例如,包处理设计中数据通过以太网接口传输到芯片上。设计师可能是一个包处理专家,但并不擅长开发以太网接口。通过重用已有的10G以太网接口模块,设计师就能把精力集中在实现包处理功能的核心技术上。

b)困难

1)设计重用面临的第一个挑战是让工程师们在思维习惯上做角色的转换,把自己从模块设计师转变为模块的使用者。

2)公司通过建立正式的开发规范来解决面临的难题。接受规范的最初阵痛期过去后,遵守规范就会成为工程师们的一种生活方式,进而他们将会以创建可重用的设计模块而骄傲,就像他们现在创建自己的设计一样。

3)设计重用往往需要花费很长的时间,并付出极大的努力,因此可重用模块的开发代价远高于某个项目中一次性使用的模块。项目进度计划是决定某个模块是否应该进行可重用设计的一个因素。为确保所有项目的进度,重视设计可重用的公司需要确保项目的进度计划均允许关键模块被设计为可重用的模块。这样做,未来的设计效率将会有更大的提高。并非每个设计组件都需要可重用,因此避免不必要的重用设计至关重要。

4)因此,在编写模块设计说明书时,有必要关联公司内部的其他产品和应用,理解该模块的功能。这些信息可以被用来决定该模块是否应该按可重用方式进行设计,在模块设计说明书中对此应该有明确的表述。

c)设计还是购买

1)目标FPGA技术的IP可用性是另一个需要考虑之处。从FPGA系统的新成员面市起到能在这个新器件上运行的IP出现之前,通常需要一段时间。很多小型FPGA厂商都会等待主要用户先去测试这些IP。这会导致时序要求高的IP在可用性上有延迟。第一个使用新IP的用户可能成为新技术下验证IP的试验者。

2)目前还没有关于IP质量的产业标准可以帮助设计者选择IP。过去有过一些倡议,但都未达到被业界认可和采纳的程度。因此设计者需要依赖IP供应商的声誉,或者详细询问IP供应商的验证过程及想要购买的IP的运行效果来选择IP。

构建可重用IP

a)设计说明书

1)当这些可重用模块的设计说明书被审核时,应当包含可能使用这些IP的其他小组的审核意见。这样做有三个主要目的:①增加各个小组对该IP的认识程度;②在编写技术说明书阶段就使其他设计小组参与进来,他们在该IP中就会有既得利益,从而会更原意在自己的设计中采用这些IP模块;③其他设计小组可能会提供一些被设计者自身忽略的反馈意见。

硬件软件接口

a)软件接口:应用软件和RTL代码之间的主要接口是寄存器地址映射表。在设计过程中,软件硬件和其他相关人员都需要参考寄存器地址映射表。这给工程项目中的固件、RTL代码、硬件验证以及它们与技术文档的一致性造成了困难。因此为避免重新编写硬件和固件,应该尽量减少信息的修改,必须对信息修改严格管理,并将每次信息修改的细节传达给整个设计团队中的每个成员。

b)寄存器地址映射表的使用

1)IP的选择:作为IP评选准则的一部分,设计者必须理解软件和硬件如何与该IP接口。寄存器地址映射表就是为解决软件如何与IP接口而创建的。IP核的用户说明书应该反映这个信息。

2)软件工程师的接口:为了开发和硬件接口的软件驱动程序,软件工程师需要熟悉寄存器地址映射表。软件工程师总希望寄存器映射信息以软件头文件的形式出现,在头文件中定义该组件的基地址和寄存器偏移地址。

3)RTL工程师接口:寄存器地址映射表的编码、技术说明书的编写、审核、以及与寄存器地址映射表的数据交流,整个过程都是极容易出错的工作。市面上有工具可以协助完成此项工作。FPGA厂商提供的系统集成工具能自动生成软件头文件,在硬件系统设计工程师和软件工程师之间提供一个自动化接口。此外这些自动生成的软件头文件还会负责生成地址译码器的逻辑。

c)接口的验证:开发若干个测试平台对RTL级寄存器地址映射表的操作做全面的验证是良好的工程习惯。描述寄存器地址映射表所使用的格式必须和所有设计者使用的命名规则一致。

功能验证

概述

a)设计小组需要回答两个问题:设计功能是否正确?验证过程是否完整?什么是正确的功能?验证到什么程度才算完?光这两个问题就很难说清楚。

b)功能验证面对的挑战

1)功能验证必须覆盖设计的所有操作模式。这包括所有的边界情况。

2)应用接口必须按设计预期运行,即测试必须模仿设计和系统其他部分的互动。在FPGA器件通过标准协议接口(如PCIe或Serial Rapid IO)与系统其他部分接口时,有必要验证该接口模块是否与相应的标准兼容。

3)在设计参数化IP的场合,根据参数对该IP的所有结构变化做一次完整的测试是必要的。因为这样可以增加IP使用者信心。

4)IP设计者需要审核IP模块的设计文档是否清晰完整,与IP核的行为是否一致。

在规定的时间范围内利用可找到的资源,如何获得足够的验证覆盖度是设计师必须要面对的挑战。设计师如何确定覆盖测试已达到可以接受的程度呢?这些问题的答案来自于验证计划。验证计划必须详细说明验证覆盖度目标和其他指标。因此,验证计划会影响项目计划。

设计师在编写设计功能规范的同时,必须制订设计的验证计划。

5)在设计环节中,需要安排一个系统。该系统能够在设计的全过程包括验证周期期间,对照验证计划对设计的进度情况进行全面的监测。该系统必须能够管理测试生成的大量数据,并对照验证计划报告项目的进展情况。

c)意外状态测试计划应该测试那些不会发生的状态,如:非法状态、违背设计前提的状态、违背协议的状态、在运行中模式变化的状态。再强调一下,这里的关键因素虽然是设计的运行可能不正常,但它应该最终都能恢复过来。

功能覆盖

a)模块和整个系统的测试计划应该详细说明验证的覆盖度。这里的覆盖度是指功能覆盖目标(即必须测试哪些设计功能,以及每个功能必须达到的指标)。在制订功能覆盖目标计划时,设计师所面临的挑战是要确保该设计实现了说明书所描述的功能;对于接口而言,则需要符合协议规范的标准。对于可重用设计模块而言,设计师必须完成以下4个测试:被测器件的每个可用的特性和功能、各种配置的组合、可施加的不同类型的激励、被测试器件的响应。因为定义一张能验证100%设计功能的清单十分困难,所以功能覆盖度也有局限性。因此,在覆盖空间中找出覆盖的漏洞很重要。

b)定向测试:定向测试要求为测试计划中的每个功能的测试编写一个测试模块。想要获得可接受的功能测试覆盖度,人工编写测试模块的工作量非常巨大。而这些测试模块可重用的机会又非常小。由于定向测试非常耗时,因此最好只用于典型功能的测试。小模块的测试,建议采用定向测试技术,而大模块或系统的测试,则应该采用随机约束测试技术。

c)受约束的随机测试:受约束的随机测试建立在随机动态仿真基础上。最好在设计的早期运行随机仿真,以便发现大量错误。随着设计接近完成时,为了充分覆盖测试空间,就需要对随机激励进行约束。只需要运行一个受约束的随机测试就能覆盖测试计划中的多个测试项,这样可以缩短仿真时间。

d)systemverilog用于设计和验证:实际上systemverilog将三种语言合为一体。其包含比verilog和vhdl更为强大的可用于设计和综合的架构,拥有更先进的测试平台架构以产生激励和覆盖,支持断言结构以捕捉设计师的意图。systemverilog本身支持由覆盖率驱动的受约束的随机验证。目前,业界在systemverilog的验证方法上仍存在分歧,因而有VMM和OVM两个主要的验证方法库。

e)断言:断言被用来检查设计师所做的假设以及与设计有关的行为是否正确。在动态仿真过程中,如果设计满足或违反设计规范都可以触发断言。断言可用在模块级和系统级的测试中。可重用模块中的断言也是可重用的,这是断言的另一个好处。断言能及早发现问题,诸如fifo的上溢/下溢错误。断言还能截获模块间的通信,例如存储器接口的行为。

f)自验证测试平台方法:在不准备重用的简单模块设计中,使用通用测试平台方法,但是在别的工程师做仿真时,则必须花费很长的时间才能理解仿真输出的波形,因而故障漏检很可能发生。编写自验证的测试平台比较困难一点,必须充分理解待测试模块,才有可能写出期望的输出。由于期望的输出中的错误很难找到,使用这种方法必须事先做很多工作。然而一旦自验证的测试平台设置后,设计师就可以进行测试,很快就能得到通过或失败的结论。测试可重用的设计模块应该使用自验证的测试平台。→

1)在编写自验证测试平台时,为了能对输出进行监测,设计师必须在已有的处理过程中添加一些功能,例如添加一个比较进程或类似的进程,用以将仿真得到的结果和预期进行比较;

2)这类测试平台可以顺序或并发产生激励,也可以用期望的输出向量产生这些激励;

3)通常发出的信令结构非常复杂,如果不用保留在时间片中的向量,很难为其建立模型。在自验证的测试平台上,利用内部数组或外部文件,可以为复杂信号结构建立模型,从而产生及极其复杂的信令激励,自动地对系统进行测试。

4)在测试平台中,使用包含激励信号和预期输出信号向量的数组时,可以不需要进行类型转换。这虽然缩短了仿真时间,但编写测试激励比较困难,可能要创建非常大的文件。当使用包含激励和期望结果向量的外部文件时,可能需要进行数据类型的转换。这有可能导致仿真变慢,但编写测试平台则相对比较容易。

g)形式化等价性验证:形式化等价性验证比较设计流中或不同网表中不同点之间的逻辑等价性。它使用数学方法来比较同一个设计的两种版本在逻辑上的等价性,而不是使用测试向量进行仿真。形式化等价性验证通常被用于RTL代码与综合后门级网表之间的比较,以此来保证综合优化没有引入任何错误。它可用于RTL代码或综合后门级网表与布局布线网表之后的比较,以确保布局和布线优化没有改变设计的功能。虽然形式化等价性验证可以确定两个网表是否在功能上具有一致性,但它并不能保证其功能的正确性。形式化等价性验证工具能支持的设计规模往往有限,因此它们大多数用于设计模块的验证,而不用在完整设计的验证中。大多数形式化等价验证工具因为无法对付由FPGA逻辑综合或物理综合进行的寄存器重定时所造成的逻辑混乱,因此在FPGA设计流程中几乎不使用形式化等价性验证。

代码覆盖度

a)代码覆盖测试是有局限性的,因为它并不关注事件发生的先后顺序,也不检查设计模块间的任何交互。代码覆盖测试只关注设计中有些什么,并不关心没有实现的功能,总之,代码覆盖测试不关注设计的具体功能。代码覆盖测试可以发现在随机测试下没有遍及的边角情况,为了做到这一点,用户必须编写定向测试案例,对没有被覆盖的区域进行测试。

质量评价QA测试

a)功能回归测试:在调试中找到并改正错误之后,应立即编写测试程序以检测该错误是否被纠正,这是良好的工作习惯。以后对设计做任何改动时,都应运行这个测试程序以保证新改动没有引入新错误。回归测试将自动执行这个测试过程。该测试应该被归并到整个设计的测试套件中,其中所有的回归测试案例都将在这个测试环节中自动执行。自动化质量评价QA回归测试通常通过脚本执行对IP或设计的自动仿真。在仿真中把编译和运行的结果与一个已知的合格规范进行比较。这个测试是自验测性的,会产生验证日志,报告意外情况。在测试中发现问题属于意外情况,除非通过分析,确认测试所发现的问题是由设计错误引起的,才算设计错误。通常意外情况是由测试环境问题引起的,而不是由设计错误引起的。

软硬件协同验证

a)市场上可以购买到软/硬件协同仿真的工具。这种工具能以很高的效率在硬件模型运行C代码。由于C代码在仿真软件上的运行速度非常慢,比它在硅片上实际运行速度慢几个数量级。因而为了加快仿真速度,通常在开发板或终端系统的FPGA器件上运行C代码,以避开用仿真软件进行测试,这是FPGA设计中常用的技术。

b)利用FPGA,能快速得到电路板级的初步设计。在电路板级的系统测试中能发现用RTL仿真无法检测到的错误。想要验证设计是否正确,必须将硬件检查和仿真结合起来。在FPGA设计的初期,通过仿真可发现设计中存在的绝大部分问题,所以此时仿真最有价值,而在调试接口和驱动程序时,硬件检查非常有用。

功能验证清单

a)

1)编写测试计划,其中应该包括能证明设计正确无误的重要测试案例的每个细节;

2)编写功能覆盖度测试说明书,其中应该定义功能覆盖的测试范围;

3)搭建系统测试平台;

4)编写功能测试模块,并进行仿真,以期望获得功能测试的覆盖度;

5)进行代码覆盖度测试,只有在RTL代码稳定之后才能进行这项测试;

6)实现彻底的功能覆盖测试,如果设计模块的功能测试覆盖率达到100%,就应该扩展到系统级的功能覆盖测试;

7)对IP进行图形界面测试;

8)对具有标准接口协议的IP,必须完成硬件互操作性测试;

9)执行系统调试。这次调试需要将软件下载到目标器件上,执行软/硬件协同仿真,以验证软件与硬件很好配合,正确无误运行。

时序收敛

难点

a)FPGA设计流程中,时序收敛是设计师最易产生挫折感的阶段。时序收敛有可能耗尽EDA工作站的机时。即便如此,设计的性能如仍不能达标,设计师就不得不选用速度等级更高的FPGA器件,从而造成开发经费超标。

b)最新的FPGA器件工艺尺寸小,为达到时序收敛的目标,要求时序分析在两个或多个时序的边角条件下进行。对这些工艺尺寸小的FPGA,在延迟中占主导的通常是互连线延迟,而不是逻辑单元延迟。在避免布线拥塞的同时还要避免冗长的互连延迟,这就给FPGA设计的布局带来了困难。添加专用的硬件模块,如嵌入式存储器和DSP模块,带来的好处是增强了功能,但如何安置与这些模块接口的相关逻辑也是难题。FPGA厂商提供的软件中包含了多个功能项来解决这些困难,在多数情况下,默认设置就能满足设计的性能指标,对那些按默认设置不能满足指标的设计,设计师可以借助众多的分析工具和功能项使设计达到要求。

时序分配和时序分析的重要性

a)时序分配在FPGA设计中有以下两个作用:

1)指导综合工具进行布局布线工作。时序分配告诉综合器应该把优先的重点放在哪里,并命令布局布线工具,优先考虑哪几条路径的布局和布线;

2)用于时序分析。时序分析并不保证RTL设计功能的正确性,只保证设计没有时序冲突。静态时序分析通过计算得到设计时序,并没有进行仿真。

b)如今典型的FPGA设计通常使用多个时钟域,时钟域之间又有复杂关系,因而需要特别注意接口时序,而不是只是单纯找到最高的时钟频率。对于最新的65nm和45nm工艺,为了保证FPGA设计的正常运行,必须在多个时序的边角条件下进行时序分析。

c)时序分析基础概念

1)静态时序分析:静态时序分析估算设计中的时序路径延迟,并按照设置的时序约束,报告映射后实现电路的时序。基于FPGA硅片的时序特性,静态时序分析能确定设计是否能正常运行。时序分析与输入的功能无关,它依据时序要求,遍及分析设计中所有输入和器件中每条路径可能的组合,从定电路的延迟。与门级仿真和电路板测试比较,静态时序分析更快更容发现与时序有关的错误。

2)时钟:时钟被用于触发寄存器到寄存器的同步传输,引导综合和布局布线工具实现优化算法,以达到最好的设计效果。在任何SDC文件中,应该首先确定时钟约束。时钟约束之所以重要是由于很多约束都需要有参照时钟才能执行;因此必须最先定义时钟约束。

3)发送沿、锁存沿:发送沿是从寄存器发出数据时使用的有效时钟沿,例如寄存器作为数据发送端时就要使用该触发沿;锁存沿是在时序元件的数据输入端捕获数据时使用的有效时钟沿,例如寄存器作为数据接收端时就要使用锁存沿。

4)到达时间:到达时间可以分为数据到达时间和时钟到达时间。数据到达时间指的是数据从源时钟到目的寄存器的延迟;时钟到达时间指的是从目的时钟节点到目的寄存器的延迟。

5)多周期路径:信号更新时间超过一个时钟周期就是多周期路径。这些路径需要由模块的设计师来确定,确定哪几条路径为多周期路径,需要对设计的功能有透彻了解。分配多周期路径,就是允许设计师指定数值,锁存到目的寄存器之前需要等待的时钟周期个数。因此目的寄存器就能在某个准确的时钟沿到来的时刻锁定该数值。

6)源同步:源时钟同步是用于描述时钟和数据同源的技术。在源同步接口中,时钟源与数据源使用同一设备。

7)输入延迟:输入延迟规定了在指定的输入端口相对于时钟所要求的数据到达时间。输入延迟规定中的相对于时钟是指相对于该时钟的上升沿或下降沿。

8)输出延迟:输出延迟规定了在指定的输出端口相对于时钟所要求的数据到达时间。输出延迟规定中的相对于时钟是指相对于该时钟的上升沿或下降沿。

9)运行条件:运行条件由设计时序分析期间所使用的电压设置和温度设置组成。这些设置值会影响时序分析工具所使用时序模型的延迟。

10)多边角条件分析:在对设计进行静态时序分析时,采用多边角分析可以了解FPGA设计在不同运行条件下的时序情况。这种验证通常采用设计的最慢边角模型和最快边角模型分两次进行。在完成时序设计的签收之前,设计师必须进行多个边角条件的时序分析、检查是否达到时序需求。多年以前,FPGA厂商只提供一个代表最差运行条件的时序模型。该模型内部有足够的时序保护带,因而设计师只需要用一个时序模块就可以完成时序分析,还能保证设计的时序符合要求。随着FPGA器件工艺尺寸缩小到65nm、40nm之下,这种做法就不符合实际。设计师必须在最好和最坏的条件下分别对设计做时序分析,待时序达到需求后,才能签收。也就是设计师必须分别针对最好和最坏两种运行条件对设计时序进行优化。

11)慢边角条件模块:慢边角条件时序模型表示在最差的运行条件下,任何单条路径可能的最慢性能。该模型表示在最高运行温度和最低电压VCCMIN下器件的最慢行为。通常慢时序模型用于检查建立时间是否满足。

12)快边角条件模型:在最好的运行条件下,短路径的是否满足时序要求可以用这种分析来验证。

13)时钟的不确定性:时钟的不确定性通常是指时钟或时钟到时钟传输的偏斜。时钟的不确定性可分为建立时钟的不确定性和保持时钟的不确定性,还可分为时钟正跳变沿的不确定性和时钟负跳变沿的不确定性。

14)时钟延迟:分为网络延迟和源延迟。网络延迟是指时钟网络上时钟和寄存器时钟引脚之间的延迟。源延迟是指时钟和时钟源(如系统时钟或产生时钟的基时钟)之间的时钟网络延迟。当时钟输入端口被用作反馈时钟时,为清晰表示从输出输出端口到时钟输入端口的电路板级延迟,源延迟可以被分配给所产生的时钟。

实现时序收敛目标的方法学

a)指定FPGA器件系列

1)选择速度等级:为了很快地实现时序收敛的目标,建议在设计之初就选用速度等级最高的FPGA器件来实现设计。这样就能更快转入电路板功能验证阶段,并能更快开始软件开发。设计师可以在验证周期中或功能验证完成后,再选择速度等级低的FPGA器件,对设计进行优化。

2)设置IO:设计师对驱动强度和IO标准的选择会影响引脚的时序。它们会影响所选器件的功耗和信号完整性。以下是用来改善IO时序的技术,按优先顺序排列:

①确保给IO引脚设置恰当的时序;

②检查报告文件,确认是否使用了IO寄存器,如果没有使用IO寄存器,就需要查看RTL代码,并重新编写RTL代码令输出寄存器驱动引脚,且令引脚驱动输入寄存器。为了满足IO时序要求,布局布线软件通常会自动选择IO寄存器。若确实没有使用IO寄存器,则设计师可以通过FPGA设计软件的设置项,强行令布局布线软件使用IO寄存器;

③关注IO单元延迟链设置:对于引脚之间的连接,无论输入或输出引脚都要使用最短延迟。大多数FPGA器件的IO单元具有可编程的延迟选项,用以最小化tsu和tco(建立和保持总时间)时间。这些延迟通常由FPGA设计软件根据IO时序设置自动设定。若自动设定延迟没有起作用,则设计师可以通过软件中的设置项,手动设定;

④移动锁相环时钟沿:如果锁相环为驱动IO引脚的寄存器或IO引脚的输入寄存器提供时钟,就可以对锁相环的输出进行相移改变IO的时序。后移锁相环时钟以缩短建立时间tsu为代价从而提供更丰富的tco。前移锁相环时钟以缩短tco和保持时间thold为代价从而提供丰富的建立时间tsu。

b)设计规划

1)对时序收敛进行预先规划非常重要。预先规划会有助于在问题出现之前发现问题,并避免延误设计周期。所有的RTL代码都编写完后,才去编译顶层设计是时序收敛中常见的误区之一。为了尽快发现设计集成和资源使用中的问题,设计师应该每完成一个主要的低层次模块RTL编码,就即刻对顶层设计进行一次编译。

2)为了实现顶层设计的时序收敛目标,设计师需要在设计说明书阶段,即定义如何划分功能模块时就要开始考虑时序收敛问题。时序收敛计划包含单个模块的时序要求、模块间的时序要求,以及对所有与专用硬件模块或器件引脚接口的模块布局的约束。在编译顶层RTL代码时需要遵循这些规定。

3)这里还是要建立设计师使用增量设计方法。增量编译对FPGA设计而言,优势在于把它应用到基于团队的设计方法中十分容易,这样,很多工程师可以一起做同一个FPGA设计,轻松达到时序收敛的目标。增量编译还能缩短时序收敛目标的时间。增量编译不编译设计中无变动的模块,只编译设计中有改动的那部分模块。由于需要重新编译的逻辑减少了,编译的工作量就减少了,因而增量编译的最大好处是缩短编译时间。第二个好处是一旦设计中时序临界的模块满足了时序续期,设计师就可以对它进行锁定,这些模块的性能就会在整个设计中得到保持。而通常被忽略的第三个好处是设计师在加入调试逻辑进行调试时,使用增量编译不会影响设计的性能。

4)增量编译的限制:

①它需要事先规划设计分区,这对设计模块如何接口有限制;

②它妨碍了跨模块的优化。该限制可以通过以下方法来解决:保持设计模块中的关键路径;寄存设计模块的端口信号;不要在下一层设计模块间插入组合逻辑;

③它降低了应能达到的器件利用率。有些FPGA设计软件对完整设计进行面积优化时确实比较有效。例如,为节省面积,面积优化工具可把表示组合逻辑的LUT与该组合逻辑无关的寄存器布局在同一逻辑单元中。若设计师想在设计中充分利用每个逻辑单元中的每个基本元件,但由于FPGA器件中可用布线资源分配的原因,很可能无法实现时序收敛的目标。为了实现设计的时序收敛和高性能目标,有时必须牺牲FPGA器件的利用率,决定设计选用哪一种规格的FPGA,应在设计说明书中明确说明。使用增量设计方法,可使大多数设计达到85%以上的逻辑利用率,同时实现时序收敛的目标。

c)自底向上的设计流程

1)自底向上的设计流程中,各模块在单独的工程中进行编译,一旦模块达到时序收敛目标,就立即被锁定。底层分区在最后集成时移植到顶层工程中。这样设计不需要被重新编译,但需要融合所有模块的布局布线表,然后通过布局布线操作连接所有的模块。缺点是完全隔离了底层模块,要求事先对芯片的资源分配花更多功夫。为适应每个模块在独立的工程中进行编译,还需要进行详细的版图规划。它也使得整个项目的时序约束更为复杂,因为时序约束需要由顶层传递到底层。任何需要在底层工程中添加的时序约束也必须移植到顶层工程中。

d)早期时序估计

1)除非设计已经进行了一定程度的布局,否则时序估计并不准确。因而在设计早期,设计师想通过完整的布局布线编译得到设计的性能估计是不可能的。如何在设计早期进行时序估计,FPGA厂商已给出了解决方案。

2)大多数FPGA厂商提供的软件含有缩短编译时间的设置。通过限制布局尝试的次数能大大缩短编译时间,这通常以牺牲设计的性能为代价。使用快速编译选项获得的时序结果与使用完整编译时所获得的时序结果相比,通常范围在10%以内,但所用编译时间却不到一半。这的确是一个能大大缩短时序收敛周期的强大工具。

3)建议设计师在以下场合中使用快速编译选项:

①在设计早期,当设计师确定要变动的性能时使用快速编译。所获得的时序结果可能在最终结果的10%误差以内,但迭代时间会短得多;

②对容易满足时序要求的完整设计使用快速编译。如果设计相对目标FPGA技术而言性能不高,这种编译方式会减少整个工程期内的设计迭代时间。

工程文档应该反映这个设计所使用的布局布线选项。如果设计的时序差10%以上才收敛,就应该返回去修改RTL代码,而不是继续进行完整的编译。

4)正如设计规划中指出,为了能尽早发现设计集成和资源利用中的问题,设计师应该尽早在顶层设计中编译主要的设计模块。为了做到这一点,设计师可以给未完成的模块创建虚拟模块。但这些空模块需要包含正确的接口。

e)CAD工具设置

1)建议设计师尽量保持缺省的综合和布局布线设置。FPGA厂商提供了几十个会影响时序结果的按钮开关。设计时应尽量避免乱动它们,只有在RTL编码已经无能为力了才使用它们。

2)这些设置会有效且大幅度改变编译结果。然而FPGA厂商所提供软件的各个版本给出的时序结果会截然不同。因此这些设置使用起来不方便,事实上会导致IP不可重用。

3)除了优化设置外,FPGA厂商提供的软件还能通过对逻辑进行版图规划来影响时序结果。设计师可以指定逻辑单元放置在不同的组、区域或者下至个别的布线轨迹。再次建议设计师不要这样做,除非FPGA厂商提供的软件在布局上做的很差。

4)人类架构专家几乎不可能用人工方法击败自动综合布局布线工具。

f)理解布局布线工具

1)布局布线工具是由时序驱动的,因而它能理解复杂的时序约束。因此建议设计师们使用真实的时序约束。

2)FPGA布局布线工具的特殊现象之一,是由其完成的具体布局和连接时,会根据种子效应产生不同的结果。逻辑的初始布局是随机的,随设计的起始条件不同而有所变化,所以有可能产生满足设计目标的不同布局。布局布线的种子(也叫适配器种子)可改变布局算法的起点,这会对如何优化的过程产生影响。为了实现时序收敛的目标,布局布线算法会根据先前运行的结果,进行多次布局尝试。然而,初始布局的改变可能导致最终布局的不同,从而产生不同的时序。

3)种子扫描是用于时序收敛的一项常用技术。种子扫描通过运行多个不同的种子来确定哪一个种子能为设计带来最好的效果。过去,种子扫描会导致性能上的大幅变化。如今,种子扫描对最新FPGA技术性能带来的平均变化在±5%的范围内。注意对不同的FPGA厂商以及不同的器件系列,这种变化会有较大的差异。对于打算重用的设计模块或者可能要求在今后进行更新的最终设计,建议设计师避免使用种子扫描。这是因为在FPGA厂商所提供软件的未来版本中,相同的种子会带来不同的效果。再者,若设计师对设计做任何改动,例如逻辑上的改动,配置上的改动或引脚上的改动,相同的种子也会带来不同的效果。

4)什么时候使用种子?如果设计能满足时序,设计师还希望最大化时序裕量。

g)编译报告和分析工具

1)应该规定设计师在设计过程中必须无一例外地审查并消除来自工程的所有警告。这项工作是必须的,因为这些警告可能指出了设计中的问题,例如不恰当使用锁存器或找不到时序约束等。若警告来自所购买的IP,则设计师不能通过修改RTL代码来消除该警告,这是警告审查的难题之一。若发生这种情况,则设计师应该与该IP供应商取得联系,若它们能证明该警告没有问题可以忽略,设计师就可以在工程中记录该信息,并且在以后的编译中忽略该警告。

2)报告文件本身有详细的关于FPGA器件资源使用情况的信息,从而可以用来确定器件中哪个模块使用的资源最多。

3)来自编译报告的信息有助于确定布局布线中的困难,例如消耗在布局布线上的时间。布线时间很长可能是由于布局不合理造成的。对某些节点做人工手动布局或在布局上多花功夫,布线时间有可能缩短。

4)编译报告还提供已执行优化的详细资料,如已经从设计中移除的寄存器。这些信息能帮助设计师找到RTL代码中的问题,或解释为什么故障逻辑已经被移除了,使得设计师有目的地修改RTL代码。

h)版图规划工具

1)架构探索:架构探索提供了芯片资源的可视化显示。它类似于在设计师的桌面有一个详细的已用资源和未用资源的数据一览表。版图规划可用来查看FPGA器件架构的细节。版图规划对时钟网络的规划也特别有用。版图规划在详细描述PLL配置的同时,也详细描述了芯片中哪些区域能由PLL的输出驱动,哪些区域能由器件的全局时钟信号驱动。

2)布局布线分析:只有在设计存在问题时才需要进行布局布线分析。在时序出错时,布局布线分析可以与时序分析器配合使用,先将时序报告中的失效路径在版图规划视图中进行定位。然后才可能去分析设计的布局布线,以确定是否通过位置约束来修正时序,解决时序问题,或用图示表明芯片中某个区域已十分拥塞。

3)版图分配:在大多数情况下,人工布局不如自动布局布线软件。

4)工程更改指令:版图规划工具提供了设计快速小修改的手段,因而能缩短系统在线调试所需时间。它允许在设计中编辑、创建、删除逻辑及连线。建议设计师只做简单的更改,例如改变时钟的极性、时钟使能、插入简单的测试逻辑等。

系统在线调试

规划

a)系统在线调试计划应该作为设计说明书的一部分认真编写。设计中的每个主要模块都应该有一个在线调试计划,即如何验证模块的在线运行情况,以及针对该模块应使用哪种调试策略。设计说明书还应该包含关于判断该模块是否已经按预期运行所依据的信息类别。即判断该模块功能是否正确应根据以下三种信息:系统级别的统计信息,如存储器的接口效率;总线上的性能瓶颈分析;高速收发接口的比特错误率信息。除调试模块之外,在所有的设计模块都实现之后,对顶层设计也应该有一个调试计划。调试计划应该指明为系统在线调试预留了多少只引脚、多少逻辑和存储器、还应该详细列出系统在线调试过程的使用方法和工具。为调试设计预留15%器件引脚是一个好方法。

b)JTAG

1)如果在最终设计中保留ILA,并且有JTAG连接到FPGA,就能对设计进行远程调试。前提是设计者和电路板相连的工作站之间能通过网络连接。

2)一些更先进的ILA提供了与mathworks MATLAB软件的接口。这个选项对数据进行DSP分析很有用。一旦数据被导入MATLAB环境中,数据就能以适合用户测试的格式展开。

c)利用软核处理器进行调试

1)许多设计师忽略了一个现实的方法,就是可以在设计中添加软核处理器进行设计调试。添加一个软处理器只要用1000-2000个逻辑单元,加上部分内部存储资源。当软核处理器与传统的调试逻辑相结合时,将会变成强有力的调试武器。处理器能控制调试逻辑的操作,其本身也可用作调试逻辑。描述复杂的调试触发条件将变得更容易,例如用C语言来描述状态机的触发条件就比HDL容易。软核处理器也可用于控制存储器的读写操作。

相关推荐
ALINX技术博客3 天前
【202601芯动态】全球 FPGA 异构热潮,ALINX 高性能异构新品预告
人工智能·fpga开发·gpu算力·fpga
minglie13 天前
GCC的__attribute__用法
fpga
minglie13 天前
Zynq上UART/IIC/SPI的27个实验-第15课:PL 逻辑模拟 IIC 从设备AT24C256 行为
fpga
minglie13 天前
蚂蚁S9矿板 Nand Flash的使用
fpga
XINVRY-FPGA3 天前
中阶FPGA效能红线重新划定! AMD第2代Kintex UltraScale+登场,记忆体频宽跃升5倍
嵌入式硬件·fpga开发·硬件工程·dsp开发·fpga
南檐巷上学3 天前
基于FPGA的音频信号监测识别系统
fpga开发·音频·verilog·fpga·傅立叶分析·fft·快速傅里叶变换
FPGA小迷弟5 天前
基于FPGA实现HDMI接口,选型/核心技术
学习·fpga开发·verilog·fpga·modelsim
坏孩子的诺亚方舟6 天前
modelsim基础2_modelsim仿真分析
fpga·modelsim·仿真分析
tiger1196 天前
FPGA 在大模型推理中的应用
人工智能·llm·fpga·大模型推理