第二章(邏輯電路)_第1頁(yè)
第二章(邏輯電路)_第2頁(yè)
第二章(邏輯電路)_第3頁(yè)
第二章(邏輯電路)_第4頁(yè)
第二章(邏輯電路)_第5頁(yè)
已閱讀5頁(yè),還剩93頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第2章邏輯電路及verilog HDL簡(jiǎn)介主要內(nèi)容 基本邏輯門(mén)和常用邏輯門(mén) 用Verilog HDL實(shí)現(xiàn)基本的邏輯操作 4 種風(fēng)格的Verilog HDL描述邏輯門(mén)級(jí)的Verilog HDL數(shù)據(jù)流風(fēng)格的Verilog HDL功能描述風(fēng)格的Verilog HDL 常用的組合邏輯電路及其設(shè)計(jì)多路選擇器設(shè)計(jì)譯碼器設(shè)計(jì) 32位移位器設(shè)計(jì) 時(shí)序電路的設(shè)計(jì)方法D鎖存器D觸發(fā)器狀態(tài)轉(zhuǎn)移圖及時(shí)序電路設(shè)計(jì)2.1 基本邏輯門(mén)和常用邏輯門(mén)數(shù)字邏輯電路是實(shí)現(xiàn)數(shù)字計(jì)算機(jī)的物質(zhì)基數(shù)字邏輯電路是實(shí)現(xiàn)數(shù)字計(jì)算機(jī)的物質(zhì)基礎(chǔ)。礎(chǔ)。若將其做在一塊集成電路上(被完整封裝,看不到內(nèi)部結(jié)構(gòu)),稱(chēng)為數(shù)字集成電路,它是現(xiàn)代計(jì)算機(jī)的基本元件。

2、數(shù)字集成電路的基本元件是邏輯門(mén),邏輯門(mén)由晶體管組成。這里只簡(jiǎn)介MOS晶體管(金屬-氧化物-半導(dǎo)體場(chǎng)效應(yīng)管)組成的邏輯門(mén)。MOS晶體管 按物質(zhì)是否導(dǎo)電,可以分為:導(dǎo)體(雙向?qū)щ姡┙^緣體(不導(dǎo)電)半導(dǎo)體 同時(shí)具備導(dǎo)體和絕緣體兩種特性,其特性取決于在物體兩端所施加電壓的方向,當(dāng)在一個(gè)方向上有正的電壓存在時(shí),可以允許電流流過(guò)(導(dǎo)體特性);而在相反的方向上施加一定大小的電壓時(shí),該物體中不會(huì)產(chǎn)生電流(絕緣體特性),即該物體只能在單個(gè)方向上導(dǎo)電。 半導(dǎo)體分為二極管MOS晶體管(三極管中的一種) N溝道MOS晶體管 P溝道MOS晶體管 N-MOS晶體管的符號(hào)如下源極S漏極D柵極G源極S(VS)漏極D(VD)柵

3、極G(VG) 在數(shù)字電路中,MOS管工作于開(kāi)關(guān)狀態(tài),相當(dāng)于一個(gè)可控開(kāi)關(guān)。MOS管狀態(tài)開(kāi)關(guān)狀態(tài)數(shù)字電路狀態(tài)導(dǎo)通達(dá)到飽和接通0(L低電平)截止斷開(kāi)1(H高電平) 穩(wěn)定狀態(tài)下不允許工作于導(dǎo)通而又不飽和的狀態(tài)(電壓不允許處在不高、不低的模糊狀態(tài))。 高電平或低電平的具體數(shù)值與電路結(jié)構(gòu)、材料等有關(guān),下表為MOS數(shù)字電路的高低電平的典型值。 在數(shù)字電路中,MOS管相當(dāng)于一個(gè)開(kāi)關(guān),可控信號(hào)是VG。如NMOS管,當(dāng)VGSVH時(shí)NMOS管導(dǎo)通。電源電壓(V)高電平(H)低電平(L)典型值范圍典型值范圍VD=55=30=20-與與-或?;?。非門(mén)(NOT)非門(mén)的主要功能是對(duì)輸入信號(hào)求反。其布爾表達(dá)式為 f= aVD

