国产爱久久久精品_看**视频一一级毛片_91啪国自产中文字幕在线_国内精品伊人久久久久妇

網絡消費網 >  5G > > 正文
Verilog HDL基礎之:條件語句
時間:2021-12-24 06:44:03

if語句

if語句是用來判定所給定的條件是否滿足,根據判定的結果(真或假)決定執行給出的兩種操作之一。Verilog HDL語言提供了3種形式的if語句。

(1)無分支。

語法形式:

if (表達式) 語句;

例如:

if (a > b) out1 = int1; //若a大于b,將int1賦予out1

(2)單級分支。

語法形式:

if(表達式)語句1;

else 語句2;

例如:

if(a>b) out1=int1; //若a大于b,將int1賦予out1;否則,將int2賦予out1

else out1=int2;

(3)多級分支

語法形式:

if(表達式1) 語句1;

else if(表達式2) 語句2;

else if(表達式3) 語句3;

...

else if(表達式m) 語句m;

else 語句n;

例如:

if(a>b) out1=int1; //若a大于b,將int1賦予out1

else if(a==b) out1=int2; //否則,如果a等于b,將int2賦予out1

else out1=int3; //否則,將int3賦予out1

關于if語句有如下6點說明:

(1)3種形式的if語句中,在if后面都有“表達式”,一般為邏輯表達式或關系表達式。系統對表達式的值進行判斷,若為0、x或z,按“假”處理;若為1,按“真”處理,執行指定的語句。

(2)第二、第三種形式的if語句中,在每個else前面有一分號,整個語句結束處有一分號。

這是由于分號是Verilog HDL語句中不可缺少的部分,這個分號是if語句中的內嵌套語句所要求的。如果無此分號,則出現語法錯誤。

但應注意,不要誤認為上面是兩個語句(if語句和else語句)。它們都屬于同一個if語句。else子句不能作為語句單獨使用,它必須是if語句的一部分,與if配對使用。

(3)在if和else后面可以包含一個內嵌的操作語句,也可以有多個操作語句,此時用begin和end這兩個關鍵詞將幾個語句包含起來成為一個復合塊語句如下所示。

if(a>b)begin //使用begin_end語句實現多個賦值操作

out1=int1;

out2=int2;

end

else begin

out1=int2;

out2=int1;

end

注意

在end后不需要再加分號,因為begin_end內是一個完整的復合語句,不需再附加分號。

(4)允許一定形式的表達式簡寫方式,例如:

if(expression) 等同于 if( expression == 1 )

if(!expression) 等同于 if( expression != 1 )

(5)if語句的嵌套。

在if語句中又包含一個或多個if語句,稱為if語句的嵌套,一般形式如下:

if(expression1)

if(expression2) 語句1 (內嵌if)

else 語句2

else if(expression3) 語句3 (內嵌if)

else 語句4

應當注意if與else的配對關系,else總是與它上面的最近的if配對。如果if與else的數目不一樣,為了實現程序設計者的企圖,可以用begin_end塊語句來確定配對關系,例如:

if() begin

if() 語句1 (內嵌if)

end

else 語句2

這時begin_end塊語句限定了內嵌if語句的范圍,因此else與第一個if配對。注意begin_end塊語句在if_else語句中的使用,因為有時begin_end塊語句的不慎使用會改變邏輯行為,如下所示:

if(index>0) //內嵌for語句,無else分支

for(scani=0;scaniindex;scani=scani+1) //內嵌if語句

if(memory[scani]>0) begin //使用begin_end語句,有else分支

$display(...);

memory[scani]=0;

end

else //此處為內嵌if語句的分支

$display(error-indexiszero);

...

盡管程序設計者把else寫在與第一個if(外層if)同一列上,希望與第一個if對應,但實際上else是與第二個if對應,因為它們相距最近。正確的寫法如下:

if(index>0) begin //內嵌for語句,有else分支

for(scani=0;scaniindex;scani=scani+1) //內嵌if語句

if(memory[scani]>0) begin //使用begin_end語句,無else分支

$display(...);

memory[scani]=0;

end

end

else //此處為外部if語句的分支

$display(error-indexiszero);

(6)if_else例子。

下面這段程序用if_else語句來檢測變量index以決定modify-seg1、modify-seg2、modify-seg3中哪一個的值應當與index相加作為memory的尋址地址。并且將相加值存入寄存器index以備下次檢測使用。程序的前10行定義寄存器和參數。

reg [31:0] instruction, segment_area[255:0]; //定義寄存器

reg [7:0] index;

reg [5:0] modify_seg1, modify_seg2, modify_seg3;

parameter //定義參數

segment1=0, inc_seg1=1,

segment2=20, inc_seg2=2,

segment3=64, inc_seg3=4,

