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