仿真调度系列文章,已经编写10篇,写到这里,相比大家都已经对VCS仿真工具的运行机制,有了大体了解。学无止境,而且真正的仿真调度行为控制,是每个EDA厂商自己产品的高度机密。言外之意,我们要抱着谦虚的态度说:我们只是懂了一点点。
一 RTL仿真中的竞争现象
在实际仿真过程中,有时会遇到过一类情况:当对一个信号打一拍,寄存器的输出和该寄存器的输入信号,竟然奇怪的出现在同一拍的现象。
看个例子。
module test(clk,clr);
input clk;
input clr;
reg[2:0] cnt;
reg d;
reg clk2;
reg q;
always @(posedge clk ,negedge clr) begin
if(!clr)
cnt <= 3'h0;
else if(cnt < 4)
cnt <= cnt+1;
else
cnt <= 0;
end
always @(posedge clk ,negedge clr) begin
if(!clr)
d <= 1'b0;
else if(cnt == 2)
d <= ~d;
end
always @(posedge clk ,negedge clr) begin
if(!clr)
clk2 <= 1'b0;
else
clk2 <= ~clk2;
end
always @(posedge clk2 ,negedge clr) begin
if(!clr)
q <= 1'b0;