data=128;

//檢測寄存器index的值

if(indexsegment2) begin //index<20時,執行下列操作

instruction = segment_area[index + modify_seg1];

index = index + inc_seg1;

end

else if(indexsegment3) begin //20<index<64時,執行下列操作

instruction = segment_area[index + modify_seg2];

index = index + inc_seg2;

end

else if (indexdata) begin //64<index<128時,執行下列操作

instruction = segment_area[index + modify_seg3];

index = index + inc_seg3;

end

else //index>128時,執行下列操作

instruction = segment_area[index];

case語句

case語句是一種多分支選擇語句,if語句只有兩個分支可供選擇,而實際問題中常常需要用到多分支選擇。Verilog語言提供的case語句直接處理多分支選擇。case語句通常用于微處理器的指令譯碼,它的一般形式如下:

(1)case (表達式) case分支項> endcase

(2)casez(表達式) case分支項> endcase

(3)casex(表達式) case分支項> endcase

case分支項>的一般語法格式如下:

分支表達式: 語句

缺省項(default項): 語句

關于case語句的幾點說明如下。

(1)case括弧內的表達式稱為控制表達式,case分支項中的表達式稱為分支表達式。控制表達式通常表示為控制信號的某些位,分支表達式則用這些控制信號的具體狀態值來表示,因此分支表達式又可以稱為常量表達式。

(2)當控制表達式的值與分支表達式的值相等時,就執行分支表達式后面的語句。如果所有的分支表達式的值都沒有與控制表達式的值相匹配的,就執行default后面的語句。

(3)default項可有可無,一個case語句里只能有一個default項。下面是一個簡單的使用case語句的例子。該例子中對寄存器rega譯碼以確定result的值。

reg [15:0] rega;

reg [9:0] result;

case(rega)

16 d0: result = 10 b0111111111; //rega等于0時

16 d1: result = 10 b1011111111; //rega等于1時

16 d2: result = 10 b1101111111; //rega等于2時

16 d3: result = 10 b1110111111; //rega等于3時

16 d4: result = 10 b1111011111; //rega等于4時

16 d5: result = 10 b1111101111; //rega等于5時

16 d6: result = 10 b1111110111; //rega等于6時

16 d7: result = 10 b1111111011; //rega等于7時

16 d8: result = 10 b1111111101; //rega等于8時

16 d9: result = 10 b1111111110; //rega等于9時

default: result = bx; //rega不等于上面的值時

endcase

(4)每一個case分項的分支表達式的值必須互不相同,否則就會出現矛盾現象(對表達式的同一個值,有多種執行方案)。

(5)執行完case分項后的語句,則跳出該case語句結構,終止case語句的執行。

(6)在用case語句表達式進行比較的過程中,只有當信號的對應位的值能明確進行比較時,比較才能成功,因此要詳細說明case分項的分支表達式的值。

(7)case語句的所有表達式的值的位寬必須相等,只有這樣控制表達式和分支表達式才能進行對應位的比較。一個經常犯的錯誤是用bx、bz 來替代nbx、nbz,這樣寫是不對的,因為信號x、z的缺省寬度是機器的字節寬度,通常是32位(此處 n 是case控制表達式的位寬)。

case語句與if語句的區別主要有以下兩點。

(1)與case語句中的控制表達式和多分支表達式相比,if結構中的條件表達式更為直觀一些。

(2)對于那些分支表達式中存在不定值x和高阻值z時,case語句提供了處理這種情況的手段。下面的兩個例子介紹了處理x、z值case語句。

例1:case語句1。

case (select[1:2])

2 b00: result = 0; //select[1:2]等于00時

2 b01: result = flaga; //select[1:2]等于01時

2 b0x,

2 b0z: result = flaga? bx: 0; //select[1:2]等于0x和0z時,執行表達式

2 b10: result = flagb; //select[1:2]等于10時

2 bx0,

2 bz0: result = flagb? bx :0; //select[1:2]等于x0和z0時,執行表達式

default: result = bx; //select[1:2]不等于上面的值時

endcase

例2:case語句2

case(sig)

1 bz: $display(signal is floating); //sig為高阻時,打印輸出

1 bx: $display(signal is unknown); //sig為不定狀態時,打印輸出

default: $display(signal is %b, sig); //為其他時,即0或1時,打印輸出

endcase

針對電路的特性,Verilog HDL提供了case語句的其他兩種形式用來處理不必考慮的情況(dont care condition)。其中casez語句用來處理不考慮高阻值z的比較過程,casex語句則將高阻值z和不定值都視為不必關心的情況。

所謂不必關心的情況,即在表達式進行比較時,不將該位的狀態考慮在內。這樣在case語句表達式進行比較時,就可以靈活地設置,以對信號的某些位進行比較。如表3.10所示為case、casez、casex 的真值表:

表3.10 case語句真值表

case

0

1

x

z

0

1

0

0

0

1

0

1

0

0

x

0

0

1

0

z

0

0

0

1

casez

0

1

x

z

0

1

0

0

1

1

0

1

0

1

x

0

0

1

1

z

1

1

1

1

casex

0

1

x

z

0

1

0

1

1

1

0

1

1

1

x

1

1

1

1

z

1

1

1

1

下面給出兩個例子來分別說明casez語句和casex語句。

例3:casez語句。

reg[7:0] ir;

casez(ir)

8 b1???????: instruction1(ir); //只判斷ir的最高位

8 b01??????: instruction2(ir); //只判斷ir的高2位

8 b00010???: instruction3(ir); //只判斷ir的高5位

8 b000001??: instruction4(ir); //只判斷ir的高6位

endcase

例4:casex語句。

reg[7:0] r, mask;

mask = 8bx0x0x0x0;

casex(r^mask) //判斷r^mask的結果

8 b001100xx: stat1; //不考慮低2位

8 b1100xx00: stat2; //不考慮第3、4位

8 b00xx0011: stat3; //不考慮第5、6位

8 bxx001100: stat4; //不考慮高2位

Endcase

其他條件語句

上面提到的if語句和case語句都只能應用于always語句內部。如果需要在always語句之外應用條件語句,可以采樣這樣的語法結構:

assign data = (sel)? a : b;

上面的語句的含義相當于:

if (sel = 1)

data = a;

else

data = b;

關鍵詞: VerilogHDL 華清遠見

版權聲明:
    凡注明來網絡消費網的作品,版權均屬網絡消費網所有,未經授權不得轉載、摘編或利用其它方式使用上述作品。已經本網授權使用作品的,應在授權范圍內使用,并注明"來源:網絡消費網"。違反上述聲明者,本網將追究其相關法律責任。
    除來源署名為網絡消費網稿件外,其他所轉載內容之原創性、真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考并自行核實。
熱文

網站首頁 |網站簡介 | 關于我們 | 廣告業務 | 投稿信箱
 

Copyright © 2000-2020 www.fnsyft.com All Rights Reserved.
 

中國網絡消費網 版權所有 未經書面授權 不得復制或建立鏡像
 

聯系郵箱:920 891 263@qq.com

備案號:京ICP備2022016840號-15

營業執照公示信息

