第7章 基于EDA的時序電路設計、綜合及驗證(7.1-7.5)_第1頁
第7章 基于EDA的時序電路設計、綜合及驗證(7.1-7.5)_第2頁
第7章 基于EDA的時序電路設計、綜合及驗證(7.1-7.5)_第3頁
第7章 基于EDA的時序電路設計、綜合及驗證(7.1-7.5)_第4頁
第7章 基于EDA的時序電路設計、綜合及驗證(7.1-7.5)_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第7章 基于EDA的時序電路設計、綜合及驗證學習基礎:(1) 第3章介紹了時序邏輯電路的基礎知識。學習本章前,應先掌握第3章的知識。(2) 第4章介紹了Verilog HDL的基本語法及簡單設計的建模方法。(3) 5.55.7的綜合實例,介紹了EDA工具Libero IDE的使用。本章所有綜合和驗證均基于Libero IDE環(huán)境實現。閱讀指南:l 本章講述內容對應第3章的知識,把相應功能通過Verilog HDL語言進行實現。l 本章多處對同一個設計提供了多種設計思路和實現方法,并不是所有都是最優(yōu)的方法,只是方便對比和學習。讀者可根據情況選擇合適的方法。l 7.4、7.6、7.7中討論了第3章

2、中沒有涉及的理論知識和多個綜合例子,這些知識和例子綜合性強,較難理解,但卻是數字系統(tǒng)實際開發(fā)中非常重要和實用的內容,對于想進入數字系統(tǒng)設計實踐階段的讀者來說很有實際意義。7.1 鎖存器7.1.1 基本RS鎖存器(一)1使用Verilog進行描述module rs_1(R,S,Q,Qn); input R,S; output Q,Qn;/ Qn表示,而不是時序電路中的現態(tài)。 reg Q; assign Qn=Q; always (R or S)/ 通過case語句,按真值表方式寫出程序邏輯。 case(R,S) 2b01:Q=1; 2b10:Q=0; 2b11:Q=1bx; endcaseend

3、module讀者在一開始看這種程序時很容易產生疑問:觸發(fā)器是存放數字電路中基本二進制信號的單元電路,也就是寄存器變量Q的值是需要使用觸發(fā)器來存放,而觸發(fā)器是由鎖存器所構成,用觸發(fā)器存放的Q來實現一個鎖存器顯然是不合理的。這就需要讀者理解在Verilog HDL中,采用行為風格編寫代碼,是為了讓程序編寫者可用更趨向行為的方式更方便的編寫代碼,而不需考慮具體的物理細節(jié)。雖然在程序中指定要使用一個寄存器變量Q,但在使用EDA工具進行綜合的時候,是不會也不可能用觸發(fā)器來實現鎖存器的,通過綜合結果可看出。2綜合結果第7章的工藝視圖不一定要給學生講,各位老師自行處理3測試平臺設計timescale 1ns

4、/1nsmodule testbench (); reg r,s; wire q,qn; rs_1 test_rs(r,s,q,qn); initial begin r=0;s=0; #10 s=1; #10 r=1; #10 s=0; #10 r=0; #10; endendmodule 4功能驗證綜合前仿真綜合后仿真波形說明:(1) 綜合前仿真(功能仿真)的結果中,在010ns和2030ns之間,q和qn都是x態(tài)。010ns之間產生的x態(tài)是因為r和s的值為0,q保持原態(tài);2030ns之間產生的x態(tài)是因為r和s的值為1,代碼中規(guī)定了處理為x態(tài)。(2) 綜合后仿真的結果中,2030ns之間q和

5、qn并不是x態(tài)(都為0),具體狀態(tài)視20ns時r、s、q的值而定。7.1.2 基本RS鎖存器(二)1使用Verilog進行描述module rs_2(R,S,Q,Qn); input R,S; output Q,Qn; nor (Q,R,Qn); nor (Qn,S,Q);endmodule2綜合結果測試平臺與設計一相同。3功能驗證波形分析:對比設計一和設計二的波形,可發(fā)現在設計一中,當r,s為1時,Q和Qn均為x,而在設計二中Q和Qn均為0。由于對RS鎖存器來說,R,S同為1是不允許的,故可忽略之。7.1.3 門控D鎖存器1使用Verilog進行描述module latch_1_a(Clk,

6、D,Q); input Clk,D; output Q; reg Q; always (D or Clk)if (Clk) Q=D;endmodule程序說明:(1)當Clk為高電平時,輸出Q的數值會隨D輸入的數據更新,而當Clk為低電平時將保持其高電平時鎖入的數據。(2)Clk由0變?yōu)?時,滿足if語句的條件,語句“Q=D”被執(zhí)行,將D的數值賦值給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綜合結果3測

