[問題] verilog delay問題

看板Electronics作者 (Emeth)時間7年前 (2018/11/07 16:19), 7年前編輯推噓0(003)
留言3則, 2人參與, 7年前最新討論串1/2 (看更多)
大家好,我有一個關於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。 請問我是哪裡想錯了? 謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.193.118 ※ 文章網址: https://www.ptt.cc/bbs/Electronics/M.1541578742.A.99F.html

11/07 16:32, 7年前 , 1F
110ns的E變化,要等到 110+40=150ns 的時候,才去看w1和
11/07 16:32, 1F

11/07 16:33, 7年前 , 2F
E的值,所以在 150ns 的時候,D的值是 0
11/07 16:33, 2F
我明白了,謝謝! 不過這樣我又有幾個問題: 1. 所以有delay的gate,例如我程式裡的nor gate, 只有在input發生改變時才會被「觸發」, 並在delay 40ns以後,才去做nor的動作嗎? 且其在執行時,所看的input的值,都是在執行當下的值嗎? 例如nor在150ns時執行,而它要看的是150ns的w1和E的值。 (用「觸發」這個詞好像有點不恰當,希望你能明白我的意思……) 2. 所以在我這個例子中,delay的意義是體現在於, 當input有所改變後,要「delay」若干ns才執行動作, 而不是input的值要「delay」若干ns後,才進gate中去執行動作。 我這樣理解是否正確? 3. 如果我把我例子中的or的#(30)改為#(50),會得到下面這張波形圖: https://i.imgur.com/gHjkfBk.png
想請問在這張波形圖中,w1也剛好在150ns時從0變成1, 那麼在150ns要做nor時,為什麼取到的w1的值是0?而不是1? 不好意思,問題有點多…… 再次感謝你的回答!

11/07 18:10, 7年前 , 3F
請問是用什麼跑出來的?
11/07 18:10, 3F
我用的simulator是ncverilog, 不好意思我是初學,不知道你要問的是不是這個? ※ 編輯: Emeth (123.195.36.40), 11/07/2018 21:32:22 ※ 編輯: Emeth (123.195.36.40), 11/07/2018 21:33:18
文章代碼(AID): #1Ruf_scV (Electronics)
文章代碼(AID): #1Ruf_scV (Electronics)