FPGA设计的验证技术及应用原则
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
FPGA设计的验证技术及应用原则
随着器件体积和复杂性的不断增强,设计工程师越来越需要有效的验证方。
时序可以是一种能发觉最多问题的验证办法,但对许多设计来说,它经常是最困难和费时的办法之一。
过去,采纳标准台式计算机的时序仿真是以小时或分钟计算的,但现在对某些项目来说,在要求采纳高性能64位服务器的状况下,其测试时光却要几天甚至几周。
这样,这种办法首先消弭了采纳FPGA带来的上市时光和实施成本方面的益处。
FPGA设计和验证工程师当今濒临的最大挑战之一是时光和资源制约。
随着FPGA在速度、密度和复杂性方面的增强,为完成一个完整时序验证,不仅对人力也对计算机处理器和存储器提出了更多更高的要求。
另外,对设计和验证工程师来说(许多状况可能是同一个人),这为在更短的时限内,以更大信念对当今的FPGA设计在第一次就可实施彻底胜利验证提出了更艰难的挑战。
时序仿真的重要性为确保设计可以工作及能延续稳定工作,当今的FPGA既需要功能又需要时序仿真。
FPGA设计的复杂性在增强,而传统的验证办法论又不再有效。
过去,在FPGA设计流中,模拟并非一个重要阶段。
但眼下,却成为最关键的步骤之一。
当采纳类似的Virtex-5 FPGA Family等更先进FPGA设计时,时序仿真就变得尤其重要。
传统的FPGA验证办法是:
1.功能模拟
在验证过程中,功能模拟是个十分重要的部分,但不应是唯一部分。
当举行功能模拟时,它只对RTL设计的功能性举行测试。
它不包括任何时序信息,它也不考虑由实现和优化对原初设计造成的转变。
2. 静态时序分析/形式验证
许多工程师认为为校验设计是否满足时序要求,只需举行静态时序分析。
将此作为唯一时序分析办法有无数缺陷。
静态分析无法发觉当设计动态运行时,才干发觉的任何问题。
静态分析仅能显示该设计作为
整体是否可满足设置和保持要求且普通仅达到施加的时序约束的水平。
在实际系统中,动态因素可造成FPGA的时序违规。
例子之一是块RAM(Block Ram)矛盾。
在FPGA器件中,随着双端口块RAM(Dual Port Block Rams)的引入,应留心避开同时读/写同一个区域,否则,读取的数据会不正确。
静态分析工具将永久无法发觉该问题。
类似,若有被误读的时光规范(timespec),静态时序分析也将难以发觉此问题。
3. 在系统测试
事实上,每位工程师都依靠该办法举行终于测试。
若设计能在板上工作且通过了各种测试,则该设计就将被发布。
这绝对是个十分好的测试,但它大概没能发觉所有问题。
有时,在一些边界状况(corner-case)被发觉前,设计需运行相当长的时光。
诸如时序违约等问题并非在全部芯片中都以相同方式显露出来。
当发觉这些问题时,设计通常已交到用户手中。
这意味着为找出此问题所导致的高成本、停工期和挫折感。
为能正确完成在系统测试,必需清除所有硬件故障,其中包括与SSO相关的问题、交错干扰以及其它与板卡关联的问题。
若在启动在系统测试前,有需要衔接的外部接口,则将延缓产品的上市时光。
从上可知,传统的验证办法不足以举行完整的系统验证。
有充沛理由举行动态时序分析。
时序仿真是可在其中举行动态分析的唯一办法。
许多工程师有令人信服的理由否决举行时序分析。
一些主要不安问题是:
它很费时;
为执行验证,需要大量存储器和处理器资源;
为没有方法重复用法取自功能模拟的测试基准,必需创制新测试基准;为由于囫囵网络表是绽开的,所以设计调试成为一件琐事,另外,没方法准时定位问题所在;
为时序仿真显示最坏状况的数量,设计本身可能足够超脱,不至于如此调兵遣将;
为并非全部子模块都是在一个环境下举行编程的;
为无法将在各个不同场所编程的部分分开,由于这些部分的设计师应是那些为能举行验证从而对设计有更深刻掌握的人。
这些都是正值的关注,这也就是为什么下一节将研究工程师能做些什么以克服其中某些问题的缘由。
在时序仿真中采纳Netgen以获得精准结果
Xilinx提出了一种革命性办法以从Netgen中得到用于动态分析匹配的静态时序分析数和时序数。
与-pcf 开关一起运行Netgen并指向一个有效PCF文件将确保得自Trce和Netgen的数将相互匹配。
在时序计算时,全部新Xilinx架构都利用了相对最小数(Relative Minimums)的益处。
利用相对最小数意味着在设置计算以及相反的保持计算时,将采纳最大时钟延时和最小数据延时。
目前的模拟器不支持用法相同SDF文件中分离取自MIN域和MAX域的数。
基于该限制,Xilinx 需要两个不同的模拟-- 一个用于设置,另一个用于保持。
Netgen编写SDF 文件,所以,当运行SDFMAX模拟时,将利用最大时钟延时和最小数据延时。
SDFMAX保证设计能满足目标器件的设置要求。
当运行SDFMIN模拟时,利用最小时钟延时和最大数据延时。
SDFMIN
保证设计能满足目标器件的保持要求。
改进时序仿真体验
当描述时序仿真时,“总体大于部分的总合”这样一句常语几乎可被反过来说成:“部分的总合大于总体。
”后一句话总结了本节所要阐释的内容。
为缩短时序仿真所用的时光,我们将不得不依赖“分割后各个击破”的办法。
对一个大的绽开网络表来说,完成任何形式的验证都将是件费时和枯燥的任务。
因此,实行的措施是将网络表分割为多个小部分。
该办法论并非是数字规律领域的一场革命,它是一种渐进的沿革。
自从HDL浮现后,设计师向来喜爱采纳基于部分组件的模拟而非囫囵大设计。
问题是,没方法将此手段引入时序仿真。
这与在FPGA实现中,在保持层次中所取得的发展不再一样。
其基于的理念很容易。
许多设
计创生于若干更小模块,而验证在各个子模块层次举行。
不久前,推出了一种称为KEEP_HIERARCHY的办法。
该计划允许设计在经受实现时也能保持层次。
它在改进时序仿真计划方面前进了一小步,但它有助于解决的实际问题是在调试阶段。
现在,设计不再是一个绽开网络表。
后标注的HDL文件具有不同的层次部分以匹配原初设计。
现在,当在时序仿真中发觉问题时,能简单地多地对故障源举行定位并举行调试除错。
正如上面提到的,这只是该特性全面能力的一个过度。
KEEP_HIERARCHY的下一步是生成“多层次文件(Multiple Hierarchical Files)”的能力。
这一引入到软件工具中的特性能为层次的各部分编写自立的网络表及相应的SDF(标准延时格式)文件。
该特性的引入为与时序仿真一起用法的各种办法放开了大门。
一旦能为层次的各部分编写,则每个时序模块看起来与RTL版本一样。
这就支持能再利用在举行功能模拟时用法的测试基准。
这在时序仿真中是个长足长进。
现在,工程师不再需要仅为举行时序仿真编写一个自立的测试基准。
若已为功能模拟编写了一个测试基准,则几乎不需任何改动就可将其用于时序仿真。
位于顶层的端口名称将总是相同的,这样,测试基准就可被再利用。
此类设计的主要优势之一是它可简单地定位问题所在。
为能充分了解该特性的真切能力,我们将考察一个实际例子。
图1中,子模块A首先由工程团队1生成、子模块B和C由工程团队2生成,另外,IP模块D从第三方买进。
这些模块都在不同时光及/
或由不同工程师生成,且为了验证每个模块的功能精确性,各模块都用其自己的测试基准举行了验证。
一旦胜利对各个自立部分举行了验证,它们就被整合进FPGA以举行实现。
RTL模拟通常就是这样做的。
现在,借助与KEEP_HIERARCHY一起用法MHF(多层级文件)的能力,甚至在举行时序仿真时都可能保持相同策略。
采纳该特性能协助想举行时序仿真的设计师解决他们濒临的两个最大难题:1)各个模块重复用法测试基准的能力;2)定位发生问题的详细
模块的能力。
可有多种途径举行时序仿真。
当采纳MHF时,由于全部这些模块的顶层端口都保持全都,所以可简单地重复用法RTL测试基准。
以组块形态形成的终于网络表的确可用法户为其RTL等价物选取不同
的模块。
这样做,用户将可加快模拟的运行时光。
RTL几乎永久比结构化网络表等快得多,若有种办法在不影响设计功能的前提下可用RTL
替换结构码,则就应尝试这种办法。
几乎没一种设计在实现后就尽善尽美。
这就是为什么需要举行时序仿真的缘由。
采纳上述同一个例子,我们可考察如何改进囫囵设计的速度及可观看性。
为得到最短的运行时光,抱负的状况是在一个模块上一次仅运行时序仿真。
此例中,我们可在子模块A运行时序仿真然后使子模块B、C和D
处在RTL形式。
一旦我们举行时序仿真并发觉一切如预期的一样,就可对任何子模块举行切换并以相同的方式举行测试。
采纳该办法论还意味着,若在一个子模块中发觉了问题,则可简单地定位该问题子模块并将它拿给该模块的设计者举行修改。
若发觉多个子模块存在问题,则该办法带来的额外益处是,两(多)个不同工程团队能同时着手解决发觉的问题。
在传统流程中,当发觉设计的一个部分存在问题时,惟独在该部分的问题被解决后,设计师才可能处理设计的其它部分。
在采纳MHF设计流后将不再受这种限制。
时序仿真用户的另一个主要埋怨是:若其它工程团队不在国内,则完成最后的验证会相当困难且需花很长时光。
这是由于,它将铺张许多时光以及当采纳传统时序仿真办法论时的许多互相关联和依靠问题。
借助MHF办法论,去掉了关联因素。
利用MHF,不同工程团队可省去许多空闲时光。
这将确保发挥团队的最大效率。
具有模块结构的网络表也能为验证小组提供协助。
过去,需要由一位验证工程师完成的工作现可由不同小组的多位验证工程师完成。
开发小组采纳的理念也可同样用于验证小组。
除在模拟领域取得持续发展以外,在施加激励的办法方面也有重要长进。
过去的设计通常十分小,所以以前的设计激励办法是采纳模拟器
提醒(prompt)的施力文件(force file)或容易刺激以切换每个信号。
随着设计变得益发复杂,施加激励也需要更好的办法。
这里,和的能力将实用武之地。
随着HDL编码语言的引入,测试基准变得更复杂和紧凑。
在该领域,浮现了诸如PSL、SystemC和SystemVerilog等技术。
这些语言笼罩的范围不在本文研究之内。
这些编程方式的一个不利方面是它要求将一个模拟的输出作为另一个模拟的输入。
一些模拟器支持允许用户精确举行这种操控的Extended Value Change Dump Format 格式。
不采纳这种办法举行时序仿真的用户碰到的主要障碍是:由于当将一切都绽开后端口名称将转变,所以没方法将输出作为激励。
采纳MHF办法会去掉此问题,由于,现在这里有可施以激励的自立模块,另外,现在一个模块的输出可被用作另一个模块举行RTL以准时序仿真的激励。
挑选层次
取得层次模拟胜利的一个主要部分是选取层次。
没有现成的公式可用于挑选正确的层次。
这就是为什么没有对或错的层次的缘由,虽然在试图选取层次还是有些原则可资借鉴的。
确保满足如下这些原则永久是明智之举。
1)设计应该是彻低同步的。
2)全部关键路径应包括在一个规律组(可被分离同步的设计的一部分)中。
典型状况,每个规律组应是在设计顶层例示(instantiated)的Verilog内的一个模块或VHDL内的一个实体。
3)所有IOB(输入/输出块)规律应在顶层。
器件的任一个输入和输出应在顶层及I/O缓冲器和I/O三态门内举行声明。
但,规律组内例示的I/O规律是可接受的。
4)在每个规律组的输入和/或输出应放置寄存器。
高超的作法是在规律组的边界对全部输入信号或输出信号举行寄存处理。
它确保规律组内的全部关键路径得到保持并免去了当通过规律组边界举行规律优化时可能导致的问题。
在设计中的全部层次组内都应全都遵守该规章。
5)顶层应只包含例示的模块或实体、IOB规律准时钟规律(DCM、BUFG
等)。
6)挑选规律组时,应不使任一组过小以至对其单独举行验证的价值不大或不太关乎大局,还应不使任一组过大以便当发生问题时难以模拟和调试。
但对此没有确切的定律,另外,它可按照设计和验证要求而变。
7)挑选规律组时还应注重使设计中最可能在后续设计流中被改动的部分与设计中更稳定的部分自立开来。
这样,当举行了这种明智挑选后,以后的设计变更对验证时光产生的影响最小。
只要遵循上述提到的规章,保持层次就该不会对设计性能产生影响。
为从保有的层次中得到最大利益,只应将其应用在设计中的其端口在门级模拟中需要可见性的块中。
普通状况,这些块是遵循了上述规章的上层块。
通过对挑选的块限制其保留层次,综合和实现工具将具有更多的自由以优化设计并改进性能。
下图2显示的是在一个范例设计中可在哪里保留层次的例子。
应注重的是这里惟独指导方针。
没有指定如何挑选或保持层次确实定规章。
它确实因设计而异、因用户而不同。
应由用户来打算在哪里保持层次对验证最有价值、以及在哪里应将其解构。
层次验证进入实战
为对在时序仿真中采纳层次办法的可能益处举行量化,我们将检查两个设计:VHDL和Verilog各一个,它们都是以中等规模Xilinx FPGA 为目标器件的,且采纳了500微秒的Model Technology SE模拟器举行模拟。
这些模拟是在带2GB RDRAM存储器的双2.0 GHz Xeon计算机上在环境下运行的。
这是为表现该办法论能显现的量值差别所举行的一个适当的尝试,它并不一定代表典型的模拟运行时光或存储器需求。
VHDL设计在一定程度上代表了典型的以为导向的设计,这里用的是Xilinx的 Virtex-4 SX35 FPGA。
我们挑选将设计分为9个子层和一个顶层,在每个期望子层都放置一个KEEP_HIERARCHY。
在该测试中,我们选取代码最不稳定的部分,也即在设计流的这一部分它频繁转变。
执行一个相对容易的模拟,并比较TRL模拟时光与设计的时序仿真时光,我们发觉它对运行时光和存储器容量要求有显著增强,见下表1。
但,若我们实行仅对设计的转变部分施以时序仿真的办法,我们可相应降低运行时光24倍、减小存储器容量21倍。
即使我们挑选仅采纳转变的部分对囫囵设计举行时序验证,我们看到,与彻低RTL
模拟相比,其所需的运行时光和存储器容量与彻低RTL模拟相比也只需增强约一倍。
与更传统的全时序仿真相比,其对上述两个指标的要求也有大幅降低。
看Verilog设计,它代表了某种更大更复杂数据路径方式的设计,我们以Xilinx Virtex-4 LX80 FPGA为目标器件。
我们将其分为14个子层和一个顶层,采纳KEEP_HIERARCHY约束以支持分段时序仿真。
我们看到,与VHDL运行相比,所需的时光长了些,但对该设计仍取得类似的改进。
仅对转变部分举行的时序仿真与对囫囵设计举行时序仿真相比,运行时光和模拟存储器分离节约了6.3和6.6倍。
仅将设计的转变部分代替以时序仿真网络表然后模拟囫囵RTL设计,运行时光和存储器需求仍分离缩短了3.6倍、减小了 5.5倍。
在两个设计中,被转变模块的笼罩范围彻低相当,且由于更快的运行时光以及需分析的设计更小,设计调试变得更简单。
大概由于需要更大的存储器,模拟器用起来也更觉灵活。
我们注重到,采纳该办法论(扩展了验证设计的可用资源并允许并行运行以进一步降低总体运行时光),可能用一款较低端的计算机(速度更慢、存储器更少)执行该模拟。
本文小结
本文笼罩了利用目前可用的一种技术举行高级验证的办法论。
它并非一种革命性的办法论,而是一种大多数设计师并不彻低了解或彻底掌握的一种办法。
这些技术过去向来用于不同类型的模拟和验证,但可能并没发挥出所有效力。
采纳层次模拟可对需要多长时光及多大努力
才干完成一个设计验证产生巨大影响。
令人欣慰的是,借助本文,在将来的FPGA设计中,在降低模拟对硬件需求的同时有可能实现更快和更高效的时序仿真。