概述
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文件的编写方法,有错误请指正。
最后
以上就是粗心大树为你收集整理的verilog仿真文件TestBench编写verilog仿真文件TestBench编写的全部内容,希望文章能够帮你解决verilog仿真文件TestBench编写verilog仿真文件TestBench编写所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复