版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第3講verilog的基本語法3.1數(shù)據(jù)類型及其常量及變量0、低、偽、邏輯低、地、VSS、負插入01XZ0bufbufbufbufif11、高、真、邏輯高、電源、VDD、正插入X、不確定:邏輯沖突無法確定其邏輯值HiZ、高阻抗、三態(tài)、無驅(qū)動源Verilog的四種邏輯值x和X、z和Z不區(qū)別大小寫。Z有時候也用?代替數(shù)據(jù)類型VerilogHDL中共有19種數(shù)據(jù)類型,分成常量和變量最基本最常用的4種:寄存器型reg線網(wǎng)型wire整形integer參數(shù)型parameter其余的包括:large\medium\scalared\time\small\tri\trio\tri1\triand\trior\trireg\vectored\wand\wor型,主要與基本單元庫有關(guān),設(shè)計時很少使用一、常量在程序運行中,其值不能被改變的量叫常量兩類最基本的常量:數(shù)字型常量和參數(shù)(parameter)數(shù)字型常量:整型數(shù)可以按如下兩種方式書寫簡單的十進制數(shù)格式基數(shù)格式基數(shù)表示法(一)格式:[位寬]’進制
值無符號數(shù)。位寬是按照二進制數(shù)來計算的。進制可以為b或B(二進制)、o或O(八進制)、d或D(十進制)、h或H(十六進制)。值是基于進制的數(shù)字序列。如:
3’b001,3’B110三位二進制
6’o12,6’O12六位八進制
4’d9,4’D9十位十進制
8’hBF,8’HBF八位十六進制基數(shù)表示法(二)基數(shù)格式計數(shù)形式的數(shù)通常為無符號數(shù)。這種形式的整型數(shù)的長度定義是可選的。如果沒有定義一個整數(shù)型的長度,數(shù)的長度為相應(yīng)值中定義的位數(shù)。下面是兩個例子:'o7219位八進制數(shù)'hAF8位十六進制數(shù)基數(shù)表示法(三)如果定義的長度比為常量指定的長度長,通常在左邊填0補位。但是如果數(shù)最左邊一位為x或z,就相應(yīng)地用x或z在左邊補位。例如:10'b10左邊添0占位,000000001010'bx0x1左邊添x占位,xxxxxxx0x1如果長度定義得更小,那么最左邊的位相應(yīng)地被截斷。例如:3'b1001_0011與3'b011相等5'H0FFF與5'H1F相等?字符在數(shù)中可以代替值z在值z被解釋為不分大小寫的情況下提高可讀性下劃線下劃線可以用來分割數(shù)的表達式以提高程序的可讀性,但不能用在位寬和進制處,只能用于具體的數(shù)字之間比如16’b1010_1011_11111_000//合法格式8’b_0011_1011//非法格式負數(shù)一個數(shù)字可以被定義成負數(shù),只要在位寬表達式前加一個減號-8’d5//合法格式8’d-5//非法格式簡單的十進制格式這種形式的整數(shù)定義為帶有一個可選的“+”(一元)或“-”(一元)運算符的數(shù)字序列。這種形式的整數(shù)值代表一個有符號的數(shù)。負數(shù)使用補碼形式表示。例如15 相當(dāng)于二進制01111-15 相當(dāng)于二進制10001
實數(shù)類型實數(shù)可以用下列兩種形式定義十進制記數(shù)法,例如:2.0;-0.1等科學(xué)記數(shù)法,例如:235.1e2 等于23510.0234_12e2 等于2341200.0實數(shù)小數(shù)通過四舍五入被隱式地轉(zhuǎn)換為最相近的整數(shù)。例如:42.446,42.45轉(zhuǎn)換為整數(shù)4292.5,92.699轉(zhuǎn)換為整數(shù)93-5.62轉(zhuǎn)換為整數(shù)-6-26.22轉(zhuǎn)換為整數(shù)-6常量的位數(shù),x(或z)在十六進制值中代表4位x(或z),在八進制中代表3位x(或z),在二進制中代表1位x(或z)當(dāng)常量不說明位數(shù)時候默認是32位,每個字母用8位ASCII碼來表示10=32’d10=32’b10101=32’d1=32’b1-1=-32’d1=32’hFFFF_FFFF‘BX=32’BX=32’BXXXXXXXXXX...“AB”=16’B010000001_01000010A的ASCII值是85,B的值是86字符串字符串是雙引號內(nèi)的字符串列。一個字符可用八位二進制表示。如:“INTEGER”需要8*7位。 例: reg[8*14:1]Message;
Message=“INTERNALERROR”;課堂練習(xí)下列表達式的位模式是什么?寫出其具體的二進制表示值7'o44,'Bx0,5'bx110,'hA0,10'd2,'hzFVerilog描述實際的二進制值7'o44100100'Bx0x05'bx110xx110'hA01010_000010'd20000_0000_10'hzFzzzz1111參數(shù)參數(shù)是一個常量。用parameter定義一個標識符來代表一個常量。參數(shù)經(jīng)常用于定義時延和變量的寬度。格式:parameterparam1=const_expr1,param2=const_expr2, …,
paramN=const_exprN;
如:parameterDelay=1;
parameterA=32,B=4’b0001;
parameterstring=“exec_command”;參數(shù)的傳遞參數(shù)值也可以在編譯時被改變。改變參數(shù)值可以使用參數(shù)定義語句或通過在模塊初始化語句中定義參數(shù)值當(dāng)某個模塊在另一個模塊內(nèi)被引用時,高層模塊能夠改變低層模塊的參數(shù)值。模塊參數(shù)值的改變可采用下述兩種方式:參數(shù)定義語句(defparam);帶參數(shù)值的模塊引用。defparam舉例module
TOP(NewA,NewB,NewS,NewC);input
NewA,NewB;output
NewS,NewC;defparam
Ha1.XOR_DELAY=5,//實例Ha1中的參數(shù)XOR_DELAY。Ha1.AND_DELAY=2;//實例Ha1中參數(shù)的AND_DELAY。HAHa1(NewA,NewB,NewS,NewC);endmodulemoduleHA(A,B,S,C);inputA,B;outputS,C;parameterAND_DELAY=1,XOR_DELAY=2;assign#XOR_DELAYS=A^B;assign#AND_DELAYC=A&B;endmoduleHATOP參數(shù)值的模塊引用module
TOP3(NewA,NewB,NewS,NewC);input
NewA,NewB;output
NewS,NewC;HA
#(5,2)Ha1(NewA,NewB,NewS,NewC);//第1個值5賦給參數(shù)AND_DELAY,該參數(shù)在模塊HA中說明。//第2個值2賦給參數(shù)XOR_DELAY,該參數(shù)在模塊HA中說明。endmodule課堂練習(xí)-參數(shù)傳遞假定一個模塊為BK,內(nèi)部兩個參數(shù)P1,P2;另外一個模塊為HA,內(nèi)部參數(shù)P3,P4其在TOP模塊中實例化調(diào)用的名稱分別為U1,U2請嘗試在top模塊中用兩種不同的方法改變其參數(shù)值p1-p4分別為1,2,3,4二、變量在Verilog中有兩大主要數(shù)據(jù)類型:線網(wǎng)類型(wire)、寄存器類型(reg)。線網(wǎng)類型
包含下述不同種類的線網(wǎng)子類型。
wire,tri 用于連線的最常見的線網(wǎng)類型
wor,trior線或
wand,triand線與
trireg 此線網(wǎng)存儲數(shù)值,用于電容節(jié)點的建模
tri1,tri0用于線邏輯的建模,上拉或下拉驅(qū)動
supply0,supply1supply0用于對“地”建模,supply1對電源建模nets(網(wǎng)絡(luò)連線)nets(網(wǎng)絡(luò)連線):由模塊或門驅(qū)動的連線。驅(qū)動端信號的改變會立刻傳遞到輸出的連線上。例如:右圖上,selb的改變,會自動地立刻影響或門的輸出。netsabslselbselansloutNets(線網(wǎng)型)例:
wireBpW;
assignBpW=Error&Wait;
assignBpW=Valid|Clear;BpW電路圖Nets(網(wǎng)絡(luò)連線,線網(wǎng)類型)簡單的線網(wǎng)類型定義說明語句為:net_kind[msb:lsb]net1,net2,….netN;當(dāng)一個線形有兩個或多個驅(qū)動時,線網(wǎng)的有效值按如下表確定。補充:CMOSNORABF001010100110A+BABABAB補充:CMOSNANDABA?BABABF001011101110ABNets(網(wǎng)絡(luò)連線)補充知識:連續(xù)賦制值語句連續(xù)賦制語句用于把值賦給線網(wǎng)型變量(不能為寄存器型變量賦值)語句形式為:assignA=B&C;連續(xù)賦值語句在什么時候執(zhí)行呢?只要在右端表達式的操作數(shù)上有事件(事件為值的變化)發(fā)生時,表達式即被計算;如果結(jié)果值有變化,新結(jié)果就賦給左邊的線網(wǎng)。連續(xù)賦值的目標類型標量線網(wǎng)向量線網(wǎng)向量的常數(shù)型位選擇,如a[1]向量的常數(shù)型部分選擇如:a[3:1]上述類型的任意的拼接運算結(jié)果連續(xù)賦值語句舉例module
FA_Df(A,B,Cin,Sum,Cout);input
A,B,Cin;output
Sum,Cout;assign
Sum=A^B^Cin;assign
Cout=(A&Cin)|(B&Cin)|(A&B);endmodule在本例中,有兩個連續(xù)賦值語句。這些賦值語句是并發(fā)的,與其書寫的順序無關(guān)數(shù)據(jù)流描述方式例:worBpW;wandBpR;
assignBpW=Error&Wait;
assignBpW=Valid|Clear;
assignBpR=Error^Valid;
assignBpR=!Clear;BpW和BpR電路圖寄存器(register)類型變量寄存器(register)類型變量register型變量能保持其值,直到它被賦于新的值。register型變量常用于行為建模,產(chǎn)生測試的激勵信號。常用行為語句結(jié)構(gòu)來給寄存器類型的變量賦值。abslselbselansloutreg_areg_selreg_breg型寄存器是數(shù)據(jù)存儲單元的抽象reg型數(shù)據(jù)常用來表示always塊內(nèi)的指定信號,常代表觸發(fā)器reg型數(shù)據(jù)用initial或者always塊中指定信號reg型數(shù)據(jù)的缺省值是x。可以被賦正值或者負值。當(dāng)它作為一個表達式中的操作數(shù)時候,作為無符號數(shù)。reg數(shù)據(jù)類型定義格式為reg[n-1:0]數(shù)據(jù)名1,....;或者reg[n:1]數(shù)據(jù)名1,....;寄存器陣列
Verilog語言支持寄存器陣列的聲明:integerNUMS[7:0];//8個整型變量的寄存器陣列timet_vals[3:0];//4個時間變量的寄存器陣列數(shù)據(jù)類型為reg的陣列常稱為存儲器(即memory):reg[15:0]MEM[0:1023];//1Kx16位的存儲器reg[7:0]PREP[‘hfffe:‘hffff];//2x8位的存儲器可以用參數(shù)來表示存儲器的大小:parameterwordsize=16;parametermemsize=1024;reg[wordsize-1:0]MEM3[memsize-1:0];只能一次選擇一個字,不允許對存儲器變量值部分進行部分選擇或位選擇.如dram[60][2:4]是錯誤的存儲器memory型變量存儲器memory型用一個寄存器數(shù)組來對存儲器建模。格式:reg[msb:lsb]存儲器名[upper1:lower1];如:reg[3:0]MyMem[63:0];//64個四位寄存器組
其他類型變量integer整數(shù)寄存器有符號數(shù)。主要用來高層次建模。如:integerA; //整形寄存器,32位integerB[1023:0];//10位time時間類型寄存器如:timeCurrentTime;//CurrentTime存儲一個時間值 CurrentTime=$time;輸入端口(input)可以由寄存器(reg)或線網(wǎng)(wire)連接驅(qū)動,但它本身只能驅(qū)動網(wǎng)絡(luò)連接。輸出端口(output)可以由寄存器或線網(wǎng)連接驅(qū)動,但它本身只能驅(qū)動線網(wǎng)連接。輸入/輸出端口(inout)只可以由線網(wǎng)連接驅(qū)動,但它本身只能驅(qū)動線網(wǎng)連接。如果信號變量是在過程塊(initial塊或always塊)中被賦值的,必須把它聲明為寄存器類型變量
如何選擇正確的數(shù)據(jù)類型?moduletop;wirey;
rega,b;DUTu1(y,a,b);
initial
begina=0;b=0;#10a=1;….
endendmodule
模塊DUT的邊界輸入口輸出口輸出/入口netnetnet/registernetnet/registernetinoutmoduleDUT(Y,A,B_);outputY;inputA,B:wireY,A,B;and(Y,A,B);endmodule舉例說明數(shù)據(jù)類型的選擇在過程塊(alwaysinitial)中對變量賦值時,忘了把它定義為寄存器類型(reg)或已把它定義為連接類型了(wire)把實例的輸出連接出去時,把它定義為寄存器類型把模塊的輸入信號定義為寄存器類型。這是經(jīng)常犯的三個錯誤!?。∵x擇數(shù)據(jù)類型時常犯的錯誤3.2運算符及表達式天津大學(xué)電子科學(xué)與技術(shù)系史再峰3.2運算符(操作符)及表達式VerilogHDL中的運算符可以分為下述類型:算術(shù)運算符關(guān)系運算符相等運算符邏輯運算符按位運算符縮減(歸約)運算符移位運算符條件運算符連接和復(fù)制運算符按所帶操作數(shù)的個數(shù)分類單目運算符(unaryoperator)帶一個操作數(shù),操作數(shù)在運算符的右邊如~clock雙目運算符(binaryoperator)帶兩個操作數(shù),操作數(shù)分別在運算符的兩邊如a|b三目運算符(ternaryoperator)帶三個操作數(shù),用三目運算符隔開3.2.1算術(shù)運算符算術(shù)運算符有:+(一元加和二元加)-(一元減和二元減)*(乘)/(除)%(取模)整數(shù)除法截斷任何小數(shù)部分。例如:7/4結(jié)果為1取模運算符求出與第一個運算符符號相同的余數(shù)。7%4結(jié)果為3而-7%4結(jié)果為-3課堂練習(xí)以下表達式在verilogHDL中的值是多少?(結(jié)果用16位hex表示表示)5/3(-9)/6(-9)%611%(-5)12/(-7)答案是5/3=16’h0001(-9)/6=16’hFFFF(-9)%6=16’hFFFD11%(-5)=16’h000112/(-7)=16’hFFFF3.2.2按位運算符按位運算符有:~(一元非)&(二元與)|(二元或)^(二元異或)~^,^~(二元異或非)這些運算符在輸入操作數(shù)的對應(yīng)位上按位操作,并產(chǎn)生向量結(jié)果。不同長度操作符運算時,會右端對齊,左端補0按位非運算符按位與運算符按位或運算符按位異或運算符按位異或非運算符按位操作符舉例假定A='b0110;B='b0100;那么:A|B結(jié)果為0110A&B結(jié)果為01004'b1011^4'bx010=4'bx001如果操作數(shù)長度不相等,長度較小的操作數(shù)在最左側(cè)添0補位。例如,'b0110^'b10000與如下式的操作相同:'b00110^'b10000結(jié)果為'b10110。3.2.3邏輯運算符邏輯運算符有:&&(邏輯與)||(邏輯或)!(一元邏輯非)這些運算符在邏輯值0或1上運算。邏輯運算的結(jié)構(gòu)為0或1。邏輯與運算舉例assigna=8'haa;assignb=8'hff;assignc_out=a&b;assignc_out2=a&&b;c_out2結(jié)果是0000_0001課堂練習(xí)以下表達式在verilogHDL中的值是多少?(結(jié)果用8位表示)assignd_0=4'b1101^8'h0a;assignd_1=4'b1101^~8'h0a;assignd_2=4'b1z01|8'h0a;assignd_3=4'b1101&&8'h0a;assignd_4=!4'b1x01;assignd_5=4'b1010||8'h55;答案是#hexd_0is07#hexd_1isF8#binaryd_2is0000_1x11#hexd_3is01#hexd_4is00#hexd_5is013.2.4關(guān)系運算符關(guān)系運算符有:>(大于)<(小于)>=(不小于)<=(不大于)關(guān)系運算符的結(jié)果為真(1)或假(0)。如果操作數(shù)中有一位為X或Z,那么結(jié)果為X。例如:23>45結(jié)果為假(0)52<8‘hxFF結(jié)果為x。關(guān)系運算符語法如果操作數(shù)長度不同,長度較短的操作數(shù)在最重要的位方向(左方)添0補齊。例如:'b1000>='b01110等價于:'b01000>='b01110結(jié)果為假(0)3.2.5相等關(guān)系運算符相等關(guān)系運算符有:==(邏輯相等)!=(邏輯不等)===(全等)!==(非全等)如果比較結(jié)果為假,則結(jié)果為0;否則結(jié)果為1。在全等比較中,值x和z嚴格按位比較。相等關(guān)系運算舉例Data='b11x0;Addr='b11x0;那么(Data==Addr)不定,值為x,但:Data===Addr為真,值為1。如果操作數(shù)的長度不相等,長度較小的操作數(shù)在左側(cè)添0補位,例如:2'b10==4'b0010與下面的表達式相同:4'b0010==4'b0010結(jié)果為真(1)。關(guān)系及相等關(guān)系運算符練習(xí)判斷以下表達式中的d值是多少assignd_relation1=(4'b1011>=4'b10x1);
assignd_relation2=(4'b1011==4'b10x1);
assignd_relation3=(4'b10x1==4'b10x1);
assignd_relation4=(4'b10z1===4'b10x1);assignd_relation5=(4'b10x1!==4'b10x1);assignd_relation6=(4'b10x1!=4'b10x1);答案是:#bind_relation1is1'bx#bind_relation2is1'bx#bind_relation3is1'bx#bind_relation4is1'b0#bind_relation5is1'b0#bind_relation6is1'bx3.2.6縮減(歸約)運算符歸約運算符在單一操作數(shù)的所有位上操作,并產(chǎn)生1位結(jié)果。歸約運算符有:&(歸約與):如果存在位值為0,那么結(jié)果為0;若如果存在位值為x或z,結(jié)果為x;否則結(jié)果為1。~&(歸約與非):與歸約運算符&相反。
|(歸約或):如果存在位值為1,那么結(jié)果為1;如果存在位x或z,結(jié)果為x;否則結(jié)果為0。~|(歸約或非):與歸約運算符|相反。
^(歸約異或):如果存在位值為x或z,那么結(jié)果為x;否則如果操作數(shù)中有偶數(shù)個1,結(jié)果為0;否則結(jié)果為1。
~^(歸約異或非):與歸約運算符^正好相反。縮減(歸約)運算符練習(xí)判斷以下表達式中的d值是多少
assignd_reduction1=&8'b1011_0011;
assignd_reduction2=~|8'b1011_0011;
assignd_reduction3=~&8'b1011_0011;assignd_reduction4=~^8'b1011_0011;
assignd_reduction5=^8'b1011_0011;assignd_reduction6=~|8'b1011_00x1;
assignd_reduction7=^8'b10z1_0011;
assignd_reduction8=&8'b1011_00x1;assign
d_reduction8=&~8'b1011_00x1;modelsim仿真驗證的答案是#bind_reduction1is1'b0#bind_reduction2is1'b0#bind_reduction3is1'b1#bind_reduction4is1'b0#bind_reduction5is1'b1#bind_reduction6is1'b0#bind_reduction7is1'bx#bind_reduction8is1'b0
Error:./vlog_test.v(57):near"~":syntaxerror,
3.2.7移位運算符移位運算符有:<<(左移)
>>(右移)移位運算符左側(cè)操作數(shù)移動右側(cè)操作數(shù)表示的次數(shù),它是一個邏輯移位??臻e位添0補位。如果右側(cè)操作數(shù)的值為x或z,移位操作的結(jié)果為x。假定:reg
[0:7]Qreg;...Qreg=4'b0111;那么:Qreg>>2是8'b0000_00013.2.8條件運算符條件運算符根據(jù)條件表達式的值選擇表達式,形式如下:cond_expr
?expr1:expr2如果cond_expr為真(即值為1),選擇expr1;如果cond_expr為假(值為0),選擇expr2。如果cond_expr為x或z,結(jié)果將是按以下邏輯expr1和expr2按位操作的值:0與0得0,1與1得1,其余情況為x。條件運算符舉例wire
[0:2]Student=Marks>18?GA:GC;計算表達式Marks>18;如果真,GA賦值給Student;如果Marks<=18,GC賦值給Student。再例如:always#5Ctr=(Ctr!=25)?(Ctr+1):5;過程賦值中的表達式表明如果Ctr不等于25,則加1;否則如果Ctr值為25時,將Ctr值重新置為5。3.3.8連接和復(fù)制操作連接操作是將小表達式合并形成大表達式的操作。形式如:{expr1,expr2,...,exprN}實例如下所示:wire[7:0]Dbus;wire[11:0]Abus;assignDbus[7:4]={Dbus[0],Dbus[1],Dbus[2],Dbus[3]};//以反轉(zhuǎn)的順序?qū)⒌投?位賦給高端4位。assignDbus={Dbus[3:0],Dbus[7:4]};//高4位與低4位交換。復(fù)制運算符通過指定重復(fù)次數(shù)來執(zhí)行操作。形式如下:{repetition_number{expr1,expr2,...,exprN}}以下是一些實例:Abus={3{4'b1011}};/位向量12'b1011_1011_1011)Abus={{4{Dbus[7]}},Dbus};/*符號擴展*/運算符的優(yōu)先級3.2.10關(guān)鍵詞所有關(guān)鍵詞都是事先定義好的確認符,用于組織語言結(jié)構(gòu),全部是小寫定義。常用的有assignalwaysinitialbeginendbufbufif0bufif1casexcasezcmosdeassigndefaultdefparamdisableedgecaseifelseendcasejoinlargeforkjoinnotnotif0notif1xorwireregworxorxnorwhiletritri0tri1triandtriorrepeattaskfunctionforeverendtask等等作業(yè)練習(xí)題假定32位總線Address_Bus,編寫一個表達式,計算從第11位到第20位的歸約與非。假定一條總線Control_Bus[15:0],編寫賦值語句將總線分為兩條總線:Abus[0:9]和Bbus[6:1]。編寫一個表達式,執(zhí)行算術(shù)移位,將Qparity中包含的8位有符號數(shù)算術(shù)移位。使用條件運算符,編寫賦值語句選擇NextState的值。如果CurrentState的值為RESET,那么NextState的值為GO;如果CurrentState的值為GO,則NextState的值為BUSY;如果CurrentState的值為BUSY;則NextState的值為RESET。習(xí)題解答錯誤解答:assign
CurrentState==RESET?NextState=Go:(CurrentState==Go?NextState=BUSY:(CurrentState==BUSY?NextState=RESET:))正確解答:assignnextstate=(currentstate==RESET)?GO:((currentstate==GO)?BUSY:((currentstate==BUSY)?RESET:1’bz));3.3數(shù)據(jù)流建模天津大學(xué)電子科學(xué)與技術(shù)系史再峰一、連續(xù)賦制值語句連續(xù)賦制語句用于把值賦給線網(wǎng)型變量(不能為寄存器型變量賦值)語句形式為:assignA=B&C;只要在右端表達式的操作數(shù)上有事件(事件為值的變化)發(fā)生時,表達式即被計算;如果計算的結(jié)果值有變化,新結(jié)果就賦給左邊的線網(wǎng)。數(shù)據(jù)流的模型化連續(xù)賦值語句將值賦給線網(wǎng)(連續(xù)賦值不能為reg)例如assign
Mux=(S==0)?A:1'bz;assign
Mux=(S==1)?B:1'bz;assign
Mux=(S==2)?C:1'bz;assign
Mux=(S==3)?D:1'bz;assign
Mux=(S==0)?A:1‘bz,//也可以這樣在一個語句中寫Mux=(S==1)?B:1‘bz,
Mux=(S==2)?C:1‘bz,
Mux=(S==3)?D:1'bz;連續(xù)賦值的目標類型標量線網(wǎng)wirea;向量線網(wǎng)wire[7:0]a;向量線網(wǎng)的常數(shù)型位選擇,如a[1]向量線網(wǎng)的常數(shù)型部分選擇如:a[3:1]上述類型的任意的拼接運算結(jié)果{3a[2],a[2:1]}連續(xù)賦值語句舉例module
FA_Df(A,B,Cin,Sum,Cout);input
A,B,Cin;output
Sum,Cout;assign
Sum=A^B^Cin;assign
Cout=(A&Cin)|(B&Cin)|(A&B);endmodule在本例中,有兩個連續(xù)賦值語句。這些賦值語句是并發(fā)的,與其書寫的順序無關(guān)對應(yīng)的電路連接關(guān)系賦值給向量線網(wǎng)的拼接wire
Cout,Cin;wire[3:0]Sum,A,B;assign{Cout,Sum}=A+B+Cin;數(shù)據(jù)流描述方式例:worBpW;wandBpR;
assignBpW=Error&Wait;
assignBpW=Valid|Clear;
assignBpR=Error^Valid;
assignBpR=!Clear;BpW和BpR電路圖用數(shù)據(jù)流描述對2-4解碼器電路的建模參考答案`timescale1ns/1nsmoduleDecoder2x4(A,B,EN,Z);inputA,B,EN;output[0:3]Z;wireAbar,Bbar;assignAbar=~A;assignBbar=~B;assignZ[0]=~(Abar&Bbar&EN);assignZ[1]=~(Abar&B&EN);assignZ[2]=~(A&Bbar&EN);assignZ[3]=~(A&B&EN);endmodule課堂練習(xí)題使用連續(xù)賦值語句,描述圖示的優(yōu)先編碼器電路的行為2bar02bar12bar2某同學(xué)的解答module(Data,Encode,Valid);input[3:0]Data;output[1:0]Encode;wire2bar0,2bar1,0bar;assign2bar0=~Data[2];assign2bar1=2bar0&Data[1];assign0bar=Data[0]|Data[1];assignEncode[0]=Data[3]|2bar1;assignEncode[1]=Data[3]|Data[2];assignValid=Data[3]|Data[2]|0bar;endmodule程序基本沒有問題,但是:第1行module沒有命名,這是不可以的第4行變量定義的時候,標識符的首字母應(yīng)該是字母或者下劃線正確解答moduleencoder(Data,Encode,Valid);input[3:0]Data;output[1:0]Encode;wirebar0,bar1,bar;assignbar0=~Data[2];assignbar1=2bar0&Data[1];assignbar=Data[0]|Data[1];assignEncode[0]=Data[3]|2bar1;assignEncode[1]=Data[3]|Data[2];assignValid=Data[3]|Data[2]|0bar;endmodule二、線網(wǎng)說明賦值連續(xù)賦值可作為線網(wǎng)說明本身的一部分。這樣的賦值被稱為線網(wǎng)說明賦值。如:wire[3:0]Sum=4'b0;wireClear='b1;wireA_GT_B=A>B,B_GT_A=B>A;等價于
wireclear;
assignclear=‘b1;不允許在同一個線網(wǎng)上出現(xiàn)多個線網(wǎng)說明賦值。如果多個賦值是必需的,則必須使用連續(xù)賦值語句。隱式線網(wǎng)如果在VerilogHDL模型中一個線網(wǎng)沒有被特別說明,那么它被缺省聲明為1位線網(wǎng)。但是`default_nettype編譯指令能夠用于取代缺省線網(wǎng)類型.例:`default_nettypewand
//根據(jù)此編譯指令,所有后續(xù)未說明的線網(wǎng)都是wand類型再例:`default_nettypewiremoduleAND4to1(Z,D0,D1,D2,D3,S0);outputZ;inputD0,D1,D2,D3,S0;
assignZ=S0?(D0&D1&D2&D3):1’b0;
endmodule數(shù)據(jù)流建模課堂練習(xí)數(shù)據(jù)流建模參考答案moduleMSDFF_DF(D,C,Q,Qbar);inputD,C;outputQ,Qbar;//wireNotC,NotD,NotY,Y,D1,D2,Ybar,Y1,;Y2assignNotD=~D;assignNotC=~C;assignNotY=~Y;assignD1=~(D&C);assignD2=~(C&NotD);assignY=~(D1&Ybar);assignYbar=~(Y&D2);assignY1=~(Y&NotC);assignY2=~(NotY&NotC);assignQ=~(Qbar&Y1);assignQbar=~(Y2&Q);endmodule三、時延說明assign#6Ask=Quiet||Late;規(guī)定右邊表達式結(jié)果的計算到其賦給左邊目標需經(jīng)過6個時間單位時延。例如,如果在時刻5,Late值發(fā)生變化,則賦值的右端表達式被計算,并且Ask在時刻11(=5+6)被賦于新值時延VerilogHDL模型中的所有時延都根據(jù)時間單位定義使用編譯指令將時間單位與物理時間相關(guān)聯(lián)。這樣的編譯器指令需在模塊描述前定義,如下所示:`timescale
1ns/100ps此語句說明時延時間單位為1ns并且時間精度為100ps(時間精度是指所有的時延必須被限定在0.1ns內(nèi))。如果此編譯器指令所在的模塊包含上面的連續(xù)賦值語句,#2代表2ns。如果沒有這樣的編譯器指令,VerilogHDL模擬器會指定一個缺省時間單位。IEEEVerilogHDL標準中沒有規(guī)定缺省時間單位。為什么會有延時?以下兩個最基本的電路單元CMOSNANDABA?BABABF001011101110ABCMOSNORABF001010100110A+BABABABMOSFET的結(jié)構(gòu)MOS電容靜態(tài)CMOS的開關(guān)模型AReqARpARpARnCLACLBRnARpBRpARnCintBRpARpARnBRnCLCintNAND2INVNOR2關(guān)于時延探討如果右端在傳輸給左端之前變化,右端發(fā)生在時延間隔內(nèi)的變化被濾掉。 例如:assign#4Cab=Drm;這也同樣適用于慣性時延行為:即右端值變化在能夠傳播到左端前必須至少保持時延間隔;如果在時延間隔內(nèi)右端值變化,則前面的值不能傳輸?shù)捷敵?。三類時延值對于每個時延定義,總共能夠指定三類時延值:上升時延下降時延關(guān)閉時延assign#(rise,fall,turn-off)LHS=RHS_expr;如果右端從非0向量變化到0向量,那么就使用下降時延。如果右端值到達z,那么使用下降時延;否則使用上升時延。assign#4Ask=Quiet||Late;//Onedelayvalue.assign#(4,8)Ask=Quick;//Twodelayvalues.assign#(4,8,6)Arb=&DataBus;//Threedelayvalues.assignBus=MemAddr[7:4];//Nodelayvalue.帶時延的譯碼器建模`timescale1ns/1nsmoduleDecoder2x4(A,B,EN,Z);inputA,B,EN;output[0:3]Z;wireAbar,Bbar;assign#1Abar=~A;assign#1Bbar=~B;assign#2Z[0]=~(Abar&Bbar&EN);assign#2Z[1]=~(Abar&B&EN);assign#2Z[2]=~(A&Bbar&EN);assign#2Z[3]=~(A&B&EN);endmodule結(jié)果波形3.3.3線網(wǎng)時延時延也可以在線網(wǎng)說明中定義,如:wire#5Arb;線網(wǎng)時延效果如圖線網(wǎng)時延Textassign時延assign時延驅(qū)動2驅(qū)動2驅(qū)動1RHS表達式RHS表達式線網(wǎng)目標線網(wǎng)時延舉例wire#5Arb;assign#2Arb=Bod⋒因為定義了線網(wǎng)時延,實際對Arb的賦值發(fā)生在時刻17(=10+2+5)。課后作業(yè)數(shù)據(jù)流建模以下的奇偶發(fā)生器3.4門級結(jié)構(gòu)建模天津大學(xué)電子科學(xué)與技術(shù)系史再峰3.4門級結(jié)構(gòu)建模moduleaddbit(a,b,ci,sum,co);inputa,b,ci;outputsum,co;wirea,b,ci,sum,co,n1,n2,n3;xor(n1,a,b,);xor(sum,n1,ci);and(n2,a,b);and(n3,n1,ci);or(co,n2,n3);endmodule由一些Verilog原型列出結(jié)構(gòu)化的元件并按網(wǎng)表連接3.4.1內(nèi)置的基本門VerilogHDL為門級電路建模的能力.提供下列內(nèi)置基本門:
多輸入門:and,nand,or,nor,xor,xnor多輸出門:buf,not三態(tài)門:bufif0,bufif1,notif0,notif1上拉、下拉電阻:pullup,pulldownMOS開關(guān):cmos,nmos,pmos,rcmos,rnmos,rpmos雙向開關(guān):tran,tranif0,tranif1,rtran,rtranif0,rtranif1門級結(jié)構(gòu)建模語法語句形式gate_type[instance_name](term1,term2,...,termN);注意,instance_name是可選的;gate_type為前面列出的某種門類型。各term用于表示與門的輸入/輸出端口相連的線網(wǎng)或寄存器.同一門類型的多個實例能夠在一個結(jié)構(gòu)形式中定義gate_type[instance_name1](term1,term2,...,termN),[instance_name2](term1,term2,...,termN),[instance_name3](term1,term2,...,termN),[instance_name4](term1,term2,...,termN);3.4.2多輸入門內(nèi)置的多輸入門包括:andnandnororxorxnor這些邏輯門只有單個輸出,1個或多個輸入。門實例語句的語法如:multi_input_gate_type[instance_name](OutputA,Input1,Input2,...,InputN);第一個端口是輸出,其它端口是輸入多輸入門input1input2inputNOutputA多輸入門語法舉例andA1(Out1,In1,In2);andRBX(Sty,Rib,Bro,Qit,Fi)x;xor(Bar,Bud[0],Bud[1],Bud[2]),(Car,Cut[0],Cut[1]),(Sar,Sut[2],Sut[1],Sut[0],Sut[3]);多輸入門的真值表(一)nand01XZ01111110XXX1XXXZ1XXXand01XZ00000101XXX0XXXZ0XXX多輸入門的真值表(二)nor01XZ010XX10000XX0XXZX0XXor01XZ001XX11111XX1XXZX1XX多輸入門的真值表(三)xnor01XZ010XX101XXXXXXXZXXXXxor01XZ001XX110XXXXXXXZXXXX3.4.3多輸出門多輸出門有:bufnot這些門都只有單個輸入,一個或多個輸出。多輸出門的實例語句的基本語法如:multi_output_gate_type[instance_name](Out1,Out2,...OutN,InputA);多輸出門output1output2outputNInputA多輸出門語法舉例bufB1(Fan[0],F(xiàn)an[1],F(xiàn)an[2],F(xiàn)an[3],Clk);notN1(PhA,PhB,Ready);真值表01XZbuf01XXnot10XX3.4.4三態(tài)門三態(tài)門有:bufif0bufif1notif0notif1這些門用于對三態(tài)驅(qū)動器建模。這些門有一個輸出、一個數(shù)據(jù)輸入和一個控制輸入。三態(tài)門實例語句的基本語法如下:
tristate_gate[instance_name](OutputA,InputB,ControlC);第一個端口OutputA是輸出端口,第二個端口InputB是數(shù)據(jù)輸入,ControlC是控制輸入。inputAoutputAControlC三態(tài)門三態(tài)門的真值表bufif0控制信號01XZ數(shù)據(jù)輸入00Z0/z0/z11Z1/z1/zXXZXxZXZXxbufif1控制信號01XZ數(shù)據(jù)輸入0Z00/z0/z1Z11/z1/zXZXXxZZXXxnotif0控制信號01XZ數(shù)據(jù)輸入01Z1/z1/z10Z0/z0/zXXZXxZXZXxnotif1控制信號01XZ數(shù)據(jù)輸入0Z11/z1/z1Z00/z0/zXZXXxZZXXx門級結(jié)構(gòu)建模例題module flop(data,clock,clear,q,qb);input data,clock,clear;output q,qb;nand
#10 nd1(a,data,clock,clear),nd2(b,ndata,clock),nd4(d,c,b,clear),nd5(e,c,nclock),nd6(f,d,nclock),nd8(qb,q,f,clear);nand
#9 nd3(c,a,d),nd7(q,e,qb);not
#10 iv1(ndata,data),iv2(nclock,clock);endmodule課堂練習(xí)用verilog的內(nèi)置基本門結(jié)構(gòu)建模以下電路參考答案moduleParity_9_Bit(D,Even,Odd);input[0:8]D;outputEven,Odd;xor
XE0(E0,D[0],D[1]), XE1(E1,D[2],D[3]), XE2(E2,D[4],D[5]), XE3(E3,D[6],D[7]), XF0(F0,E0,E1), XF1(F1,E2,E3), XH0(H0,F0,F1), XEVEN(Even,D[8],H0);notXODD(Odd,Even);endmodule3.4.5其他門級模型其他門級模型包括上拉、下拉電阻:pullup,pulldownMOS開關(guān):cmos,nmos,pmos,rcmos,rnmos,rpmos雙向開關(guān):tran,tranif0,tranif1,rtran,rtranif0,rtranif1上拉、下拉電阻pullup,pulldown,這類門設(shè)備沒有輸入只有輸出。上拉電阻將輸出置為1。下拉電阻將輸出置為0。門實例的端口表只包含1個輸出。例如:pullupPUP(SCL);此上拉電阻實例名為PUP,輸出Pwr置為高電平1。MOS開關(guān)這類門用來為單向開關(guān)建模。即數(shù)據(jù)從輸入流向輸出,并且可以通過設(shè)置合適的控制輸入關(guān)閉數(shù)據(jù)流。pmos(p類型MOS管)、nmos(n類型MOS管),rnmos(r代表電阻)和rpmos開關(guān)有一個輸出、一個輸入和一個控制輸入,例如:rnmosRN1(ControlBit,ReadyBit,Hold);cmos(mos互補)和rcmos(cmos的高阻態(tài)版本)開關(guān)有一個數(shù)據(jù)輸出,一個數(shù)據(jù)輸入和兩個控制輸入。例如:(r)cmos
[instance_name](OutputA,InputB,NControl,PControl);rnmos、rpmos、驅(qū)動強度rnmos和pmos在輸入引線和輸出引線之間存在高阻抗(電阻)。因此當(dāng)數(shù)據(jù)從輸入傳輸至輸出時,對于rpmos和rmos,存在數(shù)據(jù)信號強度衰減。值1強度supply1>strong1>pull1>weak1>highz1值0強度supply0>strong0>pull0>weak0>highz0雙向開關(guān)雙向開關(guān):tran,tranif0,tranif1,rtran,rtranif0,rtranif1開關(guān)是雙向的,即數(shù)據(jù)可以雙向流動,并且當(dāng)數(shù)據(jù)在開關(guān)中傳播時沒有延時。后4個開關(guān)能夠通過設(shè)置合適的控制信號來關(guān)閉。tran和rtran(tran的高阻態(tài)版本)開關(guān)不能被關(guān)閉。gate_type[instance_name](SignalA,SignalB,ControlC);前兩個端口是雙向端口,即數(shù)據(jù)從SignalA流向SignalB,反之亦然。第三個端口是控制信號。根據(jù)開關(guān)例化的選擇有控制信號或者沒有控制信號。3.4.6門的延時可以使用門時延定義門從任何輸入到其輸出的信號傳輸時延。門時延可以在門自身實例語句中定義。帶有時延定義的門實例語句的語法如下:
gate_type[delay][instance_name](terminal_list);時延規(guī)定了門時延,即從門的任意輸入到輸出的傳輸時延。當(dāng)沒有強調(diào)門時延時,缺省的時延值為0。門時延由三類時延值組成:上升時延下降時延截止時延門時延定義個數(shù)0個時延1個時延2個時延3個時延上升0dd1d1下降0dd2d2to_X0dmin(d1,d2)min(d1,d2,d3)截止0dmin(d1,d2)d3門時延由三類時延值組成:上升時延,下降時延,截止時延門時延定義可以包含0個、1個、2個或3個時延值。門時延舉例notN1(Qbar,Q);//門時延為0nand#6(Out,In1,In2);//所有時延均為6,即上升和下降時延都是6and#(3,5)(Out,In1,In2,In3);notif1#(2,8,6)(Dout,Din1,Din2);//上升時延為2,下降時延為8,截止時延為6,轉(zhuǎn)換到x的時延是2、8和6中的最小值,即2。門延遲也可采用min:type:max形式定義。最小值、典型值和最大值必須是常數(shù)表達式。例如:and#(2:3:4,5:6:7)(Pout,Pin1,Pin2);如要更精確定義門延時,可用specify語句定義從特定的輸入到輸出端的各種延時.矢量線網(wǎng)用于門結(jié)構(gòu)描述當(dāng)需要重復(fù)性的實例時,在實例描述語句中能夠有選擇地定義范圍說明wire[3:0]Out,InA,InB;nandGang[3:0](Out,InA,InB);實例化時自動以相同的標號對齊。等價于nandGang3(Out[3],InA[3],InB[3]),Gang2(Out[2],InA[2],InB[2]),Gang1(Out[1],InA[1],InB[1]),Gang0(Out[0],InA[0],InB[0]);門級結(jié)構(gòu)建模例題`timescale1ns/1nsmoduleDEC2X4(A,B,Enable,Z);inputA,B,Enable;output[0:3]Z;wireAbar,Bbar;not
#(1,2)V0(Abar,A),V1(Bbar,B);nand
#(4,3)N0(Z[3],Enable,A,B),N1(Z[0],Enable,Abar,Bbar),N2(Z[1],Enable,Abar,B),N3(Z[2],Enable,A,Bbar);endmodule門級結(jié)構(gòu)建模練習(xí)題參考解答`timescale1ns/1nsmoduleGateCircuit(Data,Encode,Valid)input[3:0]Data;output[1:0]Encode,Valid;notG1(NotData[2],Data[2]);andG2(A,NotData[2],Data[1]);orG3(B,Data[1],Data[0]),
G4(Encode[0],Data[3],A),
G5(Encode[1],Data[3],Data[2]),
G6(Valid,Data[3],Data[2],B);
endmodule作業(yè)題先畫出完整門級電路圖,然后用門級結(jié)構(gòu)描述以下電路,并試分析其功能M1-EM2-DM3-CLA3.5行為建模3.5行為建模行為描述方式設(shè)計的行為功能使用下述過程語句結(jié)構(gòu)描述:initial語句:此語句只執(zhí)行一次。always語句:此語句總是循環(huán)執(zhí)行,或者說此語句重復(fù)執(zhí)行。只有寄存器類型數(shù)據(jù)能夠在這兩種語句中被賦值。寄存器類型數(shù)據(jù)在被賦新值前保持原有值不變。所有的initial語句和always語句在0時刻并發(fā)執(zhí)行。一個模塊中可包含任意多個initial和always語句過程性賦值(過程結(jié)構(gòu))過程性賦值是在initial語句或always語句內(nèi)的賦值,它只能對寄存器數(shù)據(jù)類型的變量賦值。表達式的右端可以是任何表達式。 ...reg[1:4]Enable,A,B;...#5Enable=~A^~B;...Enable為寄存器。根據(jù)時延控制,賦值語句被延遲5個時間單位執(zhí)行。右端表達式被計算,并賦值給Enable過程性賦值分兩類:阻塞性過程賦值、非阻塞性過程賦值initial過程結(jié)構(gòu)語句initial語句只執(zhí)行一次。initial語句在仿真開始時執(zhí)行,即在0時刻開始執(zhí)行。initial語句的語法如下:initial
begin...end順序過程(begin...end)最常使用在進程語句中。initial的時序控制時序控制可以是時延控制,即等待一個確定的時間;或事件控制,即等待確定的事件發(fā)生或某一特定的條件為真。initial語句的各個進程語句僅執(zhí)行一次。在模擬的0時刻開始執(zhí)行。initial語句根據(jù)進程語句中出現(xiàn)的時間控制在以后的某個時間完成執(zhí)行。Initial語句主要用于初始化和波形生成initial語句舉例parameterAPPLY_DELAY=5;reg[0:7]port_A;...initialbeginPort_A=8'h20;#APPLY_DELAYPort_A=8'hF2;#APPLY_DELAYPort_A=8'h41;#APPLY_DELAYPort_A=8'h0A;endinitial語句舉例`timescale1ns/100psmodulet_s2();
rega;
initial
begina=1;#5a=0;#8a=1;#10;a=0;#11a=1;endendmoduleInitial語句練習(xí)modulestimulus;
regx,y,a,b,m;
initial
m=1'b0;
initial
begin
#5a=1'b1;
#25b=1'b0;
end
initial
begin
#10x=1'b0;
#25y=1'b1;
end
initial
#50$finish;
endmodule時間
被執(zhí)行的敘述
0
m=1'b0;
5
a=1'b1;
10
x=1'b0;
30
b=1'b0;
35
y=1'b1;
50
$finish;always語句always語句重復(fù)執(zhí)行例如:alwaysClk=~Clk;//將無限循環(huán)。always語句的執(zhí)行必須帶有某種時序控制always#5Clk=~Clk;//產(chǎn)生時鐘周期為10的波形。always語句舉例moduleDFF(Clk,D,Set,Q,Qbar);inputClk,D,Set;outputQ,Qbar;regQ,Qbar;alwayswait(Set==1)begin#3Q=1;#2Qbar=0;wait(Set==0);endalways@(negedgeClk)beginif(Set!=1)
begin#5Q=D;#1Qbar=~Q;end
endendmodulealways用法舉例modulelab1(a,b,c,sel,z);input[7:0]a,b,c;inputsel;output[8:0]z;always@(aorborc)beginif(sel)z=a+b;elsez=a+c;endendmodule兩類語句在同一模塊的使用moduleTestXorBehavior;regSa,Sb,Zeus;initial
beginSa=0;Sb=0;#5Sb=1;#5Sa=1;#5Sb=0;endalways@(SaorSb)Zeus=Sa^Sb;endmodule3.5.2行為建模中的時序控制時序控制與過程語句關(guān)聯(lián)。有2種時序控制形式:時延控制事件控制這兩類時序控制形式只能用于initial或者always語句塊之中,即只能用于行為建模時延控制時延控制定義為執(zhí)行過程中首次遇到該語句與該語句的執(zhí)行的時間間隔。時延控制表示在語句執(zhí)行前的“等待時延”形式如:#2Tx=Rx-5;時延控制也可以用另一種形式定義:#5;這種形式指定了在下一條語句執(zhí)行前等待給定的時延時延控制中的時延可以是任意表達式,不必限定為某一常量如果時延表達式的值為0,則稱之為顯式零時延。促發(fā)一個等待,等待所有其它在當(dāng)前模擬時間被執(zhí)行的事件執(zhí)行完畢后,才將其喚醒;模擬時間不前進。課堂練習(xí)寫出完整代碼,生成如下波形。生成一個周期為10的時鐘信號參考答案`timescale1ns/100psmodulet_s2();
rega;
regclk;
initial
begina=0;clk=0;#10a=1;#10a=0;#20;a=1;#10a=0;#10a=1;#10a=0;#10a=1;endalwaysbegin#5clk=~clk;endendmodule事件控制(消息控制)邊沿觸發(fā)事件控制格式為:@事件聲明例如@(posedgeClock)帶有事件控制的進程或過程語句的執(zhí)行,須等到指定事件發(fā)生。上例中,如果Clock信號從低電平變?yōu)楦唠娖剑ㄕ兀?,就?zhí)行賦值語句;否則進程被掛起,直到Clock信號產(chǎn)生下一個正跳邊沿。posedge表示上升沿(正沿);nededge表示下降沿(負沿)正沿和負沿代表的意義negedgeposedge1->X0->x1->Z0->Z1->00->1x->0x->1z->0z->1邊沿觸發(fā)事件控制舉例time
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 采購合同和采購訂單相似與不同3篇
- 采購熟料合同3篇
- 采購合同審批流程3篇
- 采購合同管理的有效性提升策略3篇
- 采購合同管理的成功實踐3篇
- 采購合同會審制度的風(fēng)險預(yù)防3篇
- 2024年擔(dān)保責(zé)任法律規(guī)定及合同簽訂法律風(fēng)險防范指南3篇
- 2024年度環(huán)保項目擔(dān)保借款合同規(guī)范文本3篇
- 2024年二零二四年度政府交通基礎(chǔ)設(shè)施建設(shè)合同范本3篇
- 工程合同范本2025年
- 小學(xué)科學(xué)實驗圖片和文字
- 2023年法考鐘秀勇講民法講義電子版
- 施工單位自查自糾記錄表
- 產(chǎn)品合格證出廠合格證A4打印模板
- IEC60287中文翻譯版本第一部分課件
- 《公路隧道設(shè)計細則》(D70-2010 )【可編輯】
- 農(nóng)業(yè)開發(fā)有限公司章程范本
- GB 4806.11-2023食品安全國家標準食品接觸用橡膠材料及制品
- 化工企業(yè)隱患排查與治理
- 自然辯證法智慧樹知到課后章節(jié)答案2023年下浙江大學(xué)
- 循環(huán)冷卻水處理和“趨零”排放新技術(shù)
評論
0/150
提交評論