微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 前仿加延迟是起什么作用?

前仿加延迟是起什么作用?

时间:10-02 整理:3721RD 点击:
最近找工作,很多面试官都提问,“前仿加延迟起什么作用”?以前在opencorce上下载源代码的时候,也发现这个问题,一直没有深究,以为没有多大作用。最近感觉这个问题应该不是简简单单的为了使得波形好看,应该还有其他原因,特上论坛求助。

1,看波形方便
2,更接近寄存器行为

还有一个有实际作用的:
在clock rising edge 又读又写寄存器是有歧义的(究竟哪个在前面?)
verilog 有blocking / non-blocking assignment之分,靠这个来保证先后顺序。如果大家都按规矩写,就不用在RTL写delay。
但是pattern可能写的比较乱,在跟RTL接口的地方可能有读写先后顺序的歧义。
所以可以在RTL里面写个delay来消除读写先后顺序的歧义。

这种玩意在实际中容易乱,感觉用处不大

感觉以前比较强调,就是为了错开时钟沿和数据,让它们不要同时变化。否则,采样时钟是采到变化前还是变化后的数据取决于仿真器。错开的话,跟实际电路比较接近,仿真也不容易出错。
但现在好像只要阻塞和非组合赋值用得恰当,仿真是不会有问题的,也就不用加延迟了。不加延迟看波形时更方便。

消除寄存器分频时钟和原时钟打出数据信号的竞争。

RE: 前仿加延迟是起什么作用?

如果分频时钟用阻塞复值描述,寄存器用非阻塞复值的话,用分频时钟采样原时钟打出的数据,应该不会有竞争



   为了方便看波形图,不过基本现在都不主张加延时语句了



    这个说的有道理
真正用过的才知道
不过我们一般不会这么用(感觉有点麻烦)
我们一般都是simulation_option的时候使用一个initial forever来生成一个blocking的分频时钟
synthesis_option的时候就是1个DFF来进行分频
不知道这样的话有什么潜在的问题么?
这样用的话感觉还好 尤其是分频时钟与原时钟域如果有数据交互的时候
在post-simulation的时候就用真正的电路了 功能仿真和pre-simulation的时候就用simulation_option来做

看波形方便,尽量少加,只加1个仿真单位,可以消除一些多时钟关系带来的时序上的歧义。

仿真实际版图电路

3楼5楼比较接近真相,主要因为不同仿真器在同一时间点上对不同intial 或者block 块的赋值顺序处理不同,可能导致仿真结果不一样,但是现在systerm verilog 在仿真机制上有了改进,所以不需要加延时也可以。


可否详细解释一下这个机制?Thanks



    是啊~~~

尽量接近实际情况吧,避免一些综合后因为时序而出现的问题

主要还是看波形方便

簡單說, 有時還沒作到後端時, 加入延遲是避免 simulator 對於 "race condition" 處理不如預期.

最讨厌不懂装懂的人, 6 楼真相, 其他的我只能呵呵了

    其他的某些回复。

感觉有个好处是tb的后仿可移植性比较好

好!


不大明白……

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

网站地图

Top