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

Testbench 的编写与应用

时间:2022-11-23 21:40:25浏览次数:108  
标签:10 begin 20 定义 应用 Testbench 编写 延迟

1. Testbench的概念

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

2. Testbench的组成组件

Testbench 的主要组件如下:

  1. 时间表声明:指定所有延迟的时间单位
  2. Module:它定义了测试文件的top模块,测试文件的top模块通常没有输入输出端口,测试是直接监控寄存器和线网这些内部信号的活动
  3. 内部信号:它将驱动激励信号进入 UUT 并监控 UUT 的响应,信号驱动和监控
  4. UUT 实例化
  5. 激励生成:编写语句以创建激励和程序块
  6. 响应监控和比较:自我测试语句,能报告数值,错误和警告

2-1. Testbench的延迟建模

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

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的一个例子

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,生成如下所示的波形。

Testbench 的编写与应用_实例化_02

实验步骤:

  1. 打开Vivado 并创建一个名为 Testbench的空白项目。
    创建并添加输出上面显示的波形的 Verilog 模块。
    将设计模拟 150 ns 并验证是否生成了正确的输出。

参考代码:

module Testbench();
reg A,G1,G2;
initial begin
A = 0;
G1 = 0;
G2 = 1;
#40 A = 1;
#20 G1 = 1;
#20 G2 = 0;
#20 A = 0;
#20 G1 = 0;
#20 G2 = 1;
end
endmodule

标签:10,begin,20,定义,应用,Testbench,编写,延迟
From: https://blog.51cto.com/u_15641375/5881747

相关文章

  • 部署于K8S集群上面应用性能影响点推测
    前言本人2017年第一次接触K8S.中间断断续续学习K8S相关的内容.但是最近一年,几乎没太有学习.因为之前学习了四五年,一直以为产品马上要用结果一直被浇冷水.去年开......
  • Springboot应用中过滤器chain.doFilter后设置header无效
    本文是在使用过滤器添加动态header过程中遇到设置header无效,经过研究源码而产生。因为特殊需求,自定义的header必须在经过Controller处理之后,才能确定,所以不能在请求处理......
  • SAP-SD-ABAP-VMOD 查找和应用SD模块用户出口(user exit) 好方法
    针对SD模块,有一个专门管理user-exit的开发包 VMOD,只要用tcode:se80查看它,会发现绝大部分的SD要相关的user-exit都能在这找到。......
  • Python:企业微信批量发工资条工具 -应用消息发送模块
    16年python练手,开发了采用企业微信批量发工资条的程序,其中对企业微信发消息的功能做了包装。在此记录和分享一下。整体程序,使用了wxPythonGUI,以excel来存放数据和消息......
  • mongoDB的应用场景以及Spring和mongodb的整合
    mongoDB的应用场景​ mongodb是非关系型数据库,他的存储数据可以超过上亿条(老版本的mongodb有丢数据的情况,新版本不会有,网上说的),mongodb适合存储一些量大表关系较简单的数......
  • 算法基础:区间合并算法及模板应用
    区间合并⭐写在前面的话:本系列文章旨在复习算法刷题中常用的基础算法与数据结构,配以详细的图例解释,总结相应的代码模板,同时结合例题以达到最佳的学习效果。本专栏面向算法零......
  • SAP 应用集成技术
    下面列出了外部系统与公司SAP系统交互的几种可行方式:1. 使用COM方式通过调用sapgui交互2. 直连sap的物理数据库系统3. 使用sapconnector......
  • 浅析电力物联网在建筑电气节能中的应用
    罗轩志安科瑞电气股份有限公司上海嘉定201801摘要:随着电力体制改革的不断深化,电力用户借助分布式发电、储能系统和电动汽车等新兴技术已经具备了参与电力交易的能力,但传统......
  • 浅谈电能管理系统在火力发电厂中的应用
    罗轩志安科瑞电气股份有限公司 上海嘉定 201801 摘要:为管控火力发电厂自用电能,降低企业运行成本,通过电能采集技术、信息技术与节能分析理论的融合,进行火电厂电能精细化......
  • 浅谈智能照明控制系统在民用照明节能中的应用
    罗轩志安科瑞电气股份有限公司,上海嘉定201801 摘要 :通过智能照明控制系统在某宾馆电气工程中的应用实例,从照明控制的系统结构、设计及系统软件等方面,介绍了智能照明控制......