我是靠谱客的博主 粗心大树,这篇文章主要介绍verilog仿真文件TestBench编写verilog仿真文件TestBench编写,现在分享给大家,希望可以做个参考。

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
27
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)生成时钟信号

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

复制代码
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
6
initial 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
6
counter_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编写内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(80)

评论列表共有 0 条评论

立即
投稿
返回
顶部