Re: [問題] verilog delay問題
: 我根據程式碼畫出來的波形圖是長這樣:
: 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://www.ptt.cc/bbs/Electronics/M.1541656287.A.AB3.html
※ 編輯: wildwolf (140.123.101.43), 11/08/2018 13:52:26
推
11/08 15:33,
5年前
, 1F
11/08 15:33, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):