热度 16
2013-9-2 16:30
1680 次阅读|
0 个评论
Testbench 再学习 Testbench 主要用来生成时钟激励和模拟信号提供给测试模块 然后通过 modelsim 观察模块的响应 基本结构: module test_bench // 通常 Testbench 没有输入与输出端口 信号或变量定义声明 使用 initial 或 always 语句来产生激励波形 例化设计模块 监控和比较输出响应 endmodule 具体内容 Testbench 内容主要包括 1 ,时间单位设置 'timescale 1ns/100ps 2 ,系统时钟和复位信号的产生 方法( 1 ) always begin #5 clk=~clk; End 方法( 2 ) initial begin mclk = 0; while(1) #10 mclk = ~mclk; End 方法( 3 ) initial begin Forever #( 延时 ) CLK = ~CLK; End 复位信号 initial begin Rst = 1; #100; Rst = 0; #500; Rst = 1; End 或 initial begin Rst = 1; @(negedge CLK); // 等待时钟下降沿 repeat (3) @(negedge CLK); // 经过 3 个时钟下降沿 Rst = 1; end 3 ,输入信号的初始化 initial begin clk=1'b0; rst=1'b1; #10 rst=1'b0; #500 rst=1'b1; end 4 ,模拟产生出入信号,实例化待测试模块 initial begin a_in = 1; b_in = 3; #200 a_in = 2; b_in = 0; #200 a_in = 3; b_in = 3; end 5 ,进行仿真观察结果 注意事项 1 , 相应于被测试模块的输入激励设置为 reg 型,输出相应设置为 wire 类型,双向端口 inout 在测试中需要进行处理。 为双向端口设置中间变量 inout_reg 作为该 inout 的输出寄存, inout 口在 testbench 中要定义为 wire 型变量,然后用输出使能控制传输方向。 eg : inout bi_dir_port; wire bi_dir_port; reg 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 双向口互连。 2 ,每个 testbench 都最好包含 $stop 语句,用以指明仿真何时结束。 3 ,加载测试向量时,避免在时钟的上下沿变化,比如数据最好在时钟上升沿之前变化,这也符合建立时间的要求。 4 , initial 和 always 是同时执行的,只是 initial 只执行一次。 5 , 一般用 initial 块给信号赋初值, initial 块执行一次, always 或者 forever 表示由事件激发反复执行 实例 `timescale 1 ns/ 1 ps module ex0_vlg_tst(); // test vector input registers reg clk; reg rst_n; // wires wire led; // assign statements (if any) ex0 i1 ( // port map - connection between master ports and signals/registers .clk(clk), .led(led), .rst_n(rst_n) ); initial begin $monitor($time,"led value = %b\n",led); // 监控 led 信号的变化,如果其值发生变 化,立马打印出来 rst_n = 0; clk = 0; #1000; @(posedge clk); rst_n = 1; repeat(5) #1_000_000_000; // 延时 5s $stop; end always #20 clk = ~clk; // 出生 25MHz 时钟信号 endmodule 系统任务的使用 1 ,仿真控制任务 $stop 格式 : 在 initial 中 #500 $stop $finish 格式 : 在 initial 中 #500 $finish $stop 暂停仿真后返回软件操作主窗口,将控制权交给 user $finish 终止仿真后关闭软件操作主窗口 $time 返回 64 位整型时间 未完,完整内容见附件