#VCS# 关于VCS 编译选项:+vcs+initreg+random的理解(1)
前面,我们已经对 VCS 编译选项 +vcs+initreg+random 做了讲解。今天,我们从另一个角度,去看该选项的具体作用时间阶段。对于如何启动仿真调度机制,大家可以参考之前的文章《#VERDI# 关于使用Verdi 查看NBA 仿真调度的方法》。这里就不在啰嗦了。
代码:
`timescale 1ns/1ps
import uvm_pkg::*;
module tb_top();
reg clk,rst;
initial begin
clk = 0;
forever #5 clk = ~ clk;
end
//initial begin
//rst = 1;
//#30 rst = 0;
//end
always @ (posedge rst) begin:always_block1
$display("The always block1 was fired @Time %f", $time());
end
always @ (negedge rst) begin:always_block2
$display("The always block2 was fired @Time %f", $time());
end
always @ (rst) begin:always_block3
$display("The always block3 was fired @Time %f", $time());
end
endmodule
(1)执行: ./simv +fsdb+delta +vcs+initreg+0 , 结果如下:
(2)执行: ./simv +fsdb+delta +vcs+initreg+1 , 结果如下:
(3)执行: ./simv +fsdb+delta +vcs+initreg+z , 结果如下:
(4)执行: ./simv +fsdb+delta +vcs+initreg+x , 结果如下:
问题:从以上四个波形,我们看到,只有 ./simv +fsdb+delta +vcs+initreg+0/1 得到了我们预期的效果,但是 ./simv +fsdb+delta +vcs+initreg+z/x ,虽然没有报错,但是却没有看到初始化成功。这里尚不清楚为什么?等待后续root cuase 吧。
解答:今天,回过头又重新理了一下思路,拍拍脑袋,呀,之前不是给了答案么。前一篇文章提到如下:
也就是说,该选项是不会随机出x/z状态的,不符合实际硬件电路。实际也只有1/0存在嘛。