Re: [請益] 請教有關nonblocking,求助中...
嗯,那我這樣子問好了,
其實我知道一種寫法,
只是覺得這樣寫很麻煩,感覺不是很有效率。
想要找一個更好的方法,
所以才會想到nonblocking的方式...
有更好得方法嗎???
求助神大???
使用case的寫法,如下:
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
這樣寫感覺沒有效率,
那如果要用nonblockign、pipeline的寫法或更好的寫法,
來執行演算法的電路執行效率的話,
要怎麼改寫呢?
另外,如果硬要這將a、b、c、d的演算法
在一個clock之內作完,
那我要怎麼寫成combinational circuit。
是要用assign的指令嗎???
因為我的code主要是跟clk有關,使用clk控制電路行為,
即為sequential circuit,
這樣跟combinational circuit一起合用,
是不是會怪怪的???
小弟不才,煩請指教!!!
神大拜託了...^^
※ 引述《LINAN322 (新熱血陽光男孩NN)》之銘言:
: 恩,小弟已經有先爬過文了,
: 只是還是無法釐清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
→
05/02 14:12, , 1F
05/02 14:12, 1F
→
05/02 14:20, , 2F
05/02 14:20, 2F
→
05/02 14:20, , 3F
05/02 14:20, 3F