4、DRafNMOS非門(mén)VDDafCMOS非門(mén)RKU輸入a a輸出 f f 斷(0)亮(1)合(1)滅(0)非門(mén)真值表xf非門(mén)符號(hào) 目前的集成電路以CMOS電路為主。 CMOS的優(yōu)點(diǎn)功耗小從輸入信號(hào)發(fā)生變化到輸出信號(hào)變化的延遲時(shí)間小,因而速度快。 非門(mén)的波形圖如下。fa不考慮延遲fa實(shí)際電路延遲時(shí)間td二輸入二輸入與門(mén)與或門(mén) 與門(mén)與或門(mén)真值表RK1UK2RK1UK2輸入輸出K1K2燈斷(0) 斷(0) 滅(0)斷(0) 合(1) 滅(0)合(1) 斷(0) 滅(0)合(1) 合(1) 亮(1)與門(mén):燈亮=K1K2輸入輸出K1K2燈斷(0) 斷(0) 滅(0)斷(0) 合(1) 亮(1)合(1) 斷

5、(0) 亮(1)合(1) 合(1) 亮(1)或門(mén):燈亮=K1+K2二輸入二輸入與非門(mén)和或非門(mén) 與非門(mén)和或非門(mén)真值表輸入輸出K1K2燈斷(0) 斷(0) 亮(1)斷(0) 合(1) 滅(0)合(1) 斷(0) 滅(0)合(1) 合(1) 滅(0)輸入輸出K1K2燈斷(0) 斷(0) 亮(1)斷(0) 合(1) 亮(1)合(1) 斷(0) 亮(1)合(1) 合(1) 滅(0)RK1UK2RK1UK2或非門(mén):燈亮=K1+K2與非門(mén):燈亮=K1K2二輸入二輸入與非門(mén)電路圖VDDRbNMOS與非門(mén)affVDDbCMOS與非門(mén)aCMOS或非門(mén)fVDDba邏輯功能的表示和等效電路邏輯功能表示: 布爾代數(shù)式、

6、卡諾圖、真值表、線路邏輯圖下圖是非門(mén)、二輸入二輸入與門(mén)、二輸入二輸入或門(mén)等的圖形符號(hào)。 非門(mén)非門(mén) 與門(mén)與門(mén) 與非門(mén)與非門(mén) 或門(mén)或門(mén) 或非門(mén)或非門(mén)AYBA B Y 0 0 0 0 1 0 1 0 0 1 1 1A B Y 0 0 1 0 1 1 1 0 1 1 1 0Y=AB Y= AB Y=A+B Y=A+B 真值表真值表YYYAAABBBAY真值表和邏輯表達(dá)式的對(duì)應(yīng)關(guān)系與門(mén)與門(mén)與非門(mén)與非門(mén)ABA B Y 0 0 0 0 1 0 1 0 0 1 1 1A B Y 0 0 1 0 1 1 1 0 1 1 1 0Y = A B Y = A B ABY 用用與邏輯與邏輯寫(xiě)出真值表中寫(xiě)出真值表中每一橫

7、行中輸出為每一橫行中輸出為 1 1 的的邏輯表達(dá)式;邏輯表達(dá)式; 用用或邏輯或邏輯匯總真值表中匯總真值表中全部輸出為全部輸出為 1 1 的邏輯。的邏輯。 不必理睬那些輸出為不必理睬那些輸出為 0 0的各行的內(nèi)容,它們已的各行的內(nèi)容,它們已經(jīng)隱含在通過(guò)經(jīng)隱含在通過(guò) 1 1、2 2 兩兩步寫(xiě)出的表達(dá)式中。步寫(xiě)出的表達(dá)式中。Y= A * B + A * B + A * BY真值表真值表二輸入異或門(mén)和同或門(mén) 二輸入異或門(mén)是指輸入的二個(gè)變量相異時(shí)輸出為1,否則輸出為0。 二輸入同或門(mén)是指輸入的二個(gè)變量相同時(shí)輸出為1,否則輸出為0。 可以看出兩者的關(guān)系為非的關(guān)系。 真值表如下:ABY00001110111

8、0ABY001010100111異或門(mén)真值表異或門(mén)真值表同或門(mén)真值表同或門(mén)真值表異或門(mén)表達(dá)式異或門(mén)表達(dá)式 Y=AB+AB=A B同或門(mén)表達(dá)式同或門(mén)表達(dá)式 Y=AB+AB=A B 緩沖器緩沖器只能簡(jiǎn)單地把輸入信號(hào)傳送到輸出器。主要用于當(dāng)某個(gè)信號(hào)所驅(qū)動(dòng)的負(fù)載特別大時(shí)能給出較大的電流,或?yàn)榱吮苊庋舆t時(shí)間過(guò)長(zhǎng)。 三態(tài)門(mén)電路三態(tài)門(mén)電路圖和真值表如下:f電路圖SaSMOS管af備注1導(dǎo)通00f=a1110截止X(任意)zf=z(高阻態(tài)) 三態(tài)門(mén)電路是一種構(gòu)建計(jì)算機(jī)總線接口的理想電路,具有信號(hào)驅(qū)動(dòng)能力強(qiáng)、傳輸速度快的特性,又有集電極開(kāi)路電路的輸出可以“線與”的優(yōu)點(diǎn)。 用于實(shí)現(xiàn)從多個(gè)數(shù)據(jù)輸入中選擇其一的場(chǎng)合。

