微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > 微电子学习交流 > 有人碰到仿真跑着停住的情况没?

有人碰到仿真跑着停住的情况没?

时间:12-12 整理:3721RD 点击:
仿真跑着就不动了,时间不往前走了,硬盘空间也有
有碰到过类似情况的吗?

遇到过,至今不知道啥原因
本版15289也是这个问题

碰到过,很多时候是突然怎么不收敛,或者收敛特别慢,特别难debug

嗯,我碰到过这个情况,不过比较特殊
modelsim卡死,VCS居然没有问题
更改代码,modelsim也OK
如果用的是NCSIM的话,可以试试单步调试

用的是NC, 好像是死在一个task内, 里面有个while循环
但是我看了下波形,while条件满足的,就是不往下跑了

经常碰到。代码里面哪里有死循环或者哪时有冲突的地方。出不来了。。

一般来说code里有死循环才会这样,试一下这个方法:
1. ncvlog时加-linedebug的option
2. ncsim吃的tcl里加这么一句:stop -delta 1000 -timestep -delbreak 1,这就创建了一个断点。
3. 仿真中若停止,并提示断点已触发,则敲入run -step,仿真器会提示run到哪个文件哪一行,然后检查该行code,若有死循环,修改,重run。

一般是0延迟循环造成的(有延迟的死循环是没有问题的),在RTL里面是组合回路。

SV中, 一般这样的代码容易出现你这种现象:
while(1) begin
    your_processing...
    // with no time delay
end
其实也就是 在while循环中, 没有走时间, 不停地在那一个timestep里一直循环.
解决方法: while里添加下 延时, 如@clk, #1ns等.
检查下吧, 看有没有这样写的.

无限不收敛。。。以前跟过一个spice case,在导数外推猜初值的时候
微妙的一个delta差异使得猜值逻辑永远跳不出,一直在猜值外推,还不算
收敛问题。。。。

可能是combination loop, 在卡死后单步,会发现仿真总是在计算某些代码块,找到这里面相互依赖的组合逻辑。
比如说a = ~b; b = ~a;

一种是环境里面的死循环,前面有提到,比如while里面没有延迟语句
还一种是逻辑代码的组合逻辑环,这个用vcs的话可以加个编译参数,具体忘了,反正之
前定位过一次之后直接修改了Makefile,还是老实加上吧。

Synopsys VCS can also help you in this requirement.
[1] You can try to compile the test case using +vcs+loopreport compile
time switch. Then run the simv using +vcs+loopreport. You may see loop
report.
[2] Please use the option +vcs+loopdetect along with your compilation
command.
%> vcs +vcs+loopdetect ...[other_options]
This directly gives you the loop info.
编译运行都要加,其实代码的做lint更简单,跑个综合看看timing应该也可以看出来的

居然@到我了
这还是我第一次被@ 居然是这样来的.....

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top