Re: [請益] 有關nonblocking的用法,求助中...

看板Programming作者 (working for what?)時間16年前 (2009/05/02 03:21), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《LINAN322 (新熱血陽光男孩￾NN)》之銘言: : 嗯,那我這樣子問好了, : 其實我知道一種寫法, : 不過這是pipeline的寫法, : 只是覺得這樣寫很麻煩,感覺不是很有效率。 : 想要找一個更好的方法, : 所以才會想到nonblocking的方式... : 有更好得方法嗎??? : 求助神大??? : pipeline的寫法,如下: 這樣寫並不會synthesis出pipeline 因為你每一次clock trigger時就只會執行一個case 這跟pipeline的behavior不一樣 充其量只能說是一個state machine : case (i) : 1: begin : a = 2 * 3; : i=i+1; : end : 2: begin : b = a * 2 + 3 ; : i=i+1; : end : 3: begin : c = a + 2 * b ; : i=i+1; : end : 4: begin : d = a + b + c ; : i=i+1; : end : default: begin : i=i+1; : end : ※ 引述《LINAN322 (新熱血陽光男孩￾NN)》之銘言: : : 想請教一下有關verilog的問題 : : 有關於blocking的寫法。 : : 小弟目前寫code都是用blocking的寫法, : : 但是看書,很少人用blocking的寫法, : : 都是用unblocking的。 : : 很奇怪,因為我目前寫的code都是可以合成的, : : 但是不清楚這樣寫是不是很傷硬體的資源。 : : 如四行數學式的運算: : : 1. a = 2 * 3 : : 2. b = a * 2 + 3 : : 3. c = a + 2 * b : : 4. d = a + b + c : : 因為我用blocking的寫法,且a,b,c,d均有相關,所以如下: : : a = 2 * 3; : : b = a * 2 + 3 ; : : c = a + 2 * b ; : : d = a + b + c ; : : 所以我這樣寫,不過我非常的沒有自信,因為沒有書給我任何的佐證 : : 所以我非常疑惑,雖然我可以合成。 : : 但是我去燒入至fpga,正確的演算法結果可以跑出嗎?還是一定會有問題? : : 其實我懂得unblocking,但是用unblocking寫,我很不習慣。 : : 只是不懂得unblocking的設計方式。 : : 如果是這樣寫, : : 那我怎麼讓他delay呢,因為其中有相關性。 你原本這個寫法才是一個4 stages pipeline的寫法 每一次clock trigger時data會往前一個stage forward 還有我不清楚你要delay幹麻? 依你這個algorithm來說 non-blocking的寫法跟你原本的blocking寫法 在最後的output結果上只差在於它會delay 3個clock cycles 但是不要忘記,切pipeline可以提升clock rate 所以delay 3個clock cycles對於整體的timming上應該沒什麼差 如果你就是硬要他在一個clock之內作完 那就寫成combinational circuit就好了 何必還要多用那麼多個registers? : : a <= 2 * 3; : : b <= a * 2 + 3 ; : : c <= a + 2 * b ; : : d <= a + b + c ; : : 有神人可以幫我解答嗎? : : 這兩個差別到底再哪裡? : : 對硬體資源影響會很大嗎??? : : 感謝~~~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.59.105.115

05/02 13:38, , 1F
謝謝你喔,我轉去Electronics...
05/02 13:38, 1F

05/02 13:38, , 2F
再次感謝...^^
05/02 13:38, 2F
文章代碼(AID): #19-qkpF8 (Programming)
文章代碼(AID): #19-qkpF8 (Programming)