UFP 发表于 2010-6-26 00:42:58

这种加延迟的codestyle是啥意思?(问题已解决)

本帖最后由 fpgaw 于 2010-7-18 14:13 编辑

最近在看别人写的代码,
感觉style很好。
不过看code里面这么写。
parameter D=1;
...
always @(posedge clk)
begin
...
case(nextstate)
#D a<=....;
#D b<=...;
...
end
就是在所有赋值前面都加了延迟,这是为什么

FFT 发表于 2010-6-26 01:32:52

延迟1个时间单位,硬件本身就有延迟的啊!这样写更复合实际,仿真也更有效吧!

longt 发表于 2010-6-26 03:02:56

这样硬件语言描述的情况和实际的电路更加接近,而且延时也不会被综合进电路,对实际的电路没有什么影响。

usb 发表于 2010-6-26 04:41:23

在有些仿真软件里面,写和不写是不一样的,比方说modelsim,时钟沿来的时候,看的是沿后的值,如果不加延迟,波形看起来和硬件习惯是不一样的。

UFP 发表于 2010-6-26 05:44:30

楼上说的有道理

interig 发表于 2010-6-26 07:35:11

收到,理解了。<br>
比如说testbench里<br>
35个时间单位时是时钟上升沿,<br>
如果#35 en=1;<br>
而模块里是<br>
always @(posedge clk)<br>
&nbsp;&nbsp;begin<br>
&nbsp; &nbsp;&nbsp;&nbsp;...<br>
&nbsp; &nbsp; if(en)<br>
&nbsp; &nbsp;&nbsp; &nbsp;a&lt;=1;<br>
&nbsp; &nbsp; else<br>
&nbsp; &nbsp;&nbsp; &nbsp;a&lt;=0;<br>
&nbsp;&nbsp;end<br>
的话时序就会和预想的不同。。。。<br>
是这意思吧?那就是我原来遇到的问题了

AAT 发表于 2010-6-26 09:05:46

哦,原来是这样啊,有道理

CHAN 发表于 2010-6-26 09:54:57

我好像记得,这样写是为仿真写的,主要是要验证功能的正确性,因为实际电路是确实有延时存在的<br>
#D这中语句综合器是不认的

ATA 发表于 2010-6-26 11:46:07

原帖由 yljusting 于 2006-11-21 08:54 发表<br>
收到,理解了。<br>
比如说testbench里<br>
35个时间单位时是时钟上升沿,<br>
如果#35 en=1;<br>
而模块里是<br>
always @(posedge clk)<br>
&nbsp;&nbsp;begin<br>
&nbsp; &nbsp;&nbsp;&nbsp;...<br>
&nbsp; &nbsp; if(en)<br>
&nbsp; &nbsp;&nbsp; &nbsp;a&lt;=1;<br>
&nbsp; &nbsp; else<br>
&nbsp; &nbsp;&nbsp; &nbsp;a&lt;=0;<br>
&nbsp;&nbsp;end<br>
的 ... 呵呵,跟你这个不太一样。你是要延35个时间单位。这里讨论的延时是仿真时模拟硬件实际运行时的延时问题,主要是D触发器的Tco,一般组合逻辑是不加这种延时的。

VVC 发表于 2010-6-26 12:34:55

从来没写过这个,想问:每个输出到底延迟多少时间,这个如何确定啊?不可能随便写吧?
页: [1] 2
查看完整版本: 这种加延迟的codestyle是啥意思?(问题已解决)