2011版VCS自带的工具UVMGEN的一个BUG,很难想像有这种级别的BUG~~

有可能是Synopsys这几年发展太过迅速了吧,感觉软件升级是挺快,不过感觉BUG倒也是真多。

这不,今天发现使用UVMGEN工具生成的Top Module时有一个很不应该犯下的错误。

我们来看看是怎么回事啊。下面这段代码是该工具生成的,我很纳闷,

 module top_mod();
logic clk; logic rst;
// Clock Generation parameter sim_cycle = 10; // Reset Delay Parameter parameter rst_delay = 50; always begin clk = #(sim_cycle/2) ~clk; end // ToDo: Include Dut instance here //Driver reset depending on rst_delay initial begin clk = 0; rst = 0; #1 rst = 1; repeat (rst_delay) @(clk); rst = 1'b0; @(clk); end
endmodule
当你拿这段代码到仿真器里运行的时候,你会惊奇的发现你想要的时钟怎么没有了呢,都是红线(不定态,unknown)。
无论你是使用VCS,VSIM还是NCSIM,结果都是一样的。其实,细细分辨你就会明白。原来是delay control用错了。
将clk = #(sim_cycle/2) ~clk 改成#(sim_cycle/2)clk = ~clk就OK了。
当然,这是对verilog语义理解的一个小小的错误。
前者的意思是将clk当前值取反(在此为0时刻),延迟sim_cycle个仿真单位时间后将赋值给clk。可是,你应该明白,
0时刻,clk的值是不定态啊。
后者的意思是延迟sim_cycle个仿真单位时间后将clk取反后赋值给clk。在延迟sim_cycle个仿真单位时间后,显然,
此时的clk已经在initial中早已赋值为0了。这样就能正确产生需要的时钟。

今天在这时花这些时间提这个事情,一是我真正遇到了,我觉得奇怪,运气不好,二是觉得很难理解像Synopsys这样的公司也会犯下
这种级别的错误,奇也怪哉。

转载于:https://www.cnblogs.com/guofu2010/articles/2465523.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值