31

我在网上看过,讨论/示例似乎是针对传统软件开发的。由于 Verilog 和 VHDL(用于芯片设计,例如 FPGA 和 ASIC)与软件开发 C 和 C++ 相似,因此看起来是有道理的。但是,它们有一些差异,它们基本上是并行的,并且需要硬件来进行全面测试。

你有过哪些好的和坏的经历?您可以在此特定应用程序上建议任何链接吗?

编辑/澄清:2009 年 10 月 28 日:我特别询问 TDD。我熟悉做测试台,包括自检台。我也知道 SystemVerilog 有一些用于测试台的特殊功能。

2009 年 10 月 28 日:暗示的问题包括 1) 为任何功能编写测试,从不使用波形进行模拟和 2) 首先编写测试/测试平台。

2009 年 11 月 29 日:实证研究表明,测试驱动开发提高了他们报告的(软件)TDD 质量“四种产品的预发布缺陷密度(以每千行代码的缺陷数衡量)下降了 40% 到 90%相对于不使用 TDD 的项目。团队管理层主观地报告说,使用 TDD 的团队的初始开发时间增加了 15-35%,尽管团队同意这可以通过降低维护成本来抵消。减少的错误降低了流片的风险,但代价是适度的进度影响。 也有一些数据。

2009 年 11 月 29 日:我主要做控制和数据路径代码,而不是 DSP 代码。对于 DSP,典型的解决方案包括 Matlab 位精确仿真。

2010 年 3 月 2 日:TDD 的优点是您可以确保测试首先失败。我想这也可以通过断言来完成。

4

8 回答 8

29

我为 FPGA 而不是 ASICS 编写代码……但 TDD 仍然是我的首选方法。我喜欢对我编写的所有功能代码进行一整套测试,并且我尝试(并不总是成功)首先编写测试代码。在调试时总是会盯着波形看,但这不是验证代码的好方法(恕我直言)。

鉴于在真实硬件中执行正确测试的难度(刺激极端情况特别困难)以及 VHDL 编译需要几秒钟的事实(相对于需要几分钟(甚至几小时)的“硬件”编译),我不'看不到任何人可以以任何其他方式操作!

在编写 RTL 时,我还在 RTL 中构建断言,以捕获我知道不应该发生的事情。显然,这被视为有点“奇怪”,因为人们认为验证工程师编写断言而 RTL 设计人员不编写。但大多数情况下,我是我自己的验证工程师,所以也许这就是原因!

于 2009-10-30T12:59:46.963 回答
13

我使用VUnit进行带有 VHDL 的测试驱动开发。

VUnit 是一个 Python 库,它调用 VHDL 编译器和模拟器并读取模拟结果。它还提供了几个很好的 VHDL 库,可以更轻松地编写更好的测试平台,例如通信库日志库检查库

因为它是从 Python 调用的,所以有很多可能性。既可以生成测试数据,也可以在 Python 中检查测试的输出数据。前几天我看到了这个例子,他们使用Octave(一个 Matlab 副本)来绘制测试结果

VUnit 似乎非常活跃,我有好几次能够直接向开发人员提出问题并很快得到帮助。

缺点是调试编译错误更加困难,因为库中有很多同名的函数/过程变体。此外,一些事情是通过预处理代码在后台完成的,这意味着一些错误可能会出现在意想不到的地方。

于 2018-03-11T20:16:09.747 回答
4

SystemVerilog 对 IEEE Verilog 标准的扩展包括各种结构,这些结构有助于创建用于验证复杂数字逻辑设计的全面测试套件。SystemVerilog 是一种硬件验证语言 (HVL),用于通过仿真验证 ASIC 芯片设计(与仿真或使用 FPGA 不同)。

与传统硬件设计语言 (Verilog) 相比的显着优势是:

  • 约束随机化
  • 断言
  • 自动收集功能和断言覆盖数据

关键是能够访问支持这一最新(2005 年)标准的仿真软件。并非所有模拟器都完全支持更高级的功能。

除了 IEEE 标准之外,VMM Central ( http://www.vmmcentral.com ) 还提供了一个开源 SystemVerilog 验证组件库。它为创建测试环境提供了一个合理的框架。

SystemVerilog 不是唯一的 HVL,VMM 也不是唯一的库。但是,如果您可以使用适当的工具,我会推荐两者。我发现这是一种在成为硅之前发现设计错误的有效方法。

于 2009-10-28T01:47:02.900 回答
4

我对硬件/芯片设计了解不多,但我对TDD很感兴趣,所以我至少可以和你讨论一下这个过程的适用性。

我认为最相关的问题是:你的测试能多快给你关于设计的反馈?与此相关:添加新测试的速度有多快?你的工具在多大程度上支持你的设计重构(改变结构而不改变行为)?

TDD 过程在很大程度上取决于软件的“软性”——良好的自动化单元测试在几秒钟内运行(外部几分钟),并指导集中构建和重构的短时间爆发。您的工具是否支持这种工作流程——在编写和运行测试之间快速循环并在短迭代中构建被测系统?

于 2009-11-03T20:34:59.213 回答
2

关于硬件语言的重构工具,我想向您指出我们的工具Sigasi HDT。Sigasi 提供了一个带有内置 VHDL 分析器和 VHDL 重构的 IDE。

菲利普·费斯,西加西

于 2009-11-11T09:52:23.067 回答
2

ANVIL – 另一个 Verilog 交互层讨论了这一点。我没试过。

于 2009-11-11T16:36:44.793 回答
1

我从来没有在 RTL 设计上积极尝试过 TDD,但我对此有自己的想法。

我认为有趣的是尝试与断言相关的这种方法。您基本上首先以断言的形式写下您对模块的假设/期望,编写您的 RTL,然后您可以使用正式工具和/或模拟来验证这些断言。与“正常”测试用例(您可能需要编写定向测试用例)相比,您应该有更好的覆盖率,并且断言/假设也可能在以后使用(例如在系统级别)。

但是我不会完全依赖断言,这可能会变得非常棘手。

也许你也可以表达你的想法,因为你要求它我猜你脑子里有一些想法?

于 2009-10-28T15:54:36.390 回答
1

什么是 TDD?您的意思是让您的所有代码始终通过自动测试来执行,还是进一步说测试是在代码之前编写的,除非测试失败,否则不会编写新代码?

无论您喜欢哪种方法,HDL 代码测试与软件测试没有太大区别。它有其优点(更好的覆盖率和测试深度)和缺点(设置困难并且相对于软件而言比较麻烦)。

我在使用 Python 和通用 HDL 事务器为可综合的 HDL 模块实现全面和自动测试方面拥有非常好的经验。这个想法有点类似于Janick Bergeron在他的书中提出的想法,但不是 SystemVerilog,Python 用于 (1) 从用 Python 编写的测试场景生成 VHDL 代码,以及 (2) 验证由接受波形的监控交易者编写的结果从仿真过程中的设计。

关于这种技术还有很多要写的,但我不确定你想关注什么。

于 2009-11-10T18:38:30.307 回答