FPGA设计的验证技术及应用原则
时间:09-25
来源:互联网
点击:
改进时序仿真体验
当描述时序仿真时,“总体大于部分的总合”这样一句常语几乎可被反过来说成:“部分的总合大于总体。”后一句话总结了本节所要阐释的内容。为缩短时序仿真所用的时间,我们将不得不依靠“分割后各个击破”的方法。对一个大的展开网络表来说,完成任何形式的验证都将是件费时和枯燥的任务。因此,采取的措施是将网络表分割为多个小部分。
该方法论并非是数字逻辑领域的一场革命,它是一种渐进的沿革。自从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)或简单刺激以切换每个信号。随着设计变得益发复杂,施加激励也需要更好的方法。这里,VHDL和Verilog 的能力将有用武之地。随着HDL编码语言的引入,测试基准变得更复杂和紧凑。
在该领域,出现了诸如PSL、SystemC和SystemVerilog等技术。这些语言覆盖的范围不在本文讨论之内。这些编程方式的一个不利方面是它要求将一个模拟的输出作为另一个模拟的输入。一些模拟器支持允许用户准确进行这种操控的Extended Value Change Dump Format 格式。不采用这种方法进行时序仿真的用户遇到的主要障碍是:因为当将一切都展开后端口名称将改变,所以没办法将输出作为激励。采用MHF方法会去掉此问题,因为,现在这里有可施以激励的独立模块,另外,现在一个模块的输出可被用作另一个模块进行RTL以及时序仿真的激励。
当描述时序仿真时,“总体大于部分的总合”这样一句常语几乎可被反过来说成:“部分的总合大于总体。”后一句话总结了本节所要阐释的内容。为缩短时序仿真所用的时间,我们将不得不依靠“分割后各个击破”的方法。对一个大的展开网络表来说,完成任何形式的验证都将是件费时和枯燥的任务。因此,采取的措施是将网络表分割为多个小部分。
该方法论并非是数字逻辑领域的一场革命,它是一种渐进的沿革。自从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)或简单刺激以切换每个信号。随着设计变得益发复杂,施加激励也需要更好的方法。这里,VHDL和Verilog 的能力将有用武之地。随着HDL编码语言的引入,测试基准变得更复杂和紧凑。
在该领域,出现了诸如PSL、SystemC和SystemVerilog等技术。这些语言覆盖的范围不在本文讨论之内。这些编程方式的一个不利方面是它要求将一个模拟的输出作为另一个模拟的输入。一些模拟器支持允许用户准确进行这种操控的Extended Value Change Dump Format 格式。不采用这种方法进行时序仿真的用户遇到的主要障碍是:因为当将一切都展开后端口名称将改变,所以没办法将输出作为激励。采用MHF方法会去掉此问题,因为,现在这里有可施以激励的独立模块,另外,现在一个模块的输出可被用作另一个模块进行RTL以及时序仿真的激励。
FPGA 仿真 Xilinx VHDL Verilog ModelSim Linux DSP 相关文章:
- 基于FPGA的片上系统的无线保密通信终端(02-16)
- 基于Virtex-5 FPGA设计Gbps无线通信基站(05-12)
- 基于FPGA的DVI/HDMI接口实现(05-13)
- 基于ARM的嵌入式系统中从串配置FPGA的实现(06-09)
- 采用EEPROM对大容量FPGA芯片数据实现串行加载(03-18)
- 赛灵思:可编程逻辑不仅已是大势所趋,而且势不可挡(07-24)
