If-else條件敘述
Exp:
If(<條件式>)
begin
<程式內容1>
end
else
begin
<程式內容2>
end
1. 語法與C語言雷同,看似將C語言中的大括號{,}改變成begin,end
2. 以電路的角度來看,每一個if就是一個區塊(block),每個區塊就是並(平)行處理,除非有用else才會是串聯處理,因為並行處理的關係,多個if可能會出現衝突情形。
Exp:
always@(posedge clk)
begin
if(cat== 2’ b10)
out= 3’ b010;
if(dog== 2’ b11)
out= 3’ b001;
end
當cat變數等於2’b10且dog變數等於2’b11時會發生衝突,也就是out到底該輸出010還是001? 一般以寫軟體程式的觀念會說先輸出010再書出001,旦是現在是在作FPGA的硬體設計,每一個if都代表一個電路,也就是說兩個if會同時運作。
Exp:
always@(posedge clk)
begin
count=count+ 1’ b1;
if(count== 3’ b111)
count= 3’ b000;
end
這是3bit計數器,當count數到111時會把count歸零,看起來似乎滿合乎邏輯的,實際上這個例子也會產生衝突。當count計數到111時if區塊就會動作,問題是上面的count=count+ 1’ b1;也是同時動作,那麼到底該歸零還是加1呢?
因此!! 必須要修改成以下程式碼。
Exp:
always@(posedge clk)
begin
if(count== 3’ b111)
count= 3’ b000;
else
count=count+ 1’ b1;
end
經由上述的程式範例展示後,對於if判斷式的應用應該沒有太大問題了。在基本功上多練練,對於日後設計電路時有莫大的幫助。至少不用為了除錯而花上大量的時間,尤其是這種基本到容易讓人犯錯的小問題!!