initial语句 initial 语句从 0 时刻开始执行,只执行一次,多个 initial 块之间是相互独立的。 如果 initial 块内包含多个语句,需要使用关键字 begin 和 end 组成一个块语句。 如果 initial 块内只要一条语句,关键字 begin 和 end 可使用也可不使用。 initial 理论上来讲是不可综合的,多用于初始化、信号检测等。 示例代码,见前一篇文章:https://blog.csdn.net/weixin_43172531/article/details/144547254
initial begin
ai =0;
#25; ai =1;
#35; ai =0;//absolute 60ns
#40; ai =1;//absolute 100ns
#10; ai =0;//absolute 110ns
end
initial begin
bi =1;
#70; bi =0;//absolute 70ns
#20; bi =1;//absolute 90ns
end
`timescale 1ns/1ns
module test ;
parameter CLK_FREQ =100;//100MHz
parameter CLK_CYCLE =1e9/(CLK_FREQ *1e6);//switch to ns
reg clk ;
initial clk =1'b0 ;//clk is initialized to "0"
always # (CLK_CYCLE/2) clk =~clk ;//generating a real clock by reversing
always begin
#10;if($time >=1000) begin
$finish ;
end
end
endmodule
仿真代码
// https://hdlbits.01xz.net/wiki/Iverilog
`timescale 1ns/1ns
module top_module();
parameter CLK_FREQ =100;//100MHz
parameter CLK_CYCLE =1e9/(CLK_FREQ *1e6);//switch to ns
reg clk;
initial clk =1'b0 ;//clk is initialized to "0"
always # (CLK_CYCLE/2) clk =~clk ;//generating a real clock by reversing
reg ai, bi ;
initial `probe_start;// Start the timing diagram
`probe(clk);
`probe(ai);
`probe(bi);
initial begin
$dumpfile("wave.vcd");// Enable waveform dumping
$dumpvars(0, top_module);// Dump all signals in top_module
end
initial begin
ai =0;
#25; ai =1;
#35; ai =0;//60ns
#40; ai =1;//100ns
#10; ai =0;//110ns
end
initial begin
bi =1;
#70; bi =0;
#20; bi =1;
end
initial begin
#150;// Simplified termination
$finish;
end
initial begin
$monitor("Time = %0t, clk = %b, ai = %b, bi = %b", $time, clk, ai, bi);
end
endmodule