Verilog表達(dá)式和語句課件_第1頁
Verilog表達(dá)式和語句課件_第2頁
Verilog表達(dá)式和語句課件_第3頁
Verilog表達(dá)式和語句課件_第4頁
Verilog表達(dá)式和語句課件_第5頁
已閱讀5頁,還剩71頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Verilog表達(dá)式和語句1AVerilog表達(dá)式和語句1A目錄一運(yùn)算符及表達(dá)式二語句目錄2A目錄一運(yùn)算符及表達(dá)式二語句目2A壹運(yùn)算符及表達(dá)式1、基本的算數(shù)運(yùn)算符2、賦值運(yùn)算符3、關(guān)系運(yùn)算符4、邏輯運(yùn)算符5、位運(yùn)算符6、等式運(yùn)算符7、移位運(yùn)算符8、位拼接運(yùn)算符9、優(yōu)先級(jí)別3A壹運(yùn)算符及表達(dá)式1、基本的算數(shù)運(yùn)算符3A一

運(yùn)算符(1)算數(shù)運(yùn)算符:+、-、x、/、%(2)賦值運(yùn)算符:=、<=(3)關(guān)系運(yùn)算符:>、<、>=、<=(4)邏輯運(yùn)算符:&&、||、?。?)條件運(yùn)算符:?:(6)位運(yùn)算符:&、|、~、^、^~(7)移位運(yùn)算符:<<、>>(8)拼接運(yùn)算符:{}(9)其他。一運(yùn)算符(1)算數(shù)運(yùn)算符:+、-、x、/、%1、基本的算數(shù)運(yùn)算符(二進(jìn)制運(yùn)算符)(1)+(加法運(yùn)算符,正值運(yùn)算符,如rega+regb,+3)(2)-(減法運(yùn)算符,負(fù)值運(yùn)算符,如rega-2,-3)(3)x(乘法運(yùn)算符,如rega*3)(4)/(除法運(yùn)算符,如5/3)在進(jìn)行整數(shù)除法運(yùn)算時(shí),結(jié)果值略去小數(shù)部分,只取整數(shù)部分。(5)%(模運(yùn)算符,或者求余運(yùn)算符,如7%3值為1)結(jié)果的符號(hào)位采用模運(yùn)算式里第一個(gè)操作數(shù)的符號(hào)位,如:10%3,-10%3,10%-31、基本的算數(shù)運(yùn)算符(二進(jìn)制運(yùn)算符)(1)+(加法運(yùn)算符,正2、賦值運(yùn)算符(1)非阻塞賦值方式(如b<=a)特點(diǎn):1、所賦變量值不能立即為下面語句所用;2、塊結(jié)束后才完成賦值操作,所賦的變量是上一次賦值得到的;3、編寫可綜合的時(shí)序邏輯模塊,這是最常用的賦值。例1always@(posedgeclk)beginb<=a;c<=b;end2、賦值運(yùn)算符(1)非阻塞賦值方式(如b<=a)(2)阻塞賦值方式(如b=a)特點(diǎn):1、賦值語句執(zhí)行完后,塊才結(jié)束;2、賦值語句執(zhí)行后,變量值立即改變;3、用在時(shí)序邏輯中,會(huì)產(chǎn)生意想不到的結(jié)果。例2always@(posedgeclk)beginb=a;c=b;endDCLKQclkabc(2)阻塞賦值方式(如b=a)DCLKQclkabc3、關(guān)系運(yùn)算符(1)a<b(2)a>b(3)a<=b(4)a>=b在進(jìn)行關(guān)系運(yùn)算時(shí),如果聲明關(guān)系為假(flase),返回值為0;如果聲明關(guān)系為真(true),則返回值為1;如果某個(gè)操作數(shù)不定,則關(guān)系模糊,返回值為不定值。3、關(guān)系運(yùn)算符(1)a<b(2)a>b(3)a<=b4、邏輯運(yùn)算符(1)&&邏輯與;(2)||邏輯或;(3)!邏輯非;“&&”和“||”是雙目運(yùn)算符,“!”是單目運(yùn)算符4、邏輯運(yùn)算符(1)&&邏輯與;5、位運(yùn)算符(1)~按位取反,單目,如a='b1010;(2)&按位取與,將兩個(gè)操作數(shù)相應(yīng)位進(jìn)行與運(yùn)算。(3)|按位取或,將兩個(gè)操作數(shù)相應(yīng)位進(jìn)行或運(yùn)算。(4)^按位異或,也稱XOR運(yùn)算符,將兩個(gè)操作數(shù)相應(yīng)位進(jìn)行異或運(yùn)算。(5)^~按位同或,將兩個(gè)操作數(shù)先進(jìn)行相應(yīng)位異或運(yùn)算在進(jìn)行非運(yùn)算。兩個(gè)不同長(zhǎng)度的數(shù)據(jù)進(jìn)行位運(yùn)算,系統(tǒng)會(huì)自動(dòng)地將兩者按右端對(duì)齊,位數(shù)少的操作數(shù)會(huì)在相應(yīng)的高位用0填滿,再進(jìn)行位操作。5、位運(yùn)算符(1)~按位取反,單目,如a='b1010;Verilog表達(dá)式和語句課件6、等式運(yùn)算符(1)==等于(2)!=不等于又稱邏輯等式運(yùn)算符,結(jié)果由兩個(gè)操作數(shù)的值決定。操作數(shù)中可能為不定值x和高阻態(tài)z,結(jié)果可能為不定值x。6、等式運(yùn)算符(1)==等于(3)===等于(4)!==不等于case等式運(yùn)算符,常用于case表達(dá)式的判別。對(duì)操作數(shù)進(jìn)行比較時(shí)對(duì)某些位的不定值和高阻態(tài)也進(jìn)行比較,兩個(gè)操作數(shù)必須完全一致時(shí),結(jié)果才是1,否則為0。(3)===等于7、移位運(yùn)算符(1)<<左移位(2)>>右移位使用方法:a<<n或a>>n,a代表進(jìn)行移位的操作數(shù),n代表要移幾位。用0來填補(bǔ)移出的空位。例:4'b1001<<1=5'b10010;4'b1001>>2=4'b0010;7、移位運(yùn)算符(1)<<左移位(2)>>右移位8、位拼接運(yùn)算符位拼接運(yùn)算符{},用這個(gè)運(yùn)算符可以把兩個(gè)或多個(gè)信號(hào)的某些位拼接起來進(jìn)行運(yùn)算操作,使用方法:{信號(hào)1的某幾位,信號(hào)2的某幾位,……,信號(hào)n的某幾位}例:{a,b[3:0],w,3'b101},可以寫成{a,b[3],b[2],b[1],b[0],w,1'b1,1'b0,1'b1}在位拼接表達(dá)式中不允許存在沒有指明位數(shù)的信號(hào)。例:重復(fù),{4{w}}等同于{w,w,w,w}嵌套,{b,{3{a,b}}}等同于{b,a,b,a,b,a,b}8、位拼接運(yùn)算符位拼接運(yùn)算符{},用這個(gè)運(yùn)算符可以把兩個(gè)或9、優(yōu)先級(jí)別9、優(yōu)先級(jí)別貳語句1、條件語句(if_else)2、case語句3、循環(huán)語句4、塊語句5、過程塊貳語句1、條件語句(if_else)1、條件語句(if_else)(1)if(表達(dá)式)語句。例如:if(a<b)out1=int1;(2)if(表達(dá)式)語句1else語句2例如:if(a<b)out1=int1;elseout2=int2;if語句是用來判斷所給定的條件是否滿足,根據(jù)判定的結(jié)果決定執(zhí)行給出的兩種操作之一。1、條件語句(if_else)(1)if(表達(dá)式)語句。例(3)if(表達(dá)式1)語句1;elseif(表達(dá)式2)語句2;elseif(表達(dá)式3)語句3;::elseif(表達(dá)式m)語句m;else語句n;注:條件語句必須在過程塊中使用。所謂過程塊是指由initial和always語句引導(dǎo)的執(zhí)行語句集合。除這兩種塊語句引導(dǎo)的beginend塊中可以編寫條件語句外,模塊中其他地方都不能編寫。(3)if(表達(dá)式1)注:條件語句必須在過程塊中使用。所謂6點(diǎn)說明:(1)3種形式的if語句中if后面都有“表達(dá)式”,一般為邏輯表達(dá)式和關(guān)系表達(dá)式。只有表達(dá)式的值為1時(shí),執(zhí)行指定語句。(2)第2、3種形式的if語句,在每個(gè)else前面有一個(gè)分號(hào),整個(gè)語句結(jié)束處有一個(gè)分號(hào)。else子句不能作為語句單獨(dú)使用,它必須是if語句的一部分,與if配對(duì)使用。(3)在if和else后面可以包含一個(gè)內(nèi)嵌的操作語句,也可以有多個(gè)操作語句,此時(shí)用begin和end這兩個(gè)關(guān)鍵詞將幾個(gè)語句包含起來成為一個(gè)復(fù)合塊語句。例:if(a>b)beginout1<=int1;out2<=int2;endelsebeginout1<=int2;out2<=int1;end6點(diǎn)說明:(3)在if和else后面可以包含一個(gè)內(nèi)嵌的操作語(4)允許一定形式的表達(dá)式簡(jiǎn)寫方式。例如:if(expression)等同與if(expression==1)if(!expression)等同與if(expression!=1)(5)if語句的嵌套。例如:if(expression1)if(expression2)語句1;(內(nèi)嵌if)else語句2;elseif(expression3)語句3;(內(nèi)嵌if)else語句4;注:注意if和else的配對(duì)關(guān)系,else總是和它上面最近的if配對(duì)。如果if和else的數(shù)目不一樣,為了實(shí)現(xiàn)程序設(shè)計(jì)者的企圖,可以用begin_end塊語句來確定配對(duì)關(guān)系。(4)允許一定形式的表達(dá)式簡(jiǎn)寫方式。例如:2、case語句(1)case(表達(dá)式)<case分支項(xiàng)>endcase(2)casez(表達(dá)式)<case分支項(xiàng)>endcase(3)casex(表達(dá)式)<case分支項(xiàng)>endcasecase分支項(xiàng)的一般格式如下:分支表達(dá)式:語句;默認(rèn)項(xiàng)(default項(xiàng)):語句;說明:(1)case括弧內(nèi)的表達(dá)式成為控制表達(dá)式,case分支項(xiàng)中的表達(dá)式稱為分支表達(dá)式。(2)當(dāng)控制表達(dá)式的值等于分支表達(dá)式的值時(shí),就執(zhí)行分支表達(dá)式后面的語句。2、case語句(1)case(表達(dá)式)<case分(3)default項(xiàng)可有可無,有且只準(zhǔn)有一個(gè)default項(xiàng)。(4)每個(gè)case分項(xiàng)的分項(xiàng)表達(dá)式的值必須互不相同。(5)執(zhí)行完case分項(xiàng)后的語句,則跳出該case語句結(jié)構(gòu),終止case語句的執(zhí)行。(6)在用case語句表達(dá)式進(jìn)行比較時(shí),只有當(dāng)信號(hào)的相應(yīng)位的值能明確進(jìn)行比較時(shí),比較才能成功。(7)case語句的所有表達(dá)式值得位寬必須相同。(3)default項(xiàng)可有可無,有且只準(zhǔn)有一個(gè)defaultcase,casez和casex的真值表casez語句用來處理不考慮高阻態(tài)z的比較過程。casex語句則將高阻態(tài)z和不定值x都視為不必關(guān)心的情況。case,casez和casex的真值表casez語句用來處例1:reg[7:0]ir;casez(ir)8'b1???????:instruction1(ir);8'b01??????:instruction2(ir);8'b00010???:instruction3(ir);8'b000001??:instruction4(ir);endcase例2:reg[7:0]r,mask;mask=8'bx0x0x0x0;casex(r^mask)8'b001100xx:stat1;8'b1100xx00:stat2;8'b00xx0011:stat3;8'bxx001100:stat4;endcase例1:reg[7:0]ir;例2:例3、case語句實(shí)現(xiàn)四選一多路選擇器modulemux4_to_1(out,i0,i1,i2,i3,s1,s0);outputout;inputi0,i1,i2,i3;inputs0,s1;regout;always@(s1ors0ori0ori1ori2ori3)begincase({s1,s0})2'b00:out=i0;2'b01:out=i1;2'b10:out=i2;2'b11:out=i3;default:out=1'bx;endcaseendendmodule例3、case語句實(shí)現(xiàn)四選一多路選擇器module3、循環(huán)語句(1)forever語句格式:forever語句;或foreverbegin多條語句end常用來產(chǎn)生周期性的波形,用來作為仿真測(cè)試信號(hào)。與always語句不同之處在于不能獨(dú)立寫在程序中,而必須寫在initial塊中。(2)repeat語句格式:repeat(表達(dá)式)語句;或者repeat(表達(dá)式)begin多條語句end其表達(dá)式通常為常量表達(dá)式3、循環(huán)語句(1)forever語句(3)while語句格式:while(表達(dá)式)語句;或者while(表達(dá)式)begin多條語句end例:對(duì)rega八位二進(jìn)制數(shù)中值為1的位進(jìn)行計(jì)數(shù)。begin:countlsreg[7:0]tempreg;count=0;tempreg=rega;while(tempreg)beginif(tempreg[0])count=count+1;tempreg=tempreg>>1;endend(3)while語句(4)for語句格式:for(表達(dá)式1;表達(dá)式2,表達(dá)式3)語句;最簡(jiǎn)單的應(yīng)用形式:for(循環(huán)變量賦初值;循環(huán)結(jié)束條件;循環(huán)變量增值)執(zhí)行語句;相當(dāng)于采用while循環(huán)語句建立如下結(jié)構(gòu):begin循環(huán)變量賦初值;while(循環(huán)結(jié)束條件)begin執(zhí)行語句;循環(huán)變量增值;endend(1)先求解表達(dá)式1.(2)求解表達(dá)式2,若其值為真(非0)則執(zhí)行for語句中指定的內(nèi)嵌語句,然后執(zhí)行下面的第(3)步。若為假(0)則結(jié)束循環(huán),轉(zhuǎn)到第(5)步。(3)若表達(dá)式為真,在執(zhí)行指定語句,求解表達(dá)式3.(4)轉(zhuǎn)回上面的第(2)步驟繼續(xù)執(zhí)行。(5)執(zhí)行for語句下面的語句(4)for語句最簡(jiǎn)單的應(yīng)用形式:(1)先求解表達(dá)式1.例1:for語句初始化memorybegin:init_memreg[7:0]tempi;for(tempi=0;tempi<memsize;tempi=tempi+1)memory[tempi]=0;end例2:八位二進(jìn)制數(shù)中值為1的位進(jìn)行計(jì)數(shù)的另一種方法begin:countlsreg[7:0]tempreg;count=0;for(tempreg=rega;tempreg;tempreg=tempreg>>1)if(tempreg[0])count=count+1;end例1:for語句初始化memory4、塊語句(1)順序塊(也稱過程塊)關(guān)鍵字begin_end用于將多條語句組成順序塊特點(diǎn):1、順序塊中的語句是一條一條按順序執(zhí)行的,只有前面的語句執(zhí)行完成之后才能執(zhí)行后面的語句。2、如果語句包括延遲或者事件控制,那么延遲總是相對(duì)于前面那條語句執(zhí)行完成的仿真時(shí)間的。regx,y;reg[1:0]z,w;initialbeginx=1'b0;//仿真時(shí)刻0完成#5y=1'b1;//仿真時(shí)刻5完成#10z={x,y};//仿真時(shí)刻15完成#20w={y,x};//仿真時(shí)刻35完成end4、塊語句(1)順序塊(也稱過程塊)regx,y;(2)并行塊關(guān)鍵詞fork_join聲明特點(diǎn):1、塊內(nèi)語句并行執(zhí)行;2、語句執(zhí)行順序是由各自語句內(nèi)延遲或事件控制決定的;3、語句中的延遲或事件控制是相對(duì)于快語句開始執(zhí)行的時(shí)刻而言的;regx,y;reg[1:0]z,w;initialforkx=1'b0;//仿真時(shí)刻0完成#5y=1'b1;//仿真時(shí)刻5完成#10z={x,y};//仿真時(shí)刻10完成#20w={y,x};//仿真時(shí)刻20完成join(2)并行塊regx,y;(3)塊語句特點(diǎn)1、嵌套塊initialbeginx=1'b0;fork#5y=1'b1;#10z={x,y};join#20w={y,x};end2、命名塊特點(diǎn):(1)命名塊中可以聲明局部變量;(2)命名塊是設(shè)計(jì)層次的一部分,命名塊中聲明的變量可以通過層次名引用進(jìn)行訪問;(3)命名塊可以被禁用,例如停止其執(zhí)行(3)塊語句特點(diǎn)2、命名塊5、過程塊(1)initial語句格式:initialbegin語句1;語句2;……語句n;end例1:對(duì)存儲(chǔ)器變量賦初始值。initialbeginareg=0;for(index=0;index<size;index=index+1)memory[index]=0;end例2:用initial語句生成激勵(lì)波形。initialbegininputs='b000000;#10inputs='b011001;#10inputs='b011011;#10inputs='b011000;#10inputs='b001000;end5、過程塊(1)initial語句例1:對(duì)存儲(chǔ)器變量賦初始值(2)always語句always語句在仿真過程中是不斷活動(dòng)著的。后跟的過程塊是否執(zhí)行,則看它的觸發(fā)條件是否滿足,如滿足則執(zhí)行一次;如不斷滿足,則不斷地循環(huán)執(zhí)行。其聲明格式如下:always<時(shí)序控制><語句>always語句由于其不斷活動(dòng)的特性,只有和一定的時(shí)序控制結(jié)合在一起才有用。如果一個(gè)always語句沒有時(shí)序控制,則這個(gè)always語句將會(huì)使仿真器產(chǎn)生死鎖。例1:alwaysareg=~areg;生成一個(gè)0延遲的無限循環(huán)跳變過程,發(fā)生仿真死鎖。例2:always#half_periodareg=~areg;生成一個(gè)周期為period的無限延續(xù)的信號(hào)波形。常用來描述時(shí)鐘信號(hào),并作為激勵(lì)信號(hào)來測(cè)試所設(shè)計(jì)的電路。always的時(shí)間控制可以是沿觸發(fā)也可以是沿電平觸發(fā)的,可以是單信號(hào)也可以是多信號(hào),中間用關(guān)鍵字or連接。沿觸發(fā)的always塊常常描述時(shí)序行為,如有限狀態(tài)機(jī)。電平觸發(fā)的always塊常常用來描述組合邏輯的行為。(2)always語句例3:reg[7:0]counter;regtick;always@(posedgeareg)begintick=~tick;counter=counter+1;end說明:一個(gè)程序模塊可以有多個(gè)initial和always過程塊。每個(gè)initial和always說明語句在仿真的一開始同時(shí)立即開始執(zhí)行。initial語句只執(zhí)行一次,而always語句是不斷地重復(fù)活動(dòng)著,直到仿真過程結(jié)束。在一個(gè)模塊中,使用initial和always語句次數(shù)不受限制,它們都是同時(shí)開始運(yùn)行的。例3:復(fù)習(xí)1、邏輯運(yùn)算符和按位運(yùn)算符有什么不同?2、舉例說明順序塊和并行塊的不同?3、阻塞和非阻塞賦值的區(qū)別和使用?4、仔細(xì)闡述case、casex和casez之間的不同?5、闡述for語句的執(zhí)行過程復(fù)習(xí)1、邏輯運(yùn)算符和按位運(yùn)算符有什么不同?THANKYOU THANKYOU Verilog表達(dá)式和語句39AVerilog表達(dá)式和語句1A目錄一運(yùn)算符及表達(dá)式二語句目錄40A目錄一運(yùn)算符及表達(dá)式二語句目2A壹運(yùn)算符及表達(dá)式1、基本的算數(shù)運(yùn)算符2、賦值運(yùn)算符3、關(guān)系運(yùn)算符4、邏輯運(yùn)算符5、位運(yùn)算符6、等式運(yùn)算符7、移位運(yùn)算符8、位拼接運(yùn)算符9、優(yōu)先級(jí)別41A壹運(yùn)算符及表達(dá)式1、基本的算數(shù)運(yùn)算符3A一

運(yùn)算符(1)算數(shù)運(yùn)算符:+、-、x、/、%(2)賦值運(yùn)算符:=、<=(3)關(guān)系運(yùn)算符:>、<、>=、<=(4)邏輯運(yùn)算符:&&、||、!(5)條件運(yùn)算符:?:(6)位運(yùn)算符:&、|、~、^、^~(7)移位運(yùn)算符:<<、>>(8)拼接運(yùn)算符:{}(9)其他。一運(yùn)算符(1)算數(shù)運(yùn)算符:+、-、x、/、%1、基本的算數(shù)運(yùn)算符(二進(jìn)制運(yùn)算符)(1)+(加法運(yùn)算符,正值運(yùn)算符,如rega+regb,+3)(2)-(減法運(yùn)算符,負(fù)值運(yùn)算符,如rega-2,-3)(3)x(乘法運(yùn)算符,如rega*3)(4)/(除法運(yùn)算符,如5/3)在進(jìn)行整數(shù)除法運(yùn)算時(shí),結(jié)果值略去小數(shù)部分,只取整數(shù)部分。(5)%(模運(yùn)算符,或者求余運(yùn)算符,如7%3值為1)結(jié)果的符號(hào)位采用模運(yùn)算式里第一個(gè)操作數(shù)的符號(hào)位,如:10%3,-10%3,10%-31、基本的算數(shù)運(yùn)算符(二進(jìn)制運(yùn)算符)(1)+(加法運(yùn)算符,正2、賦值運(yùn)算符(1)非阻塞賦值方式(如b<=a)特點(diǎn):1、所賦變量值不能立即為下面語句所用;2、塊結(jié)束后才完成賦值操作,所賦的變量是上一次賦值得到的;3、編寫可綜合的時(shí)序邏輯模塊,這是最常用的賦值。例1always@(posedgeclk)beginb<=a;c<=b;end2、賦值運(yùn)算符(1)非阻塞賦值方式(如b<=a)(2)阻塞賦值方式(如b=a)特點(diǎn):1、賦值語句執(zhí)行完后,塊才結(jié)束;2、賦值語句執(zhí)行后,變量值立即改變;3、用在時(shí)序邏輯中,會(huì)產(chǎn)生意想不到的結(jié)果。例2always@(posedgeclk)beginb=a;c=b;endDCLKQclkabc(2)阻塞賦值方式(如b=a)DCLKQclkabc3、關(guān)系運(yùn)算符(1)a<b(2)a>b(3)a<=b(4)a>=b在進(jìn)行關(guān)系運(yùn)算時(shí),如果聲明關(guān)系為假(flase),返回值為0;如果聲明關(guān)系為真(true),則返回值為1;如果某個(gè)操作數(shù)不定,則關(guān)系模糊,返回值為不定值。3、關(guān)系運(yùn)算符(1)a<b(2)a>b(3)a<=b4、邏輯運(yùn)算符(1)&&邏輯與;(2)||邏輯或;(3)!邏輯非;“&&”和“||”是雙目運(yùn)算符,“!”是單目運(yùn)算符4、邏輯運(yùn)算符(1)&&邏輯與;5、位運(yùn)算符(1)~按位取反,單目,如a='b1010;(2)&按位取與,將兩個(gè)操作數(shù)相應(yīng)位進(jìn)行與運(yùn)算。(3)|按位取或,將兩個(gè)操作數(shù)相應(yīng)位進(jìn)行或運(yùn)算。(4)^按位異或,也稱XOR運(yùn)算符,將兩個(gè)操作數(shù)相應(yīng)位進(jìn)行異或運(yùn)算。(5)^~按位同或,將兩個(gè)操作數(shù)先進(jìn)行相應(yīng)位異或運(yùn)算在進(jìn)行非運(yùn)算。兩個(gè)不同長(zhǎng)度的數(shù)據(jù)進(jìn)行位運(yùn)算,系統(tǒng)會(huì)自動(dòng)地將兩者按右端對(duì)齊,位數(shù)少的操作數(shù)會(huì)在相應(yīng)的高位用0填滿,再進(jìn)行位操作。5、位運(yùn)算符(1)~按位取反,單目,如a='b1010;Verilog表達(dá)式和語句課件6、等式運(yùn)算符(1)==等于(2)!=不等于又稱邏輯等式運(yùn)算符,結(jié)果由兩個(gè)操作數(shù)的值決定。操作數(shù)中可能為不定值x和高阻態(tài)z,結(jié)果可能為不定值x。6、等式運(yùn)算符(1)==等于(3)===等于(4)!==不等于case等式運(yùn)算符,常用于case表達(dá)式的判別。對(duì)操作數(shù)進(jìn)行比較時(shí)對(duì)某些位的不定值和高阻態(tài)也進(jìn)行比較,兩個(gè)操作數(shù)必須完全一致時(shí),結(jié)果才是1,否則為0。(3)===等于7、移位運(yùn)算符(1)<<左移位(2)>>右移位使用方法:a<<n或a>>n,a代表進(jìn)行移位的操作數(shù),n代表要移幾位。用0來填補(bǔ)移出的空位。例:4'b1001<<1=5'b10010;4'b1001>>2=4'b0010;7、移位運(yùn)算符(1)<<左移位(2)>>右移位8、位拼接運(yùn)算符位拼接運(yùn)算符{},用這個(gè)運(yùn)算符可以把兩個(gè)或多個(gè)信號(hào)的某些位拼接起來進(jìn)行運(yùn)算操作,使用方法:{信號(hào)1的某幾位,信號(hào)2的某幾位,……,信號(hào)n的某幾位}例:{a,b[3:0],w,3'b101},可以寫成{a,b[3],b[2],b[1],b[0],w,1'b1,1'b0,1'b1}在位拼接表達(dá)式中不允許存在沒有指明位數(shù)的信號(hào)。例:重復(fù),{4{w}}等同于{w,w,w,w}嵌套,{b,{3{a,b}}}等同于{b,a,b,a,b,a,b}8、位拼接運(yùn)算符位拼接運(yùn)算符{},用這個(gè)運(yùn)算符可以把兩個(gè)或9、優(yōu)先級(jí)別9、優(yōu)先級(jí)別貳語句1、條件語句(if_else)2、case語句3、循環(huán)語句4、塊語句5、過程塊貳語句1、條件語句(if_else)1、條件語句(if_else)(1)if(表達(dá)式)語句。例如:if(a<b)out1=int1;(2)if(表達(dá)式)語句1else語句2例如:if(a<b)out1=int1;elseout2=int2;if語句是用來判斷所給定的條件是否滿足,根據(jù)判定的結(jié)果決定執(zhí)行給出的兩種操作之一。1、條件語句(if_else)(1)if(表達(dá)式)語句。例(3)if(表達(dá)式1)語句1;elseif(表達(dá)式2)語句2;elseif(表達(dá)式3)語句3;::elseif(表達(dá)式m)語句m;else語句n;注:條件語句必須在過程塊中使用。所謂過程塊是指由initial和always語句引導(dǎo)的執(zhí)行語句集合。除這兩種塊語句引導(dǎo)的beginend塊中可以編寫條件語句外,模塊中其他地方都不能編寫。(3)if(表達(dá)式1)注:條件語句必須在過程塊中使用。所謂6點(diǎn)說明:(1)3種形式的if語句中if后面都有“表達(dá)式”,一般為邏輯表達(dá)式和關(guān)系表達(dá)式。只有表達(dá)式的值為1時(shí),執(zhí)行指定語句。(2)第2、3種形式的if語句,在每個(gè)else前面有一個(gè)分號(hào),整個(gè)語句結(jié)束處有一個(gè)分號(hào)。else子句不能作為語句單獨(dú)使用,它必須是if語句的一部分,與if配對(duì)使用。(3)在if和else后面可以包含一個(gè)內(nèi)嵌的操作語句,也可以有多個(gè)操作語句,此時(shí)用begin和end這兩個(gè)關(guān)鍵詞將幾個(gè)語句包含起來成為一個(gè)復(fù)合塊語句。例:if(a>b)beginout1<=int1;out2<=int2;endelsebeginout1<=int2;out2<=int1;end6點(diǎn)說明:(3)在if和else后面可以包含一個(gè)內(nèi)嵌的操作語(4)允許一定形式的表達(dá)式簡(jiǎn)寫方式。例如:if(expression)等同與if(expression==1)if(!expression)等同與if(expression!=1)(5)if語句的嵌套。例如:if(expression1)if(expression2)語句1;(內(nèi)嵌if)else語句2;elseif(expression3)語句3;(內(nèi)嵌if)else語句4;注:注意if和else的配對(duì)關(guān)系,else總是和它上面最近的if配對(duì)。如果if和else的數(shù)目不一樣,為了實(shí)現(xiàn)程序設(shè)計(jì)者的企圖,可以用begin_end塊語句來確定配對(duì)關(guān)系。(4)允許一定形式的表達(dá)式簡(jiǎn)寫方式。例如:2、case語句(1)case(表達(dá)式)<case分支項(xiàng)>endcase(2)casez(表達(dá)式)<case分支項(xiàng)>endcase(3)casex(表達(dá)式)<case分支項(xiàng)>endcasecase分支項(xiàng)的一般格式如下:分支表達(dá)式:語句;默認(rèn)項(xiàng)(default項(xiàng)):語句;說明:(1)case括弧內(nèi)的表達(dá)式成為控制表達(dá)式,case分支項(xiàng)中的表達(dá)式稱為分支表達(dá)式。(2)當(dāng)控制表達(dá)式的值等于分支表達(dá)式的值時(shí),就執(zhí)行分支表達(dá)式后面的語句。2、case語句(1)case(表達(dá)式)<case分(3)default項(xiàng)可有可無,有且只準(zhǔn)有一個(gè)default項(xiàng)。(4)每個(gè)case分項(xiàng)的分項(xiàng)表達(dá)式的值必須互不相同。(5)執(zhí)行完case分項(xiàng)后的語句,則跳出該case語句結(jié)構(gòu),終止case語句的執(zhí)行。(6)在用case語句表達(dá)式進(jìn)行比較時(shí),只有當(dāng)信號(hào)的相應(yīng)位的值能明確進(jìn)行比較時(shí),比較才能成功。(7)case語句的所有表達(dá)式值得位寬必須相同。(3)default項(xiàng)可有可無,有且只準(zhǔn)有一個(gè)defaultcase,casez和casex的真值表casez語句用來處理不考慮高阻態(tài)z的比較過程。casex語句則將高阻態(tài)z和不定值x都視為不必關(guān)心的情況。case,casez和casex的真值表casez語句用來處例1:reg[7:0]ir;casez(ir)8'b1???????:instruction1(ir);8'b01??????:instruction2(ir);8'b00010???:instruction3(ir);8'b000001??:instruction4(ir);endcase例2:reg[7:0]r,mask;mask=8'bx0x0x0x0;casex(r^mask)8'b001100xx:stat1;8'b1100xx00:stat2;8'b00xx0011:stat3;8'bxx001100:stat4;endcase例1:reg[7:0]ir;例2:例3、case語句實(shí)現(xiàn)四選一多路選擇器modulemux4_to_1(out,i0,i1,i2,i3,s1,s0);outputout;inputi0,i1,i2,i3;inputs0,s1;regout;always@(s1ors0ori0ori1ori2ori3)begincase({s1,s0})2'b00:out=i0;2'b01:out=i1;2'b10:out=i2;2'b11:out=i3;default:out=1'bx;endcaseendendmodule例3、case語句實(shí)現(xiàn)四選一多路選擇器module3、循環(huán)語句(1)forever語句格式:forever語句;或foreverbegin多條語句end常用來產(chǎn)生周期性的波形,用來作為仿真測(cè)試信號(hào)。與always語句不同之處在于不能獨(dú)立寫在程序中,而必須寫在initial塊中。(2)repeat語句格式:repeat(表達(dá)式)語句;或者repeat(表達(dá)式)begin多條語句end其表達(dá)式通常為常量表達(dá)式3、循環(huán)語句(1)forever語句(3)while語句格式:while(表達(dá)式)語句;或者while(表達(dá)式)begin多條語句end例:對(duì)rega八位二進(jìn)制數(shù)中值為1的位進(jìn)行計(jì)數(shù)。begin:countlsreg[7:0]tempreg;count=0;tempreg=rega;while(tempreg)beginif(tempreg[0])count=count+1;tempreg=tempreg>>1;endend(3)while語句(4)for語句格式:for(表達(dá)式1;表達(dá)式2,表達(dá)式3)語句;最簡(jiǎn)單的應(yīng)用形式:for(循環(huán)變量賦初值;循環(huán)結(jié)束條件;循環(huán)變量增值)執(zhí)行語句;相當(dāng)于采用while循環(huán)語句建立如下結(jié)構(gòu):begin循環(huán)變量賦初值;while(循環(huán)結(jié)束條件)begin執(zhí)行語句;循環(huán)變量增值;endend(1)先求解表達(dá)式1.(2)求解表達(dá)式2,若其值為真(非0)則執(zhí)行for語句中指定的內(nèi)嵌語句,然后執(zhí)行下面的第(3)步。若為假(0)則結(jié)束循環(huán),轉(zhuǎn)到第(5)步。(3)若表達(dá)式為真,在執(zhí)行指定語句,求解表達(dá)式3.(4)轉(zhuǎn)回上面的第(2)步驟繼續(xù)執(zhí)行。(5)執(zhí)行for語句下面的語句(4)for語句最簡(jiǎn)單的應(yīng)用形式:(1)先求解表達(dá)式1.例1:for語句初始化memorybegin:init_memreg[7:0]tempi;for(tempi=0;tempi<memsize;tempi=tempi+1)memory[tempi]=0;end例2:八位二進(jìn)制數(shù)中值為1的位進(jìn)行計(jì)數(shù)的另一種方法begin:countlsreg[7:0]tempreg;count=0;for(tempreg=rega;tempreg;tempreg=tempreg>>1)if(tempreg[0])count=count+1;end例1:for語句初始化memory4、塊語句(1)順序塊(也稱過程塊)關(guān)鍵字begin_end用于將多條語句組成順序塊特點(diǎn):1、順序塊中的語句是一條一條按順序執(zhí)行的,只有前面的語句執(zhí)行完成之后才能執(zhí)行后面的語句。2、如果語句包括延遲或者事件控制,那么延遲總是相對(duì)于前面那條語句執(zhí)行完成的仿真時(shí)間的。regx,y;reg[1:0]z,w;initialbeginx=1'b0;//仿真時(shí)刻0完成#5y=1'b1;//仿真時(shí)刻5完成#10z={x,y};//仿真時(shí)刻15完成#20w={y,x};//仿真時(shí)刻35完成end4、塊語句(1)順序塊(也稱過程塊)regx,y;(2)并行塊關(guān)鍵詞fork_join聲明特點(diǎn):1、塊內(nèi)語句并行執(zhí)行;2、語句執(zhí)行順序是由各自語句內(nèi)延遲或事件控制決定的;3、語句中的延遲或事件控制是相對(duì)于快語句開始執(zhí)行的時(shí)刻

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論