测试驱动开发(TDD)的经验,用于Verilog或VHDL中的逻辑(芯片)设计

Bri*_*ton 31 simulation tdd verilog fpga vhdl

我在网上看过,讨论/例子似乎是传统的软件开发.由于Verilog和VHDL(用于芯片设计,例如FPGA和ASIC)类似于软件开发C和C++,因此它似乎是有意义的.但是,它们之间存在一些差异,这些差异基本上是并行的,需要硬件才能进

你有什么经历,无论好坏?您可以在此特定应用程序上建议的任何链接?

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

10/28/09:隐含的问题包括:1)为任何功能编写测试,从不使用波形进行模拟,2)首先编写测试/测试平台.

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

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

03/02/10:TDD的优势在于确保测试首先失败.我想这也可以用断言来完成.

Mar*_*son 28

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

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

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

  • 嗨丹尼尔,我担心我没有什么可以推荐你的例子(也许我应该写点东西:).有问题的模块用于图像处理系统(如果你想要http://www.conekt.net/fpgas-for-ldw.html,你可以在这里阅读更多关于系统的内容).我倾向于在微小(通常是手绘)图像上构建小型测试台,我可以手动计算"正确的答案".然后我有一个算法的Matlab仿真(用于alg.开发),它为HDL sim生成测试的答案 - 我迭代直到我得到位精确的结果. (3认同)

Era*_*aes 9

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

VUnit是一个Python库,它调用VHDL编译器和模拟器并读取模拟结果.它还提供了几个不错的VHDL库,使编写更好的测试平台变得更加容易,例如通信库,日志库检查库.

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

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

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

  • 最好有一些最新的答案,因为这个问题是VHDL标签下最受欢迎的问题之一. (5认同)

bra*_*ntz 5

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

我认为最相关的问题是:您的测试能够多快为您提供设计反馈?与此相关:您添加新测试的速度有多快?您的工具对设计重构(改变结构而不改变行为)的支持程度如何?

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