集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 6102|回复: 19

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

[复制链接]
UFP 发表于 2010-6-26 00:42:58 | 显示全部楼层 |阅读模式
本帖最后由 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 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-5-6 16:50 , Processed in 0.067771 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表