作者wildwolf (可爱的哲哲)
看板Electronics
标题Re: [问题] verilog delay问题
时间Thu Nov 8 13:51:25 2018
※ 引述《Emeth (Emeth)》之铭言:
: 大家好,我有一个关於delay的问题,不知何解,
: 程式码如下:
: https://i.imgur.com/Es4FI5x.png
: 我根据程式码画出来的波形图是长这样:
: https://i.imgur.com/s3TT4iB.png
: 然後实际跑出来的结果是这样:
: https://i.imgur.com/bkf0QxD.png
: 我的问题是:为什麽D在150ns~170ns之间没有变成1?
: 我的想法是,因为在110ns时,E从1变成0,
: 那麽在delay 40ns以後,在150ns的时候,
: D应该是做0和0的nor(因为在110ns时,w1和E都是0),所以D在150ns时变成1。
: 请问我是哪里想错了?
: 谢谢。
: 我明白了,谢谢!
: 不过这样我又有几个问题:
: 1. 所以有delay的gate,例如我程式里的nor gate,
: 只有在input发生改变时才会被「触发」,
: 并在delay 40ns以後,才去做nor的动作吗?
: 且其在执行时,所看的input的值,都是在执行当下的值吗?
: 例如nor在150ns时执行,而它要看的是150ns的w1和E的值。
: (用「触发」这个词好像有点不恰当,希望你能明白我的意思……)
是的,触发後,根据 gate-delay 设定,等待时间过後,再去抓值并计算。
110ns 触发的 event, 先等待,再计算,计算的时候抓目前的w1 和 E 来算 D
: 2. 所以在我这个例子中,delay的意义是体现在於,
: 当input有所改变後,要「delay」若干ns才执行动作,
: 而不是input的值要「delay」若干ns後,才进gate中去执行动作。
: 我这样理解是否正确?
本来你写的 delay 就是指 gate 的 delay 啊
: 3. 如果我把我例子中的or的#(30)改为#(50),会得到下面这张波形图:
: https://i.imgur.com/gHjkfBk.png
: 想请问在这张波形图中,w1也刚好在150ns时从0变成1,
: 那麽在150ns要做nor时,为什麽取到的w1的值是0?而不是1?
你现在问的问题是牵涉到同一个 time slot 中,Verilog Standard 规定
的处理顺序。我觉得你有兴趣就自己去 K Verilog Standard 就好了。
把 or #(50) 改成 or #(51) 会让你把你的问题看清楚,
而不要再陷入另外一个问题中。或者你说这个叫做 race condition 的问题。
先避开,不要同时看两个问题。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.123.101.43
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Electronics/M.1541656287.A.AB3.html
※ 编辑: wildwolf (140.123.101.43), 11/08/2018 13:52:26
1F:推 Emeth: 好的,太感谢你了!! 11/08 15:33