verilog之testbench的写法

为什么要编写testbench?

编写Testbench的目的是把RTL代码在Modsim中进行仿真验证,通过查看仿真波形和打印信息验证代码逻辑是否正确。

testbench在这里做的就是给输入进行激励
testbench在这里做的就是给输入进行激励
具体逻辑为:
1.使用testbench给模块喂入输入信号(一般在testbench中定义为reg型)
2.通过实例化模块(注意实例化模块时带partameter的写法)把模拟输入信号传入功能模块中

testbench的基本模块

module写法

  • 测试模块的命名:tb_<功能模块名> 或 <功能模块名>_tb
    功能模块名为:delay_clap , 则对应测试模块名为:delay_clap_tb
    需要定义模拟的输入/输出信号:

  • 输入/输出信号与功能模块中定义的输入/输出信号保持一致
    输入信号一般定义为 reg 型信号,因为后面需要在always/initial语句块中被赋值
    输出信号一般为 wire型即可

以边沿检测器为例

//原边沿检测器module部分
module delay_clap (
	    input sig,//异步信号
	    input clk1,//异步慢时钟
	    input rstn,//复位信号
	    input clk2,//目标快时钟
	    output sig_rise,//上升沿的信号
	    output sig_down,//下降沿的信号
	    output sig_out);//直接输出的信号

//具体内容

endmodule

//对应的testbench
module delay_clap_tb;
	reg rstn;
	reg clk1;
	reg clk2;
	reg sig;
	
	wire sig_rise;
	wire sig_down;
	wire sig_out;

//具体内容

endmodule

显然:在定义端口时,testbench中对所有输入都定义为reg型,所有输出都定义为wire型。

生成时钟

特定频率的时钟

对于生成特定频率的时钟,一般会在testbench的最开始设定时间单位和时间精度,例如:

`timescale <时间单位>/<时间精度>
`timescale 1ns/1ps

通过规定timescale,来确定生成信号的时间单位,从而确定具体频率

  • 时间单位:时间尺度预编译指令 时间单位 / 时间精度
  • 定义时间单位: `timescale 1ns/1ns 表示时间单位为1ns,时间精度为1ns
  • 时间单位和时间精度由值 1、10、和 100 以及单位 s、ms、us、ns、ps 和 fs 组成
  • 时间单位不能比时间精度小
  • 仿真过程所有与时间相关量的单位(即1单位的时间)
  • 时间精度:决定时间相关量的精度及仿真显示的最小刻度 1ns/1ps 精度为.0.01ns

比如:要产生250MHZ的时钟信号的计算过程如下:
250MHZ的时钟信号一个周期的时长为: 1 / ( 250 × 1 0 6 ) = 4 n s 1/(250\times10^6)=4ns 1/(250×

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值