我在网上查看过,讨论/示例似乎是针对传统软件开发的。由于 Verilog 和 VHDL(用于芯片设计,例如FPGA 和 ASIC)与软件开发 C 和 C++ 类似,这似乎很有意义。然而,它们有一些差异,本质上是并行的,并且需要硬件进行全面测试。

你有过哪些经历,无论是好的还是坏的?您可以建议有关此特定应用程序的任何链接吗?

编辑/澄清:2009 年 10 月 28 日:我特别想问关于 TDD 的问题。我熟悉测试台,包括自检台。我还知道 SystemVerilog 有一些针对测试平台的特殊功能。

2009 年 10 月 28 日:隐含的问题包括 1) 为任何功能编写测试,切勿使用波形进行仿真;2) 首先编写测试/测试平台。

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

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

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

有帮助吗?

解决方案

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

鉴于在真实硬件中执行适当测试的困难(刺激角落情况特别困难)以及VHDL编译需要几秒钟(相对于“硬件”编译需要花费很多分钟(甚至数小时)的事实) ),我不知道任何人都可以以任何其他方式操作!

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

其他提示

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

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

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

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

缺点是调试编译错误更加困难,因为库中存在许多具有相同名称的函数/过程变体。此外,通过预处理代码在场景后面完成了一些操作,这意味着某些错误可能会出现在意外的地方。

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

与传统硬件设计语言 (Verilog) 相比,显着优势包括:

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

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

除了IEEE标准外http://www.vmmcentral.com)。它为创建测试环境提供了合理的框架。

您也可以通过搜索怪异协会论坛对该主题进行更多研究。

SystemVerilog不是唯一的HVL,VMM也不是唯一的库。但是,我会推荐两者, 如果 您可以访问适当的工具。我发现这是寻找设计的有效方法 错误 变成硅。

我对硬件/芯片设计了解不多,但我深深研究TDD,所以我至少可以和你讨论这个过程的适用性。

我称之为最相关的问题是:您的测试能在多长时间内为您提供设计反馈?与此相关:您可以多快添加新测试?您的工具如何支持您的设计的重构(改变结构而不改变行为)?

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

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

Philippe Faes,Sigasi

ANVIL - 另一个Verilog Interaction Layer讨论了这个问题。我没试过。

我从未在RTL设计上积极尝试过TDD,但我对此有所了解。

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

然而,我不会完全依赖断言,这可能变得非常毛茸茸。

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

什么是TDD?你的意思是说你的所有代码都是自动测试的,或者你是否进一步意味着在代码之前编写测试,除非测试失败,否则不会编写新的代码?

无论您喜欢哪种方法,HDL代码测试与软件测试没有太大区别。它有其优点(更好的覆盖范围和测试深度)和缺点(相对于软件而言难以设置和繁琐)。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top