SystemVerilog学习之路(6)— 最小时间和时间片
一、前言
delta-cycle
(无限最小时间):默认情况下,时钟对于组合电路的驱动会添加一个无限最小时间(delta-cycle)的延迟,而该延迟无法用绝对时间单位衡量,它比最小时间单位精度还小。
time-slot
(时间片): 在仿真器中敲入命令run 0
,即是让仿真器运行一个时间片的时间,在一个时间片中可以发生很多事情,一个时间片里面包含无数个delta-cycle
。
二、代码实现
编写代码如下所示
`timescale 1ns/1ns
module race1;
bit clk1, clk2;
bit rstn;
logic[7:0] d1;
initial begin
forever #5 clk1 <= !clk1;
end
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
always @(posedge clk1) $display("%0t ns d1@clk1 value is 0x%0x", $time, d1);
always @(posedge clk2) $display("%0t ns d1@clk2 value is 0x%0x", $time, d1);
endmodule
编译仿真运行100ns如下所示,在45ns时,在clk1和clk2上升沿打印出来的数据不相同
查看波形可以看到,d1显示的值为02
三、delta-cycle
我们将时间轴放在45ns处,点击【Expanded Time Deltas Mode】工具图标
然后点击【Expand Time At Active Cursor】工具图标
接着就可以看到delta-cycle的作用显示出来了,clk2和d1都是在45ns+1
处发生变化的,即45ns后再加一个delta-cycle
处才发生变化的