verilog仿真文件TestBench编写

verilog仿真文件TestBench编写

笔者最近在准备Verilog的期末考,复习的同时,总结了一套testbench的编写风格。

一、首先准备好需要被测模块的Verilog代码

以计数器为例:

module counter_6(
        input clk,
        input rst_n,
        output reg [2:0] CNT
        );
        parameter MAX=3'b101;
        
        always @(posedge clk or negedge rst_n)
        begin
            if(!rst_n)
            begin
                CNT<=3'b000;
        end
            else
            begin
                if(CNT==MAX)
                begin
                    CNT<=3'b000;
                end
                else
                begin
                    CNT<=CNT+3'b001;
                end
            end
        end
endmodule

二、TestBench编写套路

(1)生成时钟信号

以下两种方式均可产生时钟信号

//方式一:
parameter ClockPeriod = 10;//自定义时钟周期
initial begin
	forever clock = #(ClockPeriod/2) ~clock
end
//方式二:
parameter ClockPeriod = 10;//自定义时钟周期
initial begin
	always #(ClockPeriod/2) clock = ~clock
end
(2)生成测试激励
initial begin
	clk = 1'b1;
	rst_n = 1'b0;
	CNT = 3'b000;
#100 rst_n = 1'b0;//延时100ns开始启动
(3)模块例化

端口式格式:模块名 tb_被测试模块名(.接口(输入))
名称顺序式格式 模块名 tb_被测试模块名(输入)
下面以接口式为例

counter_6 counter_6_tb(
	.clk(clk),
	.rst_n(rst_n),
	.CNT(CNT)
);
(4)代码总结
`timescale 1ns / 1ps  //测试时间基本单位为1ns,精度为1ps
module counter_6_tb(); 

//输入
	reg clk; 
	reg rst_n; 
//输出
	wire [2:0]CNT;

//信号初始化
initial begin
	clk = 1'b0;
	rst_n = 1'b1;
	CNT = 3'b000;
	#100 rst_n = 1'b0;//延时100ns开始启动
end

//生成时钟,模拟晶振实际的周期时序
always #10 clk = ~clk; //每10ns,sys_clk进行翻转,达到模拟晶振周期为20ns
//或者:forever clk = #10 ~clk;

//模块例化
counter_6 counter_6_tb(
	.clk(clk),
	.rst_n(rst_n),
	.CNT(CNT)
);
endmodule

以上就是笔者总结出来的一套Verilog tb文件的编写方法,有错误请指正。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风月ac

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值
>