7、試平臺設計timescale 1ns/1ns module testbench_latch; reg clk,D;wire Q; initial begin clk=0; #50 clk=1; #100 clk=0; #100 clk=1; endinitial begin D=0; repeat(20) #20 D=$random; endlatch_1_a testbench_latch(clk,D,Q); endmodule4功能驗證以下設計使用數據流風格,設計思路、綜合結果、測試平臺、功能驗證結果都相同。module latch_1_b(Clk,D,Q); input Clk,D; o

8、utput Q; assign Q=Clk?D:Q;endmodule課本沒有7.1.4 帶清零D鎖存器(一)1使用Verilog進行描述module latch_1_c(Clk,D,Q,Rst); input Clk,D,Rst; output Q; reg Q; always (D or Clk or Rst)if (!Rst) Q=0; / 語句1else if (Clk) Q=D;endmodule程序說明:(1) 程序采用具有時序語句特色的進程語句,其中數據信號D、時鐘信號Clk和清0(復位)信號Rst都被列于敏感信號表中,實現了Clk的電平觸發(fā)特性和Rst的異步特性。(2) 異步清

9、0實現的效果,就是當Rst一旦變成0,就馬上對輸出進行清0,而不需要理會時鐘、輸入數據等的狀態(tài)。也就是Rst是優(yōu)先級最高的控制信號,在代碼(語句1)中,通過“ifelse if”語句來實現優(yōu)先級控制。2綜合結果3測試平臺設計timescale 1ns/1ns module testbench_latch; reg clk,D,rst; wire Q; initial begin clk=0; #50 clk=1; #70 clk=0; #80 clk=1; end initial begin D=0; repeat(20) #20 D=$random; end initial begin rs

10、t=0; #60 rst=1; #80 rst=0; #40 rst=1; endlatch_1_c testbench_latch(clk,D,Q,rst); endmodule4功能驗證7.1.5 帶清零D鎖存器(二)module latch_1_d(Clk,D,Q,Rst); input Clk,D,Rst; output Q; assign Q=(!Rst)?0:(Clk?D:Q); endmodule程序采用連續(xù)賦值語句,使用了條件操作符的嵌套。實現思路與設計(一)相同。 綜合結果與設計(一)基本相同,只有元件名稱稍有不同。測試平臺、功能驗證結果與設計(一)相同。7.2 觸發(fā)器D觸發(fā)

11、器是最簡單、最常用且最具代表性的時序電路,它是數字系統(tǒng)設計中最基本的底層時序單元,JK和T觸發(fā)器都由D觸發(fā)器構建而來。7.2.1 D觸發(fā)器1使用Verilog進行描述module d_ff_1(D,Clk,Q); input D,Clk;output Q;reg Q;always (posedge Clk)Q=D;endmodule程序說明:(1)當Clk的上升沿到達時,立即將D送往輸出Q;若沒有Clk的上升沿到達,Q的值保持不變;(2)該D觸發(fā)器的設計與門控D鎖存器設計非常類似,僅僅是由電平敏感變成了上升沿敏感。2綜合結果3測試平臺設計timescale 1ns/1ns module tes

12、tbench; reg D,Clk; wire Q; initial Clk=0;書本中合并至下一個initial parameter clock_period=20; always #(clock_period/2) Clk=Clk; initial begin D=0; repeat(20) #20 D=$random; end d_ff_1 testbench_d(D,Clk,Q); initial #300 $finish;endmodule4功能驗證7.2.2 D觸發(fā)器(異步清零邊沿觸發(fā))1使用Verilog進行描述module d_ff_2(D,Clk,Q,Rst,En); inp

13、ut D,Clk,Rst,En; output Q; reg Q; always (posedge Clk or negedge Rst) begin if (!Rst) Q=0; else if (En) Q=D; endendmodule程序說明:(1)所謂“異步”是指獨立于時鐘控制的復位控制端,即在任何時刻,只要Rst=0,D觸發(fā)器的輸出端即刻被清0,與時鐘狀態(tài)無關;而時鐘使能端En的功能是:只有當En=1時,時鐘上升沿才有效。(2)無論Clk是否有跳變,只要Rst的下降沿到達,即執(zhí)行Q =0,此后如果Rst一直保持為0,則無論是否有Clk的邊沿跳變信號,Q均輸出0;如果Rst一直為1,