9、A B C/G1 /G2 /G3總線總線例如,當(dāng)控制信號(hào)例如,當(dāng)控制信號(hào) /G1/G1為低電平,為低電平, /G2 /G2 和和 /G3/G3為高電平時(shí),三態(tài)門(mén)的為高電平時(shí),三態(tài)門(mén)的輸入輸入 A A 被送到總線上,被送到總線上,另外兩個(gè)三態(tài)門(mén)的輸出另外兩個(gè)三態(tài)門(mén)的輸出處于高阻態(tài)。處于高阻態(tài)。 2.2 t Verilog HDL實(shí)現(xiàn)基本的邏輯 下面先用C語(yǔ)言程序舉例說(shuō)明二個(gè)邏輯變量進(jìn)行邏輯與操作,并將它們的真值表打印出來(lái),要求使用函數(shù)來(lái)完成。A B Z=and(a,b) 0 0 0 0 1 0 1 0 0 1 1 1邏輯與真值表邏輯與真值表Using C function code/logic

10、and functionbool and1(bool a,bool b) return a & b;/test fileincludeint main() int i,x,y;for(i=0;i4;i+) x=i%2; y=i/2;printf(“%d & %d=%dn”,x,y,and1(x,y);return 0;Verilog HDL code/source codemodule and1(x,y,z); input x,y; output z; assign z=x&y;endmodule注釋注釋模塊名模塊名模塊端口定義模塊端口定義分號(hào)結(jié)束分號(hào)結(jié)束端口功端口功能描述能描述功能定義功能定

11、義 其他的邏輯運(yùn)算類(lèi)推 模塊代碼寫(xiě)好后,首先看看它是否符合Verilog HDL的語(yǔ)法規(guī)則編譯。 為了確認(rèn)代碼是否能完成所期望的任務(wù),還要對(duì)它進(jìn)行檢查。檢查的方法是給輸入信號(hào)指定所有可能的輸入組合,讓模塊的主體“計(jì)算”出相應(yīng)的輸出。然后抒計(jì)算出的輸出與所期待的輸出進(jìn)行比較,檢查它們是否正確。計(jì)算代碼輸出的任務(wù)由Verilog HDL“仿真器” 完成。 為此需要編寫(xiě)測(cè)試模塊,測(cè)試模塊大致由三部分組成。調(diào)用被測(cè)試的模塊用各種輸入組合來(lái)測(cè)試結(jié)果指定輸出文件名(Quartus II不需要)Testbench code/testbench codemodule and1_tb; reg 1:0 i; r

12、eg x,y; wire z; initial for(i=0;i=3;i=i+1) begin #10 x=i%2;y=i/2; end and1 m(.x(x),.y(y),.z(z); endmodule無(wú)輸入輸出無(wú)輸入輸出數(shù)據(jù)位數(shù)數(shù)據(jù)位數(shù)2位位寄存器類(lèi)型寄存器類(lèi)型初始化變量初始化變量線網(wǎng)類(lèi)型線網(wǎng)類(lèi)型10延時(shí)單延時(shí)單位后輸出位后輸出生成實(shí)例并代生成實(shí)例并代入?yún)?shù)運(yùn)行入?yún)?shù)運(yùn)行 2.3 邏輯門(mén)的CMOS晶體管實(shí)現(xiàn)以及晶體管的Verilog HDL 略2.4 四種風(fēng)格的Verilog HDL描述 2.4.1 晶體管開(kāi)關(guān)級(jí)的Verilog HDL 下面以CMOS反向器(非門(mén))的Verilog

13、HDL代碼為例進(jìn)行說(shuō)明。module cmosnot(f,a); input a; output f; supply1 vdd; supply0 gnd; pmos p1(f,vdd,a); nmos n1(f,gnd,a);endmodule測(cè)試代碼include cmosnot.vmodule cmosnot_tb; reg a,b; wire f; cmosnot not_1(f,a); initial begin a=1; #1 a=0; #1 a=1; #1 $finish; end initial begin $dumpfile(test.vcd); $dumpvars; $mon

14、itor(%gt a=%b;f=%b,$time,a,f); /disply end endmodule2.4.2 邏輯門(mén)級(jí)的Verilog HDL 下面給出兩種邏輯門(mén)級(jí)的二選一多路器電路。使用三態(tài)門(mén)使用普通的與非門(mén)bufif0bufif1a0a1sya0a1ssna0_sna1_sy多路選擇器(三態(tài)門(mén))電路多路選擇器(與或非門(mén))電路模塊代碼/三態(tài)門(mén)實(shí)現(xiàn)module mux2X1_3s(a0,a1,s,y) input s,a0,a1; output y; bufif0 b0(y7,a0,s); bufif1 b0(y7,a1,s);endmodule/與或非門(mén)實(shí)現(xiàn)module mux2x1_

15、gate(a0,a1,s,y) input s,a0,a1; output y; not i0(sn,s); and i1(a0_sn,a0,s); and i2(a1_s,a1,s); and i3(y,a0_sn,a1_s);endmodule 2.4.3 數(shù)據(jù)流風(fēng)格的Verilog HDL 數(shù)據(jù)流風(fēng)格的Verilog HDL不指定任何特定的器件。 主要特征是使用assign語(yǔ)句對(duì)變量賦值。 賦值語(yǔ)句的特點(diǎn)是等式右邊的輸入變量一旦發(fā)生變化,立即反映到等式左邊的輸出變量。 使用assign賦值時(shí),對(duì)一個(gè)變量只能賦值一次。模塊代碼/邏輯表達(dá)式風(fēng)格module mux2X1_dataflow(a

16、0,a1,s,y); input s,a0,a1; output y; assign y=s&a0|s&a1;endmodule/三目運(yùn)算符?:形式module mux2x1_gate(a0,a1,s,y); input s,a0,a1; output y; assign y=s?a0:a1;endmodule2.4.4 功能描述風(fēng)格的Verilog HDL 功能描述是Verilog HDL中層次最高的描述方法。 特點(diǎn):靠“算法”設(shè)計(jì)電路的操作。 下面給出二選一多路器的部分版本。Always_if_elsemodule mux2x1_if_else(a0,a1,s,y) input s,a0,

17、a1; output y; reg y;/ycannot be a net always (s or a0 or a1) begin if(s) begin y=a1; end else begin y=a0; endendendmoduleAlways_casemodule mux2x1_case(a0,a1,s,y) input s,a0,a1; output y; reg y;/ycannot be a net always (s or a0 or a1) begin case(s) 1b0:y=a0; 1b1:y=a1; endcaseendendmodulefunctionmodul

18、e mux2x1_function(a0,a1,s,y) input s,a0,a1; output y; assign y=sel(a0,a1,s); function sel; input a,b,c;/note the order case(c) 1b0:sel=a; 1b1:sel=b; endcase endfunctionendmoduleif(c) sel=b; else sel=a;邏輯電路的分類(lèi)按是否有時(shí)序,分為: 組合邏輯電路的輸出狀態(tài)只取決于當(dāng)前輸入信號(hào)的狀態(tài),與過(guò)去的輸入信號(hào)的狀態(tài)無(wú)關(guān)。例如與門(mén)、加法器,譯碼器,編碼器,數(shù)據(jù)選擇器等電路。 時(shí)序邏輯電路的輸出狀態(tài)不僅和當(dāng)

19、前的輸入信號(hào)的狀態(tài)有關(guān),還與以前的輸入信號(hào)的狀態(tài)有關(guān),即時(shí)序邏輯電路有記憶功能。最基本的記憶電路是觸發(fā)器,包括電平觸發(fā)器和邊沿觸發(fā)器,由基本觸發(fā)器可以構(gòu)成寄存器,計(jì)數(shù)器等部件。從器件的集成度和功能區(qū)分:低集成度的、只提供專(zhuān)用功能的器件。 加法器和算術(shù)邏輯單元 譯碼器和編碼器 數(shù)據(jù)選擇器 觸發(fā)器和寄存器、計(jì)數(shù)器高集成度的、現(xiàn)場(chǎng)可編程的通用功能電路(陣列邏輯電路) 存儲(chǔ)器芯片 RAM 和 ROM 通用陣列邏輯 GAL 復(fù)雜的可編程邏輯器件 CPLD: MACH器件 現(xiàn)場(chǎng)可編程門(mén)陣列 FPGA 器件2.5 常用的組合電路及其設(shè)計(jì) 常見(jiàn)的組合邏輯電路有加法器、譯碼器、數(shù)據(jù)選擇器等。2.5.1 半加器

20、不考慮進(jìn)位輸入時(shí),兩數(shù)碼Xn,Yn相加稱(chēng)為半加。功能表如下。XnYnHn000011101110半加和Hn的表達(dá)式如下:Hn=XnYn+XnYn=XnYn 半加器可用反相門(mén)及與或非門(mén)來(lái)實(shí)現(xiàn),也可用異或門(mén)來(lái)實(shí)現(xiàn)。用與、或、非門(mén)構(gòu)成的半加器用異或門(mén)構(gòu)成的半加器2.5.2 全加器 由Xn,Yn及低位來(lái)的進(jìn)位輸入Cn-1相加的器件稱(chēng)為全加器,下表是其真值表。由表可得全加和Fn和進(jìn)位輸出Cn的表達(dá)式:F Fn n=X=Xn nY Yn nC Cn-1n-1+X+Xn nY Yn nC Cn-1n-1+X+Xn nY Yn nC Cn-1n-1 +X+Xn nY Yn nC Cn-1n-1C Cn n=X

21、=Xn nY Yn nC Cn-1n-1+X+Xn nY Yn nC Cn-1n-1+X+Xn nY Yn nC Cn-1n-1 +X+Xn nY Yn nC Cn-1n-1全加器邏輯圖全加器邏輯圖Cn FnFAXn Yn Cn-1全加器符號(hào)全加器符號(hào)2.5. 3 加法器 串行加法器從低位向高位,每一次只完成一位二進(jìn)制數(shù)的加法運(yùn)算,完成兩個(gè)n位數(shù)相加,需要進(jìn)行n+1步加法運(yùn)算。完成串行加法的加法器稱(chēng)為串行加法器。 串行加法器是由一位全加器、一個(gè)進(jìn)位觸發(fā)器及二個(gè)帶移位的寄存器構(gòu)成。 優(yōu)點(diǎn)是結(jié)構(gòu)簡(jiǎn)單,缺點(diǎn)是速度太慢。 串行進(jìn)位的并行加法器并行加法是指全字長(zhǎng)的兩個(gè)相加數(shù)同時(shí)相加,一步就能完成運(yùn)算的加

22、法。完成并行加法的加法器稱(chēng)為并行加法器。兩個(gè)n位數(shù)相加,如果考慮符號(hào),并行加法器由n+1個(gè)全加器構(gòu)成。特點(diǎn)是把n+1個(gè)全加器的進(jìn)位輸入與進(jìn)位輸出首尾連接起來(lái)。缺點(diǎn)是速度受進(jìn)位的影響,進(jìn)位數(shù)越多,速度越慢。Cn FnFAXn Yn Cn-1Cn FnFAXn Yn Cn-1Cn FnFAXn Yn Cn-1Cn FnFAXn Yn Cn-1F0F1F2F3C-1C0C1C2C3X0X1X2X3Y0Y1Y2Y3串行進(jìn)位的并行加法器Q3 Q2 Q1 Q0X寄存器Q3 Q2 Q1 Q0Y寄存器4位串行進(jìn)位的并行加法器的邏輯電路圖Adder code/adder.vmodule adder(cout,s

23、um,a,b,cin); parameter bit_width=4; outputbit_width-1:0 sum; output cout; input cin; input bit_width-1:0 a,b; assign cout,sum=a+b+cin;endmodule /assign語(yǔ)句為總是執(zhí)行后面語(yǔ)句,與時(shí)間無(wú)關(guān)。/ 把括號(hào)內(nèi)作為一個(gè)整體看待。Adder testbench codemodule adder_tb; parameter bit_width=4; wire bit_width-1:0 sum; wire cout; reg cin; reg bit_widt

24、h-1:0 a,b; integer i,k; initial begin k=1bit_width;cin=0; for(i=0;i=k*k;i=i+1) begin #100 a=i/k;b=i%k; end end adder m(.cout(cout),.sum(sum),.a(a),.b(b),.cin(cin);endmodule2.5.4 譯碼器 譯碼器有n個(gè)輸入變量,有=2n個(gè)輸出。當(dāng)輸入為某一組合時(shí),對(duì)應(yīng)的有且僅有一個(gè)輸出為“1”,其余輸出均為“0”。 譯碼器的用途是把輸入代碼翻譯成相應(yīng)的控制電位,以實(shí)現(xiàn)代碼所要求的操作。二輸入四輸出譯碼器的邏輯圖真值表二輸入四輸出譯碼器二輸

25、入四輸出譯碼器 譯碼器中常設(shè)置“使能”控制端,當(dāng)該端為“1”時(shí),譯碼器功能被禁止,此時(shí)所有輸出均為“0”。 使能端的主要功能是用來(lái)擴(kuò)充輸入變量數(shù)(級(jí)連)。輸入輸入輸出輸出E#ABY0Y1Y2Y300010000010100010001001100011XX0000encoder codemodule encoder(en,in,yout); parameter bit_width=4; input en; output (1bit_width)-1:0 yout; /1-valid 0-invalid inputbit_width-1:0 in; reg (1bit_width)-1:0 yo

26、ut; initial yout=0; always (en or in) if(en=1) yout=0; else yout=1in; /技巧endmoduleEncoder testbench codetimescale 1ns/1nsmodule encoder_tp; parameter bit_width=4; reg en; wire (1bit_width)-1:0 yout; /1-valid 0-invalid reg bit_width-1:0 in; integer i,k; encoder encode(.en(en),.in(in),.yout(yout); ini

27、tial begin en=1;k=1bit_width; #100 en=0; for(i=0;ik;i=i+1) #100 in=i; #100 en=1; #2000 $stop; end endmodule使能端的應(yīng)用舉例 用1個(gè)3位二進(jìn)制計(jì)數(shù)器(無(wú)使能端)、2個(gè)2-4譯碼器來(lái)控制八個(gè)發(fā)光二極管依次從右到左地連續(xù)發(fā)光,即一個(gè)燈滅,另一個(gè)燈才亮。 解: 電路圖如下 2-4譯碼器 /E1 2-4譯碼器 /E0 Q2 Q1 Q03位二進(jìn)制計(jì)數(shù)器清零R時(shí)鐘CP啟動(dòng)電路與輸入輸出Q2/E1 /E00101012.5.5 數(shù)據(jù)(多路)選擇器 數(shù)據(jù)選擇器又稱(chēng)多路開(kāi)關(guān),它能在選擇信號(hào)的作用下,從多個(gè)輸

28、入通道中選擇某一個(gè)通道的數(shù)據(jù)作為輸出。 下圖是“雙四通道選一”數(shù)據(jù)選擇器的邏輯圖和真值表。其中S0,S1是通道選擇信號(hào),E是使能端,D0-D3是輸入數(shù)據(jù)。 使能 E# 的作用和譯碼器中相似,可用它來(lái)擴(kuò)展選擇器的通道數(shù)?!半p四通道選一”數(shù)據(jù)選擇器的邏輯圖和功能表真值表輸入輸入輸出輸出S1S0D3D2D1D0E#YXXXXXX1000XXXD00D001XXD1X0D110XD2XX0D211D3XXX0D3Data selector code/data_selector.v/data_selector.vmodule data_selector(s,en,data0,data1,data2,da

29、ta3,yout);module data_selector(s,en,data0,data1,data2,data3,yout); parameter bit_width=4; parameter bit_width=4; outputbit_width-1:0 yout; outputbit_width-1:0 yout; inputbit_width-1:0 data0,data1,data2,data3; inputbit_width-1:0 data0,data1,data2,data3; input 1:0 s; input en; input 1:0 s; input en; r

30、eg bit_width-1:0 yout; reg bit_width-1:0 yout; always(s or en or data0 or data1 or data2 or data3) always(s or en or data0 or data1 or data2 or data3) begin begin if(en=1) yout=4bz; if(en=1) yout=4bz; else case (s) else case (s) 2b00:yout=data0; 2b00:yout=data0; 2b01:yout=data1; 2b01:yout=data1; 2b1

31、0:yout=data2; 2b10:yout=data2; 2b11:yout=data3; 2b11:yout=data3; endcase endcase end end endmoduleendmodule高阻態(tài)高阻態(tài)Data selector testbench codetimescale 1ns/1nstimescale 1ns/1nsmodule data_selector_tb;module data_selector_tb; parameter bit_width=4; parameter bit_width=4; wire bit_width-1:0 yout; wire

32、bit_width-1:0 yout; reg bit_width-1:0 data0,data1,data2,data3; reg bit_width-1:0 data0,data1,data2,data3; reg en; reg 1:0 s; integer i; reg en; reg 1:0 s; integer i;initial begininitial begin en=1;data0=4;data1=5;data2=6;data3=7; en=1;data0=4;data1=5;data2=6;data3=7; #100 en=0; #100 en=0; for(i=0;i=

33、4;i=i+1) begin #100 s=i; end for(i=0;i=4;i=i+1) begin #100 s=i; end end end data_selector data_selector m(.s(s),.en(en),.data0(data0),.data1(data1),.data2(data2),.dm(.s(s),.en(en),.data0(data0),.data1(data1),.data2(data2),.data3(data3),.yout(yout);ata3(data3),.yout(yout);endmodule endmodule P40 多路選擇

