testing - 在不同级别上测试FPGA设计

标签 testing vhdl verilog fpga

在SO上已经讨论了FPGA测试策略的各个方面,但我找不到/讨论/回答过以下问题:

您应在什么级别上模拟FPGA设计,并在每个级别上进行验证?

如果您使用诸如x级别测试(其中x =块,子系统,功能或其他东西)的概念来回答,请描述x适合您的情况。诸如典型的大小,复杂性或示例之类的东西。



九月14

对于实际问题,两个给出的答案都是相同的,但是我会接受@kraigher的回答,因为这是最短的答案。



九月10

这是来自@Paebbles和@kraigher的两个答案的总结和比较。答案之一很长,因此希望这对希望自己做出贡献的人有所帮助。请记住,有一笔悬赏的机会!


它们都模拟所有级别的所有组件。至少@Paebbles会排除功能内容很少的组件(例如MUX)的例外。
他们俩都致力于测试自动化
他们俩都开发了“工具”来简化板级测试
他们都避免在一个级别上测试已经在以下级别上测试过的东西
最大的区别似乎在于模拟测试台的频率。 @Paebbles直接在硬件中进行测试,除非进行重大设计更改,否则在这种情况下也将运行模拟。随着设计的发展,@ kraigher会更连续地运行仿真。我认为这也是一个非常重要的问题,我个人更喜欢@kraigher的表达方式。但是,这不是原始问题的一部分,因此我认为两个答案之间已达成共识。之前也曾在SO上讨论过关于应该多长时间运行一次测试的问题,例如how often should the entire suite of a system's unit tests be run?


他们进行的实验室内测试数量有所不同,但似乎主要与项目的特定情况有关(有多少东西无法通过模拟有效地测试)。我碰巧对@kraigher的上一个项目有所了解,所以我可以说两个项目都属于1年以上类别。听到一个项目较小的人的故事会很有趣。从我所看到的情况来看,所有项目在模拟功能覆盖方面都是完整的,因此肯定还有其他故事。



九月7

这是@peabbles的许多后续问题,时间太长,无法放入评论中。

是的@peabbles,您已经提供了我一直在寻找的很多东西,但是我还有其他问题。恐怕这可能是一个冗长的讨论,但是鉴于我们花在验证上的时间以及人们采用的各种策略,我认为这值得引起关注。希望我们会有更多答案,以便可以比较各种方法。您的赏金肯定会有所帮助。

我认为您的故事包含许多不错且有趣的解决方案,但我是一名工程师,所以我将重点介绍我认为可能会遇到挑战的部分;-)

您已经在硬件上花费了大量时间进行测试,以解决您遇到的所有外部问题。从实际的角度来看(因为他们不会修复违反SATA标准的行为),这就像是有缺陷的需求规范,因此您需要开发解决错误问题的设计。这通常是在您“交付”时发现的,这激发了您为什么应该频繁交付并尽早发现问题的原因。我对一件事情很好奇。当您在实验室中发现需要设计更改的错误时,您是否会在可以测试的最低级别更新测试平台?不这样做会增加错误再次出现在实验室中的风险,并且随着时间的流逝,它还会降低测试平台的功能覆盖范围,从而使您更加依赖实验室测试。

您说大多数测试是在实验室中完成的,这是由您必须调试的大量外部问题引起的。如果仅查看自己的内部代码和错误,您的答案是否相同?

当您要处理较长的周转时间时,您会发现各种利用时间的方法。您描述了您在测试第​​一个设计时就开始合成下一个设计,如果在一个驱动器中发现错误,则开始为该设计合成一个修复程序,同时继续使用当前设计测试其他驱动器。您还描述了在实验室中进行测试时的可观察性问题。我将对此做一些怀疑的解释,您必须提供积极的解释!

如果您可以在开始测试第一个设计时立即合成下一个设计,那么您似乎在以很小的增量进行工作,但是仍然努力在硬件的各个级别上进行每个测试。这似乎有些矫kill过正/昂贵,尤其是在硬件测试不完全自动化的情况下。另一个怀疑的解释是,您正在寻找错误,但是由于可观察性差,您正在生成随机尝试和错误类型的构建,希望它们会为您要解决的问题提供线索。这是真的真正有效地利用了时间,是否在每个构建过程中都增加了价值?还是“做某事总比什么都不做好”?

在设计较高的协议层时,您是否考虑过将较高级别的通信堆栈短路以加快仿真速度?毕竟,较低的层已经过测试。

您重用了某些组件,并假定它们没有错误。那是因为它们带有测试平台来证明吗?由于复用经常发生在另一种情况下,因此经过实践证明的使用往往很弱。 Arianne 5火箭就是一个很好的例子,将XAPP 870重用于Virtex 5的另一个例子。

由于您具有不同级别的仿真,因此我认为在较大的结构完成之前可以验证设计的一部分时,您会优先考虑较低级别的较快运行时间和较短的反馈回路。仍然有一些重要的代码片段足以授予他们自己的组件,但仍然太简单而无法授予他们自己的测试平台。您能举一个这样的组件的例子吗?他们真的没有错误吗?就我个人而言,我在犯错之前不会写很多行代码,因此,如果我有像组件这样的打包得很好的代码段,出于上述原因,我将有机会在该级别进行测试。

最佳答案

我在各个级别上进行行为模拟。也就是说,所有实体都应该有一个相应的测试平台,以实现全部功能覆盖。如果实体A,B和C的特定详细信息已经在其相应的测试台中进行了隔离测试,则不必在实体D的测试台中进行测试,因为实体D实例化了A,B和C,应着重于证明集成。

我还进行了设备或板级测试,在实际的设备或板上验证了实际设计。这是因为当模型开始变得不精确并且需要很长时间时,您不能信任设备级仿真。在实际的设备中,可以实现数小时而不是毫秒的测试。

我尝试避免执行任何合成后仿真,除非在设备级测试中发生故障,在这种情况下,我会执行该操作以在合成工具中查找错误。在这种情况下,我可以对合成后的网表做一个小的包装,然后重新使用行为模拟中的测试平台。

我非常努力地避免任何形式的手动测试,而是依靠测试自动化框架来进行仿真和设备级测试,以便可以连续执行测试。

为了自动化模拟,我使用了VUnit测试自动化框架,@ lasplund和我本人是其中的作者。

关于testing - 在不同级别上测试FPGA设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32381619/

相关文章:

python - 搜索未测试的函数

vhdl - 与0或1比较,检测高阻抗

verilog - 检查所有设置/未设置的位

recursion - Verilog中可以递归实例化吗?

python - 是否可以使用 unit2 运行 doctests

visual-studio-2008 - 在 VS 项目中包含非代码

arrays - 在 VHDL 中创建其元素宽度递增的通用数组

将 C 字符串转换为二进制值数组,然后逐位传输数组

function - Verilog 函数 - 无法找出我的错误

python - 有没有办法对用 Python 编写的 Gtk/GLib 代码进行单元测试?