14、且Clk有上升沿到達,則會執(zhí)行賦值操作Q=D,從而更新Q值。2綜合結果3測試平臺設計timescale 1ns/1ns module testbench; reg D,Rst,Clk,En;wire Q; d_ff_2 testbench_dff(D,Clk,Q,Rst,En); initial Clk=0; #400 $finish; parameter clock_period=20; always #(clock_period/2) Clk=Clk; initial begin D=0; repeat(20) #20 D=$random; end initial begin Rst=0;

15、 repeat(20) #20 Rst=$random; end initial begin En=0; repeat(20) #20 En=$random; endendmodule 4功能驗證7.2.3 D觸發(fā)器(同步清零邊沿觸發(fā))module d_ff_3(D,Clk,Q,Rst); input D,Clk,Rst;output Q;reg Q;always (posedge Clk)if (Rst=1) Q=0;else if (Rst=0) Q=D;endmodule程序說明:所謂“同步”是指某控制信號只有在時鐘信號有效時才起作用。信號敏感表列表中只放了對Clk上升沿的敏感表述,即此

16、過程中的所有其它輸入信號都相對于時鐘Clk而同步。7.2.4 JK觸發(fā)器1使用Verilog進行描述JK觸發(fā)器比RS觸發(fā)器增加了翻轉功能,以下設計與RS觸發(fā)器類似。module jk_ff(J,K,Clk,Q,Qn); input J,K,Clk; output Q,Qn; reg Q; assign Qn=Q; always (posedge Clk) case(J,K) 2b00:Q=Q; 2b01:Q=1b0; 2b10:Q=1b1; 2b11:Q=Q; default:Q=1bx; endcaseendmodule2綜合結果3測試平臺設計測試平臺的設計與RS觸發(fā)器的方法一致,只需把R,

17、S改成J,K,修改對接模塊名稱即可。timescale 1ns/1ns module testbench; reg j,k,Clk; wire Q,Qn; initial Clk=0; parameter clock_period=20; always #(clock_period/2) Clk=Clk; initial begin j=0; repeat(20) #20 j=$random; end initial begin k=0; repeat(20) #20 k=$random; end initial #300 $finish; jk_ff testbench_jk(j,k,Clk

18、,Q,Qn); endmodule4功能驗證7.2.5 RS觸發(fā)器1使用Verilog進行描述以下設計是在RS鎖存器設計(一)的基礎上,加入上升沿控制而寫成。加入了時鐘信號Clk,改變了敏感事件為Clk上升沿觸發(fā)。module rs_ff(R,S,Clk,Q,Qn); input R,S,Clk;output Q,Qn;reg Q;assign Qn=Q;always (posedge Clk) case(R,S) 2b01:Q=1; 2b10:Q=0; 2b11:Q=1bx; endcaseendmodule2綜合結果3測試平臺設計timescale 1ns/1ns module testb

19、ench; reg R,S,Clk; wire Q,Qn; initial Clk=0;parameter clock_period=20; always #(clock_period/2) Clk=Clk; initial begin R=0; repeat(20)/ 語句1 #20 R=$random; endinitial begin S=0; repeat(20) / 語句2 #20 S=$random; endrs_ff testbench_rs(R,S,Clk,Q,Qn); initial #300 $finish; / 語句3endmodule程序說明:語句1和語句2要求生成20

20、個隨機的R和S,共需要400個單位時間,但語句3卻要求在單位時間300時結束,那么程序會按哪一個要求進行呢?答案可從以下的功能驗證波形中看到,程序會在單位時間300時結束。4功能驗證綜合前仿真綜合后仿真波形分析:從波形圖上看,綜合前和綜合后的Q輸出結果不一樣,綜合前仿真的Q輸出有很多的x態(tài)。該現象與RS鎖存器設計一中出現的現象是同一原因,請參考前面(RS鎖存器設計一)的說明。7.2.6 T觸發(fā)器(異步清零)1使用Verilog進行描述module t_ff(T,Clk,Rst,Q,Qn); input T,Clk,Rst;output Q,Qn;reg Q;assign Qn=Q;always

21、 (posedge Clk or posedge Rst) if(Rst) Q=0; else if(T) Q=Q;endmodule2綜合結果3測試平臺設計timescale 1ns/1ns module testbench_t; reg T,Clk,Rst;wire Q,Qn; parameter clock_period=20;initial Clk=0;always #(clock_period/2) Clk=Clk; initial begin Rst=0; #30 Rst=1; #30 Rst=0; #30 Rst=1; #30 Rst=0; endinitial begin T=

