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