TestBench的功能和编码原则

15 篇文章 2 订阅
14 篇文章 1 订阅

一.Test Bench 主要功能:
简单来说就是:
a.通过Verilog程序的行为描述,为待测信号提供激励信号
b.设置理想结果。
c.将输出结果与理想结果比较,判断内部功能结构是否正确。

Test Bench 编码原则(全加器为例子)
全加器Verilog实现代码:

`timescale 1ns / 1ps
module add_4b(
    input clk,
    input rst,
    input  [3:0] a,
    input  [3:0] b,
    input cin,
    output reg [3:0] sum,
    output reg cout
    );

    always@ (posedge clk or negedge rst )
    begin 
    if(!rst)
     sum <= 4'b0;
    else 
    begin
    {cout,sum} <= a+b+cin; 
  end
  end
endmodule

TestBench代码:

`timescale 1ns / 1ps
module add_4b_tb();
reg clk,rst;
reg [3:0] a;
reg [3:0] b;
reg cin;
wire [3:0] sum;
wire cout;
integer case_num;

add_4b add_4b_01(
.clk (clk),
.a (a),
.b (b),
.cin (cin),
.sum (sum),
.cout (cout)
);
always begin
 #5 clk = ~clk;
 end
 initial begin 
 clk=1'b0;
 
 case_num = 1;
 rst = 1;
 a = 4'b1010;
 b = 4'b0001;
 cin = 1'b0;
 #20;
 if (sum == 4'b1011 && cout == 1'b0)
  $display ("[simulation INFO] %2d pass.", case_num);
  else 
  $display("[simulation ERROR] %2d fall.",case_num);
  #200;//测试一,验证无进位输出。
  
  case_num = 2;
  a=4'b1000;
  b=4'b1110;
  cin = 1'b1;
  #20
  if (sum ==4'd7&&cout == 1'b1)
  $display ("[simulation INFO] %2d pass.",case_num);
  else
  $display("[simulation ERROR] %2d fall",case_num);
  #200;//测试二,验证进位输出
  $finish;
  end

endmodule

结果:在这里插入图片描述
结果说明:无进位输出结果,有进位输出结果。与预想中的一样。测试成功。

Tb编码规则:
1.仿真时间标度语句 必须存在

`timescale 1ns / 1ps

仿真中产生50占空比%方波 #5 clk = ~clk;
时间延时 #200;#20;
都是基于这个时间标度进行的。

2.整个程序仍在“module_endmodule”中,不必写出端口描述。
直接module add_4b_tb(); 即可。
3.为 输入信号 定义的 激励 必须用reg
4.为 输出信号 定义的 激励 必须用wire

然后就是验证思路的设计了。
比如验证4位全加器, (无进位) 就设置 a=1010 b=0001;
比较理想输出1011 = 实际输出 即可。
(有进位) 同上

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值