微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > modelsim前仿真与实际差多少

modelsim前仿真与实际差多少

时间:10-02 整理:3721RD 点击:
除开前仿真,所有的都是理想的情况,没有加入各个信号的延时,和各个时钟路径之前的时钟偏差这些问题。前仿真的结果可信度有多少?有没有出现过前仿真结果正确,但是这个结果是不可信的,这种类似情况?
我们在设计RTL级code的时候,首先保证前仿真正确,才能进行下一步的DC,PT等等流程,最后提取RC和各个延时参数之后,进行后仿真,若结果正确,是否表示我可以去流片了?这里不考虑封装和物理应力的影响



   thank you very much



   什么鬼,怎么突然谢谢我了,我懵了

前仿真主要侧重于功能正确性,有些时候可以算是比较理想的环境下进行的测试。如果有不可信的结果,我理解应该首先去分析场景和设计架构是否满足需求,结果不可信,应该大部分可能都是需求理解不到位导致的吧,”信“的依据是什么,要明确,否则你怎么说”不可信“?总要有证据证明才行。


我现在都有点懵了,always块中变量采用非阻塞赋值的方式。那么我在前仿真的图上来观察该变量,肯定应该是现在这个时钟沿采样到条件满足,下一个时钟沿该变量的值会更新,不知道我这个理解对不对。但是有时候前仿真,有感觉是现在这个时钟采用到条件满足,该变量就马上变化了。可能是我对阻塞和非阻塞的赋值方式理解有问题。希望你能为我解答一下疑惑,以一个最简单的计数器为例,每次条件满足进行自减操作,如果本时钟沿采样到条件满足,进行自减操作,在下一个时钟沿,该变量的值才会更新吧?

这个是非阻塞赋值的在同一时刻执行事务的区域不同导致的,我这里也没法详细说清楚,你可以网上搜索相关资料看起来可能会更明白,总之就是在同一时钟沿,不同的操作也是有一个先后顺序的,比如有所谓的active zone、passive zone等。如果有些操作在时钟采样操作之前做完了,那就可能会出现立即生效;同样在之后做完的,只能是下一个时钟沿才会采样到。一般来说,同一个时刻,tb_top的操作都要比DUT操作早,所以如果你用tb_top调用DUT的时钟去产生激励,那么DUT就会在同一时刻立即获得这个激励了,大概原理就是这么一个意思,最好找些资料看看吧,论坛里应该有的。



    首先感谢你的回复,解答了困惑我最近很久的一个疑惑,还有就是对于你说的这个  “一般来说,同一个时刻,tb_top的操作都要比DUT操作早,所以如果你用tb_top调用DUT的时钟去产生激励,那么DUT就会在同一时刻立即获得这个激励了” 这句话有些不明白?
我理解的意思是,假如一个模块A,我在测试模块中给激励,那么就会立即获得这个激励,相应的变量也会立即更新。如果我用A模块的时钟去产生这些激励,然后接入到该模块A,那么相应变量的更新就在下一个周期吗?
资料,我应该找哪方面的资料呢,关于非阻塞赋值的资料么?



    其实之前就有这种困惑,我之前在整理上届留下来的一个流片的代码的时候就发现了一个和你描述很类似的问题,一个简单的计数器,如果你有时间,可以看看我的帖子,地址是http://bbs.eetop.cn/thread-630023-1-1.html
    不知道是不是因为你说的这个原因导致的,我也不能确定我那个仿真结果是不是对的,希望你能为我解惑,感谢

那个帖子里面我和殷工已经给你讲的很详细了,你还要自己好好梳理一下,你在论坛里面找非阻塞赋值相关的内容看看,如果有介绍同一个时钟沿相关事务调度内容的,可以留意一下。因为我们不同的经历,所以描述出来都是带有自己的一些理解,未必能让你很好消化,还是基于基本的概念去加深自己的理解最好了,我们说的仅供参考。



    谢谢,我先去查找一些资料看看,有点明白你说的这个先后顺序的问题,应该可以理解成,虽然都是<=赋值,但是如果A控制B,B控制C,那么是先执行A,再执行B,最后执行C


   哈哈,谢谢你,我已经全部明白了,你说的不错,其实殷工在之前的帖子中就已经说得很清楚了,主要原因是我对后端时序分析,和一些底层的东西理解不够,没有正确的理解非阻塞赋值这种赋值方式的含义。
   非常感谢,祝好

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

网站地图

Top