(1)
assign c=(sel)?a:b;
(2)
always @(sel or a or b) begin
if(sel)
c = a;
else
c = b;
end
這兩段代碼,我用quartus綜合出來的結果都是一個選擇器,可是我私覺得,這樣兩種風格的代碼,咱們都會偏向使用第一種,除了書寫方便外,是否還有別的優點?如資源分配等?
發表於
2012-9-25 21:18 |
只看該做者
第一種好。 if else的邏輯是:只要條件不符合,就走else路。 試想若是上級電路出錯,出現sel=1'bx的時候,那麼代碼(2)的c就會走else路=b。 而? :的運行結果跟實際電路更接近:連控制端sel都是不定值了,那c毫無疑問地應該是x,除非a=b。 總之,代碼(1)在綜合結果、資源利用等方面和(2)是徹底一致的,但(1)的前仿結果跟後仿、跟實際電路更接近。php |
發表於
2012-10-1 09:46 |
只看該做者
編碼規範嚴格的企業裏,是規定要用第二種的, 可靠性比第一種高,不容易寫錯ide |
請教各位大蝦,關於
Verilog
中三目運算符的用法
就是這個 out=s?a:b;這個用法只能用在assign中嗎?謝謝各位了
always initial均可以
樓上正解
shxr (2010-7-13 09:21:40)
那可以用非阻塞賦值如「out<=s?a:b;」嗎?
回樓上能夠你這至關於 assign out_t=s?a:b; always@(...) out<=out_t;
謝謝!指點
這條語句就至關於一個if---else語句
注意:
if
語句和
case
語句都只能用於
always
語句內部,若是要在
always
語句以外應用條件語句,可用三目運算符
?
:以下:
assign data = ( sel ) ? a : b ;