




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章Verilog硬件描述語(yǔ)言1為什么要采用硬件描述語(yǔ)言(HDL)?利用HDL可以提高描述的抽象層次,便于提高設(shè)計(jì)的效率。?易于通過(guò)EDA工具完成設(shè)計(jì)與驗(yàn)證,有利于保證設(shè)計(jì)正確性,縮短設(shè)計(jì)周期。?便于對(duì)設(shè)計(jì)進(jìn)行管理、歸檔和重用。?易于對(duì)設(shè)計(jì)進(jìn)行修改,以探索不同的設(shè)計(jì)可能性。硬件描述語(yǔ)言(HDL)的特點(diǎn)?采用高級(jí)程序設(shè)計(jì)語(yǔ)言的結(jié)構(gòu),但與一般軟件程序設(shè)計(jì)語(yǔ)言有差別,它是針對(duì)硬件系統(tǒng)與部件設(shè)計(jì)的。–在不同的抽象層次上描述電路的功能和連接關(guān)系,可以描述電路的結(jié)構(gòu)。–除了描述功能之外還描述時(shí)序關(guān)系。–并行性:同時(shí)進(jìn)行多個(gè)任務(wù)。–時(shí)間:具有描述延遲等時(shí)間概念的能力。23Verilog邏輯值?Verilog內(nèi)采用四值邏輯,即0,1,x,z。?0表示0,低電平,假,邏輯低,地等。?1表示1,高電平,真,邏輯高,電源等。?x表示未被初始化的邏輯或未知邏輯值(無(wú)法確定的邏輯)。?z表示高阻狀態(tài),沒(méi)有驅(qū)動(dòng)的線(xiàn)等。數(shù)字的表示?整數(shù)的表示width'radixvalue–width指明占用的二進(jìn)制長(zhǎng)度(可選),如果不指明占用的長(zhǎng)度,則長(zhǎng)度為缺省值,通??赡苁且粋€(gè)字長(zhǎng)。–radix指明采用的基數(shù)(進(jìn)制)?十進(jìn)制decimal(dorD)?十六進(jìn)制hex(horH)?八進(jìn)制octal(oorO)?二進(jìn)制binary(borB)–value是在相應(yīng)基數(shù)下的值。4?整數(shù)的表示舉例5’O424’D98’haB-6’b100_X1z10’D-20//錯(cuò)誤(2+4)’b011000//錯(cuò)誤。?實(shí)數(shù)的表示–十進(jìn)制表示10.2123.456-34.5–科學(xué)計(jì)數(shù)法表示23_5.1e2//23510.0-6.2E6//-6200000.03E-2//0.035字符串?使用雙引號(hào)括起來(lái)的多個(gè)字符。?不能跨行。?其中可使用反斜線(xiàn)(\)對(duì)特殊字符進(jìn)行轉(zhuǎn)義。?舉例“MESSAGE\n”“Finished\\”Verilog數(shù)據(jù)類(lèi)型?Verilog中的數(shù)據(jù)類(lèi)型有兩大類(lèi),即線(xiàn)網(wǎng)(nets)和變量(variables),表示數(shù)據(jù)的存儲(chǔ)和傳輸元件。?線(xiàn)網(wǎng):表示器件之間的物理連接,不保存數(shù)據(jù)值,由驅(qū)動(dòng)元件決定信號(hào)值。?變量:表示抽象存儲(chǔ)元件。?線(xiàn)網(wǎng)和變量的定義中可以帶有范圍,形成向量。當(dāng)定義時(shí)沒(méi)有指定范圍時(shí)認(rèn)為寬度是1的標(biāo)量。6線(xiàn)網(wǎng)的種類(lèi)?線(xiàn)網(wǎng)需要被持續(xù)地驅(qū)動(dòng),驅(qū)動(dòng)它的可以是門(mén)、模塊或邏輯等。?默認(rèn)的初始值是z。?種類(lèi):
wire,tri:標(biāo)準(zhǔn)的互連線(xiàn),功能上相同。supply1,supply0:電源和地。wor,trior:通過(guò)線(xiàn)或連接的多個(gè)驅(qū)動(dòng)。wand,triand:通過(guò)線(xiàn)與連接的多個(gè)驅(qū)動(dòng)。trireg:有電容保存的線(xiàn)網(wǎng)。
tri1,tri0:在不驅(qū)動(dòng)時(shí)上拉或下拉的線(xiàn)網(wǎng)。變量類(lèi)型?保存原有的值直到賦予新的值。?種類(lèi):reg:數(shù)據(jù)保存元件的抽象,向量可以表示無(wú)符號(hào)整數(shù),初值是xinteger:有符號(hào)32位整數(shù)變量,初值是xreal:雙精度帶符號(hào)浮點(diǎn)數(shù),初值是0.0time:64位無(wú)符號(hào)整數(shù)變量,初值是xrealtime:與real內(nèi)容一致,但可以被用做描述仿真的時(shí)間,初值是0.07數(shù)組(Array)?Verilog中的線(xiàn)網(wǎng)或變量可以構(gòu)成數(shù)組。?數(shù)組元素可以是標(biāo)量或向量。?數(shù)組的賦值只能對(duì)其中的一個(gè)元素進(jìn)行,不能同時(shí)對(duì)整個(gè)數(shù)組或其中的一部分段進(jìn)行。?線(xiàn)網(wǎng)數(shù)組可以連接一組實(shí)體化模塊的端口。?對(duì)各種變量都可以定義變量類(lèi)型的數(shù)組。?在過(guò)去的標(biāo)準(zhǔn)(IEEE1364-1995)中沒(méi)有多維數(shù)組,用一維數(shù)組可以定義寄存器陣列。新的標(biāo)準(zhǔn)(IEEE1364-2001)中可以定義多維數(shù)組。?一維數(shù)組定義reg類(lèi)型的陣列可以構(gòu)成存儲(chǔ)器,其格式如下:reg[MSB:LSB]<memory_name>[first_addr:last_addr];MSB和LSB定義了存儲(chǔ)器字的長(zhǎng)度,memory_name說(shuō)明了存儲(chǔ)器名first_addr和last_addr定義了占用的地址空間,在定義中可以使用參數(shù)。?其他的數(shù)組定義形式是類(lèi)似的。8數(shù)組舉例integerNUMS[7:0];//8個(gè)integer類(lèi)型的變量構(gòu)成的數(shù)組timet_vals[3:0];//4個(gè)time類(lèi)型的變量構(gòu)成的數(shù)組reg[15:0]MEM[0:1023];//1Kx16位存儲(chǔ)器reg[7:0]PREP[‘hFFFE:’hFFFF];//2x8位存儲(chǔ)器parameterwordsize=16;parametermemsize=1024;reg[wordsize-1:0]MEM3[memsize-1:0];//使用參數(shù)的定義。參數(shù)?參數(shù)不屬于變量或線(xiàn)網(wǎng),它們表示一些常數(shù),控制設(shè)計(jì)中使用的參數(shù)。?參數(shù)的定義是局部化的,只在本模塊中有效。?可以在任何使用文字?jǐn)?shù)量的地方使用。?參數(shù)有兩類(lèi),模塊參數(shù)和specify參數(shù)。?模塊參數(shù)可以在設(shè)計(jì)時(shí)進(jìn)行調(diào)整。9參數(shù)的定義parameter<list_of_assignments>list_of_assignments是用逗號(hào)隔開(kāi)的參數(shù)和它們的數(shù)值舉例parametercycle=8,real_constant=2.039,x_word=16’bx,file="/usr1/jdough/design/mem_file.dat";10運(yùn)算符(Operators)?算術(shù)運(yùn)算符(+,-,*,/,%)?關(guān)系運(yùn)算符(>,<,>=,<=)?等式運(yùn)算符(==,!=,===,!==)?邏輯運(yùn)算符(&&,||,!)?條件運(yùn)算符(?:)?位運(yùn)算符(~,|,^,&,~^,^~)?移位運(yùn)算符(<<,>>)?拼接運(yùn)算符({})?賦值運(yùn)算符(=,<=)11等式運(yùn)算符(==,!=,===,!==)?==:邏輯相等?!=:邏輯不等?===:全等(對(duì)x和z嚴(yán)格按位比較)?!==:非全等?說(shuō)明==與===的差別:12運(yùn)算的優(yōu)先級(jí)13Verilog的層次結(jié)構(gòu)module?module是Verilog中的基本單位。?一個(gè)module可以是一個(gè)物理模塊,一個(gè)邏輯模塊或一個(gè)完整的系統(tǒng)。?BNF表達(dá)式<module>::=module<name_of_module><list_of_ports>;<module_item>*endmodule14模塊的實(shí)體化?必須有實(shí)體名?端口信號(hào)的映射可以有兩種:–按位置映射:次序與模塊說(shuō)明時(shí)端口次序相同–按名映射:與位置無(wú)關(guān),通過(guò)指定端口的內(nèi)部名和外部名建立聯(lián)系,格式為:.internal_port_name(external_name_of_signal_connected_to_port)?可以存在沒(méi)有連接的端口,但可能產(chǎn)生警告信息模塊實(shí)體化舉例modulecomp(o1,o2,i1,i2);outputo1,o2;inputi1,i2;...endmodulemoduletest;compc1(Q,R,J,K);//按位置映射compc2(.i2(K),.o1(Q),.o2(R),.i1(J));//按名映射compc3(Q,,J,K);//按位置映射,有一個(gè)端口未連接compc4(.i1(J),.o1(Q));//按名映射,2個(gè)端口未連接endmodule15行為建模與賦值行為建模的目的?在較高抽象層次上描述系統(tǒng)的行為或功能,可以完成和具體實(shí)現(xiàn)無(wú)關(guān)的描述。?行為建模是通過(guò)描述若干并行的活動(dòng)過(guò)程塊完成的。?在描述中可以使用高級(jí)編程語(yǔ)言結(jié)構(gòu),如wait,while,ifelse,case和forever等。過(guò)程塊(ProceduralBlocks)?過(guò)程塊是行為建模的基礎(chǔ)?有兩種過(guò)程塊–initial過(guò)程塊:只執(zhí)行一次。–always過(guò)程塊:反復(fù)執(zhí)行。?過(guò)程塊可以包含如下內(nèi)容:–過(guò)程賦值:描述塊內(nèi)的數(shù)據(jù)流。–高級(jí)結(jié)構(gòu)(循環(huán),條件):描述塊的功能。–時(shí)間控制:控制塊中語(yǔ)句的執(zhí)行情況。16過(guò)程賦值?過(guò)程賦值:在過(guò)程塊內(nèi)的賦值?過(guò)程賦值針對(duì)variable類(lèi)型的數(shù)據(jù)?要賦予的值可以是任何合法的表達(dá)式?過(guò)程賦值可以分成:–阻塞賦值:串行執(zhí)行,只有執(zhí)行完了前一條語(yǔ)句,后一條語(yǔ)句才能執(zhí)行。–非阻塞賦值:并行執(zhí)行,一組賦值語(yǔ)句之間沒(méi)有前后順序關(guān)系,它們?cè)谕粫r(shí)刻開(kāi)始計(jì)算右值表達(dá)式,即不等當(dāng)前語(yǔ)句執(zhí)行完,即開(kāi)始執(zhí)行下一條語(yǔ)句。17阻塞過(guò)程賦值舉例(=)moduleadder(out,a,b,cin);inputa,b,cin;output[1:0]out;wirea,b,cin;reghalf_sum,half_carry;reg[1:0]out;always@(aorborcin)beginhalf_sum=a^b^cin;//OKhalf_carry=a&b|a&!b&cin|!a&b&cin;out={half_carry,half_sum};//半加和與進(jìn)位
endendmodule18非阻塞過(guò)程賦值舉例(<=)moduleswap_vals;rega,b,clk;initialbegina=0;b=1;clk=0;endalways#5clk=~clk;always@(posedgeclk)begina<=b;//非阻塞過(guò)程賦值
b<=a;//交換a和b的值
endendmodule19持續(xù)賦值(ContinuousAssignment)?持續(xù)賦值在過(guò)程塊之外進(jìn)行?賦值對(duì)象是線(xiàn)網(wǎng)(net)?采用的格式如下:<assign>[#delay][strength]<net_name>=<expression>–當(dāng)?shù)忍?hào)右邊信號(hào)的表達(dá)式發(fā)生變化后,經(jīng)過(guò)#delay規(guī)定的延遲,等號(hào)左邊信號(hào)發(fā)生變化。?可以有隱式(implicit)和顯式(explicit)兩種賦值方式。如下例所示:wireout;assignout=a&b;//顯式wireinv=~in;//隱式20時(shí)間控制?在Verilog語(yǔ)言中時(shí)間控制可以分成三類(lèi):–簡(jiǎn)單延遲(#<delay>):延遲若干時(shí)間單位。–邊沿敏感時(shí)間控制(@(<signal>)):等待信號(hào)的邊沿,可以使用or指定幾個(gè)變量。?正邊沿:posedge?負(fù)邊沿:negedge?任意邊沿:–電平敏感時(shí)間控制(wait(<expr>)):等待表達(dá)式成立,如果表達(dá)式已經(jīng)成立立即執(zhí)行相應(yīng)動(dòng)作。21簡(jiǎn)單延遲舉例modulemuxtwo(out,a,b,sl);inputa,b,sl;outputout;
regout;
always@(sloraorb)if(!sl)
#10out=a;
//Thedelayfromatooutis10timeunitselse
#12out=b;
//Thedelayfrombtooutis12timeunitsendmodule22邊沿時(shí)間控制舉例modulereg_adder(out,a,b,clk);inputclk;input[2:0]a,b;output[3:0]out;reg[3:0]out;reg[3:0]sum;always@(aorb)
//等待a或b的任意變化
#5sum=a+b;always@(negedgeclk)
//等待clk的下降邊
out=sum;endmodule23電平時(shí)間控制舉例modulelatch_adder(out,a,b,enable);inputenable;input[2:0]a,b;output[3:0]out;reg[3:0]out;always@(aorb)begin
wait(!enable)
//當(dāng)enable為0時(shí)進(jìn)行后面的加法
out=a+b;endendmodule24命名的事件(NamedEvents)?命名的事件是一種可以在過(guò)程塊中觸發(fā)引起某些活動(dòng)的數(shù)據(jù)類(lèi)型。?使用event進(jìn)行說(shuō)明。?必須先說(shuō)明后引用。?只能在定義它的模塊中使用。?不可綜合。?使用->進(jìn)行觸發(fā)。?本身不具有數(shù)值。25命名的事件舉例moduleadd_mult(out,a,b);input[2:0]a,b;output[3:0]out;reg[3:0]out;eventadd,mult;//事件定義
always@(aorb)if(a>b)
->add;//觸發(fā)事件
else
->mult;//觸發(fā)事件always@(add)//對(duì)事件的響應(yīng)
out=a+b;always@(mult)//對(duì)事件的響應(yīng)
out=a*b;endmodule26塊語(yǔ)句?用來(lái)將兩個(gè)或更多的語(yǔ)句結(jié)合在一起。?可以分成兩種:–順序塊:包含在begin……end中的語(yǔ)句,按順序方式執(zhí)行。–并行塊:包含在fork……join中的語(yǔ)句,按并行方式執(zhí)行。當(dāng)編寫(xiě)測(cè)試激勵(lì)時(shí),使用并行塊可以方便地控制絕對(duì)時(shí)間。27塊語(yǔ)句舉例以下是兩個(gè)功能相同的塊:begin#5a=3;#5a=5;#5a=4;endfork#5a=3;#15a=4;#10a=5;join28條件語(yǔ)句(1)?if和if……else語(yǔ)句–可以多層嵌套–else和最接近的if相關(guān)聯(lián)–可以使用begin……end來(lái)指定作用范圍if條件語(yǔ)句舉例always#20if(index>0)//外層if開(kāi)始
if(rega>regb)//第一個(gè)內(nèi)層if開(kāi)始
result=rega;elseresult=0;//第一個(gè)內(nèi)層if結(jié)束
else//外層if的else分支
if(index==0)//第二個(gè)內(nèi)層if開(kāi)始
begin$display("Note:Indexiszero");result=regb;endelse$display("Note:Indexisnegative");29條件語(yǔ)句(2)case語(yǔ)句?可以使用default語(yǔ)句作為條件判斷都不成立時(shí)的選擇。?判斷多路條件分支選擇,只有當(dāng)分支的條件(0、1、x、z)完全符合時(shí)才進(jìn)入這個(gè)分支。?casez是一種case語(yǔ)句,?和z被當(dāng)作無(wú)關(guān)項(xiàng)。?casex是一種case語(yǔ)句,x、?和z被當(dāng)作無(wú)關(guān)項(xiàng)。?無(wú)關(guān)項(xiàng)在比較時(shí)不做考慮。30case條件語(yǔ)句舉例modulecompute(result,rega,regb,opcode);input[7:0]rega,regb;input[2:0]opcode;output[7:0]result;
reg[7:0]result;
always@(regaorregboropcode)case(opcode)3'b000:result=rega+regb;3'b001:result=rega-regb;3'b010,//specifymultiplecaseswiththesameresult3'b100:result=rega/regb;default:beginresult='bx;$display("nomatch");end
endcaseendmodule31循環(huán)語(yǔ)句?repeat:執(zhí)行確定次數(shù)repeat(<expression>)<statement>?while:在條件表達(dá)式為真的情況下一直執(zhí)行while(<expression>)<statement>?forever:重復(fù)執(zhí)行直到仿真結(jié)束forever<statement>?for:在執(zhí)行過(guò)程中對(duì)指定變量進(jìn)行修改和判斷,在滿(mǎn)足條件的情況下執(zhí)行for(<assignment>;<expression>;<assignment>)<statement>32repeat循環(huán)舉例//通過(guò)加法和移位實(shí)現(xiàn)的乘法器設(shè)計(jì)modulemultiplier(result,op_a,op_b);parametersize=8;input[size:1]op_a,op_b;output[2*size:1]result;reg[2*size:1]shift_opa,result;reg[size:1]shift_opb;always@(op_aorop_b)beginresult=0;shift_opa=op_a;//Zeroextendleftshift_opb=op_b;repeat(size)begin#10if(shift_opb[1])result=result+shift_opa;shift_opa=shift_opa<<1;//左移1位shift_opb=shift_opb>>1;//右移1位endendendmodule33while循環(huán)舉例...reg[7:0]tempreg;reg[3:0]count;...count=0;//計(jì)算tempreg中1的個(gè)數(shù)while(tempreg)//當(dāng)tempreg中有1時(shí)進(jìn)行beginif(tempreg[0])count=count+1;tempreg=tempreg>>1;//右移1位end...34forever循環(huán)舉例...regclk;initialbeginclk=0;foreverbegin#10clk=1;#10clk=0;endend...35for循環(huán)語(yǔ)句–for(<initialization>;<condition>;<operation>)?首先進(jìn)行循環(huán)控制變量的初始化<initialization>。?在條件<condition>為真的情況下執(zhí)行循環(huán)體的操作。?每次循環(huán)完成后對(duì)控制變量進(jìn)行相應(yīng)操作<operation>。36for循環(huán)舉例//Xdetectionfor(index=0;index<size;index=index+1)if(val[index]===1'bx)$display("foundanX");//Memoryload;"!=0"issimulatedefficientlyfor(i=size;i!=0;i=i-1)memory[i-1]=0;//階乘factorial=1;for(j=num;j!=0;j=j-1)factorial=factorial*j;37task與function?為了將模塊的設(shè)計(jì)劃分成更小的部分,可以使用task與function。?task與function都必須在模塊內(nèi)定義和調(diào)用。?對(duì)task與function來(lái)說(shuō),所有的輸入和輸出實(shí)際上都是局部寄存器。?在task與function中不能定義wire類(lèi)型。?task與function的輸出只有在它們完成時(shí)才返回。如果task與function中包括了一個(gè)forever循環(huán),將無(wú)法返回結(jié)果。38task?通常用于仿真或?qū)τ布男袨槊枋觥?通過(guò)task的名字調(diào)用。?可以包含時(shí)間控制(#delays,@,wait)?可以有input,output和inout參數(shù),按照定義的次序傳遞參數(shù)。?可以調(diào)用其它的task和function。?用于時(shí)間控制的信號(hào)不應(yīng)作為task的輸入信號(hào),因?yàn)檩斎胫抵幌騮ask傳遞一次。?對(duì)一個(gè)task從代碼的不同部分進(jìn)行調(diào)用時(shí)要小心,因?yàn)閠ask只保留一份局部變量的值。兩個(gè)并發(fā)的調(diào)用可能產(chǎn)生錯(cuò)誤結(jié)果。?可以使用disable命令一個(gè)task失去作用。39task舉例(1)moduletop;regclk,a,b;DUTu1(out,a,b,clk);always#5clk=!clk;taskneg_clocks;input[31:0]number_of_edges;repeat(number_of_edges)@(negedgeclk);endtaskinitialbeginclk=0;a=1;b=1;neg_clocks(3);//taskinvocationa=0;neg_clocks(5);b=0;endendmodule40task舉例(2)modulemult(clk,a,b,out,en_mult);inputclk,en_mult;input[3:0]a,b;output[7:0]out;reg[7:0]out;
always@(posedgeclk)multme(a,b,out);//taskinvocation
taskmultme;//taskdefinitioninput[3:0]xme,tome;output[7:0]result;wait(en_mult)result=xme*tome;endtaskendmodule41function?通常用于完成計(jì)算或表示組合邏輯。?不能包含時(shí)間控制語(yǔ)句。?必須至少有一個(gè)input參數(shù),不能有output或inout參數(shù)。?通過(guò)function的名字返回唯一的一個(gè)值。?可以調(diào)用其它function,但不能調(diào)用task。42function舉例(1)moduleorand(a,b,c,d,e,out);input[7:0]a,b,c,d,e;output[7:0]out;reg[7:0]out;always@(aorborcordore)out=f_or_and(a,b,c,d,e);//functioninvocationfunction[7:0]f_or_and;input[7:0]a,b,c,d,e;if(e==1)f_or_and=(a|b)&(c|d);elsef_or_and=0;endfunctionendmodule43function舉例(2)modulefoo(loo,goo);input[7:0]loo;output[7:0]goo;wire[7:0]goo=zero_count(loo);//持續(xù)賦值調(diào)用函數(shù)function[3:0]zero_count;//計(jì)算0的個(gè)數(shù)input[7:0]in_bus;integerI;beginzero_count=0;for(I=0;I<8;I=I+1)if(!in_bus[I])zero_count=zero_count+1;endendfunctionendmodule44命名的塊(NamedBlocks)?可以在begin或fork之后加上塊名實(shí)現(xiàn)對(duì)一個(gè)塊進(jìn)行命名。?在命名的塊中可以定義局部變量。?可以用關(guān)鍵字disable使一個(gè)命名的塊失去作用。?使用命名的塊會(huì)影響仿真速度。disable的使用?disable可以終止命名的塊或task的活動(dòng),語(yǔ)法格式是:disable<name_of_block>disable<task_name>?disable通常不可綜合。45命名的塊舉例modulenamed_blk;...begin:seq_blk...end...fork:par_blk...join...endmodule46disable的舉例moduledo_arith(out,a,b,c,d,e,clk,en_mult);inputclk,en_mult;input[7:0]a,b,c,d,e;output[15:0]out;reg[15:0]out;always@(posedgeclk)begin:arith_block//命名的塊reg[3:0]tmp1,tmp2;//局部變量定義{tmp1,tmp2}=f_or_and(a,b,c,d,e);//function調(diào)用if(en_mult)multme(tmp1,tmp2,out);//task調(diào)用endalways@(negedgeen_mult)begin//Abortthearithmeticdisablemultme;//***Disabletask***disablearith_block;//***Disablenamedblock***end
//Taskandfunctiondefinitionsgohereendmodule47Verilog的原語(yǔ)(primitive)?Verilog提供基本的邏輯功能作為預(yù)定義的原語(yǔ),這些原語(yǔ)很多情況下是作為內(nèi)建的基本門(mén)提供的。?這些原語(yǔ)可以直接使用,不用再定義。很多ASIC和FPGA的庫(kù)是利用原語(yǔ)開(kāi)發(fā)的。Verilog原語(yǔ)的種類(lèi)PrimitiveNameFunctionalityandLogicalAndorLogicalOrnotInverterbufBufferxorLogicalExclusiveOrnandLogicalAndInvertednorLogicalOrInvertedxnorLogicalExclusiveOrInverted48Verilog原語(yǔ)的輸入與輸出?這些原語(yǔ)的輸入輸出的數(shù)量由連接的信號(hào)數(shù)目決定,不是固定的。?除not和buf外,其它的原語(yǔ)只有一個(gè)輸出(在端口序列的最左面),可以有多個(gè)輸入。?not和buf只有一個(gè)輸入,但可以有多個(gè)輸出。49條件原語(yǔ)(ConditionalPrimitives)?Verilog有四種條件原語(yǔ),每種都有三個(gè)端口,即output,input和enable。通過(guò)enable控制其輸出,當(dāng)不使能時(shí),輸出為高阻態(tài)。PrimitiveNameFunctionalitybufif1Conditionalbufferwithlogic1asenablinginputbufif0Conditionalbufferwithlogic0asenablinginputnotif1Conditionalinverterwithlogic1asenablinginputnotif0Conditionalinverterwithlogic0asenablinginput50條件原語(yǔ)示例?表中的L表示值為0或Z,H表示值為1或Z51原語(yǔ)的實(shí)體化?必須先說(shuō)明輸出,再說(shuō)明輸入信號(hào)。?原語(yǔ)的實(shí)體名字是可選的。?可以指定延遲和信號(hào)的強(qiáng)度。原語(yǔ)實(shí)體化舉例and(out,in1,in2,in3,in4);//無(wú)實(shí)體名的調(diào)用bufb1(out1,out2,in);//有實(shí)體名的調(diào)用notif0#3.1n1(out,in,cntrl);//調(diào)用時(shí)說(shuō)明延遲not(strong1,weak0)n1(inv,bit);//調(diào)用時(shí)說(shuō)明強(qiáng)度52用戶(hù)自定義原語(yǔ)UserDefinedPrimitives(UDPs)?UDP適用于單元庫(kù)、小規(guī)模和中規(guī)模的芯片。?用戶(hù)可以用UDP實(shí)現(xiàn)自己需要的原語(yǔ)。?UDP可以定義組合或時(shí)序功能。?UDP通過(guò)真值表表示其功能。?UDP不能實(shí)體化模塊(module)。?使用UDP可以加快仿真速度。?UDP的端口只能是標(biāo)量。?不允許使用雙向端口。?不支持高阻邏輯值。?UDP不能被綜合。53作用域規(guī)則?一個(gè)標(biāo)識(shí)符的作用域是Verilog描述中該標(biāo)識(shí)符可以被識(shí)別的范圍。作用域規(guī)則定義了這個(gè)范圍。?作用域規(guī)則:–模塊名稱(chēng)是全局可見(jiàn)的。–可以定義標(biāo)識(shí)符的實(shí)體包括:模塊、任務(wù)、函數(shù)和命名的塊。每個(gè)實(shí)體定義了標(biāo)識(shí)符的局部作用域。局部作用域分別是:?模塊:module-endmodule?任務(wù):task-endtask?函數(shù):function-endfunction?命名的塊:begin:name-end54作用域規(guī)則(2)–標(biāo)識(shí)符在局部作用域之外也是可見(jiàn)的。規(guī)則:?超前引用:在標(biāo)識(shí)符定義之前就引用。模塊、任務(wù)、函數(shù)和命名的塊的標(biāo)識(shí)符可以超前引用??梢栽谶@些實(shí)體定義之前進(jìn)行一個(gè)module的實(shí)體化、調(diào)用一個(gè)任務(wù)或函數(shù)、或終止一個(gè)命名的塊。?非超前引用:寄存器和線(xiàn)網(wǎng)不能超前引用。需要先定義后使用。通常是在使用它們的局部作用域開(kāi)始處定義它們。?可以超前引用的實(shí)體(模塊、任務(wù)、函數(shù)和命名的塊)中,由模塊實(shí)體化構(gòu)成了一個(gè)向上作用域。從低層可以識(shí)別每一個(gè)比它層次高的局部作用域中的超前引用標(biāo)識(shí)符。55層次名?層次名可以唯一標(biāo)識(shí)整個(gè)設(shè)計(jì)中的任何一個(gè)任務(wù)、函數(shù)、命名的塊、寄存器和線(xiàn)網(wǎng)。?層次中的各名稱(chēng)是超前引用的,在模塊實(shí)體化之前不能被識(shí)別。?層次名是由“.”隔開(kāi)的一系列標(biāo)識(shí)符組成的路徑名稱(chēng)。?通過(guò)層次命名,任何元素可以訪(fǎng)問(wèn)其它任何元素,但應(yīng)盡量堅(jiān)持局部和向上作用域規(guī)則,避免違反局部化設(shè)計(jì)風(fēng)格。56作用域和層次名稱(chēng)舉例moduletop;regr;//hierarchicalnameistop.rwirew;//hierarchicalnameistop.wbinstance1();alwaysbegin:yregq;//hierarchicalnameistop.y.qendtaskt;begin:c//hierarchicalnameistop.t.cregq;//hierarchicalnameistop.t.c.qdisabley;//OKendendtaskendmodule57作用域和層次名稱(chēng)舉例(續(xù)1)moduleb;regs;//hierarchicalnameistop.instance1.salwaysbegint;//OKdisabley;//OKdisablec;//Nope,cisnotknowndisablet.c;//OKs=1;//OKr=1;//Nope,risnotknowntop.r=1;//OKt.c.q=1;//OKy.q=1;//OK,adifferentqthant.c.qendendmodule5859VCD(ValueChangeDump)格式的圖形輸出系統(tǒng)任務(wù)功能$dumpfile(“file.dump”);打開(kāi)波形記錄文件$dumpvars();選擇要記錄的信號(hào)名$dumpflush;將文件緩沖區(qū)中的數(shù)據(jù)存入文件$dumpoff;停止記錄波形$dumpon;開(kāi)始記錄波形$dumplimit(<file_size>);限制波形記錄文件的大小,以字節(jié)為單位$dumpall;記錄所有確定的信號(hào)60SHM(SimulationHistoryManager)格式的圖形數(shù)據(jù)輸出SystemtaskDescription$shm_open(“waves.shm”);打開(kāi)一個(gè)記錄文件,一次只能打開(kāi)一個(gè)文件。$shm_probe();選擇要記錄波形的信號(hào)。$shm_close;關(guān)閉波形記錄數(shù)據(jù)庫(kù)。$shm_save;將波形記錄數(shù)據(jù)苦存儲(chǔ)到文件中。61文本輸出$monitor?當(dāng)在列表中的任何信號(hào)變化時(shí),$monitor輸出列表中各信號(hào)的值。?對(duì)不同的信號(hào)可以采用不同的基數(shù)。?$time的變化不引起$monitor的輸出。?可以使用$monitoron和$monitoroff對(duì)輸出監(jiān)控進(jìn)行控制。62文本輸出$monitor舉例moduletestfixture;//Datatypedeclarationrega,b,sel;wireout;//MUXinstanceMUX2_1mux(out,a,b,sel);//Applystimulusinitialbegina=0;b=1;sel=0;#5b=0;#5b=1;sel=1;#5a=1;#5$finish;end//Displayresultsinitial$monitor($time,"out=%ba=%bb=%bsel=%b",out,a,b,sel);endmodule輸出結(jié)果:0out=0a=0b=1sel=05out=0a=0b=0sel=010out=1a=0b=1sel=115out=1a=1b=1sel=163$display與$write?$display與$write用于按指定格式輸出信息,其中第一個(gè)參數(shù)指定格式控制,后面的參數(shù)是輸出列表。?格式如下:$display([“format_specifiers”,]<argument_list>)$write([“format_specifiers”,]<argument_list>)?$display在輸出完畢后自動(dòng)換行,$write不自動(dòng)換行。6465$strobe?$strobe的格式與$display和$write相同。它在相應(yīng)時(shí)間單位結(jié)束時(shí)顯示指定的信息,因此其結(jié)果是最終的結(jié)果。?舉例forever@(negedgeclock)$strobe("Attime%d,datais%h",$time,data);在每個(gè)時(shí)鐘信號(hào)的下降邊,在仿真時(shí)間向前推進(jìn)之前輸出時(shí)間和data信號(hào)的值。66對(duì)文件的操作?相關(guān)的系統(tǒng)任務(wù)與函數(shù):$fdisplay(<multi_channel_descriptor>,P1,P2,...,Pn);$fwrite(<multi_channel_descriptor>,P1,P2,...,Pn);$fstrobe(<multi_channel_descriptor>,P1,P2,...,Pn);$fmonitor(<multi_channel_descriptor>,P1,P2,...,Pn);$fopen("<name_of_file>")$fclose(<multichannel_descriptor>);?第一個(gè)參數(shù)指定了文件的通道號(hào)。?文件名可以用字符串表示。?文件通道號(hào)用整數(shù)表示。67讀文件?$readmemb:按2進(jìn)制讀文件$readmemb("file_name",<memory_name>);$readmemb("file_name",<memory_name>,<start_addr>);$readmemb("file_name",<memory_name>,<start_addr>,<finish_addr>);?$readmemh:按16進(jìn)制讀文件$readmemh("file_name",<memory_name>);$readmemh("file_name",<memory_name>,<start_addr>);$readmemh("file_name",<memory_name>,<start_addr>,<finish_addr>);?在IEEE1364-2001標(biāo)準(zhǔn)中增加了很多新的用于讀文件處理的系統(tǒng)任務(wù)。68`include?`include用于引入一段代碼和公共數(shù)據(jù),其效果和將相應(yīng)部分寫(xiě)在引用的位置是相同的。?`include可以在代碼中任何位置出現(xiàn)。?格式:‘include“<filename>”?在文件名中可以指定路徑。例如:‘include"parts/count.v"69宏定義`define(1)?`define可以在module中,也可以在module外。?格式:`define標(biāo)識(shí)符(宏名)字符串(宏內(nèi)容)?宏的應(yīng)用格式:`宏名?宏的定義中可以有參數(shù)。?用`undef可以取消以前的宏定義,格式為:`undef標(biāo)識(shí)符(宏名)70宏定義`define(2)?舉例1moduletest;rega,b,c;wireout;`defineaaa+b`defineccc+`aaassignout=`cc;endmodule展開(kāi)后最終的結(jié)果為:assignout=c+a+b;?舉例2:帶參數(shù)的宏`definevar_nand(dly)nand#dly`var_nand(2)g121(q21,n10,n11);`var_nand(5)g122(q22,n10,n11);71時(shí)間尺度`timescale?格式:`timescale<時(shí)間單位>/<時(shí)間精度>?使用的數(shù)字可以是1,10,100。?使用的時(shí)間單位可以是s,ms,us,ns,ps,fs?舉例:`timescale1ns/10ps72存儲(chǔ)器建模?說(shuō)明一個(gè)具有合適規(guī)模的存儲(chǔ)器?提供對(duì)存儲(chǔ)器的訪(fǎng)問(wèn)操作ROM建模?利用對(duì)文件操作的系統(tǒng)任務(wù)可以完成對(duì)ROM的建模RAM建模?RAM要能夠進(jìn)行讀寫(xiě)?數(shù)據(jù)端口通常是雙向的73ROM舉例`timescale1ns/10psmodulemyrom(read_data,addr,read_en_);inputread_en_;input[3:0]addr;output[3:0]read_data;reg[3:0]read_data;reg[3:0]mem[0:15];initial$readmemb("my_rom_data",mem);always@(addrorread_en_)if(!read_en_)read_data=mem[addr];endmodule74RAM舉例`timescale1ns/1nsmodulemymem(data,addr,read,write);inout[3:0]data;input[3:0]addr;inputread,write;reg[3:0]memory[0:15];//4bits,16words//readassigndata=(read?memory[addr]:4'bz);//writealways@(posedgewrite)memory[addr]=data;endmodule75仿真(1)?目前設(shè)計(jì)驗(yàn)證的工作已經(jīng)占總的設(shè)計(jì)工作量的40%~70%,其中很大部分是仿真。?仿真要求能盡可能全面地覆蓋實(shí)際工作環(huán)境中的各種情況,它與測(cè)試不同,但有類(lèi)似的地方。?仿真主要針對(duì)設(shè)計(jì)的功能,需要考慮功能覆蓋是否全面。對(duì)設(shè)計(jì)來(lái)說(shuō)還要考慮仿真過(guò)程對(duì)代碼的覆蓋率:–語(yǔ)句覆蓋率:對(duì)代碼中每條語(yǔ)句的覆蓋情況。–路徑覆蓋率:執(zhí)行一系列指令時(shí)對(duì)各種分支的組合情況的覆蓋情況。–表達(dá)式覆蓋率:對(duì)判斷條件的表達(dá)式的覆蓋情況。76仿真(2)?通過(guò)仿真發(fā)現(xiàn)設(shè)計(jì)的邏輯與時(shí)序錯(cuò)誤–簡(jiǎn)單的測(cè)試環(huán)境。–復(fù)雜的測(cè)試環(huán)境。?仿真的過(guò)程–生成測(cè)試激勵(lì)。–記錄被測(cè)部件對(duì)激勵(lì)的響應(yīng)。–比較響應(yīng)與期望值是否一致。?簡(jiǎn)單風(fēng)格的測(cè)試激勵(lì)給要進(jìn)行測(cè)試的設(shè)計(jì)施加測(cè)試向量,人工進(jìn)行結(jié)果檢查。?復(fù)雜風(fēng)格的測(cè)試激勵(lì)可以自行完成施加測(cè)試向量和結(jié)果檢測(cè)的工作。7778綜合通常不支持的Verilog語(yǔ)言結(jié)構(gòu)?initial?循環(huán)結(jié)構(gòu)–repeat–forever–while–非結(jié)構(gòu)化使用的for?數(shù)據(jù)類(lèi)型–event–real–time–tri1–tri0–trireg79綜合不支持的Verilog語(yǔ)言結(jié)構(gòu)(續(xù))?UDPs?fork...join塊?wait?過(guò)程連續(xù)賦值–assign與deassign–force與release?操作符–===–!==80不同的描述對(duì)應(yīng)的邏輯過(guò)程塊?任意邊沿–在所有輸入信號(hào)的任意邊沿進(jìn)入的過(guò)程塊產(chǎn)生的是組合邏輯。這種塊也稱(chēng)為組合塊。例如:
always@(aorb)//impliesanandgatey=a&b;?單一邊沿–在一個(gè)控制信號(hào)的單一邊沿進(jìn)入的過(guò)程塊產(chǎn)生的是同步邏輯。這種塊也稱(chēng)為同步塊。例如:
always@(posedge
clk)//impliesadflip-flopq<=d;–同步塊也可以對(duì)異步復(fù)位信號(hào)的變化敏感,例如:always@(posedge
clkornegedge
rst_)if(!rst_)q<=0;elseq<=d;81過(guò)程塊中的寄存器型變量?對(duì)同步塊中的reg類(lèi)型變量:–如果在一個(gè)時(shí)鐘周期中對(duì)它賦值,在另一個(gè)時(shí)鐘周期中對(duì)它采樣,因?yàn)樾枰獙⒅当4娴较乱粋€(gè)周期,所以將實(shí)現(xiàn)為一個(gè)實(shí)際的硬件寄存器。–如果它也是輸出,它將在綜合后的網(wǎng)表中出現(xiàn),但并不一定產(chǎn)生硬件寄存器。–其他情況該變量可能被優(yōu)化掉。?對(duì)組合塊中的reg類(lèi)型變量:–如果其值在該塊的任何輸入信號(hào)發(fā)生變化時(shí)都進(jìn)行更新,在綜合后的結(jié)果中它并不實(shí)現(xiàn)為硬件寄存器。–如果其值不是在該塊的任何輸入信號(hào)發(fā)生變化時(shí)都進(jìn)行更新,在綜合后的結(jié)果中它將被實(shí)現(xiàn)為鎖存器(latch)。82同步塊中的寄存器舉例(1)moduleex1reg(d,clk,q);inputd,clk;outputq;regq,rega;always@(posedgeclk)beginrega=0;if(d)rega=1;q=rega;endendmodule本例中rega只做為臨時(shí)存儲(chǔ)使用,在綜合后將被優(yōu)化掉。83同步塊中的寄存器舉例(2)moduleex2reg(d,clk,q);inputd,clk;outputq;regq,rega;always@(posedgeclk)beginrega=0;if(d)rega=1;endalways@(posedgeclk)q=rega;endmodule本例中兩個(gè)時(shí)鐘邊沿產(chǎn)生兩個(gè)存儲(chǔ)元件,rega不會(huì)被優(yōu)化掉。84組合塊中的寄存器舉例(1)moduleex3reg(y,a,b,c);inputa,b,c;outputy;regy,rega;always@(aorborc)beginif(a&b)rega=c;elserega=0;y=rega;endendmodule本例中y和rega每次都賦予新值,因此產(chǎn)生的組合邏輯。85組合塊中的寄存器舉例(2)moduleex4reg(y,a,b,c);inputa,b,c;outputy;regy,rega;always@(aorborc)beginif(a&b)rega=c;y=rega;endendmodule本例中rega不是總賦予新的值,因此綜合會(huì)產(chǎn)生一個(gè)鎖存器,其輸出是y。86塊的敏感表?對(duì)一個(gè)組合塊的所有輸入變量(包括判斷條件),應(yīng)當(dāng)將它們都列在敏感表中。?不同的綜合器對(duì)不完全的敏感表的處理方式是不同的,有些按非法處理,有些給出警告信息并按完全的敏感表處理,這時(shí)綜合后網(wǎng)表的模擬結(jié)果可能與開(kāi)始的RTL描述不同。?敏感表舉例:modulesens(q,a,b,sl);inputa,b,sl;outputq;regq;
always@(sl)//不完全的敏感表//always@(sloraorb)//完全的敏感表beginif(!sl)q=a;elseq=b;endendmodule87持續(xù)賦值?持續(xù)賦值是針對(duì)net類(lèi)型的。由于在使用持續(xù)賦值時(shí)輸入的變化總引起輸出的更新,因此持續(xù)賦值是通過(guò)組合邏輯實(shí)現(xiàn)的。持續(xù)賦值沒(méi)有指定敏感表。?舉例:moduleorand(out,a,b,c,d,e);inputa,b,c,d,e;outputout;assignout=e&(a|b)&(c|d);endmodule88函數(shù)?函數(shù)中不能包括事件語(yǔ)句或時(shí)間控制,因此只能用于產(chǎn)生組合邏輯。?在邊沿敏感的過(guò)程塊中調(diào)用函數(shù)可以被綜合為時(shí)序邏輯中輸入對(duì)應(yīng)的組合邏輯。?函數(shù)執(zhí)行的仿真延遲時(shí)間是0。任務(wù)?任務(wù)可以包含時(shí)間控制,但包含有時(shí)間控制的任務(wù)通常不能綜合。?沒(méi)有時(shí)間控制的任務(wù)與函數(shù)類(lèi)似,也將被綜合為組合邏輯。?在邊沿敏感的過(guò)程塊中調(diào)用任務(wù)也可以被綜合為時(shí)序邏輯和輸入對(duì)應(yīng)的組合邏輯。89函數(shù)舉例`timescale1ns/1nsmoduleorand(a,b,c,d,e,out);inputa,b,c,d,e;outputout;regout;always@(aorborcordore)out=forand(a,b,c,d,e);functionforand;inputa,b,c,d,e;if(e==1)forand=(a|b)&(c|d);elseforand=0;endfunctionendmodule90任務(wù)舉例moduleorandtask(a,b,c,d,e,out);inputa,b,c,d,e;outputout;regout;always@(aorborcordore)orand(a,b,c,d,e);taskorand;inputa,b,c,d,e;if(e==1)out=(a|b)&(c|d);elseout=0;endtaskendmodule91不同邏輯使用的描述組合邏輯的描述?采用連續(xù)賦值方式
assignout=e&(a|b)&(c|d);?采用過(guò)程塊(過(guò)程塊也可以描述時(shí)序邏輯)–敏感表要包含所有使用的輸入(包括條件判斷),這些信號(hào)的任何變化都引起過(guò)程塊的執(zhí)行。(在描述時(shí)序邏輯時(shí)敏感表中的是時(shí)鐘信號(hào)的某個(gè)邊)。–使用if。–使用case。–使用function和沒(méi)有時(shí)間控制的task。?對(duì)組合邏輯來(lái)說(shuō),條件的分支要完整。否則當(dāng)出現(xiàn)未說(shuō)明的分支時(shí),因?yàn)橐A粼瓉?lái)的值會(huì)引入存儲(chǔ)部件——latch。?對(duì)if來(lái)說(shuō),完整的條件是else齊全。?對(duì)case來(lái)說(shuō)是條件分支齊全,可以利用default項(xiàng)指定未定義分支的操作。92同步時(shí)序邏輯(1)?通過(guò)時(shí)鐘邊沿采樣保存數(shù)據(jù)可以形成寄存器,這些寄存器對(duì)應(yīng)于觸發(fā)器。?觸發(fā)器–正邊沿觸發(fā)–負(fù)邊沿觸發(fā)–同步置位–異步置位–同步復(fù)位–異步復(fù)位93正邊沿與負(fù)邊沿觸發(fā)器舉例moduleex1reg(data,clk,outa,outb);inputdata,clk;outputouta,outb;regouta,outb;regrega,regb;always@(posedgeclk)beginrega=data;//進(jìn)行綜合后rega會(huì)優(yōu)化掉outa=rega;endalways@(negedgeclk)beginregb=data;//進(jìn)行綜合后regb會(huì)優(yōu)化掉outb=regb;endendmodule可以使用非阻塞賦值或分成兩個(gè)always塊避免寄存器被優(yōu)化。94帶異步復(fù)位的觸發(fā)器moduleasyn_ff(d,clk,rst,q);inputd,clk,rst;outputq;regq;always@(posedgeclkornegedgerst)beginif(rst==0)q<=0;elseq<=d;endendmodule95帶同步復(fù)位的觸發(fā)器modulesync_set(d,clk,rst,q);inputd,clk,rst;outputq;regq;always@(posedgeclk)beginif(rst==0)q<=0;elseq<=d;endendmodule96同步時(shí)序邏輯(2)?通過(guò)控制電平信號(hào)采樣保存數(shù)據(jù)可以形成鎖存器latch。?鎖存器–不帶置位與復(fù)位–帶置位–帶復(fù)位–帶置位與復(fù)位97帶異步置位與復(fù)位邏輯的鎖存器modulelatch(q,enable,set,clr,d);inputenable,d,set,clr;outputq;regq;always@(enableorsetorclrord)beginif(set)q<=1;elseif(clr)q<=0;elseif(enable)q<=d;endendmodule98阻塞與非阻塞的賦值?非阻塞賦值與硬件的對(duì)應(yīng)關(guān)系比阻塞賦值明確。?時(shí)序邏輯中的非阻塞賦值總是實(shí)現(xiàn)為硬件寄存器,阻塞賦值的行為要復(fù)雜一些。?對(duì)組合邏輯進(jìn)行綜合時(shí)阻塞賦值與非阻塞賦值可以產(chǎn)生相同的結(jié)果,但可能與RTL的設(shè)計(jì)有不同的仿真結(jié)果。?對(duì)時(shí)序邏輯,阻塞賦值與非阻塞賦值的綜合可能會(huì)產(chǎn)生不同的結(jié)果。?一般時(shí)序塊多采用非阻塞賦值,組合塊多采用阻塞賦值。99時(shí)序邏輯中的阻塞賦值?如果阻塞賦值的賦值操作與讀操作在同一個(gè)狀態(tài)中完成,該阻塞賦值將通過(guò)組合邏輯實(shí)現(xiàn)。?如果阻塞賦值的賦值操作與讀操作在不同狀態(tài)中完成,該阻塞賦值將通過(guò)硬件寄存器實(shí)現(xiàn)。100阻塞與非阻塞的賦值-組合邏輯regz1;regy1;always@(a1orb1orc1)beginz1=a1&b1;y1=z1|c1;endregz2;regy2;always@(a2orb2orc2)beginz2<=a2&b2;y2<=z2|c2;end對(duì)y2來(lái)說(shuō)可能因?yàn)檠舆t的關(guān)系與RTL仿真結(jié)果有差別。101阻塞與非阻塞的賦值-時(shí)序邏輯regz3;regy3;always@(posedgeclk)beginz3=a3&b3;
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國(guó)合式放大鏡數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)PVC地毯保護(hù)地墊數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 郵政面試筆試題及答案
- 專(zhuān)題5 功和簡(jiǎn)單機(jī)械 2021年和2022年江蘇省南通市中考物理模擬試題匯編
- 2019-2025年消防設(shè)施操作員之消防設(shè)備基礎(chǔ)知識(shí)自我檢測(cè)試卷A卷附答案
- 2019-2025年軍隊(duì)文職人員招聘之軍隊(duì)文職管理學(xué)真題練習(xí)試卷A卷附答案
- 酒店合同范本(2篇)
- 2023年黑龍江公務(wù)員《行政職業(yè)能力測(cè)驗(yàn)》試題真題及答案
- 環(huán)境保護(hù)與可持續(xù)發(fā)展知識(shí)點(diǎn)測(cè)試
- 語(yǔ)文課本里的經(jīng)典詩(shī)文賞析
- 2025年安徽衛(wèi)生健康職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)及參考答案1套
- 《澳大利亞》導(dǎo)學(xué)案
- 2025四川省安全員A證考試題庫(kù)附答案
- 2025年高考語(yǔ)文備考訓(xùn)練之社會(huì)現(xiàn)象:“數(shù)字囤積癥”
- 2025年湖南高速鐵路職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)帶答案
- 蘇教版三年級(jí)科學(xué)下冊(cè)第一單元第3課《植物開(kāi)花了》課件
- 休閑海島開(kāi)發(fā)策劃方案
- DB36-T 2097-2024 固定資產(chǎn)投資項(xiàng)目節(jié)能報(bào)告編制規(guī)范
- 健康與保健課件
- 《運(yùn)營(yíng)管理 第7版》課件全套 馬風(fēng)才 第01-15章 運(yùn)營(yíng)管理概論- 互聯(lián)網(wǎng)運(yùn)營(yíng)
- 2025年度典型火災(zāi)案例及消防安全知識(shí)專(zhuān)題培訓(xùn)
評(píng)論
0/150
提交評(píng)論