版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章基于EDA的組合電路設(shè)計(jì)、
?綜合及驗(yàn)證
6.1基本邏輯門(mén)電路6.2編碼器6.3譯碼器6.4數(shù)據(jù)選擇器6.5數(shù)值比較器6.6加法器6.7乘法器6.8組合邏輯電路的競(jìng)爭(zhēng)冒險(xiǎn)問(wèn)題6.9組合邏輯電路的綜合性實(shí)例
學(xué)習(xí)基礎(chǔ):
第2章介紹了組合邏輯電路的基礎(chǔ)知識(shí),組合邏輯電路在數(shù)字系統(tǒng)中起著基本組件的作用。
第4章介紹了VerilogHDL的基本語(yǔ)法及簡(jiǎn)單設(shè)計(jì)的建模方法。
5.5節(jié)~5.7節(jié)的綜合實(shí)例,介紹了EDA工具LiberoIDE的使用方法。本章所有綜合和驗(yàn)證均基于LiberoIDE環(huán)境實(shí)現(xiàn)。閱讀指南:
本章講述內(nèi)容對(duì)應(yīng)第2章的知識(shí),把相應(yīng)組合邏輯電路的功能通過(guò)VerilogHDL語(yǔ)言進(jìn)行實(shí)現(xiàn)。對(duì)每個(gè)電路設(shè)計(jì)的基礎(chǔ)知識(shí)和理解請(qǐng)參考第2章。
本章多處對(duì)同一個(gè)設(shè)計(jì)提供了多種設(shè)計(jì)思路和實(shí)現(xiàn)方法,并不是所有都是最優(yōu)的方法,只是方便對(duì)比和學(xué)習(xí)。讀者可根據(jù)情況選擇合適的方法。
6.9節(jié)中設(shè)計(jì)了多個(gè)綜合例子(第2章中沒(méi)有與這些例子相對(duì)應(yīng)的設(shè)計(jì)),這些例子綜合性強(qiáng),相對(duì)較難理解但卻很實(shí)用,對(duì)于想進(jìn)入數(shù)字系統(tǒng)設(shè)計(jì)實(shí)踐階段的讀者來(lái)說(shuō)很有實(shí)際意義。
6.1基本邏輯門(mén)電路
基本邏輯門(mén)電路的Verilog描述是代碼設(shè)計(jì)的基礎(chǔ),下面給出了部分門(mén)電路的設(shè)計(jì)描述及仿真實(shí)例。
6.1.1基本邏輯門(mén)電路的Verilog設(shè)計(jì)
以下程序中設(shè)計(jì)了5種基本的2輸入門(mén)電路:與、或、異或、與非、或非。
modulegates(a,b,y1,y2,y3,y4,y5);
inputa,b;
outputy1,y2,y3,y4,y5;
//連續(xù)賦值語(yǔ)句一般用于描述組合邏輯
assigny1=a&b; //與
assigny2=a|b; //或
assigny3=a^b; //異或
assigny4=~(a&b); //與非
assigny5=~(a|b); //或非
endmodule
6.1.2基本邏輯門(mén)電路的綜合
在Synplify綜合工具中進(jìn)行綜合操作,將前述Verilog程序轉(zhuǎn)化為門(mén)級(jí)電路。電路圖由綜合工具自動(dòng)生成,點(diǎn)擊Synplify的工具欄按鈕,可查看“RTLView”(如圖6-1所示)。圖6-1基本邏輯門(mén)電路的RTL視圖6.1.3測(cè)試平臺(tái)設(shè)計(jì)
基本邏輯門(mén)電路測(cè)試平臺(tái)的代碼設(shè)計(jì)如下,針對(duì)不同階段(綜合前設(shè)計(jì)仿真、綜合后仿真、布局布線(xiàn)后仿真)的驗(yàn)證,測(cè)試平臺(tái)是一樣的。
`timescale1ns/1ns
moduletestbench();
rega,b;
wirey1,y2,y3,y4,y5;
gatestest_gates(a,b,y1,y2,y3,y4,y5); //調(diào)用前述的gates模塊,按端口連接
initial
begin //a,b的值將按00-01-11-10的順序產(chǎn)生
a=0;b=0;
#10b=1;
#10a=1;
#10b=0;
#10;
end
endmodule
6.1.4基本邏輯門(mén)電路的驗(yàn)證
功能驗(yàn)證即前述的綜合前仿真,在暫時(shí)不考慮延遲等因素的情況下,通過(guò)仿真驗(yàn)證功能設(shè)計(jì)是否正確。仿真波形如圖6-2所示。圖6-2基本邏輯門(mén)電路功能仿真波形
6.2編碼器
6.2.18-3編碼器(一)
1.使用Verilog進(jìn)行描述
以下程序設(shè)計(jì)了一個(gè)具有基本功能的8-3編碼器,無(wú)優(yōu)先級(jí);同時(shí)設(shè)計(jì)了一個(gè)輸出使能端EO(低電平有效)。
moduleencoder8_3_1(DataIn,EO,Dataout);
input[7:0]DataIn;
outputEO;
output[2:0]Dataout;
reg[2:0]Dataout;
regEO;
integerI;always@(DataIn) //如輸入發(fā)生變化,則進(jìn)行編碼
begin
Dataout=0; //初始化數(shù)據(jù),讓輸出為0
EO=1; //置輸出使能端EO為高電平,即無(wú)輸出
for(I=0;I<8;I=I+1)
begin
if(DataIn[I]) //逐位檢查是否為1
begin
Dataout=I;
EO=0;
//輸出結(jié)果的同時(shí),置輸出使能端EO為低電平
end
end
end
endmodule程序逐位(從低位到高位)對(duì)輸入進(jìn)行檢查,如果輸入信號(hào)有多位為1,則以最后一個(gè)1為準(zhǔn),如輸入信號(hào)為“10001000”,則計(jì)算過(guò)程其實(shí)有2次,最終以最高位的“1”為準(zhǔn),輸出為111。
2.測(cè)試平臺(tái)設(shè)計(jì)
測(cè)試平臺(tái)的代碼設(shè)計(jì)如下:
`timescale1ns/10ps
moduletestbench_8_3encoder;
reg[7:0]in;
wire[2:0]out;
wireEO;
initial
begin
in=‘b00000001;
repeat(9)
#20in=in<<1;
//每循環(huán)1次,in被左移1位,如00000001將移位為00000010
end
encoder8_3_1testbench_8_3encoder(in,EO,out);
endmodule
3.功能驗(yàn)證
仿真波形如圖6-3所示。圖6-38-3編碼器(一)的仿真波形6.2.28-3編碼器(二)
1.使用Verilog進(jìn)行描述
以下程序設(shè)計(jì)了一個(gè)具有基本功能的8-3編碼器,并具有高位優(yōu)先編碼功能,有8個(gè)輸入端口,3個(gè)輸出端口和1個(gè)輸出使能端EO(低電平有效)。
moduleencoder8_3_2(DataIn0,DataIn1,DataIn2,DataIn3,DataIn4,DataIn5,DataIn6,DataIn7,EO,Dataout0,Dataout1,Dataout2);
inputDataIn0,DataIn1,DataIn2,DataIn3,DataIn4,DataIn5,DataIn6,DataIn7;
outputEO;
outputDataout0,Dataout1,Dataout2;
reg[3:0]Outvec;assign{EO,Dataout2,Dataout1,Dataout0}=Outvec;//語(yǔ)句1
always@(DataIn0,DataIn1,DataIn2,DataIn3,DataIn4,DataIn5,DataIn6,DataIn7)
begin
if(DataIn7)Outvec=4'b0111; //語(yǔ)句組2
elseif(DataIn6)Outvec=4'b0110;
elseif(DataIn5)Outvec=4'b0101;
elseif(DataIn4)Outvec=4'b0100;
elseif(DataIn3)Outvec=4'b0011;
elseif(DataIn2)Outvec=4'b0010;
elseif(DataIn1)Outvec=4'b0001;
elseif(DataIn0)Outvec=4'b0000;
elseOutvec=4'b1000; //使得輸出使能端EO為1,即無(wú)效
end
endmodule程序說(shuō)明:
(1)當(dāng)輸入數(shù)據(jù)中任一個(gè)發(fā)生變化時(shí),程序?qū)⒅匦逻M(jìn)行編碼,并將相應(yīng)結(jié)果賦予向量Outvec。如Datain4值為1(更高位的值不為1),則Outvec值就是4‘b0100。
(2)語(yǔ)句1使用拼接運(yùn)算符獲取各個(gè)值,當(dāng)Outvec值為4’b0100時(shí),EO值變?yōu)?,Dataout2值變?yōu)?,Dataout1值變?yōu)?,Dataout0值變?yōu)?。
(3)語(yǔ)句組2通過(guò)if…elseif語(yǔ)句,實(shí)現(xiàn)了優(yōu)先編碼功能。
2.測(cè)試平臺(tái)設(shè)計(jì)
測(cè)試平臺(tái)的代碼設(shè)計(jì)如下:
`timescale1ns/10ps
moduletestbench_8_3encoder;
reg[7:0]invec;
regDataIn0,DataIn1,DataIn2,DataIn3,DataIn4,DataIn5,DataIn6,DataIn7;
wireDataout1,Dataout2,EO;
initial
begin
invec='b00000001;
repeat(9)
begin
{DataIn7,DataIn6,DataIn5,DataIn4,DataIn3,DataIn2,DataIn1,DataIn0}=invec;
#20invec=invec<<1;
end
end
encoder8_3_2testbench_8_3encoder(DataIn0,DataIn1,DataIn2,DataIn3,DataIn4,DataIn5,DataIn6,DataIn7,EO,Dataout0,Dataout1,Dataout2);
endmodule
3.功能驗(yàn)證
仿真結(jié)果如圖6-4所示。圖6-48-3編碼器(二)的仿真波形6.2.38-3編碼器(三)
以下程序的結(jié)構(gòu)和計(jì)算思路與8-3編碼器設(shè)計(jì)(二)基本一致。
moduleencoder8_3_3(DataIn0,DataIn1,DataIn2,DataIn3,DataIn4,DataIn5,DataIn6,DataIn7,
EO,Dataout0,Dataout1,Dataout2);
inputDataIn0,DataIn1,DataIn2,DataIn3,DataIn4,DataIn5,DataIn6,DataIn7;
outputEO;Dataout0,Dataout1,Dataout2;
wire[3:0]Outvec;
assignOutvec=DataIn7?4‘b0111:DataIn6?4’b0110:DataIn5?4‘b0101:DataIn4?4’b0100:DataIn3?4‘b0011:DataIn2?4’b0010:DataIn1?4‘b0001:DataIn0?4’b0000:4‘b1000; //語(yǔ)句1
assignEO=Outvec[3]; //語(yǔ)句組2(4行)
assignDataout2=Outvec[2];
assignDataout1=Outvec[1];
assignDataout0=Outvec[0];
endmodule
程序說(shuō)明:
(1)語(yǔ)句1與8-3編碼器(二)的語(yǔ)句組2功能是一致的,采用了條件操作符的嵌套調(diào)用:當(dāng)DataIn0為1時(shí),向量Outvec的值為4‘b0000;當(dāng)DataIn1為1時(shí),向量Outvec的值為4’b0001;當(dāng)沒(méi)有輸入時(shí),向量Outvec的值為4‘b1000。
(2)語(yǔ)句組2中,從向量Outvec中按位獲取輸出值,如向量Outvec的值為4’b1000時(shí),EO獲得值為1,表示沒(méi)有輸出。
(3)該設(shè)計(jì)的測(cè)試平臺(tái)和功能驗(yàn)證結(jié)果與編碼器(二)一樣。
對(duì)于8-3編碼器的三種不同設(shè)計(jì)方法,分別使用綜合工具進(jìn)行綜合操作,會(huì)看到不同的結(jié)果,對(duì)于讀者理解不同的程序編寫(xiě)方法對(duì)綜合結(jié)果的影響很有幫助,請(qǐng)讀者自行進(jìn)行對(duì)比和分析。6.2.474HC148設(shè)計(jì)
第2章中(2.3.1節(jié))討論了74HC148芯片(集成8線(xiàn)-3線(xiàn)優(yōu)先編碼器),在此按照該芯片的功能(表2-6),編寫(xiě)其VerilogHDL代碼(HC148.V)。需要注意的是,在表2-6中,只要是低電平有效的信號(hào),都會(huì)寫(xiě)成的形式,而在編寫(xiě)代碼時(shí)沒(méi)有這個(gè)必要。例如,在以下的代碼中,EI就相當(dāng)于表2-6中的。//HC148.v
moduleencoder8_3_1(DataIn,EO,Dataout,EI,GS);
input[7:0]DataIn;
inputEI;
outputEO;
output[2:0]Dataout;
outputGS;
reg[2:0]Dataout;
regEO;
regGS;
integerI;always@(DataInorEI)
begin:local
if(EI)
begin
Dataout=7;
EO=1;
GS=1;
end
elseif(DataIn==16'b11111111)
begin
Dataout=7;
EO=0;
GS=1;
end
else
begin
for(I=0;I<8;I=I+1)
begin
if(~DataIn[I])
begin
Dataout=~I;
EO=1;
GS=0;
end
end
end
endmodule在后面的綜合實(shí)例中,該設(shè)計(jì)將作為基本模塊進(jìn)行調(diào)用。在此不列出測(cè)試平臺(tái)和綜合結(jié)果,讀者可自行設(shè)計(jì)和驗(yàn)證。
6.3譯碼器
6.3.13-8譯碼器(一)
1.使用Verilog進(jìn)行描述
moduledecoder3_8_1(DataIn,Enable,Eq);
input[2:0]DataIn;
inputEnable;
output[7:0]Eq;
reg[7:0]Eq;
wire[2:0]DataIn;
integerI;always@(DataInorEnable) //當(dāng)輸入或使能端發(fā)生變化時(shí),開(kāi)始進(jìn)行譯碼
begin
if(Enable) //Enable為1時(shí),輸出為0
Eq=0;
else
for(I=0;I<=7;I=I+1)
if(DataIn==I) //語(yǔ)句組1(4行)
Eq[I]=1;
else
Eq[I]=0;
end
endmodule程序說(shuō)明:
(1)程序采用行為風(fēng)格描述。
(2)輸入為3位二進(jìn)制(000~111)向量DataIn,表示0~7。
(3)使能端Enable被優(yōu)先處理,Enable為1時(shí)輸出為0,Enable為0時(shí)才進(jìn)行譯碼輸出。
(4)語(yǔ)句組1根據(jù)DataIn的值為向量Eq賦值。如DataIn為5,使能端Enable為0,則Eq[5]=1,其它位為0,輸出Eq為00100000。
2.測(cè)試平臺(tái)設(shè)計(jì)
測(cè)試平臺(tái)的設(shè)計(jì)代碼如下:
`timescale1ns/10ps
moduletestbench;
reg[2:0]in;
regenable;
wire[7:0]eq;
decoder3_8_1decoder_tb( //按端口名稱(chēng)連接,可不按照端口順序?qū)懗?/p>
.DataIn(in),
.Eq(eq));
.Enable(enable),initial
begin
in=0;
repeat(20)
#20in=$random; //采用隨機(jī)函數(shù)生成3位的輸入數(shù)據(jù)
end
initial
begin
enable=1;
#40enable=0;
end
endmodule
3.功能驗(yàn)證
功能仿真波形如圖6-5所示。
說(shuō)明:
(1)?40ns前enable的值為1,譯碼無(wú)效。
(2)應(yīng)列出所有的值(000~111)進(jìn)行測(cè)試,在此采用隨機(jī)函數(shù)產(chǎn)生了20個(gè)輸入,未能覆蓋所有的輸入情況。
(3)在顯示波形時(shí)默認(rèn)是二進(jìn)制數(shù)字顯示,如需改變?yōu)槠渌M(jìn)制的數(shù)字形式,可在“Wave”窗口中對(duì)著對(duì)應(yīng)的變量按右鍵,在彈出的菜單中選擇“Radix”菜單下的不同顯示方式。圖6-53-8譯碼器(一)的仿真波形6.3.23-8譯碼器(二)
1.使用Verilog進(jìn)行描述
moduledecoder3_8_2(DataIn,Enable,Eq);
input[2:0]DataIn;
inputEnable;
output[7:0]Eq;
reg[7:0]Eq;
always@(DataInorEnable)
if(Enable)
Eq=0;
else
Eq=1‘b1<<DataIn;//將1’b1左移DataIn位,并賦予Eq
endmodule程序說(shuō)明:
(1)程序結(jié)構(gòu)與3-8譯碼器設(shè)計(jì)(一)類(lèi)似,采用行為風(fēng)格描述,只是對(duì)于譯碼部分(語(yǔ)句1)的處理方法不同。
(2)語(yǔ)句“Eq=1‘b1<<DataIn;”采用了移位操作符,通過(guò)對(duì)1’b1的邏輯左移,實(shí)現(xiàn)譯碼。如DataIn值為5,則1‘b1左移5位得到100000,而由于Eq為8位,故Eq的值為8’b00100000。
2.綜合結(jié)果
綜合結(jié)果如圖6-6所示。
該設(shè)計(jì)的測(cè)試平臺(tái)和功能驗(yàn)證結(jié)果與3-8譯碼器設(shè)計(jì)(一)一樣。圖6-6RTL視圖6.3.3擴(kuò)展型4511設(shè)計(jì)
第2章中(2.3.2節(jié))討論了74HC4511芯片(集成數(shù)碼顯示譯碼器),但該芯片僅支持?jǐn)?shù)字0~9的顯示,而其實(shí)共陰極數(shù)碼顯示器還可顯示字母和小數(shù)點(diǎn),如圖6-7所示。
該圖中6和9的顯示與圖2-18中定義的稍有不同,使用時(shí)須注意。
在此用VerilogHDL編寫(xiě)實(shí)現(xiàn)HC4511芯片功能的代碼,并且按照?qǐng)D6-7的顯示效果進(jìn)行擴(kuò)展。圖6-7擴(kuò)展顯示內(nèi)容//74HC4511.v
moduleHC4511(A,Seg,LT_N,BI_N,LE);
inputLT_N,BI_N,LE;
input[3:0]A;
output[7:0]Seg;
reg[7:0]SM_8S;
assignSeg=SM_8S;
always@(AorLT_NorBI_NorLE)
begin
if(!LT_N)SM_8S=8'b11111111; //根據(jù)4511真值表寫(xiě)出
elseif(!BI_N)SM_8S=8'b00000000;
elseif(LE)SM_8S=SM_8S;else
case(A)
4'd0:SM_8S=8'b00111111; //3f(00111111對(duì)應(yīng)的十六進(jìn)制數(shù)),方便結(jié)果查看
//數(shù)字按gfedcba順序,最高位0表示小數(shù)點(diǎn)不顯示
4'd1:SM_8S=8'b00000110; //06
4'd2:SM_8S=8'b01011011; //5b
4'd3:SM_8S=8'b01001111; //4f
4'd4:SM_8S=8'b01100110; //66
4'd5:SM_8S=8'b01101101; //6d
4'd6:SM_8S=8'b01111101; //7d
4'd7:SM_8S=8'b00000111; //07
4'd8:SM_8S=8'b01111111; //7f
4‘d9:SM_8S=8’b01101111;//6f,用1100111表示9也是可以的
4‘d10:SM_8S=8’b01110111; //77
4‘d11:SM_8S=8’b01111100; //7c
4‘d12:SM_8S=8’b00111001; //39
4‘d13:SM_8S=8’b01011110; //5e
4‘d14:SM_8S=8’b01111001; //79
4‘d15:SM_8S=8’b01110001; //71
default:;
endcase
end
endmodule
在后面的綜合實(shí)例中,該設(shè)計(jì)將作為基本模塊進(jìn)行調(diào)用。在此不列出測(cè)試平臺(tái)和綜合結(jié)果,讀者可自行設(shè)計(jì)和驗(yàn)證。
6.4數(shù)據(jù)選擇器
6.4.14選1數(shù)據(jù)選擇器(一)
1.使用Verilog進(jìn)行描述
modulemux4_1_a(D0,D1,D2,D3,Sel0,Sel1,Result);
inputD0,D1,D2,D3;
inputSel0,Sel1;
outputResult;
regResult;
always@(D0orD1orD2orD3orSel1orSel0)
//任一輸入或選擇項(xiàng)發(fā)生變化時(shí)執(zhí)行
begin
case({Sel1,Sel0}) //根據(jù)選擇項(xiàng)進(jìn)行分支控制
0:Result=D0;
1:Result=D1; //語(yǔ)句1
2:Result=D2;
3:Result=D3;
default:Result=1'bx; //其它情況下輸出x
endcase
end
endmodule程序說(shuō)明:
(1)程序采用行為風(fēng)格描述。
(2)?case語(yǔ)句中,一旦D0、D1、D2、D3、Sel1、Sel0任一項(xiàng)發(fā)生變化,則進(jìn)行下面的選擇操作。
(3)?case語(yǔ)句中,根據(jù){Sel1,Sel0}的結(jié)果進(jìn)行分支控制。如Sel1為0,Sel0為1時(shí),{Sel1,Sel0}連接結(jié)果為01,執(zhí)行語(yǔ)句1,輸出結(jié)果Result獲得輸入D1。
2.測(cè)試平臺(tái)設(shè)計(jì)
`timescale1ns/1ps
moduletestbench_mux4_1;
regD0,D1,D2,D3,Sel1,Sel0;
wireResult;
mux4_1_aDUT(D0,D1,D2,D3,Sel0,Sel1,Result);
initial
begin
D0=0;D1=0;D2=0;D3=0;Sel1=0;Sel0=0;
#100D0=1;D1=0;D2=0;D3=1;
#100Sel1=0;Sel0=1;
#100Sel1=1;Sel0=0;
#100Sel1=1;Sel0=1;
#100; //加入一些延遲,以便波形顯示效果更好
end
endmodule
3.功能驗(yàn)證
仿真波形如圖6-8所示。圖6-84選1數(shù)據(jù)選擇器(一)的仿真波形6.4.24選1數(shù)據(jù)選擇器(二)
modulemux4_1_b(D0,D1,D2,D3,Sel0,Sel1,Result);
inputD0,D1,D2,D3;
inputSel0,Sel1;
outputResult;
regResult;
reg[1:0]SEL;
always@(D0,D1,D2,D3,Sel1,Sel0)
begin
SEL={Sel1,Sel0}; //將2個(gè)選擇輸入連接為SEL
if(SEL==0)Result=D0;
elseif(SEL==1)Result=D1;
elseif(SEL==2)Result=D2;
elseif(SEL==3)Result=D3;
elseResult=1‘bx;
end
endmodule
測(cè)試平臺(tái)和驗(yàn)證結(jié)果與設(shè)計(jì)方法(一)一致,實(shí)例名稱(chēng)等稍作改動(dòng)即可。
6.5數(shù)?值?比?較?器
6.5.14位數(shù)值比較器
1.使用Verilog進(jìn)行描述
modulecomparator_4_a(DataA,DataB,AGEB);
input[3:0]DataA,DataB;
outputAGEB;
regAGEB;
always@(DataAorDataB)
begin
if(DataA>=DataB)
AGEB=1;
else
AGEB=0;
end
endmodule
該4位數(shù)值比較器處理大于等于的情況,與第2章介紹的稍有不同。begin和end語(yǔ)句之間的語(yǔ)句,可濃縮為一句“AGEB=DataA>=DataB;”。
2.綜合結(jié)果
綜合結(jié)果RTL視圖如圖6-9所示,雖然看起來(lái)很簡(jiǎn)單明晰,但其工藝視圖已經(jīng)較為復(fù)雜。篇幅所限,請(qǐng)讀者自行在綜合工具中查看。圖6-94位數(shù)值比較器的RTL視圖
3.測(cè)試平臺(tái)設(shè)計(jì)
`timescale1ns/10ps
moduletestbench;
reg[3:0]ina,inb;
wireAGEB;
comparator_4_acomparator_testbench(ina,inb,AGEB);
initial
begin
ina=0;
repeat(20)
#20ina=$random;
#20$finish;
end
initial
begin
inb=0;
repeat(10)
#40inb=$random;
end
endmodule
4.功能驗(yàn)證
仿真結(jié)果如圖6-10所示。
在顯示波形時(shí)默認(rèn)是二進(jìn)制數(shù)字顯示,如需改變?yōu)槠渌M(jìn)制的數(shù)字形式,可在“Wave”窗口中對(duì)著對(duì)應(yīng)的變量按右鍵,在彈出菜單中選擇“Radix”菜單下的不同顯示方式。圖6-104位數(shù)值比較器的仿真波形6.5.274HC85設(shè)計(jì)
第2章中(2.3.4節(jié))討論了74HC85芯片(集成4位數(shù)值比較器),在此按照該芯片的功能,編寫(xiě)其VerilogHDL代碼。
//74HC85.v
moduleHC85(A3,A2,A1,A0,B3,B2,B1,B0,QAGB,QASB,QAEB,IAGB,IASB,IAEB);
inputA3,A2,A1,A0,B3,B2,B1,B0,IAGB,IASB,IAEB;
outputQAGB,QASB,QAEB;
regQAGB,QASB,QAEB;
wire[3:0]DataA,DataB;
assignDataA={A3,A2,A1,A0};
assignDataB={B3,B2,B1,B0};always@(DataAorDataB)
begin
if(DataA>DataB)
begin
QAGB=1;QASB=0;QAEB=0;
end
elseif(DataA<DataB)
begin
QAGB=0;QASB=1;QAEB=0;
end
elseif(IAGB&!IASB&!IAEB)
begin
QAGB=1;QASB=0;QAEB=0;
end
elseif(!IAGB&IASB&!IAEB)
begin
QAGB=0;QASB=1;QAEB=0;
end
elseif(IAEB)
begin
QAEB=1;QASB=0;QAGB=0;
end
elseif(IAGB&IASB&!IAEB)
begin
QAGB=0;QASB=0;QAEB=0;
end
elseif(!IAGB&!IASB&!IAEB)
begin
QAGB=1;QASB=1;QAEB=0;
end
end
endmodule
在后面的綜合實(shí)例中,該設(shè)計(jì)將作為基本模塊進(jìn)行調(diào)用。在此不列出測(cè)試平臺(tái)和綜合結(jié)果,讀者可自行設(shè)計(jì)和驗(yàn)證。
6.6加法器
在所有的算術(shù)運(yùn)算電路中,加法器(減法器)是使用最多的,因此整個(gè)運(yùn)算電路的性能往往由加法器決定。而對(duì)于加法器來(lái)說(shuō),最關(guān)鍵的部分是如何對(duì)進(jìn)位進(jìn)行處理。在前面章節(jié)的例子中已經(jīng)對(duì)全加器的設(shè)計(jì)進(jìn)行了反復(fù)的討論,本節(jié)主要討論多位加法器的設(shè)計(jì)方法。6.6.11位半加器(一)
1.使用Verilog進(jìn)行描述
modulehalfadder_1(DataA,DataB,Sum,Cout);
inputDataA,DataB;
outputSum,Cout;
assign{Cout,Sum}=DataA+DataB;
endmodule
2.綜合結(jié)果
代碼中使用了連接運(yùn)算符,因此綜合結(jié)果(如圖6-11和圖6-12所示)中也反饋出該結(jié)構(gòu)。圖6-111位半加器(一)的RTL視圖圖6-121位半加器(一)的工藝視圖
3.測(cè)試平臺(tái)設(shè)計(jì)
下面給出1位半加器的測(cè)試平臺(tái)代碼。
`timescale1ns/10ps
moduletestbench;
rega,b;
wiresum,cout;
halfadder_1adder_te(a,b,sum,cout);
initial
begin
a=0;b=0;
#20b=1;
#20a=1;
#20b=0;
#20;
end
endmodule
4.功能驗(yàn)證
仿真結(jié)果如圖6-13所示。圖6-131位半加器的仿真波形6.6.21位半加器(二)
1.使用Verilog進(jìn)行描述
modulehalfadder_2(DataA,DataB,Sum,Cout);
inputDataA,DataB;
outputSum,Cout;
regSum,Cout;
always@(DataA,DataB)
begin
case({DataA,DataB})//真值表描述
2'b00:beginSum=0;Cout=0;end
2'b01:beginSum=1;Cout=0;end
2'b10:beginSum=1;Cout=0;end
2'b11:beginSum=0;Cout=1;end
endcase
end
endmodule
程序說(shuō)明:
(1)程序采用行為風(fēng)格描述。
(2)通過(guò)真值表(參考第2章的內(nèi)容)可寫(xiě)出case語(yǔ)句中的分支選擇及輸出結(jié)果。
(3)根據(jù){DataA,DataB}的值選擇相應(yīng)的分支,如DataA為1,DataB為1,則{DataA,DataB}的值為3,選擇分支3得到Sum為0,Cout為1。
測(cè)試平臺(tái)和驗(yàn)證結(jié)果與設(shè)計(jì)方法(一)一致。
2.綜合結(jié)果
綜合結(jié)果如圖6-14和圖6-15所示。
綜合結(jié)果分析:
(1)對(duì)比兩個(gè)設(shè)計(jì)的RTL視圖:圖6-11的綜合結(jié)果,是一個(gè)標(biāo)準(zhǔn)的半加器設(shè)計(jì);而圖6-14中,卻是一個(gè)標(biāo)準(zhǔn)的選擇器設(shè)計(jì)(也能實(shí)現(xiàn)半加器的功能)。
(2)對(duì)比兩個(gè)設(shè)計(jì)的工藝視圖:圖6-12和圖6-15所用到的元件一樣,而連線(xiàn)方式稍有不同。
(3)將兩種半加器的代碼設(shè)計(jì)及綜合結(jié)果進(jìn)行對(duì)比,可發(fā)現(xiàn)對(duì)于同一個(gè)設(shè)計(jì)要求,用不同的程序編寫(xiě)方式,會(huì)得到不同的綜合結(jié)果。因此,理解代碼與綜合的關(guān)系和技巧,對(duì)于實(shí)際開(kāi)發(fā)是非常重要的。圖6-141位半加器(二)的RTL視圖圖6-151位半加器(二)的工藝視圖6.6.34位串行(行波)進(jìn)位加法器(一)
1.使用Verilog進(jìn)行描述
串行進(jìn)位也叫行波(Ripple)進(jìn)位。以下只是對(duì)1位全加器的代碼稍作修改,將輸入輸出標(biāo)量改為向量,就可實(shí)現(xiàn)多位串行進(jìn)位加法器。
modulefulladder_4_a(DataA,DataB,Cin,Sum,Cout);
input[3:0]DataA,DataB;
inputCin;
output[3:0]Sum;
reg[3:0]Sum;
outputCout;
regCout;
always@(DataAorDataBorCin)
begin
{Cout,Sum}=DataA+DataB+Cin;
end
endmodule
2.綜合結(jié)果
綜合結(jié)果的RTL視圖如圖6-16所示。圖6-164位串行進(jìn)位加法器(一)的RTL視圖
3.測(cè)試平臺(tái)設(shè)計(jì)
`timescale1ns/10ps
moduleadder4_testbench;
reg[3:0]ina,inb;
regcin;
wire[3:0]sum;
wirecout;
fulladder_4_badder4_tb(ina,inb,cin,sum,cout);
initial
begin
ina=0;
repeat(20)
#20ina=$random;
end
initial
begin
inb=0;
repeat(10)
#40inb=$random;
end
initial
begin
cin=0;
#200cin=1;
end
endmodule
4.功能驗(yàn)證
仿真結(jié)果如圖6-17所示。圖6-174位串行進(jìn)位加法器(一)的仿真波形6.6.44位串行進(jìn)位加法器(二)
1.使用Verilog進(jìn)行描述
在此用另一種程序設(shè)計(jì)思路來(lái)組織代碼,程序顯式地表述其串行進(jìn)位邏輯。
modulefulladder_4_b(DataA,DataB,Cin,Sum,Cout);
parameterN=4;
input[N-1:0]DataA,DataB;
inputCin;
output[N-1:0]Sum;
reg[N-1:0]Sum;
outputCout;regCout;
reg[N:0]q;
always@(DataAorDataBorCin)
begin:adder //語(yǔ)句塊中定義了局部變量i,因此該塊必須命名
integeri;
q[0]=Cin;
for(i=0;i<=N-1;i=i+1)
begin
q[i+1]=(DataA[i]&DataB[i])|(DataA[i]&q[i])|(DataB[i]&q[i]);
Sum[i]=DataA[i]^DataB[i]^q[i];
end
Cout=q[N];
end
endmodule
2.綜合結(jié)果
綜合結(jié)果的RTL視圖如圖6-18所示。
綜合結(jié)果分析:
(1)讀者可從該RTL視圖的結(jié)構(gòu)上看出其進(jìn)位的實(shí)現(xiàn)過(guò)程。
(2)設(shè)計(jì)(二)的RTL視圖看起來(lái)會(huì)比設(shè)計(jì)(一)的復(fù)雜得多,但工藝視圖差別不大(篇幅所限未列出)。也就是兩種不同設(shè)計(jì)方法,實(shí)際所用到的元器件其實(shí)差不多。
(3)讀者可把程序中的N改為8、16位試一下,比較一下綜合后的結(jié)果。圖6-184位串行進(jìn)位加法器(二)的RTL視圖6.6.54位超前進(jìn)位加法器
第2章(2.3.5節(jié))討論了超前進(jìn)位加法器的設(shè)計(jì)思路,在此按照該思路,編寫(xiě)其VerilogHDL代碼。
moduleAdd_prop_gen(sum,c_out,a,b,c_in,shiftedcarry);
output[3:0]sum;
output[4:0]shiftedcarry;
outputc_out;
input[3:0]a,b;
inputc_in;
reg[3:0]carrychain;
wire[3:0]g=a&b;//按位與,生成函數(shù)Gi
wire[3:0]p=a^b;//按位異或,生成進(jìn)位傳送函數(shù)Pialways@(aorborc_inorporg)
begin:carry_generation //塊中定義了局部變量i,不命名該塊的話(huà)綜合會(huì)出錯(cuò)
integeri;
carrychain[0]=g[0]+(p[0]&c_in);
for(i=1;i<=3;i=i+1)
carrychain[i]=g[i]|(p[i]&carrychain[i-1]);
end
wire[4:0]shiftedcarry={carrychain,c_in};
wire[3:0]sum=p^shiftedcarry; //求和運(yùn)算
wirec_out=shiftedcarry[4]; //進(jìn)位輸出
endmodule在后面的綜合實(shí)例中,該設(shè)計(jì)將作為基本模塊進(jìn)行調(diào)用。在此不列出測(cè)試平臺(tái)和綜合結(jié)果,讀者可自行設(shè)計(jì)和驗(yàn)證。
6.7乘法器
6.7.1無(wú)符號(hào)4位乘法器
1.使用Verilog進(jìn)行描述
moduleunsign_mult_4bit(DataA,DataB,Mult);
input[3:0]DataA,DataB;
output[7:0]Mult;
reg[7:0]Mult;
always@(DataAorDataB)
Mult<=DataA*DataB;
endmodule
2.綜合結(jié)果
綜合結(jié)果如圖6-19所示。圖6-19無(wú)符號(hào)4位乘法器的RTL視圖
3.測(cè)試平臺(tái)設(shè)計(jì)
`timescale1ns/10ps
modulemult_testbench;
reg[3:0]ina,inb;
wire[7:0]mult;
unsign_mult_4bitunsign_mult_tb(ina,inb,mult);
initial
begin
ina=0;
repeat(20)
#20ina=$random;
end
initial
begin
inb=0;
repeat(10)
#40inb=$random;
end
endmodule
4.功能驗(yàn)證
仿真結(jié)果如圖6-20所示。
在顯示波形時(shí)默認(rèn)的是二進(jìn)制數(shù)字顯示,選擇“Wave”窗口中,對(duì)著對(duì)應(yīng)的變量按右鍵,選擇“Radix”菜單下的“Unsigned”,可使得顯示數(shù)字為十進(jìn)制無(wú)符號(hào)數(shù)。圖6-20無(wú)符號(hào)4位乘法器的仿真波形6.7.2有符號(hào)4位乘法器
1.使用Verilog進(jìn)行描述
modulesign_mult_4(DataA,DataB,Mult);
input[3:0]DataA,DataB;
output[7:0]Mult;
reg[7:0]Mult;
always@(DataA,DataB)
Mult=SignedMultiplier(DataA,DataB);function[7:0]SignedMultiplier;
input[3:0]A,B;
reg[3:0]DA,DB;
integerMulti,DataAi,DataBi;
begin
DA=4'b1111;
DB=4'b1111;
if(A[3]) //語(yǔ)句1
DataAi=-(DA-A+1); //語(yǔ)句2
else
DataAi=A;
if(B[3])
DataBi=-(DB-B+1);
else
DataBi=B;
Multi=DataAi*DataBi;
SignedMultiplier=Multi;
end
endfunction
endmodule
程序說(shuō)明:
(1)定義了名為SignedMultiplier的函數(shù),在DataA或DataB發(fā)生變化時(shí)調(diào)用。
(2)語(yǔ)句1判斷向量首位是否為1,如果是1,則表示A是一個(gè)負(fù)數(shù)的補(bǔ)碼,應(yīng)另外處理。
(3)有符號(hào)數(shù)必須進(jìn)行處理,否則計(jì)算結(jié)果將出現(xiàn)錯(cuò)誤:如有符號(hào)數(shù)4‘sb1011表示-5,3’sb010表示2,相乘結(jié)果應(yīng)為-10;但如果被當(dāng)做無(wú)符號(hào)運(yùn)算,就變成4‘b1011*3’b010,結(jié)果為10110(即22)。
(4)語(yǔ)句2中,對(duì)于負(fù)數(shù)的補(bǔ)碼,不能通過(guò)直接執(zhí)行DataAi=A來(lái)獲值。這是由于A是線(xiàn)網(wǎng)類(lèi)型(隱式),作無(wú)符號(hào)數(shù)處理。如輸入有符號(hào)數(shù)1011本表示-5,但被當(dāng)做無(wú)符號(hào)數(shù)后變成11來(lái)處理了。
(5)語(yǔ)句2中,通過(guò)補(bǔ)碼的定義(A補(bǔ)?=?2n+?A真值)計(jì)算該補(bǔ)碼數(shù)的真值,把式子變?yōu)锳真值=-(2n-A補(bǔ))進(jìn)行計(jì)算。如輸入A?=?4‘b1011,首位為1,表示A為補(bǔ)碼數(shù),執(zhí)行-(DA-A+1)=-(4’b1111-4‘b1011+1)=-(4’b0101),最后真值-5被賦值給整數(shù)(有符號(hào))變量DataAi。
2.綜合結(jié)果
綜合結(jié)果如圖6-21所示。圖6-21有符號(hào)4位乘法器的RTL視圖
3.測(cè)試平臺(tái)設(shè)計(jì)
`timescale1ns/10ps
modulemult_testbench;
reg[3:0]ina,inb;
wire[7:0]mult;
sign_mult_4sign_mult_tb(ina,inb,mult);
initial
begin
ina=0;
repeat(20)
#20ina=$random;
end
initial
begin
inb=0;
repeat(10)
#40inb=$random;
end
endmodule
4.功能驗(yàn)證
仿真結(jié)果如圖6-22所示。
在“Wave”窗口中,對(duì)著對(duì)應(yīng)的變量按右鍵,選擇“Radix”菜單下的“Decimal”,可使得顯示數(shù)字為十進(jìn)制有符號(hào)數(shù)。圖6-22功能仿真(綜合前)波形
6.8組合邏輯電路的競(jìng)爭(zhēng)冒險(xiǎn)問(wèn)題
在第2章(2.5節(jié))中討論了組合邏輯電路的競(jìng)爭(zhēng)冒險(xiǎn)問(wèn)題,并列出了幾種解決方法。在此以乘法器作為例子,以求讓讀者對(duì)競(jìng)爭(zhēng)冒險(xiǎn)的出現(xiàn)及解決有更深的體會(huì)。
6.8.1競(jìng)爭(zhēng)冒險(xiǎn)分析
6.7.2節(jié)中,實(shí)現(xiàn)了有符號(hào)數(shù)的乘法運(yùn)算,從圖6-21中看,該設(shè)計(jì)的邏輯圖非常簡(jiǎn)單,但如果從工藝視圖看(如圖6-23所示),該設(shè)計(jì)的具體實(shí)現(xiàn)相當(dāng)復(fù)雜(該圖的細(xì)節(jié)讀者可暫不關(guān)注)。圖6-23有符號(hào)4位乘法器的工藝視圖復(fù)雜的實(shí)際電路,加上多位輸入信號(hào)可能同時(shí)發(fā)生變化,這樣就會(huì)產(chǎn)生毛刺(競(jìng)爭(zhēng)冒險(xiǎn)),在綜合前仿真(功能仿真)看不到,要在綜合后仿真才能看到,如圖6-24所示。
在圖6-24中,可看到mult的輸出,每次數(shù)值變化之間都有毛刺,因?yàn)椴ㄐ慰s略顯示,故看起來(lái)就像一條黑邊。把毛刺部分放大,即可看到競(jìng)爭(zhēng)冒險(xiǎn)的出現(xiàn),如圖6-25所示。
圖6-25中,mult變量的值-20、-60,76,都是由于競(jìng)爭(zhēng)冒險(xiǎn)而產(chǎn)生的錯(cuò)誤數(shù)據(jù)。圖6-24綜合后仿真中出現(xiàn)毛刺毛刺圖6-25波形放大顯示6.8.2競(jìng)爭(zhēng)冒險(xiǎn)的解決方法
以下采用時(shí)鐘控制方法,消除競(jìng)爭(zhēng)冒險(xiǎn)帶來(lái)的影響。將時(shí)鐘信號(hào)加入有符號(hào)4位乘法器的設(shè)計(jì)中。
1.使用Verilog進(jìn)行描述
modulesign_mult_4_clk(DataA,DataB,Mult,Clock);
input[3:0]DataA;
input[3:0]DataB;
output[7:0]Mult;
inputClock;
reg[7:0]Mult;
always@(posedgeClock)
Mult<=SignedMultiplier(DataA,DataB);function[7:0]SignedMultiplier;
input[3:0]A;
input[3:0]B;
reg[3:0]DA;
reg[3:0]DB;
integerMulti;
integerDataAi;
integerDataBi;
begin
DA=4'b1111;
DB=4'b1111;
if(A[3])
DataAi=-(DA-A+1);else
DataAi=A;
if(B[3])
DataBi=-(DB-B+1);
else
DataBi=B;
Multi=DataAi*DataBi;
SignedMultiplier=Multi;
end
endfunction
endmodule程序說(shuō)明:程序與前例(有符號(hào)4位乘法器)基本一樣,只是always的觸發(fā)條件由“DataA,DataB”改為“posedgeClock”;在組合電路基礎(chǔ)上加入了時(shí)序控制。
2.綜合結(jié)果
綜合結(jié)果如圖6-26所示。圖6-26帶時(shí)鐘控制的有符號(hào)4位乘法器的RTL視圖
3.測(cè)試平臺(tái)設(shè)計(jì)
`timescale1ns/10ps
modulemult_testbench;
reg[3:0]ina,inb;
wire[7:0]mult;
regclock;
sign_mult_4_clksign_mult_tb(ina,inb,mult,clock);
initial //生成時(shí)鐘信號(hào)
begin
clock=0;
#30;forever
begin
clock=1;
#30;
clock=0;
#10;
end
end
initial
begin
ina=0;
repeat(20)
#20ina=$random;
end
initial
begin
inb=0;
repeat(10)
#40inb=$random;
end
initial
//控制在固定時(shí)間內(nèi)停止(否則時(shí)鐘信號(hào)永不停止)
#400$finish;
endmodule
4.功能驗(yàn)證
綜合后仿真的結(jié)果如圖6-27所示。圖6-27仿真(綜合后)波形6.8.3更進(jìn)一步的分析
通過(guò)設(shè)置時(shí)鐘信號(hào),解決了(或者說(shuō)躲開(kāi)了)有符號(hào)乘法器的競(jìng)爭(zhēng)冒險(xiǎn)問(wèn)題。但時(shí)鐘信號(hào)如何設(shè)置也是一個(gè)需要注意的問(wèn)題。如將上例中帶時(shí)鐘乘法器的設(shè)計(jì)進(jìn)行布局布線(xiàn)操作,布局布線(xiàn)后仿真的結(jié)果如圖6-28所示,波形局部放大顯示效果如圖6-29所示。
從波形中可看到,即使在時(shí)鐘信號(hào)控制下,仍然有毛刺產(chǎn)生。那是因?yàn)檫M(jìn)一步考慮布局布線(xiàn)后的線(xiàn)路延遲,組合電路中有更大的延遲產(chǎn)生,而目前測(cè)試平臺(tái)的時(shí)鐘設(shè)置過(guò)短,未能在信號(hào)穩(wěn)定后才進(jìn)行選通。請(qǐng)讀者自行驗(yàn)證并改正。圖6-28仿真(布局布線(xiàn)后)波形圖6-29波形放大顯示
6.9組合邏輯電路的綜合性實(shí)例
6.9.1實(shí)例一:補(bǔ)碼生成電路
1.設(shè)計(jì)說(shuō)明
在通過(guò)VerilogHDL編程時(shí),一個(gè)變量被賦值后,該變量保存的就是該值的補(bǔ)碼,這種處理是仿真環(huán)境自動(dòng)進(jìn)行的。如執(zhí)行語(yǔ)句“i=-12;”,則8位的i變量中就會(huì)保存了-12的補(bǔ)碼“11110100”,而不是保存原碼“10001100”,這也是為什么在6.7.2節(jié)中要把帶符號(hào)的數(shù)進(jìn)行相應(yīng)處理后才能計(jì)算的原因。但在實(shí)際電路設(shè)計(jì)中,輸入數(shù)據(jù)一般為原碼形式(要求使用者直接輸入補(bǔ)碼是不大現(xiàn)實(shí)的),而大多IP核均要求采用補(bǔ)碼進(jìn)行數(shù)據(jù)通信。因此,補(bǔ)碼的轉(zhuǎn)換需要邏輯電路設(shè)計(jì)者自行加入。
本例以8位二進(jìn)制數(shù)(最高位為符號(hào)位)為例,希望幫助讀者真正理解補(bǔ)碼的含義及其使用場(chǎng)合,并理解編程工具及綜合工具對(duì)負(fù)數(shù)的處理。
2.使用Verilog進(jìn)行描述
moduleCom_2C(DataIn,DataOut);
input[7:0]DataIn; //原碼數(shù)據(jù)輸入端
output[7:0]DataOut; //補(bǔ)碼數(shù)據(jù)輸出端
reg[7:0]DataOut;
reg[7:0]S;
always@(DataIn)
begin
S=8'b10000000; //用于符號(hào)位的轉(zhuǎn)換
if(DataIn[7]) //判斷首位是否為1,即是否負(fù)數(shù)
DataOut=-DataIn+S; //“-”操作對(duì)包括符號(hào)位在內(nèi)的所有位取反再加1
else
DataOut=DataIn; //首位為0時(shí)表示正數(shù),補(bǔ)碼與原碼相同
end
endmodule
程序說(shuō)明:
(1)首先應(yīng)注意的是,8位輸入數(shù)據(jù)“DataIn”,是原碼數(shù)據(jù)的輸入。
(2)“-DataIn”操作可“把DataIn的8位數(shù)據(jù)包括符號(hào)位在內(nèi)的所有位取反再加1”,該操作比較難以理解:在執(zhí)行“-DataIn”操作時(shí),仿真器會(huì)把DataIn中的數(shù)據(jù)當(dāng)成補(bǔ)碼來(lái)處理,如DataIn中存放的是“11110100”,那么仿真器會(huì)認(rèn)為該數(shù)是-12的補(bǔ)碼,因此“-DataIn”操作會(huì)得到值12,即“00001100”,就是“11110100”所有位取反再加1的結(jié)果。
(3)“-DataIn”得到的是包括符號(hào)位在內(nèi)所有位取反再加1的結(jié)果,因此再加上S(8‘b10000000)就可把最高位(符號(hào)位)從0變?yōu)?,最終得到補(bǔ)碼結(jié)果。
3.綜合結(jié)果
綜合結(jié)果如圖6-30所示。圖6-30補(bǔ)碼生成電路的RTL視圖
4.測(cè)試平臺(tái)設(shè)計(jì)
`timescale1ns/10ps
moduletestbench;
reg[7:0]dataIn;
wire[7:0]dataOut;
Com_2CCom_2C_1(.DataOut(dataOut),
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2022年甘肅省甘南自治州公開(kāi)招聘警務(wù)輔助人員筆試自考題2卷含答案
- 2022年四川省雅安市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2022年浙江省湖州市公開(kāi)招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 晨會(huì)主持發(fā)言稿
- 廣西梧州市(2024年-2025年小學(xué)六年級(jí)語(yǔ)文)統(tǒng)編版隨堂測(cè)試(下學(xué)期)試卷及答案
- 2024年姿態(tài)控制推力器、推進(jìn)劑貯箱項(xiàng)目資金需求報(bào)告代可行性研究報(bào)告
- 《應(yīng)收款項(xiàng)新》課件
- 《稱(chēng)贊教學(xué)》課件
- 2025年毛紡織、染整加工產(chǎn)品項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告模范
- 2025年水乳型涂料項(xiàng)目提案報(bào)告模范
- 王牌電話(huà)交換機(jī)說(shuō)明書(shū)
- 列管式換熱器-換熱面積計(jì)算
- 10個(gè)地基基礎(chǔ)工程質(zhì)量通病及防治措施
- 25m預(yù)應(yīng)力混凝土簡(jiǎn)支T梁橋設(shè)計(jì)(共30頁(yè))
- 籃球校本課程教案
- 高一學(xué)生文理分班意向表
- 高等傳熱學(xué)部分答案
- 地球物理學(xué)進(jìn)展投稿須知
- 機(jī)床精度檢驗(yàn)標(biāo)準(zhǔn) VDI3441 a ISO230-2
- 解析電力施工項(xiàng)目的信息化管理
- 火炬介紹 音速火炬等
評(píng)論
0/150
提交評(píng)論