首页 > 其他分享 >Testbench 的编写与应用

Testbench 的编写与应用

时间:2022-12-17 23:31:39浏览次数:43  
标签:语句 10 定义 惯性 应用 Testbench 编写 延迟

1. Testbench的概念

Testbench 是一种用任意语言编写的程序或模块,用于在模拟过程中执行和验证硬件模型的功能正确性。 Verilog 主要用于硬件建模(模拟),该语言包含各种资源,用于格式化,读取,存储,动态分配,比较和写入模拟数据,包括输入激励和输出结果。

2. Testbench的组成组件

Testbench 的主要组件如下:

时间表声明:指定所有延迟的时间单位

Module:它定义了测试文件的top模块,测试文件的top模块通常没有输入输出端口,测试是直接监控寄存器和线网这些内部信号的活动

内部信号:它将驱动激励信号进入 UUT 并监控 UUT 的响应,信号驱动和监控

UUT 实例化

激励生成:编写语句以创建激励和程序块

响应监控和比较:自我测试语句,能报告数值,错误和警告

2-1. Testbench的延迟建模

Verilog 支持两种类型的延迟建模:(i)惯性和(ii)传输。 惯性延迟是门(gate)或电路由于其物理特性而可能经历的延迟。 根据所使用的技术,它可以是 ps 或 ns。 惯性延迟还用于确定输入是否对门或电路有影响。如果输入至少在初始延迟时没有保持变化,则忽略输入变化。 例如,5 ns 的惯性延迟意味着无论何时输入发生变化,它都应保持至少 5 ns 的变化, 以使其被视为已更改,否则将忽略该变化(被视为噪声尖峰)。传输延迟是传输电路导线的信号的飞行时间。 以下是运输和惯性延迟的示例:

```Java
wire #2 a_long_wire; // 运输延迟两单元时间
xor #1 M1(sum, a, b); // 惯性延迟1单元时间
```

2-2. Testbench中的初始语句

初始语句在 testbenchs 中用于生成激励和控制仿真执行。参照下面的一个例子:

initial begin
#100 $finish; // run simulation for 100 units
end

initial begin
#10 a=0; b=0; // a, b zero after 10 units delay. Between 0 and 10,
// it is x
#10 b=1; // At 20, make b=1
#10 a=1; // at 30, make a=1
#10 b=0; // at 40, make b=0
end

​下面是生成称为时钟的周期信号的初始语句用法的另一个示例。它将产生 50%占空比的时钟信号,周期为 20 个单位。

reg clock;
parameter half_cycle = 10;
initial begin
clock = 0;
forever begin
#half_cycle clock = 1;
#half_cycle clock = 0;
end
end

3. 使用Testbench的一个例子

第 1 行定义了`timescale 指令。

第 2 行和第 3 行定义了测试平台模块名称。请注意,通常, testbench 模块的端口列表中不列出端口。

第 5 行将拨动开关定义为 reg 数据类型,因为它将用于提供激励。它连接到被测试(tutorial)的实例化设备。

第 11 行使用实例名称 tut1 和输入/输出端口实例化测试(tutorial)中的设计。

第 13 行到第 22 行定义了计算预期输出的function。

第 24 至 35 行使用 initial 过程描述来定义激励。可以在仿真器控制台窗口中使用 system task $ display 来查看第 31 行和第 33 行生成的消息。

第 29 行通过传递开关参数调用函数 expected_led,并将返回的(计算过的)输出分配给 e_led。 e_led 在第 7 行定义为 reg 类型,因为它在过程语句(初始)中接收函数调用的输出。

第 28 和 29 行还分别定义惯性延迟 50 和 10,以模拟延迟。

4. 开发一个生成特定波形的Testbench

开发一个 testbench,生成如下所示的波形。

实验步骤:

打开Vivado 并创建一个名为 Testbench的空白项目。

创建并添加输出上面显示的波形的 Verilog 模块。

将设计模拟 150 ns 并验证是否生成了正确的输出。

标签:语句,10,定义,惯性,应用,Testbench,编写,延迟
From: https://blog.51cto.com/u_15911090/5950189

相关文章

  • 第十六章《正则表达式》第5节:正则表达式实战应用
    正则表达式在实际开发过程中应用最多的场合就是验证数据格式的正确性,例如用户在一个网站注册时需要填写电子邮件地址、手机号码等信息,这些信息都有特定格式,使用正则表达式就......
  • Gitblit的windows安装(java编写)
    准备工作:1、jdk(大于等于1.8版本)2、GitBlit压缩包;jdk下载地址:https://www.java.com/zh-CN/Gitblit下载地址:http://www.gitblit.com/2、安装java的环境变量此处不在赘述,可......
  • [OpenCV实战]46 在OpenCV下应用图像强度变换实现图像对比度均衡
    本文主要介绍基于图像强度变换算法来实现图像对比度均衡。通过图像对比度均衡能够抑制图像中的无效信息,使图像转换为更符合计算机或人处理分析的形式,以提高图像的视觉价值和......
  • S7-1200作为的IO控制器和智能IO设备的应用
    PLC_1是IO控制器,  PLC_2是智能io设备; 情况1:S7-1200智能设备在相同项目下组态;只需要设置智能IO设备即可;        情况2:S7-1200智能设备在......
  • .NET Core应用如何通过SSL访问MongoDB?
    大家好,我是Edison。最近有一个ASP.NETCore通过SSL证书访问MongoDB的需求,但是在网上发现资料很少,于是调查了一番,做了如下的笔记,希望对你有用。背景在实际场景中,开发环境......
  • Python学习笔记--循环的知识以及应用
    while循环代码:结果:案例:求1-100的和实现:案例:while循环猜数字实现:while循环的嵌套使用案例:打印九九乘法表(注意:要是想要输出不换行,代码可以这样写:print("hello......
  • 前端知识学习案例4-开发企业网站4-编写html结构代码2
    ......
  • 功能测试用例的编写思路及流程
    功能测试用例的编写需要按照一定的思路进行,而不是想到哪写到哪,一般测试机制成熟的公司都会有公司自己自定义的测试用例模板,以及一整套的测试流程关注点,测试人员在测试......
  • Java千问:Java位运算经典应用(四)
    接上篇七、判断某数是不是2的N次幂我们知道,10的0次幂是1,1次幂是10,2次幂是100...仔细观察一下这些数,你就会发现一个规律,那就是:这些数字当中,开头是1,后面N位上的数字全部是0......
  • auto类型推断的同等应用
    根据我的观察,应该就是decltype去掉const和引用的结果。和模板参数的自动推断比较相似,因为以前模板参数是不能省略的,auto和自动推断应该是同时更新的吧和传参过程中的参数......