22、0; repeat(20) #20 T=$random; endt_ff testbench_t(T,Clk,Rst,Q,Qn); initial #400 $finish;endmodule4功能驗證波形分析:假設Rst一直不產生上升沿變化,那么會發(fā)生什么事情呢?如果Rst不產生上升沿變化,則程序代碼不被執(zhí)行,無論T和Clk如何變化,Q和Qn將一直保持x值。故一般應進行數據的初始化處理。7.3 寄存器7.3.1 基本寄存器以下討論由4位D觸發(fā)器構成的4位寄存器。對于基本寄存器,數據或代碼只能并行送入寄存器中,需要時也只能并行輸出。1使用Verilog進行描述module reg4_1(Clr

23、,Clk,D,Q);output 3:0Q;input 3:0 D;input Clk,Clr;reg3:0 Q;always(posedge Clk or negedge Clr) begin if(!Clr) Q=0; else Q=D;endendmodule2綜合結果3測試平臺設計timescale 1ns/1ns module testbench; reg Clr,Clk;reg3:0 D; wire3:0 Q; initial Clk=0; parameter clock_period=20; always #(clock_period/2) Clk=Clk;initial beg

24、in D=0; repeat(20) #20 D=$random; endinitial begin Clr =0; repeat(20) #20 Clr =$random; endreg4_1 test_reg(Clr,Clk, D, Q); initial #400 $finish;endmodule 4功能驗證說明:圖中Q的輸出有些地方為空白,是由于不夠位置顯示,放大波形即可看到具體的值。7.3.2 基本寄存器(異步清零異步置1)1使用Verilog進行描述以下的設計具有異步清零端(Aclr)和異步置1端(Aset),異步清零的優(yōu)先級比異步置1高。module reg4_2 (Data,

25、 Aclr, Aset, Clock, Q); input 3:0 Data; input Aclr; input Aset; input Clock; output 3:0 Q; reg 3:0 Q; always (posedge Clock or negedge Aclr or posedge Aset) if (!Aclr) Q = 4b0000; else if (Aset) Q = 4b1111; else Q = Data;endmodule2綜合結果3測試平臺設計timescale 1ns/1ns module testbench; reg 3:0 Data;reg Aclr,

26、Aset,Clock;wire 3:0 Q; initial Clock=0;parameter clock_period=20;always #(clock_period/2) Clock=Clock;initial begin Data=0;repeat(20) #20 Data=$random; endinitial begin Aclr=0;repeat(20) #20 Aclr=$random; endinitial begin Aset=0; #200 Aset=1; endreg4_2 test_reg(Data, Aclr, Aset, Clock, Q); initial #

27、300 $finish;endmodule程序說明:由于加入了多個控制信號,故測試平臺中對控制信號的狀態(tài)進行合理搭配也是很重要的,否則可能會出現某些控制信號組合情況未被測試的情況。因此在測試平臺編寫過程中應不斷的根據實際情況進行調整。4功能驗證7.3.3 移位寄存器(并入并出單向左移)1使用Verilog進行描述module shift_reg_pipo (Data, Enable, Shiften, Shiftin, Aclr, Clock, Q); input 3:0 Data;/ 4位并行輸入數據 input Aclr;/ 異步清0端 input Enable;/ 置數使能端 input

28、 Shiften;/ 移位使能控制 input Shiftin;/ 串行輸入端 input Clock;/ 時鐘信號,上升沿控制 output 3:0 Q;/ 并行輸出端 reg 3:0 Qaux;/ 臨時變量 always (posedge Aclr or posedge Clock) begin if (Aclr) Qaux = 0; else if (Enable) Qaux = Data; else if (Shiften) Qaux = Qaux2:0, Shiftin;/ 通過連接運算符實現左移輸入 end assign Q = Qaux;endmodule程序說明:(1) Acl