34、器代碼module mux4x32(data0,data1,data2,data3,s,yout);module mux4x32(data0,data1,data2,data3,s,yout); parameter bit_width=32; parameter bit_width=32; outputbit_width-1:0 yout; outputbit_width-1:0 yout; inputbit_width-1:0 data0,data1,data2,data3; inputbit_width-1:0 data0,data1,data2,data3; input 1:0 s; i

35、nput 1:0 s; reg bit_width-1:0 yout; reg bit_width-1:0 yout; always(s or data0 or data1 or data2 or data3) always(s or data0 or data1 or data2 or data3) begin begin case (s) case (s) 2b00:yout=data0; 2b00:yout=data0; 2b01:yout=data1; 2b01:yout=data1; 2b10:yout=data2; 2b10:yout=data2; 2b11:yout=data3;

36、 2b11:yout=data3; endcase endcase end endendmoduleendmoduleTest Code include mux4x32.vinclude mux4x32.vmodule mux4x32_tb;module mux4x32_tb; parameter bit_width=32; parameter bit_width=32; reg 1:0 i; reg 1:0 i; reg bit_width-1:0 x,y,m,n; reg bit_width-1:0 x,y,m,n; wire bit_width-1:0 z; wire bit_width

37、-1:0 z; mux4x32 mux4x32 mux4(.data0(x),.data1(y),.data2(m),.data3(n),.s(i),.yout(z); mux4(.data0(x),.data1(y),.data2(m),.data3(n),.s(i),.yout(z); initial begin initial begin x=32h2345; x=32h2345; y=32h5678; y=32h5678; m=x+1; m=x+1; n=y+32h10; n=y+32h10; for(i=0;i=3;i=i+1) begin #1 ; end for(i=0;i1;

38、if(direc=0) x=x1; else else x=x1; x=x1; end end out=x; out=x; end endendmoduleendmoduleLogic shift testbech codetimescale 1ns/1nstimescale 1ns/1nsmodule shift_lr_tb;module shift_lr_tb; reg 7:0 in; reg 7:0 in; wire 7:0 out1; wire 7:0 out1; reg direction,clk,en; reg direction,clk,en; initial begin ini

39、tial begin en=0; en=0; #1 clk=0;direction=1;in=8b0001_0000; #1 clk=0;direction=1;in=8b0001_0000; #1 en=1; #1 en=1; #19 en=0; #19 en=0; end end always #100 clk=clk; always #100 clk=clk; shift_lr shift_lr m(.in(in),.out(out1),.clk(clk),.en(en),.direction(direction);m(.in(in),.out(out1),.clk(clk),.en(e

40、n),.direction(direction); endmoduleendmoduleP46移位器代碼shift.vmodule shift(d,sa,right,arith,sh);module shift(d,sa,right,arith,sh); input 31:0 d; input 31:0 d; input 4:0 sa; input 4:0 sa; input right,arith; input right,arith; output 31:0 sh; output 31:0 sh; reg 31:0 sh; reg 31:0 sh; always always* * beg

41、in begin if(!right) begin sh=dsa; end if(!right) begin sh=dsa; / else if(!arith) sh=dsa; /shift right logicshift right logic else else sh=$signed(d) sh=$signed(d)sa;/sa;/shift right arithmeticshift right arithmetic end end endmoduleendmodule2.6.6 計(jì)數(shù)器 計(jì)數(shù)器按時(shí)鐘作用方式,分為同步和異步兩大類(lèi),其中同步計(jì)數(shù)器線路略復(fù)雜但性能更好,用于脈沖分頻和需要

42、計(jì)數(shù)的場(chǎng)合,例如二進(jìn)制或十進(jìn)制計(jì)數(shù)。以二進(jìn)制計(jì)數(shù)器為例說(shuō)明。 Q3 Q2 Q1 Q0Q3Q2Q1Q000000001000100100010001100110100010001010101011001100111011110001000100110011010101010111011110011001101110111101110111111110000 注意:Q即為輸入端D。 四位同步二進(jìn)制計(jì)數(shù)器圖如下。 根據(jù)真值表寫(xiě)出表達(dá)式,并化簡(jiǎn),得出以下邏輯表達(dá)式:Q0=Q0Q1=Q1Q0+Q1Q0Q2= Q2Q1+Q2Q0+Q2Q1Q0Q3= Q3Q1+Q3Q2+Q3Q0+Q3Q2Q1Q0Q/Q/S

43、CPD/RQ/Q/SCPD/RQ/Q/SCPD/RQ/Q/SCPD/RCPQ0Q1Q2Q3或門(mén)或門(mén)或門(mén)Counter codemodule counter(clk,rst,c,out); parameter bit_width=4; input rst,clk; output c;/carry outputbit_width-1:0 out; reg c; regbit_width-1:0 out; integer i; initial i=1bit_width;左移運(yùn)算左移運(yùn)算 always (posedge clk or negedge rst)always (posedge clk or

44、 negedge rst) begin begin if(!rst) begin outbit_width-1:0=0; if(!rst) begin outbit_width-1:0=0; c=0; endc=0; end else begin else begin if(outbit_width-1:0=i-1) if(outbit_width-1:0=i-1) begin c=1;outbit_width-1:0=0;end begin c=1;outbit_width-1:0=0;end else else begin begin outbit_width-1:0=outbit_wid

45、th-1:0+1;c=0;outbit_width-1:0=outbit_width-1:0+1;c=0; end end end end end end endmoduleendmoduleCounter testbench codetimescale 1ns/1nstimescale 1ns/1nsmodule counter_tp;module counter_tp; parameter bit_width=4; parameter bit_width=4; reg clk,rst; wire cout; reg clk,rst; wire cout; wirebit_width-1:0

46、 out; wirebit_width-1:0 out; counter cnt16(.clk(clk),.rst(rst),.c(cout),.out(out); counter cnt16(.clk(clk),.rst(rst),.c(cout),.out(out); always #20 clk=clk; always #20 clk=clk; initial initial begin begin clk=0; rst=0; clk=0; rst=0; #10 rst=1; #10 rst=1; #30 rst=0; #30 rst=0; #40 rst=1; #40 rst=1; #

47、2000 $stop; #2000 $stop; end endendmoduleendmodule2.6.7 狀態(tài)圖及時(shí)序電路設(shè)計(jì) 下面設(shè)計(jì)一個(gè)平常的鐘。需求分析需求分析 為了說(shuō)明其設(shè)計(jì)原理,在此做一些簡(jiǎn)化。秒鐘只有6個(gè)狀態(tài),即計(jì)到6向分針進(jìn)位,同時(shí)置為0。分針只有6個(gè)狀態(tài),即計(jì)到6向時(shí)針進(jìn)位,同時(shí)置為0。時(shí)針只有12個(gè)狀態(tài),即計(jì)到12時(shí)時(shí)針置0。能夠清零。帶使能端。能夠顯示時(shí)、分、秒,且動(dòng)態(tài)的變化。 下面畫(huà)出基本原理圖如下。Q2 Q1 Q0六進(jìn)制計(jì)數(shù)器0carry clkenable /rstQ2 Q1 Q0六進(jìn)制計(jì)數(shù)器1carry clkenable /rstQ2 Q1 Q0六進(jìn)制計(jì)數(shù)器

48、2carry clkenable /rstQ2 Q1 Q0六進(jìn)制計(jì)數(shù)器3carry clkenable /rst顯示部分及電路顯示部分及電路顯示部分及電路12時(shí)鐘清零使能2個(gè)3位二進(jìn)制轉(zhuǎn)換成2個(gè)4位二進(jìn)制電路00顯示部分及電路時(shí)針顯示分針顯示秒針顯示 從圖中可以看出,需要設(shè)計(jì):六進(jìn)制計(jì)數(shù)器三輸入的顯示部分及其電路四輸入的顯示部分及其電路,并判斷是否等于12 下面先設(shè)計(jì)六進(jìn)制計(jì)數(shù)器。 這里采用狀態(tài)轉(zhuǎn)移圖方法設(shè)計(jì)六進(jìn)制計(jì)數(shù)器。 首先給每個(gè)狀態(tài)起一個(gè)名字,分別用S0S5表示計(jì)數(shù)器的值05。則狀態(tài)轉(zhuǎn)移圖如下。 其中 u 為輸入。當(dāng)u= 時(shí),狀態(tài)發(fā)生變化。書(shū)上是當(dāng)u=1/0時(shí),狀態(tài)變化。u=u= u=

49、u= u= u= carry 如果將u換成脈沖clk,且根據(jù)原理圖和狀態(tài)轉(zhuǎn)移圖,可以編寫(xiě)六進(jìn)制計(jì)數(shù)器的代碼如下:module counter6(enable,clk,q,rst,carry);input enable,clk,rst;output 2:0 q;output carry;reg 2:0 q;reg carry;always (posedge clk or negedge rst) begin if(!rst) begin q=3b000;carry=0; end else if (enable) begin if(q=5) begin carry=!carry;q=3b000;end else begin q=q+3b001;end endendendmodule 顯示部分采用七段數(shù)碼管,它的顯示構(gòu)成如下圖所示。agdbcfe 設(shè)數(shù)碼管輸入為低電平時(shí)亮,為高電平時(shí)不亮,則顯示數(shù)字09的gfedcba編碼如表所示。輸出輸入顯示數(shù)字gfe dcba0100 00001111 10012010 01003011 000040

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論