打印

常规延迟和内嵌延迟

[复制链接]
1524|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shang651|  楼主 | 2012-10-8 22:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
延迟时序控制
在代码中使用关键字#和延迟的时间,就可以通过延迟来进行时序控制。延迟的时间可以是数字、变量或者表达式。延迟时序控制又分为两种:常规延迟和内嵌延迟。

常规延迟在赋值语句的左边,系统执行到这一行代码时,系统先进行延迟,延迟完成后,再计算表达式,并将结果赋值给左边的变量;而内嵌延迟在赋值语句的右边,系统执行到这一行代码时,系统先立即计算表达式,再进行延迟,最后把表达式的结果赋值给左边的变量。在上述两种延迟方式中,设计人员需要注意表达式的自变量在延迟过程中可能发生变化。常规延迟是先延迟再计算表达式,这时表达式的自变量可能已经发生了变化;而内嵌延迟在延迟前就已经进行了计算,表达式的自变量在延迟过程中发生的变化,对已经计算的表达式结果没有影响,延迟只是指这个结果需要等待一段时间再赋值给左边的变量。

下面的代码片段分别展示了常规延迟和内嵌延迟:

parameter latency = 8; initial begin x = 1; y = 2; #5 x = 3; //使用常规延迟:等待5个系统周期后对x赋值 #latency y = 4; //使用变量进行常规延迟,再等待8个系统周期后对y赋值 z = #10 (x+y); //使用内嵌延迟:先用零时刻的x、y数值计算(x+y),再等待10个系统周期后对z赋值 end //z的最终数值为3
在顺序语句块(begin...end)中,由于语句是从上到下、一行一行地执行,而所有常规延迟时间都是实际执行时间相对于这一句本来应该开始执行的时间(也是上一句执行完成之时)的延迟值。因此,在上面的代码示例中,对变量y的赋值时间相对于上一句结束延迟了8个系统周期,而上一句相对系统零时刻已经延迟了5个系统周期,因此对y的赋值发生在第13个系统周期。不过,如果顺序语句块中存在非阻塞赋值,由于这个结构有着类似并行语句块的特点,因此需要特别考虑。

在并行语句块(fork...join)中,由于所有语句都是并发执行的,而所有常规延迟时间都是实际执行时间相对于这一句本来应该开始执行的时间(也是上一句执行完成之时)的延迟值,因此各个常规延迟所指的时间都是相对于系统零时刻。

相关帖子

沙发
jakfens| | 2012-10-9 08:59 | 只看该作者
mark 以前看过一下

使用特权

评论回复
板凳
tee.| | 2012-10-9 13:33 | 只看该作者
很不错。:)

使用特权

评论回复
地板
hawksabre| | 2012-10-9 19:03 | 只看该作者
这篇**还可以   这个以前没用过   当作知识储备吧   谢谢楼主的共享

使用特权

评论回复
5
GoldSunMonkey| | 2012-10-9 20:56 | 只看该作者
这篇**还可以   这个以前没用过   当作知识储备吧   谢谢楼主的共享
hawksabre 发表于 2012-10-9 19:03
你来共享一下啊。

使用特权

评论回复
6
GoldSunMonkey| | 2012-10-9 20:56 | 只看该作者
很不错。:)
tee. 发表于 2012-10-9 13:33
tee,最近忙啥?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

305

帖子

1

粉丝