版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第9章Verilog語言規(guī)則9.1文字規(guī)則——整數(shù)和實(shí)常數(shù)
Verilog語言中常數(shù)可以是整數(shù)、實(shí)數(shù)和字符串:整數(shù)可以標(biāo)明位數(shù)也可以不標(biāo)明位數(shù),表示方法:《位寬》’《進(jìn)制》《數(shù)字》其中《位寬》表明該數(shù)用二進(jìn)制的幾位來表示《進(jìn)制》可以是二(b)、八(O)、十(d)或十六(h)進(jìn)制《數(shù)字》可以是所選基數(shù)的任何合法的值包括不定值x位和高阻值z(mì)(?)。如:64’hff018’b1101_0001’h83a-8’d5實(shí)常數(shù)可以用十進(jìn)制表示也可以用科學(xué)浮點(diǎn)數(shù)表示,如:32e-4(表示0.0032)4.1E3(表示4100)4個(gè)16進(jìn)制數(shù)共64位下劃線不能出現(xiàn)在位寬和進(jìn)制間位寬可以缺省,由機(jī)器系統(tǒng)決定!負(fù)數(shù)寫在前面文字規(guī)則——字符串
Verilog語言中,字符串常常用于表示命令內(nèi)需要顯示的信息。用“”括起來的一行字符串,換新一行用“\n”字符,與C語言一致。在字符串中可以用C語言中的各種格式控制符,如\t,\”,\\…在字符串中可以用C語言中的各種數(shù)值型式控制符(有些不同),如:%b(二進(jìn)制),%o(八進(jìn)制),%d(十進(jìn)制),%h(十六進(jìn)制),%t(時(shí)間類型),%s(字符串類型)…文字規(guī)則——標(biāo)識(shí)符五、標(biāo)識(shí)符
任何用VerilogHDL語言描述的“東西”都通過其名字來識(shí)別,這個(gè)名字被稱為標(biāo)識(shí)符。如源文件名、模塊名、端口名、變量名、常量名、實(shí)例名等。標(biāo)識(shí)符可由字母、數(shù)字、下劃線和$符號(hào)構(gòu)成;但第一個(gè)字符必須是字母或下劃線,不能是數(shù)字或$符號(hào)!在VerilogHDL中變量名是區(qū)分大小寫的!合法的名字:A_99_ZReset_54MHz_Clock$Module
不合法的名字:123a$datamodule7seg.v標(biāo)識(shí)符不能與關(guān)鍵字同名!9.2數(shù)據(jù)類型一、數(shù)據(jù)類型數(shù)據(jù)類型是用來表示數(shù)字電路中的數(shù)據(jù)存儲(chǔ)和傳送單元。VerilogHDL中共有19種數(shù)據(jù)類型;其中4個(gè)最基本的數(shù)據(jù)類型為:integer型parameter型reg型wire型
其它數(shù)據(jù)類型:large型、medium型、scalared型、small型、time型、tri型、tri0型、tri1型、triand型、trior型、trireg型、vectored型、wand型、wor型等二、常量在程序運(yùn)行過程中,其值不能被改變的量,稱為常量。數(shù)字(包括整數(shù),x和z值,負(fù)數(shù))parameter常量(或稱符號(hào)常量)9.2數(shù)據(jù)類型三、變量在程序運(yùn)行過程中,其值可以改變的量,稱為變量。其數(shù)據(jù)類型有19種,常用的有3種:網(wǎng)絡(luò)型(netstype)寄存器型(registertype)數(shù)組(memorytype)1.nets型變量定義——輸出始終隨輸入的變化而變化的變量。表示結(jié)構(gòu)實(shí)體(如門)之間的物理連接。常用nets型變量:wire,tri:連線類型(兩者功能一致)wor,trior:具有線或特性的連線(兩者功能一致)wand,triand:具有線與特性的連線(兩者功能一致)tri1,tri0:上拉電阻和下拉電阻supply1,supply0:電源(邏輯1)和地(邏輯0)
nets型變量不能儲(chǔ)存值!9.2數(shù)據(jù)類型wire型變量最常用的nets型變量,常用來表示以assign語句賦值的組合邏輯信號(hào)。模塊中的輸入/輸出信號(hào)類型缺省為wire型。可用做任何方程式的輸入,或“assign”語句和實(shí)例元件的輸出。wire數(shù)據(jù)名1,數(shù)據(jù)名2,……,數(shù)據(jù)名n;wire[n-1:0]數(shù)據(jù)名1,數(shù)據(jù)名2,……,數(shù)據(jù)名m;或wire[n:1]數(shù)據(jù)名1,數(shù)據(jù)名2,……,數(shù)據(jù)名m;每條總線位寬為n共有m條總線wire型向量(總線)格式9.2數(shù)據(jù)類型定義——對(duì)應(yīng)具有狀態(tài)保持作用的電路元件(如觸發(fā)器、寄存器等),常用來表示過程塊語句(如initial,always,task,function)內(nèi)的指定信號(hào)。常用register型變量:reg:常代表觸發(fā)器integer:32位帶符號(hào)整數(shù)型變量real:64位帶符號(hào)實(shí)數(shù)型變量time:無符號(hào)時(shí)間變量純數(shù)學(xué)的抽象描述2.register型變量9.2數(shù)據(jù)類型register型變量與nets型變量的根本區(qū)別是:register型變量需要被明確地賦值,并且在被重新賦值前一直保持原值。register型變量必須通過過程賦值語句賦值!不能通過assign語句賦值!在過程塊內(nèi)被賦值的每個(gè)信號(hào)必須定義成register型!9.2數(shù)據(jù)類型reg型變量定義——在過程塊中被賦值的信號(hào),往往代表觸發(fā)器,但不一定就是觸發(fā)器(也可以是組合邏輯信號(hào))!reg數(shù)據(jù)名1,數(shù)據(jù)名2,……,數(shù)據(jù)名n;reg[n-1:0]數(shù)據(jù)名1,數(shù)據(jù)名2,……,數(shù)據(jù)名m;或reg[n:1]數(shù)據(jù)名1,數(shù)據(jù)名2,……,數(shù)據(jù)名m;每個(gè)向量位寬為n共有m個(gè)reg型向量[例]reg[4:1]regc,regd;//regc,regd為4位寬的reg型向量reg型向量(總線)格式9.2數(shù)據(jù)類型用reg型變量生成組合邏輯舉例:
modulerw1(a,b,out1,out2);
inputa,b;
outputout1,out2;
regout1;
wireout2;
assignout2=a;
always@(b)
out1<=~b;
endmoduleaout2BUFFbINVout1過程賦值語句連續(xù)賦值語句電平觸發(fā)Verilog中reg與wire的區(qū)別reg型變量既可生成觸發(fā)器,也可生成組合邏輯;wire型變量只能生成組合邏輯。9.2數(shù)據(jù)類型用reg型變量生成觸發(fā)器舉例:
modulerw2(clk,d,out1,out2);
inputclk,d;
outputout1,out2;
regout1;
wireout2;
assignout2=d&~out1;
always@(posedgeclk)
begin
out1<=d;
end
endmodule
過程賦值語句連續(xù)賦值語句dout2AND2i1clkout1DQDFF邊沿觸發(fā)9.2數(shù)據(jù)類型定義——由若干個(gè)相同寬度的reg型向量構(gòu)成的數(shù)組。VerilogHDL通過reg型變量建立數(shù)組來對(duì)存儲(chǔ)器建模。memory型變量可描述RAM、ROM和reg文件。memory型變量通過擴(kuò)展reg型變量的地址范圍來生成:reg[n-1:0]存儲(chǔ)器名[m-1:0];或reg[n-1:0]存儲(chǔ)器名[m:1];每個(gè)存儲(chǔ)單元位寬為n共有m個(gè)存儲(chǔ)單元3.memory型變量——數(shù)組QuartusII不支持!VerilogHDL中的變量名、參數(shù)名等標(biāo)記符是對(duì)大小寫字母敏感的!9.2數(shù)據(jù)類型含義不同
[例]reg[n-1:0]
rega;//一個(gè)n位的寄存器regmema[n-1:0];//由n個(gè)1位寄存器組成的存儲(chǔ)器
必須指明存儲(chǔ)單元的地址!0n-10n-1n-2···地址賦值方式不同
一個(gè)n位的寄存器可用一條賦值語句賦值;一個(gè)完整的存儲(chǔ)器則不行!若要對(duì)某存儲(chǔ)器中的存儲(chǔ)單元進(jìn)行讀寫操作,必須指明該單元在存儲(chǔ)器中的地址!
[例]rega=0;//合法賦值語句mema=0;//非法賦值語句mema[8]=1;//合法賦值語句mema[1023:0]=0;//合法賦值語句memory型變量與reg型變量的區(qū)別9.3操作符一、算術(shù)操作符二、邏輯操作符三、位操作符四、關(guān)系操作符五、等式操作符
內(nèi)容概要六、縮減操作符七、縮位操作符八、條件操作符九、位拼接操作符十、操作符的優(yōu)先級(jí)9.3操作符操作符按功能分為9類:算術(shù)操作符邏輯操作符關(guān)系操作符等式操作符縮位操作符條件操作符位操作符移位操作符位拼接操作符操作符按操作數(shù)的個(gè)數(shù)分為3類:?jiǎn)文坎僮鞣獛б粋€(gè)操作數(shù)邏輯非!,按位取反~,縮位操作符,移位操作符雙目操作符——帶兩個(gè)操作數(shù)算術(shù)、關(guān)系、等式操作符,邏輯、位操作符的大部分三目操作符——帶三個(gè)操作數(shù)條件操作符
9.3操作符一、算術(shù)操作符算術(shù)運(yùn)算符說明+-*/%加減乘除求模雙目運(yùn)算符進(jìn)行整數(shù)除法運(yùn)算時(shí),結(jié)果值略去小數(shù)部分,只取整數(shù)部分!%稱為求模(或求余)操作符,要求%兩側(cè)均為整型數(shù)據(jù);求模運(yùn)算結(jié)果值的符號(hào)位取第一個(gè)操作數(shù)的符號(hào)位![例]-11%3結(jié)果為-2進(jìn)行算術(shù)運(yùn)算時(shí),若某操作數(shù)為不定值x,則整個(gè)結(jié)果也為x。 MAX+PLUSII不支持“/”和“%”運(yùn)算!QuartusII都支持!9.3操作符[例]除法和求模運(yùn)算的區(qū)別注意/和%的區(qū)別!9.3操作符9/4=29%4=1arithmetic.vwf9.3操作符二、邏輯操作符邏輯操作符把它的操作數(shù)當(dāng)作布爾變量:非零的操作數(shù)被認(rèn)為是真(1‘b1);零被認(rèn)為是假(1‘b0);不確定的操作數(shù)如4’bxx00,被認(rèn)為是不確定的(可能為零,也可能為非零)(記為1’bx);但4’bxx11被認(rèn)為是真(記為1’b1,因?yàn)樗隙ㄊ欠橇愕模_壿嫴僮鞣f明
&&(雙目)||(雙目)!(單目)邏輯與邏輯或邏輯非進(jìn)行邏輯運(yùn)算后的結(jié)果為布爾值(為1或0或x)!9.3操作符“&&”和“||”的優(yōu)先級(jí)除高于條件操作符外,低于關(guān)系操作符、等式操作符等幾乎所有操作符;邏輯非“!”優(yōu)先級(jí)最高。[例](a>b)&&(b>c) 可簡(jiǎn)寫為:a>b&&b>c(a==b)||(x==y) 可簡(jiǎn)寫為:a==b||x==y(!a)||(a>b) 可簡(jiǎn)寫為:!a||a>b為提高程序的可讀性,明確表達(dá)各操作符之間的優(yōu)先關(guān)系,建議使用括號(hào)!為提高程序的可讀性,明確表達(dá)各操作符之間的優(yōu)先關(guān)系,建議使用括號(hào)!9.3操作符三、位操作符位操作符說明~&|^^~,~^按位取反按位與按位或按位異或按位同或雙目操作符單目操作符位運(yùn)算其結(jié)果與操作數(shù)位數(shù)相同。位操作符中的雙目操作符要求對(duì)兩個(gè)操作數(shù)的相應(yīng)位逐位進(jìn)行運(yùn)算。兩個(gè)不同長(zhǎng)度的操作數(shù)進(jìn)行位運(yùn)算時(shí),將自動(dòng)按右端對(duì)齊,位數(shù)少的操作數(shù)會(huì)在高位用0補(bǔ)齊。[例]若A=5’b11001,B=3’b101,則A&B=(5’b11001)&(5’b00101)=5’b000019.3操作符[例]&&操作符和&(按位與)的區(qū)別&&運(yùn)算的結(jié)果為1位的邏輯值注意&&和&的區(qū)別!被認(rèn)為是
1‘b1被認(rèn)為是
1‘bx邏輯與結(jié)果為
1‘bx9.3操作符四、關(guān)系操作符關(guān)系操作符說明<<=>>=小于小于或等于大于大于或等于雙目操作符括號(hào)內(nèi)先運(yùn)算!算術(shù)運(yùn)算先運(yùn)算!運(yùn)算結(jié)果為1位的邏輯值1或0或x。關(guān)系運(yùn)算時(shí),若關(guān)系為真,則返回值為1;若聲明的關(guān)系為假,則返回值為0;若某操作數(shù)為不定值x,則返回值為x。所有的關(guān)系操作符優(yōu)先級(jí)別相同。關(guān)系操作符的優(yōu)先級(jí)低于算術(shù)操作符。[例]a<size-1 等同于:a<(size-1)size-(1<a) 不等同于:size-1<a9.3操作符五、等式操作符等式操作符說明==!====!==等于不等于全等不全等雙目操作符運(yùn)算結(jié)果為1位的邏輯值1或0或x。等于操作符(==)和全等操作符(===)的區(qū)別:使用等于操作符時(shí),兩個(gè)操作數(shù)必須逐位相等,結(jié)果才為1;若某些位為x或z,則結(jié)果為x。使用全等操作符時(shí),若兩個(gè)操作數(shù)的相應(yīng)位完全一致(如同是1,或同是0,或同是x,或同是z),則結(jié)果為1;否則為0。所有的等式操作符優(yōu)先級(jí)別相同。===和!==操作符常用于case表達(dá)式的判別,又稱為“case等式操作符”。MAX+PLUSII和QuartusII都不支持!9.3操作符[例]if(A
==
1’bx)$display(“AisX”);//當(dāng)A為不定值時(shí),式(A==1’bx)的運(yùn)算結(jié)果為x,則該語句不執(zhí)行if(A
===
1’bx)$display(“AisX”);//當(dāng)A為不定值時(shí),式(A===1’bx)的運(yùn)算結(jié)果為1,該語句執(zhí)行==01xz01xz10xx01xxxxxxxxxx===01xz01xz1000010000100001表3-1“==”的真值表表3-2“===”的真值表等于運(yùn)算的結(jié)果可能為1或0或x全等于運(yùn)算的結(jié)果只有1或09.3操作符六、縮位操作符縮減操作符說明&~&|~|^^~,~^與與非或或非異或同或單目操作符運(yùn)算法則與位操作符類似,但運(yùn)算過程不同!對(duì)單個(gè)操作數(shù)進(jìn)行遞推運(yùn)算,即先將操作數(shù)的最低位與第二位進(jìn)行與、或、非運(yùn)算,再將運(yùn)算結(jié)果與第三位進(jìn)行相同的運(yùn)算,依次類推,直至最高位。運(yùn)算結(jié)果縮減為1位二進(jìn)制數(shù)。[例]reg[3:0]a;b=|a;//等效于b=((a[0]|a[1])|a(2))|a[3]注意縮減操作符和位操作符的區(qū)別!9.3操作符七、移位操作符移位操作符說明>><<右移左移單目操作符只有當(dāng)右操作數(shù)為常數(shù)時(shí)MAX+PLUSII支持!左移會(huì)擴(kuò)充位數(shù)!用法:A>>n或A<<n
將操作數(shù)右移或左移n位,同時(shí)用n個(gè)0填補(bǔ)移出的空位。[例]4’b1001>>3=4’b0001;4’b1001>>4=4’b00004’b1001<<1=5’b10010;4’b1001<<2=6’b100100;1<<6=32’b1000000將操作數(shù)右移或左移n位,相當(dāng)于將操作數(shù)除以或乘以2n。右移位數(shù)不變,但右移的數(shù)據(jù)會(huì)丟失!9.3操作符八、條件操作符三目操作符in1outMUXin0sel信號(hào)=條件?表達(dá)式1:表達(dá)式2條件操作符為?:用法:[例]數(shù)據(jù)選擇器assignout=sel?in1:in0;當(dāng)條件為真,信號(hào)取表達(dá)式1的值;為假,則取表達(dá)式2的值。sel=1時(shí)out=in1;sel=0時(shí)out=in09.3操作符九、位拼接操作符位拼接操作符為{}用于將兩個(gè)或多個(gè)信號(hào)的某些位拼接起來,表示一個(gè)整體信號(hào)。用法:{信號(hào)1的某幾位,信號(hào)2的某幾位,……,信號(hào)n的某幾位}例如在進(jìn)行加法運(yùn)算時(shí),可將進(jìn)位輸出與和拼接在一起使用。[例1]output[3:0]sum;//和outputcout;//進(jìn)位輸出input[3:0]ina,inb;inputcin;assign{cout,sum}=ina+inb+cin;//進(jìn)位與和拼接在一起[例2]{a,b[3:0],w,3’b101}={a,b[3],b[2],b[1],b[0],w,1’b1,1’b0,1’b1}9.3操作符可用重復(fù)法簡(jiǎn)化表達(dá)式,如:{4{w}}//等同于{w,w,w,w}還可用嵌套方式簡(jiǎn)化書寫,如:{b,{3{a,b}}}//等同于{b,{a,b},{a,b},{a,b}},也等同于{b,a,b,a,b,a,b}用于表示重復(fù)的表達(dá)式必須為常數(shù)表達(dá)式!在位拼接表達(dá)式中,不允許存在沒有指明位數(shù)的信號(hào),必須指明信號(hào)的位數(shù);若未指明,則默認(rèn)為32位的二進(jìn)制數(shù)!如{1,0}=64’h00000001_00000000,注意{1,0}不等于2‘b109.3操作符十、操作符的優(yōu)先級(jí)類別運(yùn)算符優(yōu)先級(jí)邏輯、位操作符!~高低算術(shù)操作符*/%+-移位操作符<<>>關(guān)系操作符<<=>>=等式操作符==!====!==縮位、位操作符&~&^^~|~|邏輯操作符&&||條件操作符?:表3-3操作符的優(yōu)先級(jí)為提高程序的可讀性,建議使用括號(hào)來控制運(yùn)算的優(yōu)先級(jí)![例](a>b)&&(b>c)(a==b)||(x==y)(!a)||(a>b)9.4基本語句賦值語句連續(xù)賦值語句過程賦值語句塊語句begin_end語句fork_join語句QuartusII不支持條件語句if_else語句case語句循環(huán)語句forever語句MAX+PLUSII不支持repeat語句MAX+PLUSII不支持while語句MAX+PLUSII不支持for語句結(jié)構(gòu)說明語句initial語句QuartusII不支持always語句task語句MAX+PLUSII不支持function語句編譯預(yù)處理語句‘define語句‘include語句QuartusII不支持‘timescale語句QuartusII不支持表3-4VerilogHDL的語句9.4基本語句一、initial語句initial
begin語句1;語句2;……語句n;
endMAX+PLUSⅡ和QuartusⅡ均不支持!格式
[例3.9.4]利用initial語句生成激勵(lì)波形。
initialbegininputs=’b000000;#10inputs=’b011001;#10inputs=’b011011;#10inputs=’b011000;#10inputs=’b001000;end不可綜合!常用在測(cè)試文件中用途在仿真的初始狀態(tài)對(duì)各變量進(jìn)行初始化;在測(cè)試文件中生成激勵(lì)波形作為電路的仿真信號(hào)。9.4基本語句……parametersize=16;reg[3:0]addr;regreg1;reg[7:0]memory[0:15];initialbeginreg1=0;for(addr=0;addr<size;addr=addr+1);memory[addr]=0;end……[例3.9.5]對(duì)各變量進(jìn)行初始化。9.4基本語句二、forever語句無條件連續(xù)執(zhí)行forever后面的語句或語句塊。forever語句forever
begin……
end或常用在測(cè)試模塊中產(chǎn)生周期性的波形,作為仿真激勵(lì)信號(hào)。常用disable語句跳出循環(huán)!注:不同于always語句,不能獨(dú)立寫在程序中,一般用在initial語句塊中!格式initialbegin:Clocking clk=0;#10forever#10clk=!clk;endinitialbegin:Stimulus ……
disableClocking;//停止時(shí)鐘end一般情況下是不可綜合的!常用在測(cè)試文件中9.4.3編譯指示語句一、‵define語句二、‵include語句三、‵timescale語句四、條件編譯語句‵ifdef‵else‵endif內(nèi)容概要一、‵define語句宏定義語句——用一個(gè)指定的標(biāo)志符(即宏名)來代表一個(gè)字符串(即宏內(nèi)容)。‵define標(biāo)志符(即宏名)字符串(即宏內(nèi)容)[例]‵defineINina+inb+inc+ind宏展開——在編譯預(yù)處理時(shí)將宏名替換為字符串的過程。“編譯預(yù)處理”是VerilogHDL編譯系統(tǒng)的一個(gè)組成部分。編譯預(yù)處理語句以西文符號(hào)“‵”開頭——注意,不是單引號(hào)“’”!在編譯時(shí),編譯系統(tǒng)先對(duì)編譯預(yù)處理語句進(jìn)行預(yù)處理,然后將處理結(jié)果和源程序一起進(jìn)行編譯。格式9.4.3編譯指示語句宏名可以用大寫字母,也可用小寫字母表示;但建議用大寫字母,以與變量名相區(qū)別。‵define語句可以寫在模塊定義的外面或里面。宏名的有效范圍為定義命令之后到源文件結(jié)束。在引用已定義的宏名時(shí),必須在其前面加上符號(hào)“‵”!使用宏名代替一個(gè)字符串,可簡(jiǎn)化書寫,便于記憶,易于修改。預(yù)處理時(shí)只是將程序中的宏名替換為字符串,不管含義是否正確。只有在編譯宏展開后的源程序時(shí)才報(bào)錯(cuò)。宏名和宏內(nèi)容必須在同一行中進(jìn)行聲明!關(guān)于宏定義的說明宏定義的作用:以一個(gè)簡(jiǎn)單的名字代替一個(gè)長(zhǎng)的字符串或復(fù)雜表達(dá)式;以一個(gè)有含義的名字代替沒有含義的數(shù)字和符號(hào)。9.4.3編譯指示語句[例]moduletest;rega,b,c,d,e,out;‵defineexpressiona+b+c+d;assignout=‵expression+e;……經(jīng)過宏展開后,assign語句為:
assignout=a+b+c+d;+e;//出現(xiàn)語法錯(cuò)誤!宏定義不是VerilogHDL語句,不必在行末加分號(hào)!如果加了分號(hào),會(huì)連分號(hào)一起置換!錯(cuò)誤!9.4.3編譯指示語句[例]moduletest;rega,b,c;wireout;‵defineaaa+b
‵defineccc+‵aa//引用已定義的宏名‵aa來定義宏ccassignout=‵cc;……經(jīng)過宏展開后,assign語句為:
assignout=c+a+b;在進(jìn)行宏定義時(shí),可引用已定義的宏名,實(shí)現(xiàn)層層置換。9.4.3編譯指示語句二、‵include語句文件包含語句——一個(gè)源文件可將另一個(gè)源文件的全部?jī)?nèi)容包含進(jìn)來。‵include“文件名”預(yù)處理后‵include“file2.v”Afile1.vBfile2.vABfile1.vMAX+PLUSII和QuartusⅡ都不支持!通常用在測(cè)試文件中。將file2.v中全部?jī)?nèi)容復(fù)制插入到‵include“file2.v”命令出現(xiàn)的地方格式9.4.3編譯指示語句避免程序設(shè)計(jì)人員的重復(fù)勞動(dòng)!不必將源代碼復(fù)制到自己的另一源文件中,使源文件顯得簡(jiǎn)潔。(1)可以將一些常用的宏定義命令或任務(wù)(task)組成一個(gè)文件,然后用‵include語句將該文件包含到自己的另一源文件中,相當(dāng)于將工業(yè)上的標(biāo)準(zhǔn)元件拿來使用。(2)當(dāng)某幾個(gè)源文件經(jīng)常需要被其他源文件調(diào)用時(shí),則在其他源文件中用‵include語句將所需源文件包含進(jìn)來。使用‵include語句的好處9.4.3編譯指示語句[例]用‵include語句設(shè)計(jì)16位加法器adder模塊位拼接改變被引用模塊adder中的參數(shù)size為my_size9.4.3編譯指示語句一個(gè)‵include語句只能指定一個(gè)被包含的文件;若要包含n個(gè)文件,需用n個(gè)‵include語句。‵include語句可出現(xiàn)在源程序的任何地方。被包含的文件若與包含文件不在同一子目錄下,必須指明其路徑!‵include“aaa.v”“bbb.v”//非法!‵include“parts/count.v”//合法!關(guān)于文件包含的說明‵include“aaa.v”‵include“bbb.v”//合法!9.4.3編譯指示語句可將多個(gè)‵include語句寫在一行;在該行中,只可出現(xiàn)空格和注釋行。文件包含允許嵌套。‵include“aaa.v”‵include“bbb.v”//合法!‵include“file2.v”………………file1.v‵include“file3.v”………………file2.v(不包含‵include命令)………………file3.v9.4.3編譯指示語句三、‵timescale語句時(shí)間尺度語句——用于定義跟在該命令后模塊的時(shí)間單位和時(shí)間精度。‵timescale<時(shí)間單位>/<時(shí)間精度>時(shí)間單位——用于定義模塊中仿真時(shí)間和延遲時(shí)間的基準(zhǔn)單位;時(shí)間精度——用來聲明該模塊的仿真時(shí)間和延遲時(shí)間的精確程度。在同一程序設(shè)計(jì)里,可以包含采用不同時(shí)間單位的模塊。此時(shí)用最小的時(shí)間精度值決定仿真的時(shí)間單位。格式MAX+PLUSII和QuartusⅡ都不支持!通常用在測(cè)試文件中。9.4.3編譯指示語句‵timescale1ps/1ns//非法!‵timescale1ns/1ps//合法!時(shí)間精度至少要和時(shí)間單位一樣精確,時(shí)間精度值不能大于時(shí)間單位值!在‵timescale語句中,用來說明時(shí)間單位和時(shí)間精度參量值的數(shù)字必須是整數(shù)。其有效數(shù)字為1、10、100;單位為秒(s)、毫秒(ms)、微秒(us)、納秒(ns)、皮秒(ps)、毫皮秒(fs)。9.4.3編譯指示語句[例]‵timescale語句應(yīng)用舉例。‵timescale10ns/1ns//時(shí)間單位為10ns,時(shí)間精度為1ns……regsel;
initialbegin#10sel=0;//在10ns10時(shí)刻,sel變量被賦值為0#10sel=1;//在10ns20時(shí)刻,sel變量被賦值為1end……9.4.3編譯指示語句9.4.4任務(wù)和函數(shù)語句三、task和function語句task和function語句分別用來由用戶定義任務(wù)和函數(shù)。任務(wù)和函數(shù)往往是大的程序模塊中在不同地點(diǎn)多次用到的相同的程序段。利用任務(wù)和函數(shù)可將一個(gè)很大的程序模塊分解為許多較小的任務(wù)和函數(shù),便于理解和調(diào)試。輸入、輸出和總線信號(hào)的值可以傳入、傳出任務(wù)和函數(shù)。當(dāng)希望能夠?qū)σ恍┬盘?hào)進(jìn)行一些運(yùn)算并輸出多個(gè)結(jié)果(即有多個(gè)輸出變量)時(shí),宜采用任務(wù)結(jié)構(gòu)。常常利用任務(wù)來幫助實(shí)現(xiàn)結(jié)構(gòu)化的模塊設(shè)計(jì),將批量的操作以任務(wù)的形式獨(dú)立出來,使設(shè)計(jì)簡(jiǎn)單明了。1.任務(wù)(task)task<任務(wù)名>;端口及數(shù)據(jù)類型聲明語句;其他語句;endtask<任務(wù)名>(端口1,端口2,……);MAX+PLUSII不支持但QuartusⅡ支持!任務(wù)定義任務(wù)調(diào)用包含定時(shí)控制語句的任務(wù)是不可綜合的!9.4.4任務(wù)和函數(shù)語句[例3.9.6]任務(wù)的定義與調(diào)用。
taskmy_task;inputa,b;inoutc;outputd,e;……<語句>//執(zhí)行任務(wù)工作相應(yīng)的語句……c=foo1;d=foo2;//對(duì)任務(wù)的輸出變量賦值e=foo3;
endtaskmy_task(v,w,x,y,z);
任務(wù)定義任務(wù)調(diào)用
當(dāng)任務(wù)啟動(dòng)時(shí),由v、w和x傳入的變量賦給了a、b和c;當(dāng)任務(wù)完成后,輸出通過c、d和e賦給了x、y和z。注1:任務(wù)的定義與調(diào)用必須在一個(gè)module模塊內(nèi)!注2:任務(wù)被調(diào)用時(shí),需列出端口名列表,且必須與任務(wù)定義中的I/O變量一一對(duì)應(yīng)!注3:一個(gè)任務(wù)可以調(diào)用其他任務(wù)和函數(shù)。9.4.4任務(wù)和函數(shù)語句[例3.9.7]通過任務(wù)調(diào)用完成4個(gè)4位二進(jìn)制輸入數(shù)據(jù)的冒泡排序。
任務(wù)的定義任務(wù)的調(diào)用9.4.4任務(wù)和函數(shù)語句sort4.v的測(cè)試文件
$random為系統(tǒng)任務(wù),返回一個(gè)32位的帶符號(hào)的隨機(jī)數(shù);一般用法為:$random%b其中b>0,它給出了一個(gè)范圍在-b+1~b-1之間的隨機(jī)數(shù)。{$random}%15通過位拼接操作,產(chǎn)生一個(gè)0~14之間的隨機(jī)數(shù)。9.4.4任務(wù)和函數(shù)語句9.4.4任務(wù)和函數(shù)語句sort4.v的仿真波形task_Top.wlf按
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 手電筒生產(chǎn)加工項(xiàng)目可行性研究報(bào)告
- 年產(chǎn)xxx手提封口膜袋項(xiàng)目可行性研究報(bào)告
- 新建汽車座椅電機(jī)項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告
- (投資方案)白色家電項(xiàng)目可行性研究報(bào)告
- 新建單層松香板項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告
- 機(jī)械分析課程設(shè)計(jì)
- 2024-2030年投影電視機(jī)行業(yè)市場(chǎng)深度調(diào)研及發(fā)展前景與投資研究報(bào)告
- 2024-2030年子母式舉升機(jī)搬遷改造項(xiàng)目可行性研究報(bào)告
- 2024-2030年吊針注射液公司技術(shù)改造及擴(kuò)產(chǎn)項(xiàng)目可行性研究報(bào)告
- 2024-2030年參附注射液搬遷改造項(xiàng)目可行性研究報(bào)告
- 三年級(jí)上冊(cè)數(shù)學(xué)教案-4.2 三位數(shù)減兩位數(shù)、三位數(shù)的筆算減法 ︳人教新課標(biāo)
- MOOC 法理學(xué)-西南政法大學(xué) 中國(guó)大學(xué)慕課答案
- 2024年重慶璧山區(qū)國(guó)隆農(nóng)業(yè)科技發(fā)展有限公司招聘筆試參考題庫含答案解析
- 事業(yè)單位工勤技能綜合知識(shí)試卷及答案
- 如何創(chuàng)造有意義的人生
- 冬季如何預(yù)防腦卒中
- 消防管道隱蔽工程驗(yàn)收記錄
- 習(xí)思想教材配套練習(xí)題 第一章 新時(shí)代堅(jiān)持和發(fā)展中國(guó)特色社會(huì)主義
- 人教版英語八年級(jí)上冊(cè)第十單元課件
- 部編版一年級(jí)下冊(cè)道德與法治第3課《我不拖拉》教案(含2課時(shí))
- 2023-2024學(xué)年成都市成華區(qū)九年級(jí)上英語(一診)期末考試題(含答案)
評(píng)論
0/150
提交評(píng)論