|
Verilog HDL語言中存在兩種分支語言: ● if-else 條件分支語句 ● case 分支控制語句 1. if-else條件分支語句 if-else 條件分支語句的作用是根據指定的判斷條件是否滿足來確定下一步要執行的操作。它在使用時可以采用如下三種形式: (1)if(<條件表達式>) 語句或語句塊; 在if-else 條件語句的這種使用形式中沒有出現else項,這種情況下條件分支語句的執行過程是: ● 如果指定的<條件表達式>成立(也就是這個條件表達式的邏輯值為”1”),則執行條件分支語句內給出的“語句或語句塊”,然后退出條件分支語句的執行。 ● 如果<條件表達式>不成立(也就是條件的表達式的邏輯值為”0”、”x”、”z”),則不執行條件分支語句內給出的”語句或語句塊”,而是直接退出條件語句的執行。 例如程序1 仿真圖 這段程序在運行時,就會根據根據條件表達式“sel==1”是否成立來決定是否執行賦值語句“out==a”如仿真圖,如果sel==1時,則賦值語句就會得到執行,輸出信號out得到a的值1,如果sel==0時,則不執行的賦值語句,輸出信號out保持原有的值不變。如圖,當sel==0時,out保持原值1不變。 (2)if(<條件表達式>) 語句或語句塊1 else 語句或語句塊2 這種形式的條件分支語句將以如下方式得到執行: ● 如果指定的<條件表達式>成立(也就是這個條件表達式的邏輯值為“1”),則執行條件分支語句第一行所指定的語句或語句塊1,然后結束條件分支語句的執行。 ● 如果<條件表達式>不成立,則執行由條件分支語句內第二行的else項指定的語句或語句塊2,然后結束條件分支語句的執行。 例如程序2 仿真圖 在運行這段程序時,會根據條件表達式“sel==1”是否成立來決定執行兩條過程賦值語句中的哪一條。 如果sel==1,則第一行if這項所指定的賦值語句out=a,得到執行,輸出信號out 得到a的值1,如圖所示。 如果sel!==1,則執行第二行else 項所指定的賦值語句out=b,輸出信號out得到b的值。 (3)if(<條件表達式1>) 語句或語句塊1 else if( <條件表達式2>) 語句或語句塊2 ……… else 在執行這種形式的if-else條件分支語句時,將按照各分支項的排列順序對各個條件表達式是否成立做出判斷,當遇到某一項的條件表達式成立時,就執行這一項所指定的語句或語句塊。 如果所有的條件表達式都不成立,則執行最后的else項。 這種形式的if-else條件分支語句實現了一種多路分支選擇控制。 例如程序3 仿真圖 如果sel1的值為1,則第一個分支項的條件表達式sel1成立,因而第一分支項所指定的賦值操作out=a.執行。 如果sel2的值為1,sel1的值不為1,則第二個分支項的條件表達式sel2成立,因而第二個分支項所指定的賦值操作out=b,執行。 如果sle1和sel2的值都不為1,則執行else 分支語句這一項操作out=c執行。 (4)Verilog HDL 允許if-else條件分支語句的嵌套使用。 If(<條件表達式1>)//外層if語句 If(<條件表達式2>)//內層if語句1 Else //內層else語句2 Else //外層else語句1 If(<條件表達式3>)//內層if語句3 Else //內層else語句4 1. case分支控制語句 case分支語句是另一種用來實現多路分支控制的分支語句。與使用if-else條件分支語句相比,采用case分支語句來實現多路控制將顯得更為方便與直觀。 Case分支語句通常用于對微處理器指令譯碼功能的描述以及對有限狀態機的描述。Case分支語句有“case”、“casez”、“casex”三種形式。 (1) case語句 case(<控制表達式>) <分支語句1> :語句塊1 <分支語句2> :語句塊2 <分支語句3> :語句塊3 ……… <分支語句n> :語句塊n Default: 語句塊n+1; Endcase <控制表達式>代表著對程序流向進行控制的控制信號:各個<分支表達式>則是控制表達式的某些具體狀態取值,在實際使用中這些分支項表達式通常是一些常量表達式:各個“語句”則指定了在各個分支下所要執行的操作,它們也可以是由單條語句構成,處于最后的、以關鍵詞default開頭的那個分支項稱為“default”分支項,它是可以缺省的。 Case語句的執行過程: (1)當“控制表達式”的取值等于“分支項表達式1”時,執行第一個分支項所包含的語句塊1. (2)當“控制表達式”的取值等于“分支項表達式2”時,執行第一個分支項所包含的語句塊2. …………. (n)當“控制表達式”的取值等于“分支項表達式n”時,執行第一個分支項所包含的語句塊n. (4)在執行了某一分支項內的語句后,跳出case語句結構,終止case語句的執行。 Case語句中各個“分支項表達式”的取值必須是互不相同的,否則就會出現矛盾現象。 例如程序4 仿真圖 Case語句在執行時,控制表達式和分支項表達式之間進行的比較是一種按進位進行的“全等比較”,也就是說,只有在分支項表達式和控制表達式對應的每一位都是彼此相等的情況下才認為分支項表達式和控制表達式兩者是“相等”的,對應的語句塊就會被執行。 1. case語句和if-else的區別 if-else 語句的執行是有優先級的判斷,按照優先級的順序執行語句;而case語句沒有先級的考慮,只跟對應的邏輯值有關系,只要邏輯值對應相等就執行對應的語句塊。 |