原文链接:what is a testbench
一 测试平台的作用
在开发过程中,开发者通过仿真,利用测试平台验证功能。测试平台作为一个容器,为你的设计提供不同的仿真激励,具体工作如下:
1 产生不同的仿真激励;
2 将激励驱动入设计;
3 运行仿真并产生输出数据;
4 检查输出;
5 找到设计中的bug,并修复;
6 重复上述步骤。
二 测试平台组件
基于verilog的一般性测试组件一般不具备模块化、大型化,不灵活甚至不可重用;因为其与DUT(Design Under Test )是直接相连的,信号也都是直接驱动的,当有变化时,这些连接和信号都需要修改。标准化测试组件如下所示:
1 信号发生器:产生不同的测试用例用以驱动DUT;
2 接口:包含被驱动和检测的信号;
3 驱动器:将发生器产生的信号传送给DUT;
4 得分器:将输出结果与预期结果作比较;
5 环境:验证组件的集合
6 测试:包含环境,并能设置不同的配置参数
网站官方示意图如下所示
三 DUT简介
DUT即待测试的设计,是用verilog或VHDL语言完成的硬件设计。DUT一般要验证后才能在芯片上进行构造,有时又被称为DUV(Design Under Verification)。
四 Interface简介
若设计中包含数以千计的信号,则这些信号将很难连接,维护和重用。为了解决这个问题,我们可以将这些信号放入一个叫接口的容器中,DUT可以通过这个接口驱动,修改时也只需修改这个接口相关的地方。
五 驱动器简介
驱动器通过定义在接口组件中的task改变DUT信号。当驱动器需要控制DUT中的输入信号时,只需调用接口中预定义好的task即可,并不需要知道信号线间的时间关系。信号间的时间关系预定义在接口组件的task中。这是一种层次抽象思维,从而可以使测试平台更灵活,规模更大。当接口组件变化时,新的驱动器可以调用相同的信号,但实际上里面信号关系和行为已经不一样了。
五 驱动器如何驱动信号
信号发生器产生有效的数据事务并将其发送给驱动器。驱动器只是被动地接受信号发生器通过接口组件传入的数据。数据事务以class的形式实现,驱动器的工作主要就是将收到的数据对象转换为DUT可以理解的形式。
六 检测器简介
前面介绍了数据如何被驱动入DUT,但验证的本质目的是检测DUT工作是否正常。DUT对输入数据进行计算并将结果发送至输出引脚。检测器将输出数据打包成数据对象发送至得分器。
七 得分器简介
得分器有一个与DUT相关的模型,可以得到与DUT相同的结果。这个模型反映了想得到的DUT的理想结果。发送给DUT的信号同样会发送给相关模型,所以当DUT有功能错误时,其输出会与相关模型不一致。所以比较DUT和相关模型的输出,能检测出DUT是否正确,检测过程发生在得分器容器中。
八 环境的重要性
环境容器可以使得验证更加灵活以及可扩展更大规模,因为更多的容器可以被集中在一个相同的环境中留作后用。
九 测试简介
测试会初始化环境容器对象并配置测试成自己想要的工作方式。考虑到我们可能会有成千个测试用例,为每个测试用例修改环境容器是不现实的。因此,我们需要环境容器中有一些参数或关键点能够根据不同的测试用例进行调整。