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