赞
踩
test代码:
module test_top( input clk, input rst_n, input a, input b, output reg c_out ); always@(posedge clk) begin if(!rst_n) c_out<=0; else if(b==1) c_out<=a; else c_out<=c_out; end endmodule
testbench代码:
下面展示一些 内联代码片
。
module top_test_tb( ); reg clk; reg rst_n; reg a; reg b; wire c_out; always #10 clk=~clk; initial begin clk=0; rst_n=1; a=0; b=0; #20; a=1; #30; b=1; #100; a=0; end test_top test_top( .clk(clk), . rst_n(rst_n), .a(a), .b(b), .c_out(c_out) ); endmodule
仿真波形如下:
可以看出赋值和判断语句在tb赋值后,无任何延迟,时序逻辑进行直接判断和赋值。与真实下载到板子中不同,时序逻辑应该在a,b值变化后的一拍,才能检测到a和b的值的变化。并进行判断和赋值。
tb文件中的与时序相关的赋值应同样采用时序逻辑。
三种方式:
//非阻塞赋值
@(posedge clk)
a<=1;
//或
#20;
a<=1;
//将信号与时钟上升沿错开一小段
#20.1;
a=1;
testbench
代码
module top_test( ); reg clk; reg rst_n; reg a; reg b; wire c_out; always #10 clk=~clk; initial begin clk=0; rst_n=1; a=0; b=0; #20; @(posedge clk) a<=1; #30; @(posedge clk) b<=1; #100; @(posedge clk) a<=0; end test_top test_top( .clk(clk), . rst_n(rst_n), .a(a), .b(b), .c_out(c_out) ); endmodule
修改后的仿真结果正常了:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。