我是靠谱客的博主 粗心大树,最近开发中收集的这篇文章主要介绍verilog仿真文件TestBench编写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文件的编写方法,有错误请指正。

最后

以上就是粗心大树为你收集整理的verilog仿真文件TestBench编写verilog仿真文件TestBench编写的全部内容,希望文章能够帮你解决verilog仿真文件TestBench编写verilog仿真文件TestBench编写所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部