测试过程
关于测试文件tb的编写,以前一直没注意到这一点,这一次报错了故记录下来:
错误代码如下:
`timescale 1ns/1ns
module tb_key_beeper();
parameter CLK_PERIOD = 40;
reg sys_clk;
reg sys_rst_n;
reg key;
wire beep;
initial begin
sys_clk <= 1'b0;
sys_rst_n <= 1'b0;
key <= 1'b1;
#(CLK_PERIOD*3)
sys_rst_n <= 1'b1;
#(CLK_PERIOD*1)
key <= 1'b0;
#(CLK_PERIOD*4)
key <= 1'b1;
#(CLK_PERIOD*1)
key <= 1'b0;
#(CLK_PERIOD*5)
key <= 1'b1;
#(CLK_PERIOD*1)
key <= 1'b0;
#(CLK_PERIOD*6)
key <= 1'b1;
#(CLK_PERIOD*1)
key <= 1'b0;
#(CLK_PERIOD*7)
key <= 1'b1;
#(CLK_PERIOD*1)
key <= 1'b0;
#(CLK_PERIOD*8)
key <= 1'b1;
#(CLK_PERIOD*1)
end
always #(CLK_PERIOD/2)
sys_clk <= !sys_clk;
key_beeper u_key_beeper(
.sys_clk (sys_clk ),
.sys_rst_n(sys_rst_n),
.key (key ),
.beep (beep)
);
endmodule
报错显示:
这里的end是和initial配对的,按说没有问题,怀疑是最后initial结束为延迟,不允许这样操作,尝试修改initial为:
initial begin
sys_clk <= 1'b0;
sys_rst_n <= 1'b0;
key <= 1'b1;
#(CLK_PERIOD*3)
sys_rst_n <= 1'b1;
#(CLK_PERIOD*1)
key <= 1'b0;
#(CLK_PERIOD*4)
key <= 1'b1;
#(CLK_PERIOD*1)
key <= 1'b0;
#(CLK_PERIOD*5)
key <= 1'b1;
#(CLK_PERIOD*1)
key <= 1'b0;
#(CLK_PERIOD*6)
key <= 1'b1;
#(CLK_PERIOD*1)
key <= 1'b0;
#(CLK_PERIOD*7)
key <= 1'b1;
#(CLK_PERIOD*1)
key <= 1'b0;
#(CLK_PERIOD*8)
key <= 1'b1;
//删去了延迟
end
编译正常通过:
总结
initial语句的结束不能是 #延迟时间 语句