close

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’b10dog變數等於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計數到111if區塊就會動作,問題是上面的count=count+ 1’ b1;也是同時動作,那麼到底該歸零還是加1?


因此!! 必須要修改成以下程式碼。


Exp:


always@(posedge clk)


begin


        if(count== 3’ b111)


                count= 3’ b000;


        else


                count=count+ 1’ b1;


end


 


經由上述的程式範例展示後,對於if判斷式的應用應該沒有太大問題了。在基本功上多練練,對於日後設計電路時有莫大的幫助。至少不用為了除錯而花上大量的時間,尤其是這種基本到容易讓人犯錯的小問題!!


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 jk3527101 的頭像
    jk3527101

    簡單也是另一種快樂

    jk3527101 發表在 痞客邦 留言(0) 人氣()