29、r(異步清0端)的優(yōu)先級最高,一旦Aclr變?yōu)榈碗娖?,則輸出馬上清0。(2) Enable(并行輸入使能控制端)的優(yōu)先級比Shiften(移位使能控制端)高,當Aclr不為1時,時鐘上升沿到來,只要Enable為1,輸出Q得到并行輸入Data的值。(3) 當Aclr和Enable不為1時,時鐘上升沿到來,如果Shiften為1,則左移輸入Shiftin的數據(串行輸入)。2綜合結果7.3.4 移位寄存器(并入串出單向左移)1使用Verilog進行描述module shift_reg_piso (Data, Enable, Shiften, Shiftin, Aclr, Clock, Shift

30、out); input 1:0 Data; input Aclr; input Enable; input Shiften; input Shiftin; input Clock; output Shiftout; reg 1:0 Qaux; always (posedge Aclr or posedge Clock) begin if (Aclr) Qaux = 0; else if (Enable) Qaux = Data; else if (Shiften) Qaux = Qaux0, Shiftin;/ 語句1 end assign Shiftout = Qaux1;/ 語句2endm

31、odule程序說明:(1) 程序實現2位移位寄存器,串行輸出左向移位。(2) 程序邏輯與設計一的一致,只是在最后輸出的時候,設計一是并行輸出整個結果,而設計二是輸出最高位,達到串行輸出的結果。(3) 如果要改為右移,語句1應改為“Qaux = Shiftin, Qaux1;”,并且語句2改為輸出最低位Qaux0。2綜合結果3測試平臺設計(1)timescale 1ns/1ns module testbench; reg 1:0 Data;reg Aclr,Enable,Shiften,Shiftin,Clock;wire Shiftout; parameter clock_period=20;

32、always #(clock_period/2) Clock=Clock;initial begin Data=0; repeat(20) #20 Data=$random; endinitial begin Clock=0;/ 時鐘信號的初始化,可放在任一個initial過程中 Aclr=0; #40 Aclr=1; #100 Aclr=0; endinitial begin Enable=0; #100 Enable=1; #100 Enable=0; endinitial begin Shiften=0; repeat(20) #20 Shiften=$random; endinitia

33、l begin Shiftin=0; repeat(10) #40 Shiftin=$random; endshift_reg_piso testbench_piso(Data, Enable, Shiften, Shiftin, Aclr, Clock, Shiftout); initial #400 $finish;endmodule4功能驗證(1)為了查看效果更完整,要把Qaux也輸出顯示到Wave窗口中,需要在“sim”窗口中選擇“testbench_piso”實例,然后在“objects”窗口中找到Qaux變量,把該變量設置在Wave窗口中顯示。如果不把Qaux加入到波形中,光從Sh

34、iftout是很難看出其移位過程的。從圖中可看出,在時鐘控制下(上升沿):l 清零端Aclr為1時,輸出為0;l Aclr為0,Enable(置數使能端)為1時,輸出Data的最高位;l Aclr為0,Enable為0,Shiften(移位使能端)為1時,根據Shiftin的輸入進行左移位;5測試平臺設計(2)在測試平臺設計(1)中,對于每一個控制信號,要么指定變化的時間,要么周期性用隨機數生成,這樣可以產生不同的測試信號組合。但這樣的設計很容易產生一些無意義的狀態(tài)組合和有些情況未能列出。在測試平臺設計(2)中,Aclr和Clock的信號單獨產生;另外3個控制和輸入信號(Enable,Shif

35、ten,Shiftin)則通過循環(huán)方法,生成所有可能出現的組合情況;Data輸入則隨機產生。timescale 1ns/1ns module testbench2; reg 1:0 Data;reg Aclr,Enable,Shiften,Shiftin,Clock;wire Shiftout; reg2:0 CtrlVec;integer I;parameter period=20;always #(period/2) Clock=Clock;initial begin Clock=0;Aclr =0; #160 Aclr =1; endinitial begin Data=0; repea

36、t(12) #20 Data=$random; endinitial begin for (I = 0 ; I =11 ; I = I + 1) beginCtrlVec=I;Enable,Shiften,Shiftin= CtrlVec;#20; endendshift_reg_piso testbench_piso2(Data, Enable, Shiften, Shiftin, Aclr, Clock, Shiftout); initial #240 $finish;endmodule程序說明:(1) I的循環(huán)只需要8次即可列舉出Enable,Shiften,Shiftin三個控制信號的

37、8種狀態(tài)組合,但為了測試Aclr為0時的結果,增加了4次循環(huán)(I等于811時)。(2) Enable,Shiften,Shiftin的組合情況從000111變化后,又重新從000開始,因為當I為8(即b1000)時,Enable,Shiften,Shiftin分別獲得了低位的0,而最高位的1沒有被任何變量獲得,這是一個常用技巧。6功能驗證(2)波形說明:(1) 該波形所顯示的變量是“testbench_piso2”實例中的變量,操作方法是:選擇“sim”窗口中“testbench_piso”實例,然后在“objects”窗口中,設置在Wave窗口中顯示的相應變量。(2) 從Shiftout的波

