Board logo

标题: 如何编写testbench的总结(非常实用的总结)[转帖] [打印本页]

作者: vincent    时间: 2006-8-1 11:11     标题: 如何编写testbench的总结(非常实用的总结)[转帖]

1.激励的设置
相应于被测试模块的输入激励设置为reg型,输出相应设置为wire类型,双向端口inout在测试中需要进行处理。
方法1:为双向端口设置中间变量inout_reg作为该inout的输出寄存,inout口在testbench中要定义为wire型变量,然后用输出使能控制传输方向。
eg:
inout [0:0]  bi_dir_port;
wire  [0:0]  bi_dir_port;
reg   [0:0]  bi_dir_port_reg;
reg   bi_dir_port_oe;

assign bi_dir_port=bi_dir_port_oe?bi_dir_port_reg:1'bz;
用bi_dir_port_oe控制端口数据方向,并利用中间变量寄存器改变其值。等于两个模块之间用inout双向口互连。往端口写(就是往模块里面输入?/span>
作者: vincent    时间: 2006-8-1 11:12

方法2:使用force和release语句,这种方法不能准确反映双向端口的信号变化,但这种方法可以反映块内信号的变化。具体如示:
module test();
wire data_inout;
reg data_reg;
reg link;
#xx; //延时
force data_inout=1'bx; //强制作为输入端口
...............
#xx;
release data_inout; //释放输入端口
endmodule
作者: vincent    时间: 2006-8-1 11:12

从文本文件中读取和写入向量
1)读取文本文件:用 $readmemb系统任务从文本文件中读取二进制向量(可以包含输入激励和输出期望值)。$readmemh 用于读取十六进制文件。例如:
reg [7:0] mem[1:256] // a 8-bit, 256-word 定义存储器mem
initial $readmemh ( "mem.data", mem ) // 将.dat文件读入寄存器mem中
initial $readmemh ( "mem.data", mem, 128, 1 ) // 参数为寄存器加载数据的地址始终
2)输出文本文件:打开输出文件用$fopen 例如:
integer out_file; // out_file 是一个文件描述,需要定义为 integer类型
out_file = $fopen ( " cpu.data " ); // cpu.data 是需要打开的文件,也就是最终的输出文本
设计中的信号值可以通过$fmonitor, $fdisplay,
作者: vincent    时间: 2006-8-1 11:13

6.Verilog Testbench信号记录的系统任务:
1). SHM数据库可以记录在设计仿真过程中信号的变化. 它只在probes有效的时间内记录你set probe on的信号的变化.
ex). $shm_open("waves.shm"); //打开波形数据库
$shm_probe(top, "AS"); // set probe on "top",
$shm_close //关闭数据库
在记录信号或者波形时需要指出被记录信号的路径,如:tb.module.u1.clk.
作者: houyb    时间: 2006-8-3 11:02

非常有用!谢谢了!!
作者: blackstorm    时间: 2006-8-6 16:24

谢谢
作者: sun221    时间: 2007-6-5 18:17

有用!谢谢了!!




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0