在仿真的行为 中,为了尽量避免时序电路中时钟和驱动信号的时序竞争问题,我们需要尽量明确驱动时序和采样时序。
默认情况下,时钟对于组合电路的驱动会 添加一个无线小 的时间延迟(delta-cycle),驱动信号和被驱动信号之间的延迟。它比最小 时间单位精度还小。
在仿真的过程中,输入命令“run 0”,就是 让仿真其运行一个delta-cycle时间。
timescale 1ns/1ns
module racel;
bit clk1,clk2;
bit rstn;
logic [7:0] d1;
initial begin //产生时钟clk1
forever #5 clk1 <= !clk1;
end
//产生时钟clk2
always @(clk1) clk2 <= clk1;
initial begin
#10 rstn <= 0;
#20 rstn <= 1;
end
//计数器
always @(posedge clk1, negedge rstn) begin
if(!rstn) d1<= 0;
else d1<= d1 + 1;
end
//在clk1,clk2上升沿打印出d1的数值
always @(posedge clk1) $display("%0t ns d1 value is 0x%0x", $time,d1);
always @(posedge clk2) $display("%0t ns d1 value is 0x%0x", $time,d1);
endmodule
问:在45ns时,采样的d1值为1,那么clk2在45ns时,采样的d1值为多