Verilog HDL條件語(yǔ)句
發(fā)布時(shí)間:2008/5/28 0:00:00 訪問次數(shù):1790
4.7 條件語(yǔ)句
if 語(yǔ)句的語(yǔ)法如下:
if(condition_1)
procedural_statement_1
2004-08-16 第25頁(yè),共41頁(yè)
版權(quán)所有,侵權(quán)必究
絕密
verilog hdl 入門教程請(qǐng)輸入文檔編號(hào)
{else if(condition_2)
procedural_statement_2}
{else
procedural_statement_3}
如果對(duì)condition_1 求值的結(jié)果為個(gè)非零值,那么procedural_statement_1 被執(zhí),如果
condition_1 的值為0 、x 或z ,那么procedural_statement_1 不執(zhí)行。如果存在一個(gè)else 分支,那么這
個(gè)分支被執(zhí)行。以下是一個(gè)例子。
if(sum < 60)
begin
grade = c;
total_c = total _c + 1;
end
else if(sum < 75)
begin
grade = b;
total_b = total_b + 1;
end
else
begin
grade = a;
total_a = total_a + 1;
end
注意條件表達(dá)式必須總是被括起來,如果使用if - if - else 格式,那么可能會(huì)有二義性,如下例
所示:
if(c l k)
if(r e s e t)
q = 0;
else
q = d;
問題是最后一個(gè)else 屬于哪一個(gè)if? 它是屬于第一個(gè)if 的條件(clk)還是屬于第二個(gè)if的條件
(reset)? 這在verilog hdl 中已通過將else 與最近的沒有else 的if 相關(guān)聯(lián)來解決。在這個(gè)例子中,
else 與內(nèi)層if 語(yǔ)句相關(guān)聯(lián)。
以下是另一些if 語(yǔ)句的例子。
if(sum < 100)
sum = sum + 10;
if(nickel_in)
deposit = 5;
2004-08-16 第26頁(yè),共41頁(yè)
版權(quán)所有,侵權(quán)必究
絕密
verilog hdl 入門教程請(qǐng)輸入文檔編號(hào)
elseif (dime_in)
deposit = 10;
else if(quarter_in)
deposit = 25;
else
deposit = error;
書寫建議:
1、條件表達(dá)式需用括號(hào)括起來。
2、若為if - if 語(yǔ)句,請(qǐng)使用塊語(yǔ)句 begin --- end :
if(c l k)
begin
if(r e s e t)
q = 0;
else
q = d;
end
以上兩點(diǎn)建議是為了使代碼更加清晰,防止出錯(cuò)。
3、對(duì)if 語(yǔ)句,除非在時(shí)序邏輯中,if 語(yǔ)句需要有else 語(yǔ)句。若沒有缺省語(yǔ)句,設(shè)計(jì)將產(chǎn)生一
個(gè)鎖存器,鎖存器在asic設(shè)計(jì)中有諸多的弊端(可看同步設(shè)計(jì)技術(shù)所介紹)。如下一例:
if (t)
q = d;
沒有else 語(yǔ)句,當(dāng)t為1(真)時(shí),d 被賦值給q,當(dāng)t為0(假)時(shí),因?yàn)闆]有else 語(yǔ)句,電路
保持 q 以前的值,這就形成一個(gè)鎖存器。
4.8 case 語(yǔ)句
case 語(yǔ)句是一個(gè)多路條件分支形式,其語(yǔ)法如下:
case(case_expr)
case_item_expr{ ,case_item_expr} :procedural_statement
. . .
. . .
[default:procedural_statement]
endcase
case 語(yǔ)句首先對(duì)條件表達(dá)式case_expr 求值,然后依次對(duì)各分支項(xiàng)求值并進(jìn)行比較,第一個(gè)與
條件表達(dá)式值相匹配的分支中的語(yǔ)句被執(zhí)行?梢栽1 個(gè)分支中定義多個(gè)分支項(xiàng);這些值不需要互
斥。缺省分支覆蓋所有沒有被分支表達(dá)式覆蓋的其他分支。
例:
case (hex)
4'b0001 : led = 7'b1111001; // 1
2004-08-16 第27頁(yè),共41頁(yè)
版權(quán)所有,侵權(quán)必究
絕密
verilog hdl 入門教程請(qǐng)輸入文檔編號(hào)
4'b0010 : led = 7'b0100100; // 2
4'b0011 : led = 7'b0110000; // 3
4'b0100 : led = 7'b0011001; // 4
4'b0101 : led = 7'b0010010; // 5
4'b0110 : led = 7'b0000010; // 6
4'b0111 : led = 7'b1111000; // 7
4'b1000 : led = 7'b0000000; // 8
4'b1001 : led = 7'b0010000; // 9
4'b1010 : led = 7'b0001000; // a
4'b1011 : led = 7'b0000011; // b
4'b1100 : led = 7'b1000110; // c
4'b1101 : led = 7'b0100001; // d
4'b1110 : led = 7'b0000110; // e
4'b1111 : led = 7'b0001110; // f
default :led = 7'b1000000; // 0
endcase
書寫建議:
case 的缺省項(xiàng)必須寫,防止產(chǎn)生鎖存器。
4.7 條件語(yǔ)句
if 語(yǔ)句的語(yǔ)法如下:
if(condition_1)
procedural_statement_1
2004-08-16 第25頁(yè),共41頁(yè)
版權(quán)所有,侵權(quán)必究
絕密
verilog hdl 入門教程請(qǐng)輸入文檔編號(hào)
{else if(condition_2)
procedural_statement_2}
{else
procedural_statement_3}
如果對(duì)condition_1 求值的結(jié)果為個(gè)非零值,那么procedural_statement_1 被執(zhí),如果
condition_1 的值為0 、x 或z ,那么procedural_statement_1 不執(zhí)行。如果存在一個(gè)else 分支,那么這
個(gè)分支被執(zhí)行。以下是一個(gè)例子。
if(sum < 60)
begin
grade = c;
total_c = total _c + 1;
end
else if(sum < 75)
begin
grade = b;
total_b = total_b + 1;
end
else
begin
grade = a;
total_a = total_a + 1;
end
注意條件表達(dá)式必須總是被括起來,如果使用if - if - else 格式,那么可能會(huì)有二義性,如下例
所示:
if(c l k)
if(r e s e t)
q = 0;
else
q = d;
問題是最后一個(gè)else 屬于哪一個(gè)if? 它是屬于第一個(gè)if 的條件(clk)還是屬于第二個(gè)if的條件
(reset)? 這在verilog hdl 中已通過將else 與最近的沒有else 的if 相關(guān)聯(lián)來解決。在這個(gè)例子中,
else 與內(nèi)層if 語(yǔ)句相關(guān)聯(lián)。
以下是另一些if 語(yǔ)句的例子。
if(sum < 100)
sum = sum + 10;
if(nickel_in)
deposit = 5;
2004-08-16 第26頁(yè),共41頁(yè)
版權(quán)所有,侵權(quán)必究
絕密
verilog hdl 入門教程請(qǐng)輸入文檔編號(hào)
elseif (dime_in)
deposit = 10;
else if(quarter_in)
deposit = 25;
else
deposit = error;
書寫建議:
1、條件表達(dá)式需用括號(hào)括起來。
2、若為if - if 語(yǔ)句,請(qǐng)使用塊語(yǔ)句 begin --- end :
if(c l k)
begin
if(r e s e t)
q = 0;
else
q = d;
end
以上兩點(diǎn)建議是為了使代碼更加清晰,防止出錯(cuò)。
3、對(duì)if 語(yǔ)句,除非在時(shí)序邏輯中,if 語(yǔ)句需要有else 語(yǔ)句。若沒有缺省語(yǔ)句,設(shè)計(jì)將產(chǎn)生一
個(gè)鎖存器,鎖存器在asic設(shè)計(jì)中有諸多的弊端(可看同步設(shè)計(jì)技術(shù)所介紹)。如下一例:
if (t)
q = d;
沒有else 語(yǔ)句,當(dāng)t為1(真)時(shí),d 被賦值給q,當(dāng)t為0(假)時(shí),因?yàn)闆]有else 語(yǔ)句,電路
保持 q 以前的值,這就形成一個(gè)鎖存器。
4.8 case 語(yǔ)句
case 語(yǔ)句是一個(gè)多路條件分支形式,其語(yǔ)法如下:
case(case_expr)
case_item_expr{ ,case_item_expr} :procedural_statement
. . .
. . .
[default:procedural_statement]
endcase
case 語(yǔ)句首先對(duì)條件表達(dá)式case_expr 求值,然后依次對(duì)各分支項(xiàng)求值并進(jìn)行比較,第一個(gè)與
條件表達(dá)式值相匹配的分支中的語(yǔ)句被執(zhí)行。可以在1 個(gè)分支中定義多個(gè)分支項(xiàng);這些值不需要互
斥。缺省分支覆蓋所有沒有被分支表達(dá)式覆蓋的其他分支。
例:
case (hex)
4'b0001 : led = 7'b1111001; // 1
2004-08-16 第27頁(yè),共41頁(yè)
版權(quán)所有,侵權(quán)必究
絕密
verilog hdl 入門教程請(qǐng)輸入文檔編號(hào)
4'b0010 : led = 7'b0100100; // 2
4'b0011 : led = 7'b0110000; // 3
4'b0100 : led = 7'b0011001; // 4
4'b0101 : led = 7'b0010010; // 5
4'b0110 : led = 7'b0000010; // 6
4'b0111 : led = 7'b1111000; // 7
4'b1000 : led = 7'b0000000; // 8
4'b1001 : led = 7'b0010000; // 9
4'b1010 : led = 7'b0001000; // a
4'b1011 : led = 7'b0000011; // b
4'b1100 : led = 7'b1000110; // c
4'b1101 : led = 7'b0100001; // d
4'b1110 : led = 7'b0000110; // e
4'b1111 : led = 7'b0001110; // f
default :led = 7'b1000000; // 0
endcase
書寫建議:
case 的缺省項(xiàng)必須寫,防止產(chǎn)生鎖存器。
熱門點(diǎn)擊
- Verilog HDL的wire和tri線網(wǎng)
- Verilog HDL 結(jié)構(gòu)建模實(shí)例化語(yǔ)句
- Verilog HDL算術(shù)運(yùn)算符
- Verilog HDL實(shí)例數(shù)組
- 基于FPGA的可編程定時(shí)器/計(jì)數(shù)器8253的
- Verilog HDL數(shù)據(jù)類型
- PLC和PLD的區(qū)別與聯(lián)系
- Verilog HDL移位操作符
- 用CP1306實(shí)現(xiàn)ADPCM編解碼功能
- Verilog HDL條件語(yǔ)句
推薦技術(shù)資料
- 聲道前級(jí)設(shè)計(jì)特點(diǎn)
- 與通常的Hi-Fi前級(jí)不同,EP9307-CRZ這臺(tái)分... [詳細(xì)]
- AMOLED顯示驅(qū)動(dòng)芯片關(guān)鍵技
- CMOS圖像傳感器技術(shù)參數(shù)設(shè)計(jì)
- GB300 超級(jí)芯片應(yīng)用需求分
- 4NP 工藝NVIDIA Bl
- GB300 芯片、NVL72
- 首個(gè)最新高端芯片人工智能服務(wù)器
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動(dòng)IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究