国产爱久久久精品_看**视频一一级毛片_91啪国自产中文字幕在线_国内精品伊人久久久久妇

        国产风韵犹存在线视精品| 中文av一区二区| 亚洲欧美国产三级| 欧美乱妇一区二区三区不卡视频 | 麻豆国产91在线播放| 99久久精品国产毛片| 亚洲资源在线观看| 日韩精品中文字幕一区二区三区| 亚洲精品第1页| 国产iv一区二区三区| 1024精品合集| 欧美一区二区三区免费视频 | 精品一区二区三区免费视频| 国产亚洲美州欧州综合国| 色综合中文字幕| 欧美国产丝袜视频| 麻豆国产欧美日韩综合精品二区 | 成人黄色小视频在线观看| 亚洲精选视频免费看| 日韩三级中文字幕| 亚洲.国产.中文慕字在线| av一区二区不卡| 91九色最新地址| 国产精品二三区| 国产激情91久久精品导航| 亚洲女同ⅹxx女同tv| 日韩欧美亚洲国产另类| 亚洲成人激情社区| xnxx国产精品| 欧美精品在线一区二区| 一区二区在线观看视频| 99久久婷婷国产综合精品| 色哟哟欧美精品| 国产精品你懂的| 粉嫩高潮美女一区二区三区| 亚洲成国产人片在线观看| 欧美国产精品一区| 国产精品夜夜爽| 婷婷综合另类小说色区| 中文字幕一区二区三区四区| 成人国产精品免费观看视频| 色综合天天综合网天天看片| 日韩理论电影院| av一区二区三区在线| 欧美日韩一区视频| 亚洲成a人在线观看| 欧美国产一区二区在线观看| 日韩一级完整毛片| 免费亚洲电影在线| 亚洲欧美激情视频在线观看一区二区三区| 日韩一级片在线播放| 免费国产亚洲视频| 一区二区三区日韩在线观看| 国产精品沙发午睡系列990531| 福利电影一区二区三区| 精品视频一区二区三区免费| 亚洲福利视频导航| 国产精品网曝门| 久久久精品免费观看| 国产激情视频一区二区在线观看 | 在线影视一区二区三区| 亚洲一区av在线| 国产精品国产三级国产普通话三级| 精品国产一区二区国模嫣然| 国产自产高清不卡| 色综合久久综合网97色综合| 亚洲国产精品麻豆| 日韩一区在线看| 中文一区在线播放| www.亚洲免费av| 日韩视频在线永久播放| 国产一区二区不卡在线| 在线日韩av片| 日韩福利视频导航| 一级做a爱片久久| 亚洲免费观看高清完整 | 中文字幕一区二| 国产日韩欧美麻豆| 久久久噜噜噜久久中文字幕色伊伊| 成人午夜免费电影| 欧美日韩免费在线视频| 蜜臀av性久久久久蜜臀av麻豆| 亚洲国产成人va在线观看天堂| 一级日本不卡的影视| 国产精品久久久久久妇女6080| 国产精品成人免费| 国产精品日日摸夜夜摸av| 欧美激情一区二区三区蜜桃视频 | 久久精品欧美一区二区三区麻豆| 久久久久久久久久久久电影| aaa亚洲精品一二三区| 精品久久久三级丝袜| 成人激情黄色小说| 日韩精品一区二区三区视频| 成人精品国产一区二区4080| 欧美成人女星排名| 99精品欧美一区二区蜜桃免费| 337p日本欧洲亚洲大胆色噜噜| 成人av在线电影| 精品91自产拍在线观看一区| 97精品国产露脸对白| 久久久99久久| 日本一区二区三区dvd视频在线| 国产精品天美传媒| 日韩一区有码在线| 亚洲福利视频一区二区| 色综合一区二区| 国内外成人在线视频| 欧美精品xxxxbbbb| 成人性色生活片免费看爆迷你毛片| 精品少妇一区二区三区免费观看| 成人免费观看av| 久久综合九色欧美综合狠狠 | 中文在线资源观看网站视频免费不卡 | 国产精品久久久久aaaa| 亚洲视频免费看| 亚洲最大成人综合| 一本到三区不卡视频| 国产真实乱子伦精品视频| 欧美一区二区女人| 99国产欧美另类久久久精品| 欧美国产精品一区二区| 亚洲另类色综合网站| 日韩中文字幕区一区有砖一区| 欧美熟乱第一页| 成人污污视频在线观看| 国产调教视频一区| 亚洲欧美自拍偷拍| 日韩高清不卡在线| 欧美一区二区三区在线电影| 91老师国产黑色丝袜在线| 亚洲欧美日本在线| 午夜av一区二区三区| 国产不卡在线播放| 亚洲国产精品精华液2区45| 亚洲欧美另类图片小说| 另类小说欧美激情| 精品少妇一区二区三区日产乱码| 亚洲国产成人一区二区三区| 亚洲高清中文字幕| 欧美日韩精品是欧美日韩精品| 99vv1com这只有精品| 日韩伦理av电影| 在线观看视频一区二区| 不卡影院免费观看| 亚洲人精品午夜| 欧洲色大大久久| av激情亚洲男人天堂| 亚洲欧美日韩国产综合在线| 欧洲av一区二区嗯嗯嗯啊| 成人激情免费网站| 亚洲乱码中文字幕| 欧美日韩在线直播| 久久久久久**毛片大全| 亚洲国产成人va在线观看天堂| 欧美猛男超大videosgay| 久久品道一品道久久精品| 午夜一区二区三区视频| 日韩视频免费直播| 亚洲天堂免费在线观看视频| 精品一区二区三区在线播放视频| 久久久久久久综合日本| 亚洲午夜在线视频| 成人免费毛片a| 亚洲一区欧美一区| 欧美一区二区三区爱爱| 国产精品久久久久久妇女6080| 极品美女销魂一区二区三区| 欧美激情在线一区二区三区| 色综合久久88色综合天天| 久久网这里都是精品| 日韩精品欧美精品| 久久久久久免费| 一本色道久久综合亚洲aⅴ蜜桃| 91在线视频免费91| 午夜精品久久一牛影视| 久久综合狠狠综合久久激情| 亚洲网友自拍偷拍| www.亚洲免费av| 日韩国产高清在线| 久久久久99精品国产片| 天天综合网天天综合色| 久久综合精品国产一区二区三区| 日韩精品电影在线| 国产日韩欧美一区二区三区乱码 | 蜜桃视频第一区免费观看| 国产拍欧美日韩视频二区| 色播五月激情综合网| 国产亚洲短视频| 极品少妇xxxx精品少妇| 亚洲精品视频在线| 欧美成人一区二区三区在线观看| 洋洋av久久久久久久一区| eeuss国产一区二区三区| 婷婷中文字幕一区三区| 久久精品亚洲精品国产欧美 | 中文字幕在线不卡视频| 69p69国产精品| 一区二区三区不卡在线观看| 99精品国产视频|