这里讨论了FPGA的测试策略的各个方面,但是我发现以下问题没有被提出/讨论/回答:
您应该在什么级别模拟FPGA设计,以及在每个级别验证什么?
如果您使用x级测试等概念回答,其中x =块,子系统,函数或其他内容,请描述x适合您的内容.像典型的大小,复杂性或一个例子.
9月14日
当涉及到实际问题时,两个给出的答案都是相同的,但我会接受来自@kraigher的答案,因为它是最短的答案.
9月10日
这是@Paebbles和@kraigher的两个答案的总结和比较.其中一个答案很长,所以希望这将有助于任何想要为自己的答案做出贡献的人.请记住,这是一个有利可图的赏金!
他们在实验室中进行了多少测试,但这似乎主要与项目的具体情况有关(有多少事情无法通过模拟进行有效测试).我碰巧知道@kraigher的最后一个项目,所以我可以说这两个项目都属于1年以上的类别.从一个规模较小的人那里听到一个故事会很有趣.从我所看到的所有项目来看,在模拟中的功能覆盖方面都是完整的,因此必须有其他故事.
9月7日
这是@peabbles的一些后续问题太长,无法在评论中使用.
是的@peabbles,你已经提供了很多我正在寻找的内容,但我还有其他问题.我担心这可能是一个冗长的讨论,但考虑到我们花在验证上的时间以及人们应用的各种策略,我认为它值得关注.希望我们会有更多的答案,以便可以比较各种方法.你的赏金肯定会有所帮助.
我认为你的故事包含许多有趣且有趣的解决方案,但我是工程师,所以我会专注于我认为可以挑战的作品;-)
您花了很多时间在硬件上进行测试,以解决您遇到的所有外部问题.从实际的角度来看(因为他们不会修复他们的SATA标准违规),这就像有一个有缺陷的需求规范,这样你就可以开发一个解决错误问题的设计.这通常是在您"交付"时发现的,这会激发您为什么要经常交付并尽早发现问题.我对一件事感到好奇.当您在实验室中发现需要进行设计更改的错误时,您是否会在可以测试的最低级别更新测试平台?不这样做会增加错误在实验室中重新出现的风险,并且随着时间的推移它也会降低测试平台的功能覆盖率,使您更加依赖于实验室测试.
你说大多数测试是在实验室完成的,这是由你必须调试的外部问题造成的.如果你只看你自己的内部代码和错误,你的答案是否相同?
当您像往常一样工作很长的周转时间时,您会找到各种方法来利用这段时间.您描述了在第一次测试时开始合成下一个设计,并且如果您在一个驱动器中发现了一个错误,那么您开始为该驱动器合成修复,同时继续使用当前设计测试其他驱动器.您还在实验室中进行了测试时描述了可观察性问题.我将对此做一些持怀疑态度的解释,你必须提供积极的解释!
如果您在开始测试第一个设计时可以立即合成下一个设计,那么您似乎正在以非常小的增量进行工作,但仍然努力在每个级别运行每个测试一直到硬件.这似乎有点过分/昂贵,特别是当您没有完全自动化硬件测试时.另一个持怀疑态度的解释是,你正在寻找一个错误,但由于可观察性差,你正在制作随机试验和错误类型的构建,希望它们能够提供你试图孤立的问题的线索.这是否真正有效地利用了时间,因为每一个构建都增加了价值,还是更"做某事比做什么更好"?
在设计更高的协议层时,您是否考虑将更高层次的通信堆栈短路以加速仿真?毕竟,已经测试了下层.
您重用了一些组件并假设它们没有bug.那是因为他们配有测试平台,证明了这一点吗?使用证明往往很弱,因为重用通常发生在另一个环境中.Arianne 5火箭就是一个很好的例子,你可以再次将XAPP 870用于Virtex 5.
由于您可以在不同级别进行模拟,因此我认为您可以在较低级别使用较快的运行时间,并且可以在较大的结构完成之前验证设计的一部分时使用较短的反馈循环.仍然有一些代码片段足够重要,可以授予他们自己的组件,但仍然太简单,无法获得自己的测试平台.你能给出这样一个组件的例子吗?他们真的没有bug吗?我个人在犯错误之前没有写过很多代码行,所以如果我有一个很好的代码片段就像一个组件,我会抓住机会在上面提到的原因进行测试.