版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第2章邏輯電路及verilogHDL簡介主要內(nèi)容基本邏輯門和常用邏輯門用VerilogHDL實現(xiàn)基本的邏輯操作4種風格的VerilogHDL描述邏輯門級的VerilogHDL數(shù)據(jù)流風格的VerilogHDL功能描述風格的VerilogHDL常用的組合邏輯電路及其設(shè)計多路選擇器設(shè)計譯碼器設(shè)計32位移位器設(shè)計時序電路的設(shè)計方法D鎖存器D觸發(fā)器狀態(tài)轉(zhuǎn)移圖及時序電路設(shè)計2.1基本邏輯門和常用邏輯門數(shù)字邏輯電路是實現(xiàn)數(shù)字計算機的物質(zhì)基礎(chǔ)。若將其做在一塊集成電路上(被完整封裝,看不到內(nèi)部結(jié)構(gòu)),稱為數(shù)字集成電路,它是現(xiàn)代計算機的基本元件。數(shù)字集成電路的基本元件是邏輯門,邏輯門由晶體管組成。這里只簡介MOS晶體管(金屬-氧化物-半導(dǎo)體場效應(yīng)管)組成的邏輯門。MOS晶體管按物質(zhì)是否導(dǎo)電,可以分為:導(dǎo)體(雙向?qū)щ姡┙^緣體(不導(dǎo)電)半導(dǎo)體同時具備導(dǎo)體和絕緣體兩種特性,其特性取決于在物體兩端所施加電壓的方向,當在一個方向上有正的電壓存在時,可以允許電流流過(導(dǎo)體特性);而在相反的方向上施加一定大小的電壓時,該物體中不會產(chǎn)生電流(絕緣體特性),即該物體只能在單個方向上導(dǎo)電。半導(dǎo)體分為二極管MOS晶體管(三極管中的一種)N溝道MOS晶體管P溝道MOS晶體管N--MOS晶體管的符號如下源極S漏極D柵極G源極S(VS)漏極D(VD)柵極G(VG)
在數(shù)字電路中,MOS管工作于開關(guān)狀態(tài),相當于一個可控開關(guān)。MOS管狀態(tài)開關(guān)狀態(tài)數(shù)字電路狀態(tài)導(dǎo)通達到飽和接通0(L—低電平)截止斷開1(H—高電平)穩(wěn)定狀態(tài)下不允許工作于導(dǎo)通而又不飽和的狀態(tài)(電壓不允許處在不高、不低的模糊狀態(tài))。高電平或低電平的具體數(shù)值與電路結(jié)構(gòu)、材料等有關(guān),下表為MOS數(shù)字電路的高低電平的典型值。在數(shù)字電路中,MOS管相當于一個開關(guān),可控信號是VG。如NMOS管,當VGS>VH時NMOS管導(dǎo)通。電源電壓(V)高電平(H)低電平(L)典型值范圍典型值范圍VD=55>=3≈0<=2VD=3.33.3>=2≈0<=1.3S(VS)DG(VG)NMOS管S(D)VDD=5VG(VG)PMOS管基本邏輯門
C語言中,最基本的邏輯運算有:與運算,或運算,非運算。與之對應(yīng)的是最基本的邏輯電路:與門,或門,非門。用它們可以組合出實現(xiàn)任何復(fù)雜的邏輯運算功能的電路。邏輯關(guān)系是可以采用數(shù)學公式來表示和運算的,此數(shù)學工具就是布爾代數(shù),又稱邏輯代數(shù)。
例如,A=B*C+E*F;
A為輸出(運算結(jié)果)。
B、C、E、F為輸入,*、+、~分別代表與、或、非運算符。運算符的優(yōu)先級(從高到低):非->與->或。非門(NOT)非門的主要功能是對輸入信號求反。其布爾表達式為
f=aVDDRafNMOS非門VDDafCMOS非門R¤KU輸入a輸出f
斷(0)亮(1)合(1)滅(0)非門真值表xf非門符號目前的集成電路以CMOS電路為主。CMOS的優(yōu)點功耗小從輸入信號發(fā)生變化到輸出信號變化的延遲時間小,因而速度快。非門的波形圖如下。fa不考慮延遲fa實際電路延遲時間td二輸入與門與或門與門與或門真值表R¤K1UK2R¤K1UK2輸入輸出K1K2燈斷(0)斷(0)滅(0)斷(0)合(1)滅(0)合(1)斷(0)滅(0)合(1)合(1)亮(1)與門:燈亮=K1·K2輸入輸出K1K2燈斷(0)斷(0)滅(0)斷(0)合(1)亮(1)合(1)斷(0)亮(1)合(1)合(1)亮(1)或門:燈亮=K1+K2二輸入與非門和或非門與非門和或非門真值表輸入輸出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)R¤K1UK2R¤K1UK2或非門:燈亮=K1+K2與非門:燈亮=K1·K2二輸入與非門電路圖VDDRbNMOS與非門affVDDbCMOS與非門aCMOS或非門fVDDba邏輯功能的表示和等效電路邏輯功能表示:
布爾代數(shù)式、卡諾圖、真值表、線路邏輯圖下圖是非門、二輸入與門、二輸入或門等的圖形符號。
非門與門與非門
或門或非門AYBABY000010100111ABY001011101110Y=A?B
Y=A?B
Y=A+B
Y=A+B
真值表YYYAAABBBAY真值表和邏輯表達式的對應(yīng)關(guān)系與門與非門ABABY000010100111ABY001011101110Y=A?B
Y=A?B
ABY用與邏輯寫出真值表中每一橫行中輸出為1的邏輯表達式;用或邏輯匯總真值表中全部輸出為1的邏輯。不必理睬那些輸出為0的各行的內(nèi)容,它們已經(jīng)隱含在通過1、2兩步寫出的表達式中。Y=A*B+A*B+A*BY真值表二輸入異或門和同或門二輸入異或門是指輸入的二個變量相異時輸出為1,否則輸出為0。二輸入同或門是指輸入的二個變量相同時輸出為1,否則輸出為0??梢钥闯鰞烧叩年P(guān)系為非的關(guān)系。真值表如下:ABY000011101110ABY001010100111異或門真值表同或門真值表異或門表達式Y(jié)=AB+AB=A⊕B同或門表達式Y(jié)=AB+AB=A⊙B緩沖器緩沖器只能簡單地把輸入信號傳送到輸出器。主要用于當某個信號所驅(qū)動的負載特別大時能給出較大的電流,或為了避免延遲時間過長。三態(tài)門電路三態(tài)門電路圖和真值表如下:f電路圖SaSMOS管af備注1導(dǎo)通00f=a1110截止X(任意)zf=z(高阻態(tài))
三態(tài)門電路是一種構(gòu)建計算機總線接口的理想電路,具有信號驅(qū)動能力強、傳輸速度快的特性,又有集電極開路電路的輸出可以“線與”的優(yōu)點。用于實現(xiàn)從多個數(shù)據(jù)輸入中選擇其一的場合。ABC/G1/G2/G3總線例如,當控制信號/G1為低電平,/G2和/G3為高電平時,三態(tài)門的輸入A被送到總線上,另外兩個三態(tài)門的輸出處于高阻態(tài)。
2.2tVerilogHDL實現(xiàn)基本的邏輯下面先用C語言程序舉例說明二個邏輯變量進行邏輯與操作,并將它們的真值表打印出來,要求使用函數(shù)來完成。ABZ=and(a,b)000010100111邏輯與真值表UsingCfunctioncode//logicandfunctionbooland1(boola,boolb){returna&&b;}//testfileinclude<stdio.h>intmain(){inti,x,y;for(i=0;i<4;i++){x=i%2;y=i/2;printf(“%d&&%d=%d\n”,x,y,and1(x,y));}return0;}VerilogHDLcode//sourcecodemoduleand1(x,y,z);inputx,y;outputz;assignz=x&&y;endmodule注釋模塊名模塊端口定義分號結(jié)束端口功能描述功能定義
其他的邏輯運算類推模塊代碼寫好后,首先看看它是否符合VerilogHDL的語法規(guī)則--編譯。為了確認代碼是否能完成所期望的任務(wù),還要對它進行檢查。檢查的方法是給輸入信號指定所有可能的輸入組合,讓模塊的主體“計算”出相應(yīng)的輸出。然后抒計算出的輸出與所期待的輸出進行比較,檢查它們是否正確。計算代碼輸出的任務(wù)由VerilogHDL“仿真器”完成。為此需要編寫測試模塊,測試模塊大致由三部分組成。調(diào)用被測試的模塊用各種輸入組合來測試結(jié)果指定輸出文件名(QuartusII不需要)Testbenchcode//testbenchcodemoduleand1_tb;reg[1:0]i;regx,y;wirez;initialfor(i=0;i<=3;i=i+1)begin#10x=i%2;y=i/2;endand1m(.x(x),.y(y),.z(z));endmodule無輸入輸出數(shù)據(jù)位數(shù)2位寄存器類型初始化變量線網(wǎng)類型10延時單位后輸出生成實例并代入?yún)?shù)運行{}運行2.3邏輯門的CMOS晶體管實現(xiàn)以及晶體管的VerilogHDL略2.4四種風格的VerilogHDL描述2.4.1晶體管開關(guān)級的VerilogHDL下面以CMOS反向器(非門)的VerilogHDL代碼為例進行說明。modulecmosnot(f,a);inputa;outputf;supply1vdd;supply0gnd;pmosp1(f,vdd,a);nmosn1(f,gnd,a);endmodule測試代碼`include"cmosnot.v"modulecmosnot_tb;rega,b;wiref;cmosnotnot_1(f,a);initialbegina=1;#1a=0;#1a=1;#1$finish;endinitialbegin$dumpfile("test.vcd");$dumpvars;$monitor("%g\ta=%b;f=%b",$time,a,f);//displyendendmodule2.4.2邏輯門級的VerilogHDL下面給出兩種邏輯門級的二選一多路器電路。使用三態(tài)門使用普通的與非門bufif0bufif1a0a1sya0a1ssna0_sna1_sy多路選擇器(三態(tài)門)電路多路選擇器(與或非門)電路模塊代碼//三態(tài)門實現(xiàn)modulemux2X1_3s(a0,a1,s,y)inputs,a0,a1;outputy;bufif0b0(y7,a0,s);bufif1b0(y7,a1,s);endmodule//與或非門實現(xiàn)modulemux2x1_gate(a0,a1,s,y)inputs,a0,a1;outputy;noti0(sn,s);andi1(a0_sn,a0,s);andi2(a1_s,a1,s);andi3(y,a0_sn,a1_s);endmodule
2.4.3數(shù)據(jù)流風格的VerilogHDL數(shù)據(jù)流風格的VerilogHDL不指定任何特定的器件。主要特征是使用assign語句對變量賦值。賦值語句的特點是等式右邊的輸入變量一旦發(fā)生變化,立即反映到等式左邊的輸出變量。使用assign賦值時,對一個變量只能賦值一次。模塊代碼//邏輯表達式風格modulemux2X1_dataflow(a0,a1,s,y);inputs,a0,a1;outputy;assigny=~s&a0|s&a1;endmodule//三目運算符?:形式modulemux2x1_gate(a0,a1,s,y);inputs,a0,a1;outputy;assigny=s?a0:a1;endmodule運行2.4.4功能描述風格的VerilogHDL功能描述是VerilogHDL中層次最高的描述方法。特點:靠“算法”設(shè)計電路的操作。下面給出二選一多路器的部分版本。Always_if_elsemodulemux2x1_if_else(a0,a1,s,y)inputs,a0,a1;outputy;regy;//’y’cannotbeanetalways@(sora0ora1)beginif(s)beginy=a1;endelsebeginy=a0;endendendmoduleAlways_casemodulemux2x1_case(a0,a1,s,y)inputs,a0,a1;outputy;regy;//’y’cannotbeanetalways@(sora0ora1)begincase(s)1’b0:y=a0;1’b1:y=a1;endcaseendendmodulefunctionmodulemux2x1_function(a0,a1,s,y)inputs,a0,a1;outputy;assigny=sel(a0,a1,s);functionsel;inputa,b,c;//notetheordercase(c)1’b0:sel=a;1’b1:sel=b;endcaseendfunctionendmoduleif(c)sel=b;elsesel=a;邏輯電路的分類按是否有時序,分為:組合邏輯電路的輸出狀態(tài)只取決于當前輸入信號的狀態(tài),與過去的輸入信號的狀態(tài)無關(guān)。例如與門、加法器,譯碼器,編碼器,數(shù)據(jù)選擇器等電路。時序邏輯電路的輸出狀態(tài)不僅和當前的輸入信號的狀態(tài)有關(guān),還與以前的輸入信號的狀態(tài)有關(guān),即時序邏輯電路有記憶功能。最基本的記憶電路是觸發(fā)器,包括電平觸發(fā)器和邊沿觸發(fā)器,由基本觸發(fā)器可以構(gòu)成寄存器,計數(shù)器等部件。從器件的集成度和功能區(qū)分:低集成度的、只提供專用功能的器件。加法器和算術(shù)邏輯單元譯碼器和編碼器數(shù)據(jù)選擇器觸發(fā)器和寄存器、計數(shù)器高集成度的、現(xiàn)場可編程的通用功能電路(陣列邏輯電路)存儲器芯片RAM和ROM通用陣列邏輯GAL復(fù)雜的可編程邏輯器件CPLD:MACH器件現(xiàn)場可編程門陣列FPGA器件2.5常用的組合電路及其設(shè)計常見的組合邏輯電路有加法器、譯碼器、數(shù)據(jù)選擇器等。2.5.1半加器不考慮進位輸入時,兩數(shù)碼Xn,Yn相加稱為半加。功能表如下。XnYnHn000011101110半加和Hn的表達式如下:Hn=Xn·Yn+Xn·Yn=Xn⊕Yn 半加器可用反相門及與或非門來實現(xiàn),也可用異或門來實現(xiàn)。用與、或、非門構(gòu)成的半加器用異或門構(gòu)成的半加器2.5.2全加器由Xn,Yn及低位來的進位輸入Cn-1相加的器件稱為全加器,下表是其真值表。由表可得全加和Fn和進位輸出Cn的表達式:Fn=XnYnCn-1+XnYnCn-1+XnYnCn-1
+XnYnCn-1
Cn=XnYnCn-1+XnYnCn-1+XnYnCn-1
+XnYnCn-1
全加器邏輯圖CnFnFAXnYnCn-1全加器符號2.5.3加法器串行加法器從低位向高位,每一次只完成一位二進制數(shù)的加法運算,完成兩個n位數(shù)相加,需要進行n+1步加法運算。完成串行加法的加法器稱為串行加法器。串行加法器是由一位全加器、一個進位觸發(fā)器及二個帶移位的寄存器構(gòu)成。優(yōu)點是結(jié)構(gòu)簡單,缺點是速度太慢。串行進位的并行加法器并行加法是指全字長的兩個相加數(shù)同時相加,一步就能完成運算的加法。完成并行加法的加法器稱為并行加法器。兩個n位數(shù)相加,如果考慮符號,并行加法器由n+1個全加器構(gòu)成。特點是把n+1個全加器的進位輸入與進位輸出首尾連接起來。缺點是速度受進位的影響,進位數(shù)越多,速度越慢。CnFnFAXnYnCn-1CnFnFAXnYnCn-1CnFnFAXnYnCn-1CnFnFAXnYnCn-1F0F1F2F3C-1C0C1C2C3X0X1X2X3Y0Y1Y2Y3串行進位的并行加法器Q3Q2Q1Q0X寄存器Q3Q2Q1Q0Y寄存器4位串行進位的并行加法器的邏輯電路圖Addercode//adder.vmoduleadder(cout,sum,a,b,cin);parameterbit_width=4;output[bit_width-1:0]sum;outputcout;inputcin;input[bit_width-1:0]a,b;assign{cout,sum}=a+b+cin;endmodule//assign語句為總是執(zhí)行后面語句,與時間無關(guān)。//{}把括號內(nèi)作為一個整體看待。Addertestbenchcodemoduleadder_tb;parameterbit_width=4;wire[bit_width-1:0]sum;wirecout;regcin;reg[bit_width-1:0]a,b;integeri,k;initialbegink=1<<bit_width;cin=0;for(i=0;i<=k*k;i=i+1)begin#100a=i/k;b=i%k;endendadderm(.cout(cout),.sum(sum),.a(a),.b(b),.cin(cin));endmodule2.5.4譯碼器譯碼器有n個輸入變量,有<=2n個輸出。當輸入為某一組合時,對應(yīng)的有且僅有一個輸出為“1”,其余輸出均為“0”。譯碼器的用途是把輸入代碼翻譯成相應(yīng)的控制電位,以實現(xiàn)代碼所要求的操作。二輸入四輸出譯碼器的邏輯圖真值表二輸入四輸出譯碼器譯碼器中常設(shè)置“使能”控制端,當該端為“1”時,譯碼器功能被禁止,此時所有輸出均為“0”。使能端的主要功能是用來擴充輸入變量數(shù)(級連)。輸入輸出E#ABY0Y1Y2Y300010000010100010001001100011XX0000encodercodemoduleencoder(en,in,yout);parameterbit_width=4;inputen;output[(1<<bit_width)-1:0]yout;//1--valid0--invalidinput[bit_width-1:0]in;reg[(1<<bit_width)-1:0]yout;initialyout=0;always@(enorin)if(en==1)yout=0;elseyout=1<<in;//技巧endmoduleEncodertestbenchcode`timescale1ns/1nsmoduleencoder_tp;parameterbit_width=4;regen;wire[(1<<bit_width)-1:0]yout;//1--valid0--invalidreg[bit_width-1:0]in;integeri,k;encoderencode(.en(en),.in(in),.yout(yout));initialbeginen=1;k=1<<bit_width;#100en=0;for(i=0;i<k;i=i+1)#100in=i;#100en=1;#2000$stop;endendmodule使能端的應(yīng)用舉例用1個3位二進制計數(shù)器(無使能端)、2個2-4譯碼器來控制八個發(fā)光二極管依次從右到左地連續(xù)發(fā)光,即一個燈滅,另一個燈才亮。解:電路圖如下¤¤¤¤2-4譯碼器
/E12-4譯碼器
/E0Q2Q1Q03位二進制計數(shù)器清零R時鐘CP啟動電路與¤¤¤¤輸入輸出Q2/E1/E00101012.5.5數(shù)據(jù)(多路)選擇器數(shù)據(jù)選擇器又稱多路開關(guān),它能在選擇信號的作用下,從多個輸入通道中選擇某一個通道的數(shù)據(jù)作為輸出。下圖是“雙四通道選一”數(shù)據(jù)選擇器的邏輯圖和真值表。其中S0,S1是通道選擇信號,E是使能端,D0--D3是輸入數(shù)據(jù)。使能E#的作用和譯碼器中相似,可用它來擴展選擇器的通道數(shù)?!半p四通道選一”數(shù)據(jù)選擇器
的邏輯圖和功能表真值表輸入輸出S1S0D3D2D1D0E#YXXXXXX1000XXXD00D001XXD1X0D110XD2XX0D211D3XXX0D3Dataselectorcode//data_selector.vmoduledata_selector(s,en,data0,data1,data2,data3,yout);parameterbit_width=4;output[bit_width-1:0]yout;input[bit_width-1:0]data0,data1,data2,data3;input[1:0]s;inputen;reg[bit_width-1:0]yout;always@(sorenordata0ordata1ordata2ordata3)beginif(en==1)yout=4'bz;elsecase(s)2'b00:yout=data0;2'b01:yout=data1;2'b10:yout=data2;2'b11:yout=data3;endcaseendendmodule高阻態(tài)Dataselectortestbenchcode`timescale1ns/1nsmoduledata_selector_tb;parameterbit_width=4;wire[bit_width-1:0]yout;reg[bit_width-1:0]data0,data1,data2,data3;regen;reg[1:0]s;integeri;initialbeginen=1;data0=4;data1=5;data2=6;data3=7;#100en=0;for(i=0;i<=4;i=i+1)begin#100s=i;endenddata_selectorm(.s(s),.en(en),.data0(data0),.data1(data1),.data2(data2),.data3(data3),.yout(yout));endmoduleP40多路選擇器代碼modulemux4x32(data0,data1,data2,data3,s,yout);parameterbit_width=32;output[bit_width-1:0]yout;input[bit_width-1:0]data0,data1,data2,data3;input[1:0]s;reg[bit_width-1:0]yout;always@(sordata0ordata1ordata2ordata3)begincase(s)2'b00:yout=data0;2'b01:yout=data1;2'b10:yout=data2;2'b11:yout=data3;endcaseendendmoduleTestCode`include"mux4x32.v"modulemux4x32_tb;parameterbit_width=32;reg[1:0]i;reg[bit_width-1:0]x,y,m,n;wire[bit_width-1:0]z;
mux4x32mux4(.data0(x),.data1(y),.data2(m),.data3(n),.s(i),.yout(z));initialbeginx=32'h2345;y=32'h5678;m=x+1;n=y+32'h10;for(i=0;i<=3;i=i+1)begin#1;endendendmodule2.6時序電路
觸發(fā)器是典型的時序邏輯電路,有記憶功能,最簡單的可以由兩個交叉耦合的“與非”門組成的R-S觸發(fā)器,2個輸出分別為Q和/Q,兩路輸入分別為R和S?,F(xiàn)態(tài)次態(tài)說明SRQnQn+1000禁止禁止001禁止禁止0100置001101001置110111100Qn1111Q/QSR2.6.1R-S觸發(fā)器當把兩個輸入s和r變?yōu)橐粋€d的互補輸入后,可以通過控制信號c完成該觸發(fā)器的寫入操作,在c=1時,Q將隨D而變化?,F(xiàn)態(tài)次態(tài)說明cdQnQn+1000禁止禁止001禁止禁止010禁止禁止011禁止禁止1000置010101101置11111Q/Qdc2.6.2D鎖存器下圖就不會出現(xiàn)上面的情況。其真值表如下:現(xiàn)態(tài)次態(tài)說明cdQnQn+10XXQn1000置010101101置11111Q/QdcsrD鎖存器代碼moduled_latch(e,d,q,qn); inpute,d; outputq,qn; wirer,s; nandnand1(s,d,e); nandnand2(r,~d,e); rs_latchrslatch(s,r,q,qn);endmodulemodulers_latch(s,r,q,qn); inputs,r; outputq,qn; nandnand1(q,s,qn); nandnand2(qn,r,q);endmodule2.6.3D
型觸發(fā)器
前面剛介紹的鎖存器屬于電平觸發(fā)方式,輸入R和S不能同時為低電平,而且R、S和D在觸發(fā)器寫入期間應(yīng)保持不變,否則產(chǎn)生操作錯誤。
D型觸發(fā)器是由3個基本觸發(fā)器構(gòu)成的,它屬于邊沿觸發(fā)方式。輸入信號D在觸發(fā)脈沖Clock(時鐘clk)的上升沿觸發(fā)被寫入觸發(fā)器,其它時間D的變化不會影響觸發(fā)器的狀態(tài)。
D型觸發(fā)器又被稱為延時觸發(fā)器,常用于構(gòu)建寄存器,移位寄存器,計數(shù)器等部件。輸入信號/S和/R用于觸發(fā)器的清0和置1操作。與非1與非2與非4與非6與非3與非5/R/SQCLK/QDQ/Q/SCLKD/RDTriggerTruthTable現(xiàn)態(tài)次態(tài)說明/R/SCLKDQnQn+1110XXQn保持111XXQn11↑1X1D11↑0X001XXX0置010XXX1置1邊沿觸發(fā)的D觸發(fā)器數(shù)據(jù)在計算機存放在下列地方:運算器中的寄存器主存儲器(內(nèi)存)外部存儲器(外存)這里介紹用VerilogHDL語言描述邊沿觸發(fā)的D觸發(fā)器如下圖。D觸發(fā)器的敏感信號清零信號reset時鐘信號clockQQbclockDreset當reset=1且Clock發(fā)生正跳變時,觸發(fā)器將輸入信號D的值保存下來并送到輸出端Q。觸發(fā)器保持這個狀態(tài)不變化,直到下一次reset和clock發(fā)生變化。根據(jù)reset和clock信號的關(guān)系,D觸發(fā)器分為:帶同步清零的邊沿觸發(fā)D觸發(fā)器----在時鐘上升沿處檢查清零信號是否有效。帶異步清零的邊沿觸發(fā)D觸發(fā)器----清零端與時鐘無關(guān),只要有效就清零。DTriggerTruthTable輸入輸出Q清除時鐘DLXXLH↑HHH↑LLHLXQHHXQ輸入輸出Q清除時鐘DL↑XLH↑HHH↑LLHLXQHHXQ帶異步清零端的D觸發(fā)器帶同步清零端的D觸發(fā)器下面以帶異步清零的D觸發(fā)器為例,編寫其VerilogHDL代碼。異步清零D_triggercode//d_trigger.vmoduled_trigger(rst,clk,d,q,qb);outputq,qb;//qb=~q;inputrst,clk,d;regq,qb;initialbeginqb=~q;endalways@(negedgerstorposedgeclk)beginif(rst==0)q=0; elseq=d; qb=~q; end endmoduleD_triggertestbenchcode`timescale1ns/1ns`include"d_trigger.v"moduled_trigger_tb;regd;wireq,qb;regclk,rst;initialbeginclk=0;d=0;#1rst=0;#1rst=1;#100rst=0;endalways#1clk=~clk;always#2d=!d;d_triggerm(.rst(rst),.clk(clk),.d(d),.q(q),.qb(qb));endmodule由于clock是周期性信號,如果希望在某個時鐘來到時寄存器不接受數(shù)據(jù),就需要再加一層控制即使能控制。使用帶使能控制和異步清零的D觸發(fā)器構(gòu)成的16位寄存器,如下圖。QQbENclkD/RQQbENclkD/RQQbENclkD/RresetclockenableD0D1D15Q0Q1Q15數(shù)據(jù)總線…………使能信號enable控制寄存器是否接受數(shù)據(jù)。enable=0,寄存器不接受數(shù)據(jù)。enable=1,寄存器在clock正跳變且reset=1時接受數(shù)據(jù)。帶使能控制和異步清零的16位寄存器的代碼如下。Registercodemoduleregister(rst,en,clk,data,q,qb);parameterbit_width=16;input[bit_width-1:0]data;output[bit_width-1:0]q,qb;inputen;reg[bit_width-1:0]q,qb;inputrst,clk;initialbeginqb=~q;endalways@(posedgeclkornegedgerst)begin if(rst==0)q=0; elseif(en==1)q=data; qb=~q; endendmodule定義符號常量Registertestbenchcode`timescale1ns/1nsmoduleregister_tb;parameterbit_width=16;reg[bit_width-1:0]data;wire[bit_width-1:0]q,qb;regclk,rst,en;initialbeginrst=0;data=8'b0011_1000;clk=0;#100rst=1;en=0;#100en=1;#2000rst=0;endalways#100clk=~clk;registerm(.rst(rst),.en(en),.clk(clk),.data(data),.q(q),.qb(qb));endmodule2.6.4寄存器寄存器是用于暫存指令和數(shù)據(jù)等,通常選用多個并行操作的D觸發(fā)器或鎖存器組成。寄存器的位數(shù)是指一個寄存器所使用的觸發(fā)器的數(shù)目。如4位、8位等等。從使用的角度,可以通過幾個控制信號,控制寄存器是否可以接受輸入,輸出的是正常邏輯電平還是高阻態(tài),是否具有清0寄存器內(nèi)容的功能。以4位寄存器為例,來說明與總線的連接。Q/Q/SCPD/RQ/Q/SCPD/RQ/Q/SCPD/RQ/Q/SCPD/RRCLKSD0D1D2D3Q0Q1Q2Q3數(shù)據(jù)總線74LS273寄存器74LS374鎖存器常用的8位寄存器74LS374,74LS273,74LS373(注意時鐘的區(qū)別)。輸入輸出Q清除時鐘DLXXLH↑HHH↑LLHLXQ輸出控制GD輸出QLHHHLHLLLLXQHXXZ由D型觸發(fā)器改良后構(gòu)成的寄存器Register373codemoduleregister373(rst,clk,data,out,swicth);parameterbit_width=8;input[bit_width-1:0]data;output[bit_width-1:0]out;reg[bit_width-1:0]x,out;regflag;//onlyusingswicthinputrst,clk,swicth;//0--notswicth,1--swicthhighhalfpartwithlowerhalfpart,用于驗證。
initialbeginx=0;flag=0;endalways@(posedgeclk)begin if(rst==0)beginx=0;flag=0;end elseif(flag==0)beginx=data;flag=1;end
if(swicth==1)x={x[bit_width/2-1:0],x[bit_width-1:bit_width/2]}; out=x;endendmoduleRegsiter373testbench`timescale1ns/1nsmoduleregister373_tb;parameterbit_width=8;reg[bit_width-1:0]data;wire[bit_width-1:0]out1;regswicth,clk,rst;initialbeginrst=0;swicth=1;clk=0;data=8'b0011_0000;#100rst=1;#2000rst=0;endalways#100clk=~clk;
register373m(.rst(rst),.clk(clk),.data(data),.out(out1),.swicth(swicth));
endmodule2.6.5移位器
移位寄存器有左/右移位、循環(huán)移位操作(用D觸發(fā)器構(gòu)成)。Q/Q/SCPD/RQ/Q/SCPD/RQ/Q/SCPD/RQ/Q/SCPD/RCPDoutDinQ0Q1Q2Q3Q/Q/SCPD/RQ/Q/SCPD/RQ/Q/SCPD/RQ/Q/SCPD/RCPDoutDinQ0Q1Q2Q3邏輯左移邏輯右移Logicshiftcode//不考慮復(fù)位和置位moduleshift_lr(in,out,clk,en,direction);input[7:0]in;output[7:0]out;reg[7:0]x,out;inputdirection,clk,en;//0--shift_r,1--shift_lregdirec;always@(posedgeclk)beginif(en==0)beginx=in;direc=direction;end elsebeginif(direc==0)x=x>>1;else x=x<<1;endout=x;endendmoduleLogicshifttestbechcode`timescale1ns/1nsmoduleshift_lr_tb;reg[7:0]in;wire[7:0]out1;regdirection,clk,en;initialbeginen=0;#1clk=0;direction=1;in=8'b0001_0000;#1en=1;#19en=0;endalways#100clk=~clk;shift_lrm(.in(in),.out(out1),.clk(clk),.en(en),.direction(direction));
endmoduleP46移位器代碼shift.vmoduleshift(d,sa,right,arith,sh);input[31:0]d;input[4:0]sa;inputright,arith;output[31:0]sh;reg[31:0]sh;always@*beginif(!right)beginsh=d<<sa;end //shiftleftelseif(!arith)sh=d>>sa;//shiftrightlogicelse sh=$signed(d)>>>sa;//shiftrightarithmeticendendmodule2.6.6計數(shù)器
計數(shù)器按時鐘作用方式,分為同步和異步兩大類,其中同步計數(shù)器線路略復(fù)雜但性能更好,用于脈沖分頻和需要計數(shù)的場合,例如二進制或十進制計數(shù)。以二進制計數(shù)器為例說明。
Q3Q2Q1Q0Q3’Q2’Q1’Q0’00000001000100100010001100110100010001010101011001100111011110001000100110011010101010111011110011001101110111101110111111110000注意:Q’即為輸入端D。四位同步二進制計數(shù)器圖如下。根據(jù)真值表寫出表達式,并化簡,得出以下邏輯表達式:Q0’=Q0Q1’=Q1Q0+Q1Q0Q2’=Q2Q1+Q2Q0+Q2Q1Q0Q3’=Q3Q1+Q3Q2+Q3Q0+Q3Q2Q1Q0Q/Q/SCPD/RQ/Q/SCPD/RQ/Q/SCPD/RQ/Q/SCPD/RCPQ0Q1Q2Q3或門或門或門Countercodemodulecounter(clk,rst,c,out);parameterbit_width=4;inputrst,clk;outputc;//carryoutput[bit_width-1:0]out;regc;reg[bit_width-1:0]out;integeri;initiali=1<<bit_width;左移運算
always@(posedgeclkornegedgerst)beginif(!rst)beginout[bit_width-1:0]<=0;c<=0;endelsebeginif(out[bit_width-1:0]==i-1)beginc<=1;out[bit_width-1:0]<=0;endelsebeginout[bit_width-1:0]<=out[bit_width-1:0]+1;c<=0;endendendendmoduleCountertestbenchcode`timescale1ns/1nsmodulecounter_tp;parameterbit_width=4;regclk,rst;wirecout;wire[bit_width-1:0]out;countercnt16(.clk(clk),.rst(rst),.c(cout),.out(out));always#20clk=~clk;initialbeginclk<=0;rst<=0;#10rst<=1;#30rst<=0;#40rst<=1;#2000$stop;endendmodule2.6.7狀態(tài)圖及時序電路設(shè)計下面設(shè)計一個平常的鐘。需求分析為了說明其設(shè)計原理,在此做一些簡化。秒鐘只有6個狀態(tài),即計到6向分針進位,同時置為0。分針只有6個狀態(tài),即計到6向時針進位,同時置為0。時針只有12個狀態(tài),即計到12時時針置0。能夠清零。帶使能端。能夠顯示時、分、秒,且動態(tài)的變化。下面畫出基本原理圖如下。Q2Q1Q0六進制計數(shù)器0carryclkenable/rstQ2Q1Q0六進制計數(shù)器1carryclkenable/rstQ2Q1Q0六進制計數(shù)器2carryclkenable/rstQ2Q1Q0六進制計數(shù)器3carryclkenable/rst顯示部分及電路顯示部分及電路顯示部分及電路=12時鐘清零使能2個3位二進制轉(zhuǎn)換成2個4位二進制電路00顯示部分及
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 讀書的體會作文400字
- 儀器、設(shè)備維修申請單范本
- 大學的學習計劃15篇
- 2023四年級語文下冊 第3單元 9 短詩三首配套教學實錄 新人教版
- 代理成本-詳解
- 2024-2025學年高中政治 專題4 4 堅持和完善人民代表大會制度教學實錄 新人教版選修3
- 趣味籃球活動方案9篇
- 公司的承諾書合集七篇
- 2024年版民辦幼兒園經(jīng)營管理承包合同版B版
- 前臺年度工作總結(jié)5篇
- CX-TGK01C型微電腦時間溫度控制開關(guān)使用說明書
- CDR-臨床癡呆評定量表
- 《八年級下學期語文教學個人工作總結(jié)》
- 電儀工段工段長職位說明書
- 恒亞水泥廠電工基礎(chǔ)試題
- 簡易送貨單EXCEL打印模板
- 4s店信息員崗位工作職責
- 旋轉(zhuǎn)導(dǎo)向+地質(zhì)導(dǎo)向+水平井工具儀器介紹
- 無心磨的導(dǎo)輪及心高調(diào)整講解
- 乳腺癌化療的不良反應(yīng)級處理ppt課件
- 艾灸療法(課堂PPT)
評論
0/150
提交評論