Testbench编写技巧

来源:本站
导读:目前正在解读《Testbench编写技巧》的相关信息,《Testbench编写技巧》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《Testbench编写技巧》的详细说明。
简介:测试平台是个没有输入输出端口的模块。仿真在一个模块设计中是很关键的步骤,而testbench是仿真的很好工具。

与待测模块接口

与输入端口相连接的变量定义为reg

与输出端口相连的定义为wire

initial块中初始化变量,必须的。

用$stop或$finish暂停或结束仿真

wait(z==1’b1);//等待变量值改变,变量可以是待测试模块的输出或者内部变量

时钟产生:

always # 10 clk =~clk;产生时钟

initial repeat(13) #5 clk =~clk; //控制只产生13个时钟。

同步数据:

initial forever @ (posedge clk) #3 x = $random;

为了降低多个输入同时翻转的概率,对时序电路的输入一般采用素数作为时间间隔。

同步显示:

l initial$monitor(“%d is changed at %t”,MUT.current,$time);//

一般在 initial中调用,采用$monitor显示模块MUT内部current的值以及发生变化的时间,$monitor是一个后台运行任务函数,多个模块下,任意时间只能有一个$monitor起作用,可用$monitoron $monitoroff来控制。

l always @(z)$display(“Output changed at %t to %b”,$time,z);当z发生变化输出z值以及变化时间,自动换行。

l always @(z)$strobe(“Output changed at %t to %b”,$time,z);//仿真结束后显示输出,查看非阻塞赋值变量的值。

随机数据

initial repeat(5) #7 x = $random;

a = $random%60; //产生-59~59之间随机数

a = {$random}%60; //产生0~59之间随机数

产生随机时间间隔

always begin

t= $random;

#(t) x = $random;

end

数据缓存

initial buffer = 16’b1110_0001_1011_0101;//将测试数据进行初始化

always @ ( posedge clk) #1 {x,buffer} = {buffer,x};//可以在控制的数据下输入信号x

读取数据文件

reg [7:0] mem1[0:1024];

initial begin

$readmemh( “data1.dat” , mem1);

模板:

`timescale 1ns/100ps

`include “*.v”

module t;

参数定义

输入测试模块的测试信号定义 reg,wire

内部变量定义

initial begin

初始化变量

$monitor(“%d is changed at %t”,MUT.current,$time);//监控数据

forever @ (posedge clk) #3 x = $random;//同步数据

repeat(5) #7 x = $random;

end

always @(z)$display(“Output changed at %t to %b”,$time,z);

always @(z)$strobe(“Output changed at %t to %b”,$time,z);

always # 10 clk =~clk;//产生时钟

always begin//

t= $random;

#(t) x = $random;

end

模块实例化

defparam module. WIDTH = 32;

endmodule

提醒:《Testbench编写技巧》最后刷新时间 2024-03-14 01:01:04,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《Testbench编写技巧》该内容的真实性请自行鉴别。