38、形來看,產生了很少的輸出,并且很難從Shiftout的波形看出移位、并行輸入的變化過程。(3) 具體的移位和并行輸入的結果,要從Qaux波形上才能看出:Qaux第1、2次的變化,是移位操作得到的結果;第3、4次的值,是并行輸入得到的結果;第5次的值,是異步清0的結果。7.3.5 移位寄存器(串入并出單向左移)1使用Verilog進行描述module shift_reg_sipo (Shiften, Shiftin, Aclr, Clock, Q); input Shiften; input Shiftin; input Aclr; input Clock; output 3:0 Q; reg

39、3:0 Qaux; always (posedge Aclr or posedge Clock) begin if (Aclr) Qaux = 0; else if (Shiften) Qaux = Qaux2:0, Shiftin; end assign Q = Qaux;endmodule2綜合結果7.3.6 移位寄存器(串入串出單向左移)1使用Verilog進行描述module shift_reg_siso (Shiften, Shiftin, Aclr, Clock, Shiftout); input Shiften; input Shiftin; input Aclr; input

40、Clock; output Shiftout; reg 3:0 Qaux; always (posedge Aclr or posedge Clock) begin if (Aclr) Qaux = 0; else if (Shiften) Qaux = Qaux2:0, Shiftin; end assign Shiftout = Qaux3;endmodule2綜合結果7.4 寄存器傳輸寄存器傳輸(Register Transfer Level,RTL)是數字邏輯電路的一種設計方法,利用寄存器傳輸設計時,必須詳細說明數據在不同寄存器之間處理及傳輸的過程,一般使用中等規(guī)模的功能模塊作為基本單

41、元。7.4.1 基本概念寄存器存儲的數據的運動及完成的處理稱為寄存器傳輸操作(Register Transfer Operation),又稱為微操作(microoperation)。對于n位寄存器,下標從0到n-1。小端(Little endian):0位在最右端,n-1位在最左端。大端(Big endian):0位在最左端,n-1位在最右端。最常用的寄存器圖示方法如圖7-46所示:R7 6 5 4 3 2 1 0R2150(a)寄存器R(c)編號16位寄存器(b)8位寄存器的單獨位PC(H)150(d)16位寄存器(分2部分)PC(H)8 7常用寄存器以“”表示從一個寄存器到另一個寄存器的數

42、據傳輸。例如R2R1,表示將寄存器R1的內容傳至寄存器R2,其中,R2表示目標寄存器,R1表示源寄存器。所有的寄存器傳輸操作都可以用相應的硬件來實現。如K1:R2R1,表示若K1=1,則R2R1,對應的電路和波形如圖7-47所示.寄存器傳輸操作7.4.2 微操作種類有以下4種微操作:1、傳輸:從一個寄存器到另一個寄存器傳輸數據;2、算術運算:寄存器存儲數據的算術運算;3、邏輯運算:寄存器存儲數據的位運算;4、移位:寄存器存儲數據的移位。7.4.3 單寄存器微操作所有微操作的結果均只涉及一個目標寄存器,且該寄存器又作為源寄存器使用。由于寄存器與微操作之間的緊密耦合,實現微操作的組合邏輯部分成為寄

43、存器的一部分,稱為專用邏輯(dedicated logic),而使用多目標寄存器的情況則稱為共享邏輯(shared logic)??紤]一個寄存器在不同時間從不同的數據源接收數據的情況,K1:R0R1,K1#K2:R0R2表示根據K1、K2的值選擇將寄存器R1或R2的內容傳至目標寄存器R0,可以利用數據選擇器實現,其結構如圖7-48所示:結構圖如圖所示為該電路的邏輯細節(jié):邏輯細節(jié)7.5 計數器7.5.1 計數器(四位二進制加法)1使用Verilog進行描述module cnt4_1(qout,reset,clk);output3:0 qout;input clk,reset;reg3:0 qout;always (posedge clk)beginif (reset) qout=0; else qout=qout+1; endendmodule2綜合結果3測試平臺設計timescale 1ns/1nsmodule coun4_testbench;reg clk,reset;wire3:0 out;parameter DELY=20;cnt4_1 test_count(out,reset,clk);always #(DELY/2) clk = clk;initialbeginclk =0; reset=0;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論