作者LINAN322 (新熱血陽光男孩NN)
看板Electronics
標題[請益] 請教有關verilog的nonblocking的寫法...
時間Sat May 2 13:54:58 2009
恩,小弟已經有先爬過文了,
只是還是無法釐清blocking與nonblocking的設計理念。
小弟目前寫code都是用blocking的寫法,
但是看書,很少人用blocking的寫法,
都是用unblocking的。
很奇怪,因為我目前寫的code都是可以合成的,
但是不清楚這樣寫是不是很傷硬體的資源。
因為小弟主要要將演算法設計至fpga中,
舉一個簡單的例子:
如四行數學式的運算:
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呢,因為其中有相關性。
a <= 2 * 3;
b <= a * 2 + 3 ;
c <= a + 2 * b ;
d <= a + b + c ;
如果第0個clk觸發,a=6,
但是b與a有關,但在上一個blck(第-1個)a並沒有定義數值,
因此b不是會沒有定義嗎?
所以我才會想到delay...
另外,畢竟演算法講求的是即時(循序)的運算,
並交給下一個敘述進行運算,
但這樣nonblocking執行演算法(必須吃上一個clk的狀態),
在執行上不就會有很大的困難嗎?
有神人可以幫我解答嗎?
這兩個差別到底再哪裡?
對硬體資源影響會很大嗎???
感謝~~~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.138.178.157
1F:推 sasako:去上CIC的design compile培養合成的概念 05/02 14:04
2F:→ sasako:就會知道合成什麼電路該怎麼寫 而不是寫完才知道他合出什麼 05/02 14:06
3F:→ LINAN322:嗯嗯,謝謝指教︿︿ 05/02 14:07
4F:推 sasako:不然就去向學長借CIC講義 他寫得都還容易懂的 05/02 14:09
5F:→ LINAN322:S大謝謝你喔,其實我正有這個打算... 05/02 14:10
6F:→ sasako:你這個問題 他還會附加圖說明 還滿好懂的.. 05/02 14:10
7F:推 ksmrt0123:要瞭解blobking/nonblocking的不同 可參考zxvc大的文章: 05/02 14:16
8F:→ ksmrt0123:#19u9dw8Z 搞清楚 c=3,c=4的不同... 05/02 14:16