版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第7章基于EDA的時序電路
設(shè)計、綜合及驗證
7.1鎖存器7.2觸發(fā)器7.3寄存器7.4寄存器傳輸7.5計數(shù)器7.6有限狀態(tài)機(jī)7.7時序邏輯電路的綜合性設(shè)計實例學(xué)習(xí)基礎(chǔ):
第3章介紹了時序邏輯電路的基礎(chǔ)知識。在學(xué)習(xí)本章前,應(yīng)先掌握第3章的知識。
第4章介紹了VerilogHDL的基本語法及簡單設(shè)計的建模方法。
5.5~5.7節(jié)的綜合實例,介紹了EDA工具LiberoIDE的使用方法。本章所有綜合和驗證均基于LiberoIDE環(huán)境實現(xiàn)。閱讀指南:
本章講述內(nèi)容對應(yīng)第3章的知識,把相應(yīng)功能通過VerilogHDL語言進(jìn)行實現(xiàn)。對每個電路設(shè)計的基礎(chǔ)知識和理解請參考第3章。
本章多處對同一個設(shè)計提供了多種設(shè)計思路和實現(xiàn)方法,并不是所有都是最優(yōu)的方法,只是方便對比和學(xué)習(xí)。讀者可根據(jù)情況選擇合適的方法。
7.4節(jié)、7.6節(jié)、7.7節(jié)中討論了第3章中沒有涉及的理論知識和多個綜合例子,這些知識和例子綜合性強(qiáng),較難理解,但卻是數(shù)字系統(tǒng)實際開發(fā)中非常重要和實用的內(nèi)容,對于想進(jìn)入數(shù)字系統(tǒng)設(shè)計實踐階段的讀者來說很有實際意義。
7.1鎖存器
7.1.1基本RS鎖存器(一)
1.使用Verilog進(jìn)行描述
modulers_1(R,S,Q,Qn);
inputR,S;
outputQ,Qn; //Qn表示,而不是時序電路中的現(xiàn)態(tài)Qn。
regQ;
assignQn=~Q;regQ;
assignQn=~Q;
always@(RorS)
//通過case語句,按真值表方式寫出程序邏輯。
case({R,S})
2'b01:Q=1;
2'b10:Q=0;
2'b11:Q=1'bx;
endcase
endmodule讀者在一開始看到這種程序時很容易產(chǎn)生疑問:觸發(fā)器是存放數(shù)字電路中基本二進(jìn)制信號的單元電路,也就是寄存器變量Q的值是需要使用觸發(fā)器來存放,而觸發(fā)器是由鎖存器所構(gòu)成的,用觸發(fā)器存放的Q來實現(xiàn)一個鎖存器顯然是不合理的。
這就需要讀者理解在VerilogHDL中,采用行為風(fēng)格編寫代碼,是為了讓程序編寫者可用更趨向行為的方式更方便地編寫代碼,而不需考慮具體的物理細(xì)節(jié)。雖然在程序中指定要使用一個寄存器變量Q,但在使用EDA工具進(jìn)行綜合的時候,是不會也不可能用觸發(fā)器來實現(xiàn)鎖存器的,這通過綜合結(jié)果可看出。
2.綜合結(jié)果
綜合結(jié)果如圖7-1和圖7-2所示。圖7-1RTL視圖圖7-2工藝視圖
3.測試平臺設(shè)計
`timescale1ns/1ns
moduletestbench();
regr,s;
wireq,qn;
rs_1test_rs(r,s,q,qn);
initial
begin
r=0;s=0;
#10s=1;
#10r=1;
#10s=0;
#10r=0;
#10;
end
endmodule
4.功能驗證
仿真結(jié)果如圖7-3和圖7-4所示。
波形說明:
(1)綜合前仿真(功能仿真)的結(jié)果中,在0~10ns和20~30ns之間,q和qn都是x態(tài)。0~10ns之間產(chǎn)生的x態(tài)是因為r和s的值為0,q保持原態(tài);20~30ns之間產(chǎn)生的x態(tài)是因為r和s的值為1,代碼中規(guī)定了處理為x態(tài)。
(2)綜合后仿真的結(jié)果中,20~30ns之間q和qn并不是x態(tài)(都為0),具體狀態(tài)視20ns時r、s、q的值而定(讀者可通過電路自行推算出來)。圖7-3綜合前仿真圖7-4綜合后仿真7.1.2基本RS鎖存器(二)
1.使用Verilog進(jìn)行描述
modulers_2(R,S,Q,Qn);
inputR,S;
outputQ,Qn;
nor(Q,R,Qn);
nor(Qn,S,Q);
endmodule
2.綜合結(jié)果
綜合結(jié)果如圖7-5和圖7-6所示。圖7-5RTL視圖圖7-6工藝視圖
3.功能驗證
測試平臺與設(shè)計(一)相同。仿真結(jié)果如圖7-7所示。
波形分析:對比設(shè)計(一)和設(shè)計(二)的波形,可發(fā)現(xiàn)在設(shè)計(一)中,當(dāng)r、s為1時,Q和Qn均為x;而在設(shè)計(二)中Q和Qn均為0。由于對RS鎖存器來說,R、S同為1是不允許的,故可忽略之。圖7-7功能仿真結(jié)果7.1.3門控D鎖存器
1.使用Verilog進(jìn)行描述
modulelatch_1_a(Clk,D,Q);
inputClk,D;
outputQ;
regQ;
always@(DorClk)
if(Clk)Q<=D;
endmodule程序說明:
(1)當(dāng)Clk為高電平時,輸出Q的數(shù)值會隨D輸入的數(shù)據(jù)更新;而當(dāng)Clk為低電平時,將保持其高電平時鎖入的數(shù)據(jù)。
(2)?Clk由0變?yōu)?時,滿足if語句的條件,語句“Q<=D”被執(zhí)行,將D的數(shù)值賦給Q;Clk由1變?yōu)?時(無論D是否變化),都將執(zhí)行if語句,但此時Clk=0,語句Q<=D不被執(zhí)行,于是Q保持原值不變。
(3)如果敏感信號D發(fā)生變化,但Clk為0,則Q保持原值不變;如果敏感信號D發(fā)生變化,且Clk為1,則執(zhí)行語句Q<=D。
2.綜合結(jié)果
綜合結(jié)果如圖7-8和圖7-9所示。圖7-8RTL視圖圖7-9工藝視圖
3.測試平臺設(shè)計
`timescale1ns/1ns
moduletestbench_latch;
regclk,D;
wireQ;
initial
begin
clk=0;
#50clk=1;
#100clk=0;
#100clk=1;
end
initial
begin
D=0;
repeat(20)
#20D=$random;
end
latch_1_atestbench_latch(clk,D,Q);
endmodule
4.功能驗證
仿真結(jié)果如圖7-10所示。圖7-10功能仿真結(jié)果7.1.4帶清零D鎖存器(一)
1.使用Verilog進(jìn)行描述
modulelatch_1_c(Clk,D,Q,Rst);
inputClk,D,Rst;
outputQ;
regQ;
always@(DorClkorRst)
if(!Rst)Q<=0; //語句1
elseif(Clk)Q<=D;
endmodule程序說明:
(1)程序采用具有時序語句特色的進(jìn)程語句,其中數(shù)據(jù)信號D、時鐘信號Clk和清0(復(fù)位)信號Rst都被列于敏感信號表中,實現(xiàn)了Clk的電平觸發(fā)特性和Rst的異步特性。
(2)異步清0實現(xiàn)的效果,就是當(dāng)Rst一旦變成0,就馬上對輸出進(jìn)行清0,而不需要理會時鐘、輸入數(shù)據(jù)等的狀態(tài)。也就是Rst是優(yōu)先級最高的控制信號,在代碼(語句1)中,可通過“if…elseif…”語句來實現(xiàn)優(yōu)先級控制。
2.綜合結(jié)果
綜合結(jié)果如圖7-11和圖7-12所示。圖7-11RTL視圖圖7-12工藝視圖
3.測試平臺設(shè)計
`timescale1ns/1ns
moduletestbench_latch;
regclk,D,rst;
wireQ;
initial
begin
clk=0;
#50clk=1;
#70clk=0;
#80clk=1;
endinitial
begin
D=0;
repeat(20)
#20D=$random;
end
initial
begin
rst=0;
#60rst=1;
#80rst=0;
#40rst=1;
end
latch_1_ctestbench_latch(clk,D,Q,rst);
endmodule
4.功能驗證
仿真結(jié)果如圖7-13所示。圖7-13功能仿真結(jié)果7.1.5帶清零D鎖存器(二)
modulelatch_1_d(Clk,D,Q,Rst);
inputClk,D,Rst;
outputQ;
assignQ=(!Rst)?0:(Clk?D:Q);
endmodule
程序采用連續(xù)賦值語句,使用了條件操作符的嵌套,實現(xiàn)思路與設(shè)計(一)相同。綜合結(jié)果與設(shè)計(一)基本相同,只有元件名稱稍有不同。測試平臺、功能驗證結(jié)果與設(shè)計(一)相同。
7.2觸發(fā)器
D觸發(fā)器是最簡單、最常用且最具代表性的時序電路,它是數(shù)字系統(tǒng)設(shè)計中最基本的底層時序單元,JK和T觸發(fā)器都由D觸發(fā)器構(gòu)建而來。7.2.1D觸發(fā)器
1.使用Verilog進(jìn)行描述
moduled_ff_1(D,Clk,Q);
inputD,Clk;
outputQ;
regQ;
always@(posedgeClk)
Q<=D;
endmodule程序說明:
(1)當(dāng)Clk的上升沿到達(dá)時,立即將D送往輸出Q;若沒有Clk的上升沿到達(dá),則Q的值保持不變。
(2)該D觸發(fā)器的設(shè)計與門控D鎖存器設(shè)計非常類似,僅僅是由電平敏感變成了上升沿敏感。
2.綜合結(jié)果
綜合結(jié)果如圖7-14和圖7-15所示。圖7-14RTL視圖圖7-15工藝視圖
3.測試平臺設(shè)計
`timescale1ns/1ns
moduletestbench;
regD,Clk;
wireQ;
parameterclock_period=20;
always#(clock_period/2)Clk=~Clk;
initial
begin
D=0;Clk=0;
repeat(20)
#20D=$random;
end
initial
#300$finish;
d_ff_1testbench_d(D,Clk,Q);
endmodule
4.功能驗證
仿真結(jié)果如圖7-16所示。圖7-16功能仿真結(jié)果7.2.2D觸發(fā)器(異步清零邊沿觸發(fā))
1.使用Verilog進(jìn)行描述
moduled_ff_2(D,Clk,Q,Rst,En);
inputD,Clk,Rst,En;
outputQ;
regQ;
always@(posedgeClkornegedgeRst)
begin
if(!Rst)Q<=0;
elseif(En)Q<=D;
end
endmodule程序說明:
(1)所謂“異步”是指獨立于時鐘控制的復(fù)位控制端,即在任何時刻,只要Rst=0,D觸發(fā)器的輸出端即刻被清0,與時鐘狀態(tài)無關(guān);而時鐘使能端En的功能是,只有當(dāng)En=1時,時鐘上升沿才有效。
(2)無論Clk是否有跳變,只要Rst的下降沿到達(dá),即執(zhí)行Q<=0,此后如果Rst一直保持為0,則無論是否有Clk的邊沿跳變信號,Q均輸出0;如果Rst一直為1,且Clk有上升沿到達(dá),則會執(zhí)行賦值操作Q<=D,從而更新Q值。
2.綜合結(jié)果
綜合結(jié)果如圖7-17和圖7-18所示。圖7-17RTL視圖圖7-18工藝視圖
3.測試平臺設(shè)計
`timescale1ns/1ns
moduletestbench;
regD,Rst,Clk,En;
wireQ;
d_ff_2testbench_dff(D,Clk,Q,Rst,En);
initial
Clk=0;
#400$finish;
parameterclock_period=20;
always#(clock_period/2)Clk=~Clk;initial
begin
D=0;
repeat(20)
#20D=$random;
end
initial
begin
Rst=0;
repeat(20)
#20Rst=$random;
end
initial
begin
En=0;
repeat(20)
#20En=$random;
end
endmodule
4.功能驗證
仿真結(jié)果如圖7-19所示。圖7-19功能仿真結(jié)果7.2.3D觸發(fā)器(同步清零邊沿觸發(fā))
moduled_ff_3(D,Clk,Q,Rst);
inputD,Clk,Rst;
outputQ;
regQ;
always@(posedgeClk)
if(Rst==1)Q=0;
elseif(Rst==0)Q=D;
endmodule
程序說明:所謂“同步”是指某控制信號只有在時鐘信號有效時才起作用。信號敏感表列表中只放了對Clk上升沿的敏感表述,即此過程中的所有其它輸入信號都相對于時鐘Clk而同步。7.2.4JK觸發(fā)器
1.使用Verilog進(jìn)行描述
JK觸發(fā)器比RS觸發(fā)器增加了翻轉(zhuǎn)功能,以下設(shè)計與RS觸發(fā)器類似。
modulejk_ff(J,K,Clk,Q,Qn);
inputJ,K,Clk;
outputQ,Qn;
regQ;
assignQn=~Q;
always@(posedgeClk)
case({J,K})
2'b00:Q<=Q;
2‘b01:Q<=1’b0;
2‘b10:Q<=1’b1;
2‘b11:Q<=~Q;
default:Q<=1’bx;
endcase
endmodule
2.綜合結(jié)果
綜合結(jié)果如圖7-20和圖7-21所示。圖7-20RTL視圖圖7-21工藝視圖
3.測試平臺設(shè)計
測試平臺的設(shè)計與RS觸發(fā)器的方法一致,只需把R,S改成J,K,修改對接模塊名稱即可。
`timescale1ns/1ns
moduletestbench;
regj,k,Clk;
wireQ,Qn;
parameterclock_period=20;
always#(clock_period/2)Clk=~Clk;initial
begin
j=0;Clk=0;
repeat(20)
#20j=$random;
end
initial
begin
k=0;
repeat(20)
#20k=$random;
end
initial
#300$finish;
jk_fftestbench_jk(j,k,Clk,Q,Qn);
endmodule
4.功能驗證
仿真結(jié)果如圖7-22所示。圖7-22功能仿真結(jié)果7.2.5RS觸發(fā)器
1.使用Verilog進(jìn)行描述
以下設(shè)計是在RS鎖存器設(shè)計(一)的基礎(chǔ)上,加入上升沿控制而寫成的。加入了時鐘信號Clk,改變了敏感事件為Clk上升沿觸發(fā)。
modulers_ff(R,S,Clk,Q,Qn);
inputR,S,Clk;
outputQ,Qn;
regQ;
assignQn=~Q;
always@(posedgeClk)
case({R,S})
2‘b01:Q<=1;
2’b10:Q<=0;
2‘b11:Q<=1’bx;
endcase
endmodule
2.綜合結(jié)果
綜合結(jié)果如圖7-23和圖7-24所示。圖7-23RTL視圖圖7-24工藝視圖
3.測試平臺設(shè)計
`timescale1ns/1ns
moduletestbench;
regR,S,Clk;
wireQ,Qn;
parameterclock_period=20;
always#(clock_period/2)Clk=~Clk;
initial
begin
R=0;Clk=0;
repeat(20) //語句1
#20R=$random;
endinitial
begin
S=0;
repeat(20) //語句2
#20S=$random;
end
rs_fftestbench_rs(R,S,Clk,Q,Qn);
initial
#300$finish; //語句3
endmodule程序說明:語句1和語句2要求生成20個隨機(jī)的R和S,共需400個單位時間,但語句3卻要求在單位時間300時結(jié)束,那么程序會按哪一個要求進(jìn)行呢?答案可從以下的功能驗證波形中看到,程序會在單位時間300時結(jié)束。
4.功能驗證
仿真結(jié)果如圖7-25和圖7-26所示。
波形分析:從波形圖上看,綜合前和綜合后的Q輸出結(jié)果不一樣,綜合前仿真的Q輸出有很多的x態(tài)。該現(xiàn)象與RS鎖存器設(shè)計(一)中出現(xiàn)的現(xiàn)象是同一原因,請參考前面(RS鎖存器設(shè)計一)的說明。圖7-25綜合前仿真結(jié)果圖7-26綜合后仿真結(jié)果7.2.6T觸發(fā)器(異步清零)
1.使用Verilog進(jìn)行描述
modulet_ff(T,Clk,Rst,Q,Qn);
inputT,Clk,Rst;
outputQ,Qn;
regQ;
assignQn=~Q;
always@(posedgeClkorposedgeRst)
if(Rst)Q<=0;
elseif(T)Q<=~Q;
endmodule
2.綜合結(jié)果
綜合結(jié)果如圖7-27和圖7-28所示。圖7-27RTL視圖圖7-28工藝視圖
3.測試平臺設(shè)計
`timescale1ns/1ns
moduletestbench_t;
regT,Clk,Rst;
wireQ,Qn;
parameterclock_period=20;
always#(clock_period/2)Clk=~Clk;
initial
begin
Rst=0;Clk=0;
#30Rst=1;
#30Rst=0;#30Rst=1;
#30Rst=0;
end
initial
begin
T=0;
repeat(20)
#20T=$random;
end
t_fftestbench_t(T,Clk,Rst,Q,Qn);
initial
#400$finish;
endmodule
4.功能驗證
仿真結(jié)果如圖7-29所示。
波形分析:假設(shè)Rst一直不產(chǎn)生上升沿變化,那么會發(fā)生什么事情呢?如果Rst不產(chǎn)生上升沿變化,則程序代碼不被執(zhí)行,無論T和Clk如何變化,Q和Qn將一直保持x值。故一般應(yīng)進(jìn)行數(shù)據(jù)的初始化處理。圖7-29功能仿真結(jié)果
7.3寄存器
7.3.1基本寄存器
以下討論由4位D觸發(fā)器構(gòu)成的4位寄存器。對于基本寄存器,數(shù)據(jù)或代碼只能并行送入寄存器中,需要時也只能并行輸出。
1.使用Verilog進(jìn)行描述
modulereg4_1(Clr,Clk,D,Q);
output[3:0]Q;
input[3:0]D;
inputClk,Clr;
reg[3:0]Q;
always@(posedgeClkornegedgeClr)
begin
if(!Clr)Q<=0;
elseQ<=D;
end
endmodule
2.綜合結(jié)果
綜合結(jié)果如圖7-30和圖7-31所示。圖7-30RTL視圖圖7-31工藝視圖
3.測試平臺設(shè)計
`timescale1ns/1ns
moduletestbench;
regClr,Clk;
reg[3:0]D;
wire[3:0]Q;
parameterclock_period=20;
always#(clock_period/2)
Clk=~Clk;
initial
begin
D=0;Clk=0;
repeat(20)
#20D=$random;
end
initial
begin
Clr=0;
repeat(20)
#20Clr=$random;
end
initial
#400$finish;
reg4_1test_reg(Clr,Clk,D,Q);
endmodule
4.功能驗證
仿真結(jié)果如圖7-32所示。
說明:圖中Q的輸出有些地方為空白,是由于位置不夠顯示,放大波形即可看到具體的值。圖7-32功能仿真結(jié)果7.3.2基本寄存器(異步清零異步置1)
1.使用Verilog進(jìn)行描述
以下的設(shè)計具有異步清零端(Aclr)和異步置1端(Aset),異步清零的優(yōu)先級比異步置1高。
modulereg4_2(Data,Aclr,Aset,Clock,Q);
input[3:0]Data;
inputAclr,Aset,Clock;
output[3:0]Q;
reg[3:0]Q;
always@(posedgeClockornegedgeAclrorposedgeAset)
if(!Aclr)
Q<=4‘b0000;
elseif(Aset)
Q<=4’b1111;
elseQ<=Data;
endmodule
2.綜合結(jié)果
綜合結(jié)果如圖7-33所示。
篇幅所限,在此不列出工藝視圖,請讀者自行綜合并與其它設(shè)計進(jìn)行對比分析。圖7-33RTL視圖
3.測試平臺設(shè)計
`timescale1ns/1ns
moduletestbench;
reg[3:0]Data;
regAclr,Aset,Clock;
wire[3:0]Q;
initial
Clock=0;
parameterclock_period=20;
always#(clock_period/2)Clock=~Clock;initial
begin
Data=0;
repeat(20)
#20Data=$random;
end
initial
begin
Aclr=0;
repeat(20)
#20Aclr=$random;
endinitial
begin
Aset=0;
#200Aset=1;
end
initial
#300$finish;
reg4_2test_reg(Data,Aclr,Aset,Clock,Q);
endmodule程序說明:由于加入了多個控制信號,故測試平臺中對控制信號的狀態(tài)進(jìn)行合理搭配也是很重要的,否則可能會出現(xiàn)某些控制信號組合情況未被測試的情況。因此在測試平臺編寫過程中應(yīng)不斷根據(jù)實際情況進(jìn)行調(diào)整。
4.功能驗證
仿真結(jié)果如圖7-34所示。圖7-34功能仿真結(jié)果7.3.3移位寄存器(并入并出單向左移)
1.使用Verilog進(jìn)行描述
moduleshift_reg_pipo(Data,Enable,Shiften,Shiftin,Aclr,Clock,Q);
input[3:0]Data; //4位并行輸入數(shù)據(jù)
inputAclr; //異步清0端
inputEnable; //置數(shù)使能端
inputShiften; //移位使能控制
inputShiftin; //串行輸入端
inputClock; //時鐘信號,上升沿控制
output[3:0]Q; //并行輸出端
reg[3:0]Qaux; //臨時變量always@(posedgeAclrorposedgeClock)
begin
if(Aclr)
Qaux=0;
elseif(Enable)
Qaux=Data;
elseif(Shiften)
Qaux={Qaux[2:0],Shiftin};
//通過連接運(yùn)算符實現(xiàn)左移輸入
end
assignQ=Qaux;
endmodule程序說明:
(1)?Aclr(異步清0端)的優(yōu)先級最高,一旦Aclr變?yōu)榈碗娖剑瑒t輸出馬上清0。
(2)?Enable(并行輸入使能控制端)的優(yōu)先級比Shiften(移位使能控制端)高,當(dāng)Aclr不為1時,時鐘上升沿到來,只要Enable為1,輸出Q得到并行輸入Data的值。
(3)當(dāng)Aclr和Enable不為1時,時鐘上升沿到來,如果Shiften為1,則實現(xiàn)右移輸入操作,左移輸入Shiftin的數(shù)據(jù)(串行輸入)。
2.綜合結(jié)果
綜合結(jié)果如圖7-35所示。圖7-35RTL視圖7.3.4移位寄存器(并入串出單向左移)
1.使用Verilog進(jìn)行描述
moduleshift_reg_piso(Data,Enable,Shiften,Shiftin,Aclr,Clock,Shiftout);
input[1:0]Data;
inputAclr;
inputEnable;
inputShiften;
inputShiftin;
inputClock;
outputShiftout;
reg[1:0]Qaux;
always@(posedgeAclrorposedgeClock)
begin
if(Aclr)
Qaux=0;
elseif(Enable)
Qaux=Data;
elseif(Shiften)
Qaux={Qaux[0],Shiftin}; //語句1
end
assignShiftout=Qaux[1]; //語句2
endmodule程序說明:
(1)程序?qū)崿F(xiàn)2位移位寄存器,串行輸出左向移位。
(2)程序邏輯與7.7.3節(jié)的一致,只是在最后輸出的時候,7.3.3節(jié)的設(shè)計是并行輸出整個結(jié)果,而本設(shè)計是輸出最高位,達(dá)到串行輸出的結(jié)果。
(3)如果要改為右移,語句1應(yīng)改為“Qaux={Shiftin,Qaux[1};”,并且語句2改為輸出最低位Qaux[0]。
2.綜合結(jié)果
綜合結(jié)果如圖7-36所示。圖7-36RTL視圖
3.測試平臺設(shè)計(1)
`timescale1ns/1ns
moduletestbench;
reg[1:0]Data;
regAclr,Enable,Shiften,Shiftin,Clock;
wireShiftout;
parameterclock_period=20;
always#(clock_period/2)Clock=~Clock;
initial
begin
Data=0;
repeat(20)
#20Data=$random;
endinitial
begin
Clock=0; //時鐘信號的初始化,可放在任一個initial過程中
Aclr=0;
#40Aclr=1;
#100Aclr=0;
end
initial
begin
Enable=0;
#100Enable=1;
#100Enable=0;
endinitial
begin
Shiften=0;
repeat(20)
#20Shiften=$random;
end
initial
begin
Shiftin=0;
repeat(10)
#40Shiftin=$random;
end
initial
#400$finish;
shift_reg_pisotestbench_piso(Data,Enable,Shiften,Shiftin,Aclr,Clock,Shiftout);
endmodule
4.功能驗證(1)
仿真結(jié)果如圖7-37所示。
為了查看效果更完整,要把Qaux也輸出顯示到Wave窗口中,需要在“sim”窗口中選擇“testbench_piso”實例,然后在“objects”窗口中找到Qaux變量,把該變量設(shè)置在Wave窗口中顯示。如果不把Qaux加入到波形中,光從Shiftout是很難看出其移位過程的。
從圖中可看出,在時鐘控制下(上升沿):
清零端Aclr為1時,輸出為0;
Aclr為0,Enable(置數(shù)使能端)為1時,輸出Data的最高位;
Aclr為0,Enable為0,Shiften(移位使能端)為1時,根據(jù)Shiftin的輸入進(jìn)行左移位。圖7-37功能仿真結(jié)果
5.測試平臺設(shè)計(2)
在測試平臺設(shè)計(1)中,對于每一個控制信號,要么指定變化的時間,要么周期性用隨機(jī)數(shù)生成,這樣可以產(chǎn)生不同的測試信號組合。但這樣的設(shè)計很容易產(chǎn)生一些無意義的狀態(tài)組合和有些組合情況未能列出。
在測試平臺設(shè)計(2)中,Aclr和Clock的信號單獨產(chǎn)生;另外3個控制和輸入信號(Enable,Shiften,Shiftin)則通過循環(huán)方法,生成所有可能出現(xiàn)的組合情況;Data輸入則隨機(jī)產(chǎn)生。`timescale1ns/1ns
moduletestbench2;
reg[1:0]Data;
regAclr,Enable,Shiften,Shiftin,Clock;
wireShiftout;
reg[2:0]CtrlVec;
integerI;
parameterperiod=20;
always
#(period/2)Clock=~Clock;initial
begin
Clock=0;
Aclr=0;
#160Aclr=1;
end
initial
begin
Data=0;
repeat(12)
#20Data=$random;
endinitial
begin
for(I=0;I<=11;I=I+1)
begin
CtrlVec=I;
{Enable,Shiften,Shiftin}=CtrlVec;
#20;
end
end
initial
#240$finish;
shift_reg_pisotestbench_piso2(Data,Enable,Shiften,Shiftin,Aclr,Clock,Shiftout);
endmodule程序說明:
(1)?I的循環(huán)只需要8次即可列舉出Enable、Shiften、Shiftin三個控制信號的8種狀態(tài)組合,但為了測試Aclr為0時的結(jié)果,增加了4次循環(huán)(I等于8~11時)。
(2)?Enable、Shiften、Shiftin的組合情況從000~111變化后,又重新從000開始,因為當(dāng)I為8(即‘b1000)時,Enable、Shiften、Shiftin分別獲得了低位的0,而最高位的1沒有被任何變量獲得,這是一個常用技巧。
6.功能驗證(2)
仿真結(jié)果如圖7-38所示。圖7-38功能仿真結(jié)果波形說明:
(1)該波形所顯示的變量是“testbench_piso2”實例中的變量,操作方法是:選擇“sim”窗口中“testbench_piso”實例,然后在“objects”窗口中,設(shè)置在Wave窗口中顯示相應(yīng)
變量。
(2)從Shiftout的波形來看,產(chǎn)生了很少的輸出,并且很難從Shiftout的波形看出移位、并行輸入的變化過程。
(3)具體的移位和并行輸入的結(jié)果,要從Qaux波形上才能看出:Qaux第1、2次的變化,是移位操作得到的結(jié)果;第3、4次的值,是并行輸入得到的結(jié)果;第5次的值,是異步清0的結(jié)果。7.3.5移位寄存器(串入并出單向左移)
1.使用Verilog進(jìn)行描述
moduleshift_reg_sipo(Shiften,Shiftin,Aclr,Clock,Q);
inputShiften,Shiftin,Aclr,Clock;
output[3:0]Q;
reg[3:0]Qaux;
always@(posedgeAclrorposedgeClock)
begin
if(Aclr)
Qaux=0;
elseif(Shiften)
Qaux={Qaux[2:0],Shiftin};
end
assignQ=Qaux;
endmodule
2.綜合結(jié)果
綜合結(jié)果如圖7-39所示。圖7-39RTL視圖7.3.6移位寄存器(串入串出單向移位)
1.使用Verilog進(jìn)行描述
moduleshift_reg_siso(Shiften,Shiftin,Aclr,Clock,Shiftout);
inputShiften,Shiftin,Aclr,Clock;
outputShiftout;
reg[3:0]Qaux;
always@(posedgeAclrorposedgeClock)
begin
if(Aclr)
Qaux=0;
elseif(Shiften)
Qaux={Qaux[2:0],Shiftin};
end
assignShiftout=Qaux[3];
endmodule
2.綜合結(jié)果
綜合結(jié)果如圖7-40所示。圖7-40RTL視圖
7.4寄?存?器?傳?輸
寄存器傳輸(RegisterTransferLevel,RTL)是數(shù)字邏輯電路的一種設(shè)計方法。利用寄存器傳輸設(shè)計時,必須詳細(xì)說明數(shù)據(jù)在不同寄存器之間處理及傳輸?shù)倪^程,一般使用中等規(guī)模的功能模塊作為基本單元。
7.4.1基本概念
寄存器存儲數(shù)據(jù)的運(yùn)動及完成的處理稱為寄存器傳輸操作(RegisterTransferOperation),又稱為微操作(microoperation)。
對于n位寄存器,下標(biāo)從0到n-1。小端(Littleendian):0位在最右端,n-1位在最左端。
大端(Bigendian):0位在最左端,n-1位在最右端。
最常用的寄存器圖示方法如圖7-41所示。
以“←”表示從一個寄存器到另一個寄存器的數(shù)據(jù)傳輸。例如R2←R1,表示將寄存器R1的內(nèi)容傳至寄存器R2,其中,R2表示目標(biāo)寄存器,R1表示源寄存器。
所有的寄存器傳輸操作都可以用相應(yīng)的硬件來實現(xiàn)。如K1:R2←R1,表示若K1=1,則R2←R1,對應(yīng)的電路和波形如圖7-42所示。圖7-41常用寄存器圖7-42寄存器傳輸操作7.4.2微操作的種類
有以下4種微操作:
(1)傳輸:從一個寄存器到另一個寄存器傳輸數(shù)據(jù)。
(2)算術(shù)運(yùn)算:寄存器存儲數(shù)據(jù)的算術(shù)運(yùn)算。
(3)邏輯運(yùn)算:寄存器存儲數(shù)據(jù)的位運(yùn)算。
(4)移位:寄存器存儲數(shù)據(jù)的移位。7.4.3單寄存器微操作
所有微操作的結(jié)果均只涉及一個目標(biāo)寄存器,且該寄存器又作為源寄存器使用。由于寄存器與微操作之間的緊密耦合,實現(xiàn)微操作的組合邏輯部分成為寄存器的一部分,稱為專用邏輯(dedicatedlogic)。而使用多目標(biāo)寄存器的情況則稱為共享邏輯(sharedlogic)。
考慮一個寄存器在不同時間從不同的數(shù)據(jù)源接收數(shù)據(jù)的情況:
K1:R0←R1,K1#K2:R0←R2
表示根據(jù)K1、K2的值選擇將寄存器R1或R2的內(nèi)容傳至目標(biāo)寄存器R0,可以利用數(shù)據(jù)選擇器實現(xiàn),其結(jié)構(gòu)如圖7-43所示。圖7-43結(jié)構(gòu)圖圖7-44所示為該電路的邏輯細(xì)節(jié)。圖7-44邏輯細(xì)節(jié)7.5計數(shù)器
7.5.1計數(shù)器(四位二進(jìn)制加法)
1.使用Verilog進(jìn)行描述
modulecnt4_1(qout,reset,clk);
output[3:0]qout;
inputclk,reset;
reg[3:0]qout;
always@(posedgeclk)
begin
if(reset)qout<=0;
else qout<=qout+1;
end
endmodule
2.綜合結(jié)果
綜合結(jié)果如圖7-45所示。圖7-45RTL視圖
3.測試平臺設(shè)計
`timescale1ns/1ns
modulecoun4_testbench;
regclk,reset;
wire[3:0]out;
parameterDELY=20;
always#(DELY/2)clk=~clk;
cnt4_1test_count(out,reset,clk);
initial
begin
clk=0;reset=0;
#(DELY*2) reset=1;
#DELY reset=0;
#(DELY*18)$finish;
end
endmodule
4.功能驗證
仿真結(jié)果如圖7-46所示。
從波形圖可看出:
(1)由于測試平臺一開始沒有給out賦值,故在沒有reset上升沿信號來臨前,out的值一直為x,沒有進(jìn)行計數(shù)。
(2)?reset為1時,qout被清零。
(3)輸出qout為4位向量,當(dāng)計數(shù)到4'b1111(即15)后,再計數(shù)的話會產(chǎn)生高位溢出,重新變?yōu)?'b0000。圖7-46功能仿真結(jié)果7.5.2計數(shù)器(帶置數(shù))
1.使用Verilog進(jìn)行描述
modulecnt4_2(clock,q,aclr,sload,data);
inputclock,aclr,sload;
output[3:0]q;
input[3:0]data;
reg[3:0]qaux;
always@(posedgeclockorposedgeaclr)
begin
if(aclr)
qaux<=4‘b0000;
elseif(sload)
qaux<=data;
elseqaux<=qaux+1;
end
assignq=qaux;
endmodule
2.綜合結(jié)果
綜合結(jié)果如圖7-47所示。圖7-47RTL視圖
3.測試平臺設(shè)計
`timescale1ns/1ns
moduletestbench;
regclock,sload,aclr;
reg[3:0]data;
wire[3:0]q;
parameterDELY=20;
always#(DELY/2)clock=~clock;
initial
begin
sload=0;clock=0;
repeat(15)
#DELYsload=$random;
endinitial
begin
aclr=0;
#DELYaclr=1;
#60aclr=0;
end
initial
begin
data=0;
repeat(15)
#DELYdata=$random;
end
initial
#300$finish;
cnt4_2test_cnt_42(clock,q,aclr,sload,data);
endmodule
4.功能驗證
仿真結(jié)果如圖7-48所示。圖7-48功能仿真結(jié)果7.5.374HC161設(shè)計
3.4.2節(jié)中討論了4位二進(jìn)制同步計數(shù)器的設(shè)計,以下代碼按照74HC161芯片功能表寫出。
//74HC161.v
moduleHC161(CP,CEP,CET,MRN,PEN,Dn,Qn,TC);
inputCP;
inputCEP,CET;
output[3:0]Qn;
inputMRN,PEN;
input[3:0]Dn;
outputTC;reg[3:0]qaux;
regTC;
always@(posedgeCP) //同步
begin
if(!MRN)
qaux<=4'b0000; //復(fù)位
elseif(!PEN)
qaux<=Dn; //并行輸入
elseif(CEP&CET)
qaux<=qaux+1; //計數(shù)
elseqaux<=qaux; //保持
end
always@(posedgeCP)
begin
if(qaux==4‘b1111) //進(jìn)位輸出
TC=1’b1;
elseTC=1‘b0;
end
assignQn=qaux;
endmodule
在后面章節(jié)的綜合實例中(7.7.1節(jié)),該設(shè)計將作為基本模塊進(jìn)行調(diào)用。在此不列出測試平臺和綜合結(jié)果,讀者可自行設(shè)計和驗證。
7.6有?限?狀?態(tài)?機(jī)
時序邏輯電路的顯著特點是內(nèi)部包含狀態(tài)寄存器,電路在不同的狀態(tài)之間切換。由于狀態(tài)寄存器數(shù)目有限,電路可以達(dá)到的狀態(tài)有限,因此,時序邏輯電路有時稱為有限狀態(tài)機(jī)(FiniteStateMachine,F(xiàn)SM)。
FSM是表示實現(xiàn)有限個離散狀態(tài)及其狀態(tài)之間的轉(zhuǎn)移等行為動作的數(shù)學(xué)模型。狀態(tài)機(jī)主要包含狀態(tài)及轉(zhuǎn)移兩方面的內(nèi)容。有限狀態(tài)機(jī)特別適合描述那些發(fā)生有先后順序或者有邏輯規(guī)律的事情,狀態(tài)機(jī)的本質(zhì)就是對具有邏輯順序或時序規(guī)律事件的一種描述方法。有限狀態(tài)機(jī)及其設(shè)計技術(shù)是數(shù)字邏輯電路設(shè)計中的重要組成部分,是實現(xiàn)高效率、高可靠性邏輯控制的重要途徑。大部分?jǐn)?shù)字邏輯電路都可以劃分為控制單元和數(shù)據(jù)單元(存儲單元)兩個組成部分。通常,控制單元的主體是一個狀態(tài)機(jī),它接收外部信號以及數(shù)據(jù)單元產(chǎn)生的狀態(tài)信息,產(chǎn)生控制信號序列。
狀態(tài)機(jī)設(shè)計是時序邏輯電路設(shè)計的一個子集,在數(shù)字邏輯電路設(shè)計的范疇中應(yīng)用面很廣。小到一個簡單的時序邏輯,大到復(fù)雜的微處理器,都適合用狀態(tài)機(jī)方法進(jìn)行描述。由于狀態(tài)機(jī)不僅僅是一種電路描述工具,它更是一種思想方法,而且狀態(tài)機(jī)的HDL表達(dá)方式比較規(guī)范,有章可循,因此很多設(shè)計者習(xí)慣用狀態(tài)機(jī)思想進(jìn)行邏輯設(shè)計,對各種復(fù)雜設(shè)計均套用狀態(tài)機(jī)的設(shè)計理念,從而提高設(shè)計的效率和穩(wěn)定性。7.6.1有限狀態(tài)機(jī)概述
1.基本概念
(1)狀態(tài):用于“記憶”在時鐘邊沿或相應(yīng)脈沖邊沿加載于電路的歷史輸入數(shù)據(jù)的組合情況,也叫狀態(tài)變量。狀態(tài)可以用名稱定義,也可以不用名稱。在邏輯設(shè)計中,使用狀態(tài)劃分邏輯順序和時序規(guī)律。
(2)狀態(tài)轉(zhuǎn)移:當(dāng)發(fā)生指定事件且滿足指定條件時,第一個狀態(tài)中的對象將執(zhí)行某些操作并進(jìn)入第二個狀態(tài),即“觸發(fā)”了轉(zhuǎn)移。將觸發(fā)轉(zhuǎn)移之前的狀態(tài)定義為“源狀態(tài)”(當(dāng)前狀態(tài),current_state),而觸發(fā)轉(zhuǎn)移之后的狀態(tài)定義為“目標(biāo)狀態(tài)”(下一狀態(tài),next_state)。狀態(tài)的轉(zhuǎn)換由時鐘信號驅(qū)動。圖7-49為狀態(tài)轉(zhuǎn)換圖例子。其中indata是轉(zhuǎn)移條件,Q1Q2是輸出信號,箭頭指向為轉(zhuǎn)移方向,S0、S1、S2、S3為狀態(tài)名稱(未作編碼)。狀態(tài)轉(zhuǎn)換表如表7-1所示。
(3)狀態(tài)編碼:狀態(tài)機(jī)的N種狀態(tài)通常需要用某種編碼來表示,即狀態(tài)編碼,又稱為狀態(tài)分配。編碼方式主要包括:
①順序二進(jìn)制碼:使用狀態(tài)向量的位數(shù)最少,但從一個狀態(tài)轉(zhuǎn)移到相鄰狀態(tài)時,可能會有多個位同時發(fā)生變化,易產(chǎn)生毛刺。
②格雷碼:在相鄰狀態(tài)的轉(zhuǎn)換中,每次只有一個比特位發(fā)生變化,消除了產(chǎn)生毛刺的問題,但不適用于有很多狀態(tài)跳轉(zhuǎn)的情況。圖7-49狀態(tài)轉(zhuǎn)換圖表7-1狀態(tài)轉(zhuǎn)換表③獨熱碼:指對任意給定的狀態(tài),狀態(tài)向量中僅有一位“1”,而其余為“0”,所以N狀態(tài)的狀態(tài)機(jī)需要N個觸發(fā)器。
④直接輸出型編碼:將狀態(tài)碼中的某些位直接輸出作為控制信號,要求狀態(tài)機(jī)各狀態(tài)的編碼作特殊的選擇,以適應(yīng)控制信號的要求,該編碼需要根據(jù)輸出變量來定制編碼。
如上表中的S0、S1、S2、S3狀態(tài),可用00、01、10、11(順序二進(jìn)制碼),也可以用00、01、11、10(格雷碼),或0001、0010、0100、1000(獨熱碼)進(jìn)行編碼。
2.狀態(tài)機(jī)的分類
根據(jù)不同的分類標(biāo)準(zhǔn),狀態(tài)機(jī)分為不同的種類:
(1)摩爾型(Moore)狀態(tài)機(jī)和米勒型(Mealy)狀態(tài)機(jī)。
摩爾型狀態(tài)機(jī):利用組合邏輯將當(dāng)前狀態(tài)譯碼轉(zhuǎn)化為輸出,其狀態(tài)只在全局時鐘信號改變時才改變。其最重要的特點就是將輸入與輸出信號隔離,所以輸出穩(wěn)定,能有效消除競爭冒險。如無特殊功能設(shè)計要求,摩爾狀態(tài)機(jī)是設(shè)計首選。
圖7-50中,“狀態(tài)譯碼”部分采用組合邏輯,故稱為“下一狀態(tài)組合邏輯”;“輸出譯碼”部分也采用組合邏輯,故稱為“輸出組合邏輯”。圖7-50摩爾型狀態(tài)機(jī)米勒型狀態(tài)機(jī):其輸出與當(dāng)前狀態(tài)和輸入都有關(guān),且對輸入的響應(yīng)發(fā)生在當(dāng)前時鐘周期,比摩爾型狀態(tài)機(jī)對輸入信號的響應(yīng)要早一個周期。所以輸入信號的噪聲(毛刺)會直接影響輸出信號,即有競爭冒險且不能消除。米勒型狀態(tài)機(jī)如圖7-51所示。圖7-51米勒型狀態(tài)機(jī)
(2)異步狀態(tài)機(jī)和同步狀態(tài)機(jī)。
異步狀態(tài)機(jī)是沒有確定時鐘的狀態(tài)機(jī),其狀態(tài)轉(zhuǎn)移不由唯一的時鐘邊沿觸發(fā),目前多數(shù)綜合工具在對異步狀態(tài)機(jī)進(jìn)行邏輯優(yōu)化時會胡亂地簡化邏輯,使綜合后的異步狀態(tài)機(jī)不能正常工作。因此,應(yīng)盡量不要使用綜合工具來設(shè)計異步狀態(tài)機(jī)。如果一定要設(shè)計異步狀態(tài)機(jī),建議采用原理圖輸入或?qū)嵗玫姆椒?,而不要用VerilogHDL輸入的方法。
為了能綜合出有效的電路,用VerilogHDL描述的狀態(tài)機(jī)應(yīng)明確地由唯一時鐘觸發(fā),稱之為同步狀態(tài)機(jī),它是設(shè)計復(fù)雜時序邏輯電路最有效、最常用的方法之一。
異步狀態(tài)機(jī)實現(xiàn)的功能通常都可以由同步狀態(tài)機(jī)來實現(xiàn)。
(3)單進(jìn)程、雙進(jìn)程和多進(jìn)程狀態(tài)機(jī)。
可以有三種不同的方式實現(xiàn)對狀態(tài)機(jī)的描述:
①三個模塊用一個進(jìn)程實現(xiàn),也就是說三個模塊均在一個always塊內(nèi),這種狀態(tài)機(jī)描述稱為單進(jìn)程有限狀態(tài)機(jī),它既描述狀態(tài)轉(zhuǎn)移,又描述狀態(tài)的寄存和輸出。
②每一個模塊分別用一個進(jìn)程實現(xiàn),也就是說三個模塊對應(yīng)著三個always塊,這種狀態(tài)機(jī)描述稱為三進(jìn)程有限狀態(tài)機(jī)。
③三個模塊對應(yīng)著兩個always塊,“狀態(tài)譯碼”、“輸出譯碼”分配在一個進(jìn)程中,“狀態(tài)寄存器”用另一個進(jìn)程描述。這種狀態(tài)機(jī)描述稱為雙進(jìn)程有限狀態(tài)機(jī)。7.6.2有限狀態(tài)機(jī)的設(shè)計方法
1.有限狀態(tài)機(jī)設(shè)計流程
狀態(tài)機(jī)的設(shè)計流程分為6個步驟,如圖7-52所示。
2.有限狀態(tài)機(jī)的一般結(jié)構(gòu)
一個有限狀態(tài)機(jī)的結(jié)構(gòu)(如圖7-53所示)總是可以被分為三部分。
(1)狀態(tài)譯碼:根據(jù)外部輸入的控制信號及當(dāng)前狀態(tài)(current_state)確定下一狀態(tài)(next_state)的取值,采用組合邏輯判斷狀態(tài)轉(zhuǎn)移條件,描述狀態(tài)轉(zhuǎn)移規(guī)律。
(2)狀態(tài)寄存器:采用同步時序描述狀態(tài)轉(zhuǎn)移,負(fù)責(zé)狀態(tài)機(jī)運(yùn)行和在時鐘驅(qū)動下狀態(tài)轉(zhuǎn)換的過程。當(dāng)時鐘信號的有效邊沿到達(dá)時,主控時序過程將代表下一狀態(tài)的信號next_state中的內(nèi)容送入當(dāng)前狀態(tài)的信號current_state中,而信號next_state中的內(nèi)容完全由其它過程根據(jù)實際情況來決定。
(3)輸出譯碼:描述每個狀態(tài)的輸出。圖7-52有限狀態(tài)機(jī)設(shè)計流程圖7-53有限狀態(tài)機(jī)一般結(jié)構(gòu)
3.有限狀態(tài)機(jī)的建模
傳統(tǒng)的數(shù)字邏輯電路設(shè)計利用狀態(tài)轉(zhuǎn)換圖(StateTransmitionGraph,STG)及狀態(tài)轉(zhuǎn)換表進(jìn)行,適用于小型系統(tǒng)的設(shè)計,對于大型系統(tǒng)設(shè)計,狀態(tài)轉(zhuǎn)換圖及狀態(tài)轉(zhuǎn)換表會變得很笨重或不可工作。
有限狀態(tài)機(jī)的行為動作是由觸發(fā)器上的同步時序操作組成的,當(dāng)狀態(tài)機(jī)處于特定狀態(tài)時,狀態(tài)轉(zhuǎn)換圖表示由于引入輸入而產(chǎn)生的轉(zhuǎn)移,但STG無法直接顯示輸入數(shù)據(jù)時狀態(tài)的演變。這就需要引入另一種時序狀態(tài)機(jī)的描述形式——算法狀態(tài)機(jī)圖(ASM,AlgorithmicStateMachine)。
ASM圖是硬件算法的符號表示方法,可以方便地表示數(shù)字系統(tǒng)的順序操作。ASM圖不同于算法流程,它是一種時鐘驅(qū)動的流程圖。ASM圖不僅可以用來描述控制器的控制過程(即控制器的狀態(tài)轉(zhuǎn)換、轉(zhuǎn)換條件以及控制器輸出等),還指明了在被控制的數(shù)據(jù)處理器中應(yīng)該實現(xiàn)的操作,即ASM圖定義了整個數(shù)字系統(tǒng)。
ASM是時序狀態(tài)機(jī)功能的一種抽象,是模擬其行為特性的關(guān)鍵工具,它類似于軟件流程圖,但顯示的是計算動作(如寄存器操作)的時間順序,以及在狀態(tài)機(jī)輸入影響下發(fā)生的時序步驟。ASM描述的是狀態(tài)機(jī)的行為動作,而不是存儲元件所存儲的內(nèi)容。
1)?ASM符號
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年年七年級數(shù)學(xué)人教版下冊專題整合復(fù)習(xí)卷27.2.1 相似三角形的判定(1)(含答案)-
- 現(xiàn)金流管理的技巧計劃
- 《證券交易講義》課件
- 動態(tài)調(diào)整班級教學(xué)內(nèi)容的探索計劃
- 圖像傳感器相關(guān)行業(yè)投資規(guī)劃報告范本
- 攜手共進(jìn)幼兒園學(xué)期班級工作計劃
- 車行租賃協(xié)議三篇
- 民宿廚房租賃合同三篇
- 社區(qū)參與的美術(shù)項目計劃
- 社會實踐活動的設(shè)計與實施計劃
- 2024-2025學(xué)年上海市虹口區(qū)高三一模地理試卷(含答案)
- 企業(yè)管理制度-薪酬管理制度
- 4.1.1陸地水體間的相互關(guān)系課件高中地理湘教版(2019)選擇性必修一
- 外墻真石漆施工方案
- 計劃崗位培訓(xùn)課件
- 中藥涂擦治療
- IATF16949體系推行計劃(任務(wù)清晰版)
- 2021年高考數(shù)學(xué)試卷(上海)(春考)(解析卷)
- 石橫鎮(zhèn)衛(wèi)生院康復(fù)科建設(shè)方案
- DB11T 1553-2018 居住建筑室內(nèi)裝配式裝修工程技術(shù)規(guī)程
- 非新生兒破傷風(fēng)診療
評論
0/150
提交評論