ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

testbench的编写与应用

2022-07-15 11:04:28  阅读:191  来源: 互联网

标签:begin led 信号 应用 testbench expected 编写 swt 延迟


  • 1.概念

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

  • 2.组成组件

①.时间表声明:指定所有延迟的时间单位。(这个怎么理解)`timescale<时间单位>/<时间精度>

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

③.内部信号:它将驱动激励信号进入UUT监控UUT的响应,起信号驱动和监控的作用。需要输入的信号定义为reg类型,需要输出的信号定义为wire类型

④.UUT实例化

⑤.激励生成:编写语句以创建激励和程序块,包括时钟信号、复位信号和数据激励。

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

  • 2.1. Testbench的延迟建模

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

wire #2 a_long_wire;//运输延迟两单元时间

xor #1 M1(sum,a,b);//惯性延迟1单元时间      

  • 2.2. Testbench中的初始语句

初始语句在testbench中用于生成激励控制仿真执行

initial begin
    #100 $finish;
end

initial begin
    #10 a=0;b=0;
    
    #10 b=1;
    #10 a=1;
    #10 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的一个例子

 

`timescale 1ns/1ps
module tutorial_tb();
    reg[7:0] switches;
    wire[7:0] leds;
    reg[7:0] e_leds;
    
    integer i;
    
    tutorial tutl(
        .led(leds),
        .swt(switches)
    );
    function [7:0] expected_led;
        input [7:0] swt;
    begin
        expected_led[0] = ~swt[0];
        expected_led[1] = swt[1] & ~swt[2];
        expected_led[3] = swt[2] & swt[3];
        expected_led[2] = expected_led[1] | expected_led[3];
        expected_led[7:4] = swt[7:4];
    end
    endfunction
    
    initial
    begin
        for(i=0;i<255;i=i+2)
        begin
            #50 switches = i;
            #10 e_led = expected_led(switches);
            if(leds == e_led)
                $display("LED output matched at ",$time);
            else
                $display("LED output mis-matched at ",$time,": ecpected: %b, actual: %b",e_led, leds);
        end
    end
endmodule

 

标签:begin,led,信号,应用,testbench,expected,编写,swt,延迟
来源: https://www.cnblogs.com/ICeryh/p/16480527.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有