verilog仿真文件TestBench编写
笔者最近在准备Verilog的期末考,复习的同时,总结了一套testbench的编写风格。
一、首先准备好需要被测模块的Verilog代码
以计数器为例:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27module 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)生成时钟信号
以下两种方式均可产生时钟信号
复制代码
1
2
3
4
5
6//方式一: parameter ClockPeriod = 10;//自定义时钟周期 initial begin forever clock = #(ClockPeriod/2) ~clock end
复制代码
1
2
3
4
5
6//方式二: parameter ClockPeriod = 10;//自定义时钟周期 initial begin always #(ClockPeriod/2) clock = ~clock end
(2)生成测试激励
复制代码
1
2
3
4
5
6initial begin clk = 1'b1; rst_n = 1'b0; CNT = 3'b000; #100 rst_n = 1'b0;//延时100ns开始启动
(3)模块例化
端口式格式:模块名 tb_被测试模块名(.接口(输入))
名称顺序式格式 模块名 tb_被测试模块名(输入)
下面以接口式为例
复制代码
1
2
3
4
5
6counter_6 counter_6_tb( .clk(clk), .rst_n(rst_n), .CNT(CNT) );
(4)代码总结
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29`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文件的编写方法,有错误请指正。
最后
以上就是粗心大树最近收集整理的关于verilog仿真文件TestBench编写verilog仿真文件TestBench编写的全部内容,更多相关verilog仿真文件TestBench编写verilog仿真文件TestBench编写内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复