Re: [請益] 有關nonblocking的用法,求助中...
看板Programming作者SILee (working for what?)時間16年前 (2009/05/02 03:21)推噓1(1推 0噓 1→)留言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
05/02 13:38, 1F
→
05/02 13:38, , 2F
05/02 13:38, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):