




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1§3.9基本邏輯電路設(shè)計第三章2基本邏輯電路:一、組合邏輯電路設(shè)計簡單門電路、編碼器、譯碼器、加法器、多路選擇器、三態(tài)門等組合電路時序電路3.9基本邏輯電路設(shè)計二、時序邏輯電路設(shè)計
觸發(fā)器、寄存器、計數(shù)器、分頻器、信號發(fā)生器等33.9.1組合邏輯電路設(shè)計1、簡單門電路Libraryieee;Useieee.std_logic_1164.all;Entitygateisport(a,b:instd_logic;y:outstd_logic);Endgate;ArchitecturebehaveofgateisBeginY<=aANDb;Endbehave;3.9基本邏輯電路設(shè)計4architecturebehaviorofpriorityisbeginvec<=“111”wheny7=‘1’else“110”wheny6=‘1’else“101”wheny5=‘1’else“100”wheny4=‘1’else“011”wheny3=‘1’else“010”wheny2=‘1’else“001”wheny1=‘1’else“000”wheny0=‘1’else“XXX”;endbehavior;方法3:利用條件賦值語句
3.9基本邏輯電路設(shè)計5(2)3-8譯碼器sel=000Y=00000001sel=001Y=00000010sel=010Y=00000100sel=011Y=00001000sel=100Y=00010000sel=101Y=00100000sel=110Y=01000000sel=111Y=10000000譯碼器是編碼器的逆過程。如3-8譯碼器:3.9基本邏輯電路設(shè)計6方法1:使用SLL邏輯左移運算符libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitydecoderisport(inp:instd_logic_vector(2downto0);outp:outstd_logic_vector(7downto0));enddecoder;architecturertlofdecoderisbeginoutp<=“00000001”sll(conv_integer(inp));endrtl;3.9基本邏輯電路設(shè)計7方法2:使用process語句
libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitydecoderisport(inp:instd_logic_vector(2downto0);outp:outstd_logic_vector(7downto0));enddecoder;architecturertlofdecoderisbeginprocess(inp)beginoutp<=(others=>’0’);outp(conv_integer(inp))<=‘1’;endprocess;endrtl;3.9基本邏輯電路設(shè)計8方法3:使用when-else條件賦值語句Libraryieee;Useieee.std_logic_1164.all;Entitydecisport(sel:instd_logic_vector(2downto0)en:instd_logic;y:outstd_logic_vector(7downto0));Enddec;ArchitecturebehaviorofdecisBeginy(0)<=‘0’when(en=‘1’andsel=“000”)else‘1’;y(1)<=‘0’when(en=‘1’andsel=“001”)else‘1’;y(2)<=‘0’when(en=‘1’andsel=“010”)else‘1’;y(3)<=‘0’when(en=‘1’andsel=“011”)else‘1’;y(4)<=‘0’when(en=‘1’andsel=“100”)else‘1’;
y(5)<=‘0’when(en=‘1’andsel=“101”)else‘1’;y(6)<=‘0’when(en=‘1’andsel=“110”)else‘1’;y(7)<=‘0’when(en=‘1’andsel=“111”)else‘1’;Endbehavior;3.9基本邏輯電路設(shè)計9方法4:使用case-when語句實現(xiàn)。Libraryieee;Useieee.std_logic_1164.all;Entitydecisport(sel:instd_logic_vector(2downto0);
en:instd_logic;y:outstd_logic_vector(7downto0));Enddec;Architecturebehaviorofdecisbegin3.9基本邏輯電路設(shè)計10Process(sel,en)Beginy<=“11111111”if(en=‘1’)thencaseseliswhen“000”=>y(0)<=‘0’;when“001”=>y(1)<=‘0’;when“010”=>y(2)<=‘0’;when“011”=>y(3)<=‘0’;when“100”=>y(4)<=‘0’;when“101”=>y(5)<=‘0’;when“110”=>y(6)<=‘0’;when“111”=>y(7)<=‘0’;whenothers=>null;endcase;endif;Endprocess;Endarchitecture;譯碼輸出低有效3.9基本邏輯電路設(shè)計113-8譯碼器仿真結(jié)果:譯碼輸出低有效3.9基本邏輯電路設(shè)計12OUT=111H=1OUT=110G=1OUT=101F=1OUT=100E=1OUT=011D=1OUT=010C=1OUT=001B=1OUT=000A=1(3)8-3優(yōu)先編碼器設(shè)計一個8輸入優(yōu)先級編碼器,y0級別最低,y7級別最高;輸出為3位編碼。3.9基本邏輯電路設(shè)計13LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYENCODERISPORT(A,B,C,D,E,F(xiàn),G,H;INSTD_LOGIC:
OUT0,OUT1,OUT2:OUTSTD_LOGIC);ENDENTITYENCODER;3.9基本邏輯電路設(shè)計14方法1:使用條件賦值語句ARCHITECTUREART1OFENCODERISSIGNALOUTS:STD_LOGIC_VECTOR(2DOWNTO0);BEGINOUTS(2DOWNTO0)<="111"WHENH=‘1’ELSE"110"WHENG=‘1’ELSE"101"WHENF=‘1’ELSE"100"WHENE=‘1’ELSE"011"WHEND=‘1’ELSE"010"WHENC=‘1’ELSE"001"WHENB=‘1’ELSE"000"WHENA=‘1’ELSE“XXX”;
OUT0<=OUTS(0);OUT1<=OUTS(1);OUT2<=OUTS(2);
ENDARCHITECTUREART1;3.9基本邏輯電路設(shè)計15方法2:使用LOOP語句ARCHITECTUREART2OFENCODERISBEGINPROCESS(A,B,C,D,E,F(xiàn),G,H)ISVARIABLEINPUTS:STD_LOGIC_VECTOR(7DOWNTO0);VARIABLEI:INTEGER;BEGININPUT:=(H,G,F(xiàn),E,D,C,B,A);
I:=7;WHILEI>=0ANDINPUTS(I)/=‘1’LOOP--此處的“/=”表示不等于
I:=I-1;ENDLOOP;(OUT2,OUT1,OUT0)<=CONV_STD_LOGIC_VECTOR(I,3);ENDPROCESS;ENDARCHITECTUREART2;
3.9基本邏輯電路設(shè)計16Libraryieee;Useieee.std_logic_1164.all;Entitypriorityisport(signaly0,y1,y2,y3,y4,y5,y6,y7:instd_logic;signalvec:outstd_logic_vector(2downto0));Endpriority;ArchitecturebehaviorofpriorityisBeginprocess(y0,y1,y2,y3,y4,y5,y6,y7)beginif(y7=‘1’)thenvec<=“111”;elsif(y6=‘1’)thenvec<=“110”;elsif(y5=‘1’)thenvec<=“101”;elsif(y4=‘1’)thenvec<=“100”;elsif(y3=‘1’)thenvec<=“011”;elsif(y2=‘1’)thenvec<=“010”;elsif(y1=‘1’)thenvec<=“001”;elsif(y0=‘1’)thenvec<=“000”;endif;endprocess;endbehavior;方法3:利用if多選擇語句自頂向下的優(yōu)先特性3.9基本邏輯電路設(shè)計17process(y0,y1,y2,y3,y4,y5,y6,y7)beginif(y0=‘1’)thenvec<=“000”;endif;if(y1=‘1’)thenvec<=“001”;endif;if(y2=‘1’)thenvec<=“010”;endif;if(y3=‘1’)thenvec<=“011”;endif;if(y4=‘1’)thenvec<=“100”;endif;if(y5=‘1’)thenvec<=“101”;endif;if(y6=‘1’)thenvec<=“110”;endif;if(y7=‘1’)thenvec<=“111”;endif;endprocess;endbehavior;
方法4:進(jìn)程內(nèi)為順序語句,最先描述優(yōu)先級最低,最后描述優(yōu)先級最高,可實現(xiàn)優(yōu)先級編碼。3.9基本邏輯電路設(shè)計18architecturebehaviorofpriorityisbeginvec<=“111”wheny7=‘1’else“110”wheny6=‘1’else“101”wheny5=‘1’else“100”wheny4=‘1’else“011”wheny3=‘1’else“010”wheny2=‘1’else“001”wheny1=‘1’else“000”wheny0=‘1’else“XXX”;endbehavior;方法5:利用條件賦值語句
3.9基本邏輯電路設(shè)計194.8位比較器比較器可以比較兩個二進(jìn)制是否相等,下面是一個8位比較器的VHDL描述。有兩個8位二進(jìn)制數(shù),分別是A和B,輸出為EQ,當(dāng)A=B時,EQ=1,否則EQ=03.9基本邏輯電路設(shè)計208位比較器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYCOMPAREISPORT(A,B:INSTD_LOGIC_VECTOR(7DOWNTO0);EQ:OUTSTD_LOGIC);ENDENTITYCOMPARE;ARCHITECTUREARTOFCOMPAREISBEGINEQ<='1'WHENA=BELSE'0';ENDARCHITECTUREART;3.9基本邏輯電路設(shè)計215.四選一電路LIBRARYieee;USEieee.std_logic_1164.all;ENTITYmux4ISPORT(input:
IN
std_logic_vector(3DOWNTO0);sel:
INstd_logic_vector(1DOWNTO0);y:OUTstd_logic);ENDmux4;ARCHITECTURErt1OFmux4ISBEGINPROCESS(input,sel)
BEGIN
IF(sel=“00”)THENy<=input(0);ELSIF(sel=“01”)THENy<=input(1);ELSIF(sel=“10”)THENy<=input(2);ELSEy<=input(3);ENDIF;
ENDPROCESS;ENDrt1;3.9基本邏輯電路設(shè)計226.算術(shù)運算下面的程序?qū)斎氩僮鲾?shù)A、B作加、減、乘、除運算。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYARITHMETICISPORT(A,B:INSTD_LOGIC_VECTOR(3DOWNTO0);
Q1:OUTSTD_LOGIC_VECTOR(4DOWNTO0);
Q2,Q3:OUTSTD_LOGIC_VECTOR(3DOWNTO0);
Q4:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDENTITYARITHMETIC;3.9基本邏輯電路設(shè)計23ARCHITECTUREARTOFARITHMETICISBEGINPROCESS(A,B)ISBEGINQ1<=(‘0’&A)+('0'&B);--ADDITIONQ2<=A-B;--SUBTRACTIONQ3<=A/B; --DIVISIONQ4<=A*B;--MULTIPLICATIONENDPROCESS;ENDARCHITECTUREART;3.9基本邏輯電路設(shè)計24三態(tài)門及總線緩沖器
VHDL語言通過指定大寫的Z值表示高阻狀態(tài)
a:std_logic;a_bus:std_logic_vector(7downto0);
指定高阻狀態(tài)如下:
a<=‘Z’;a_bus<=“ZZZZZZZZ”;3.9基本邏輯電路設(shè)計251)三態(tài)門電路描述Libraryieee;Useieee.std_logic_1164.all;Entitytri_gateisport(din,en:instd_logic;dout:outstd_logic);Endtri_gate;Architecturezasoftri_gateisBegintri_gate1:porcess(din,en)beginif(en=‘1’)thendout<=din;elsedout<=‘Z’;endif;endprocess;Endzas;3.9基本邏輯電路設(shè)計26三態(tài)門仿真結(jié)果:3.9基本邏輯電路設(shè)計272)單向總線緩沖器Libraryieee;Useieee.std_logic_1164.all;Entitytri_buf8isport(din:instd_logic_vector(7downto0);en:instd_logic;dout:outstd_logic_vector(7downto0));Endtri_buf8;Architectureartoftri_buf8isBeginprocess(en,din)beginifen=‘1’thendout<=din;elsedout<=“ZZZZZZZZ”;endif;endprocess;endart;3.9基本邏輯電路設(shè)計283)雙向總線緩沖器Libraryieee;Useieee.std_logic_1164.all;Entitybidirisport(a,b:inoutstd_logic_vector(7downto0);en,dir:instd_logic);Endbidir;Architectureartofbidirissignalaout,bout:std_logic_verctor(7downto0);Beginprocess(a,en,dir)beginifen=‘0’anddir=‘1’thendout<=a;elsedout<=“ZZZZZZZZ”;endif;b<=bout;endprocess;
3.9基本邏輯電路設(shè)計29process(b,en,dir)beginifen=‘0’anddir=‘0’thenaout<=1elseaout<=“ZZZZZZZZ”;endif;a<=aout;endprocess;endart;3.9基本邏輯電路設(shè)計30加法器帶進(jìn)位的8位加法器符號如下:其中:Sum(i)=a(i)XOR
b(i)XORcinC(i+1)=(a(i)ANDb(i))OR((a(i)ORb(i))
ANDc(i))3.9基本邏輯電路設(shè)計31方法1:用for–loop語句實現(xiàn)libraryieee;useieee.std_logic_1164.all;entityadder8isport(a,b:instd_logic_vector(7downto0);cin:instd_logic;sum:outstd_logic_vector(7downto0);cout:outstd_logic);endadder8;
3.9基本邏輯電路設(shè)計32architecturebehofadder8issignalc:std_logic_vector(8downto0);beginprocess(a,b,cin,c)beginc(0)<=cin;foriin0to7loop
sum(i)<=a(i)xorb(i)xorc(i);c(i+1)<=(a(i)andb(i))
or(c(i)and(a(i)orb(i)));endloop;
cout<=c(8);endprocess;endbeh;3.9基本邏輯電路設(shè)計33直接使用加法“+”函數(shù):帶進(jìn)位的4位加法器Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;Entityadder4_opisport(a,binstd_logic_vector(3downto0);cin:instd_logic;sum:outstd_logic_vector(3downto0);cout:outstd_logic);Endadder4_op;Architecturebehaviorofadder4_opissignalc:std_logic_vector(4downto0);Beginprocess(a,b,cin,c)beginc<=a+b+cin;endprocess;Sum<=c(3downto0);cout<=c(4);Endbehavior;3.9基本邏輯電路設(shè)計344位加法器仿真結(jié)果:3.9基本邏輯電路設(shè)計353.9.2時序邏輯電路設(shè)計D觸發(fā)器VHDL程序的5種不同表述方式常用時序電路:
觸發(fā)器(Flip_Flop)、寄存器、計數(shù)器1)D觸發(fā)器1、觸發(fā)器3.9基本邏輯電路設(shè)計36DFFEntitytest1isport(clk,d:inbit;q:outbit);endtest1;architecturebodyoftest1issignalq1:bit;beginprocess(clk)beginif
clk='1'ANDclk’last_value='0'
thenq1<=d;endif;q<=q1;endprocess;endtest1_body;LIBRARYIEEE;USEIEEE.std_logic_1164.all;Entitytest1isport(clk,d:inbit;q:outbit);endtest1;architecturebodyoftest1isbeginprocess(clk,d)begin
ifrising_edge(clk)then
q<=d;endif;endprocess;endtest1_body;TheyareallthesameEntitytest1isport(clk:inbit;d:inbit;q:outbit);endtest1;architecturebodyoftest1issignalq1:bit;beginprocess(clk,d)begin
if(clk=‘1’)then
q1<=d;endif;q<=q1;endprocess;endbody;Entitytest1isport(clk:inbit;d:inbit;q:outbit);endtest1;architecturebodyoftest1issignalq1:bit;beginprocess(clk)begin
if(clk=‘1’)then
q1<=d;endif;q<=q1;endprocess;endbody;3.9基本邏輯電路設(shè)計37異步置位/復(fù)位D觸發(fā)器Libraryieee;Useieee.std_logic_1164.allEntitydff3isport(clk,d,clr,pset:instd_logic;q:outstd_logic);enddff3;Architecturert1ofdff3isbeginprocess(clk,pset,clr)beginif(pset=‘0’)thenq<=‘1’;elsif(clr=‘0’)thenq<=‘0’;elsif(clk’eventandclk=‘1’)thenq<=d;endif;endprocess;Endrt1;3.9基本邏輯電路設(shè)計38同步復(fù)位D觸發(fā)器Libraryieee;Useieee.std_logic_1164.allEntitydff4isport(clk,d,cl:instd_logic;q:outstd_logic);enddff4;Architecturert1ofdff4isbeginprocess(clk)beginif(clk’eventandclk=‘1’)thenif(clr=‘1’)thenq<=‘0’elseq<=d;endif;endif;endprocess;Endrt1;3.9基本邏輯電路設(shè)計39比較:異步置位的鎖存器(Latch)Libraryieee;Useieee.std_logic_1164.allEntitylatchisport(gate,data,set:instd_logic;q:outstd_logic);endlatch;Architecturert1oflatchisbeginprocess(gate,data,set)beginif(set=‘0’)thenq<=‘1’;elsif(gate=‘1’)thenq<=data;endif;endprocess;Endrt1;3.9基本邏輯電路設(shè)計40
libraryieee;useieee.std_logic_1164.all;entityt_ffisport(t,clk:instd_logic;q:bufferstd_logic);endt_ff;architecturertloft_ffisbeginprocess(clk)beginifclk’eventandclk=‘1’thenift=‘1’thenq<=notq;elseq<=q;endif;endprocess;endrtl;TClkQQ2)T觸發(fā)器3.9基本邏輯電路設(shè)計41libraryieee;useieee.std_logic_1164.all;entityrs_ffisport(r,s,clk:instd_logic;q,qn:bufferstd_logic);endrs_ff;architecturertlofrs_ffisbegin
process(r,s,clk)beginifclk’eventandclk=‘1’thenifs=‘1’andr=‘0’thenq<=‘0’;qn<=‘1’;elsifs=‘0’andr=‘1’thenq<=‘1’;qn<=‘0’;elsifs=‘0’andr=‘0’thenq<=q;qn<=qn;elsenull;endif;endif;endprocess;endrtl;SClkQQRSRQQn00QQn0110100111??3)RS觸發(fā)器3.9基本邏輯電路設(shè)計422觸發(fā)器的同步和非同步復(fù)位一)時序電路特殊信號的描述
時鐘信號和復(fù)位信號
1、時鐘信號描述常用的描述方式:
1)進(jìn)程的敏感信號是時鐘信號,在進(jìn)程內(nèi)部用if語句描述時鐘的邊沿條件。3.9基本邏輯電路設(shè)計43如:
process(clock_signal)beginif(clock_edge_condition)thensignal_out<=signal_in;┇
其它時序語句┇
endif;endprocess;3.9基本邏輯電路設(shè)計442)在進(jìn)程中用waituntil語句描述時鐘信號,此時進(jìn)程將沒有敏感信號。
如:
processbeginwaituntil(clock_edge_condition);signal_out<=signal_in;┇
其它時序語句┇
endprocess;3.9基本邏輯電路設(shè)計45
注意:
a)在對時鐘邊沿說明時,一定要注明是上升沿還是下降沿。
b)一個進(jìn)程中只能描述一個時鐘信號。
c)waituntil語句只能放在進(jìn)程的最前面或最后面3)時鐘邊沿的描述時鐘上升沿:(clock’eventandclock=‘1’)
時鐘下降沿:(clock’eventandclock=‘0’)
3.9基本邏輯電路設(shè)計462、觸發(fā)器的復(fù)位信號描述1)同步復(fù)位:只有以時鐘為敏感信號的進(jìn)程中定義。
如:process(clock_signal)beginif(clock_edge_condition)then
if(reset_condition)thensignal_out<=reset_value;elsesignal_out<=signal_in;┇endif;endif;endprocess;3.9基本邏輯電路設(shè)計472)異步復(fù)位:進(jìn)程的敏感信號表中除時鐘信號外,還有復(fù)位信號。
如:process(reset_signal,clock_signal)begin
if(reset_condition)thensignal_out<=reset_value;elsif(clock_edge_condition)thensignal_out<=signal_in;┇endif;endprocess; 3.9基本邏輯電路設(shè)計481)非同步復(fù)位/置位的D觸發(fā)器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYASYNDCFQISPORT(CLK,D,PRESET,CLR:INSTD_LOGIC;
Q:OUTSTD_LOGIC);ENDENTITYASYNDCFQ;ARCHITECTUREARTOFASYNDCFQISBEGINPROCESS(CLK,PRESET,CLR)ISBEGIN
IF(PRESET='1')THENQ<='1';
ELSIF(CLR='1')THENQ<='0';
ELSIF(CLK'EVENTANDCLK=‘1’)THENQ<=D;
ENDIF;ENDPROCESS;ENDARCHITECTUREART;49LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSYNDCFQISPORT(D,CLK,RESET:INSTD_LOGIC;
Q:OUTSTD_LOGIC);ENDENTITYSYNDCFQ;ARCHITECTUREARTOFSYNDCFQISBEGINPROCESS(CLK)ISBEGINIF(CLK'EVENTANDCLK=‘1’)THENIF(PRESET=‘0’)THENQ<=‘0’;
ELSEQ<=D;ENDIF;ENDIF;ENDPROCESS;ENDARCHITECTUREART;2)同步復(fù)位的D觸發(fā)器3.9基本邏輯電路設(shè)計503位串行輸入、串行輸出移位寄存器描述ENTITYreg1ISPORT(d:inBIT;clk:inBIT;q :outBIT);ENDreg1;ARCHITECTUREreg1OFreg1ISCOMPONENTdff
PORT(d,clk:instd_logic;q:outstd_logic);ENDcomponent;SIGNALz:std_logic_vector(0to3);BEGINz(0)<=a;g1:FORiin0to7generatedffx:DFFPORTMAP(z(i),clk,z(i+1));ENDgenerate;b<=z(3);ENDreg1;3、寄存器3.9基本邏輯電路設(shè)計51直接用信號
連接描述ENTITYreg1ISPORT(d :inBIT;clk :inBIT;q :outBIT);ENDreg1;ARCHITECTUREreg1OFreg1ISSIGNALa,b:BIT;BEGINPROCESS(clk)BEGINIFclk='1'ANDclk’eventTHENa<=d;b<=a;q<=b;ENDIF;ENDPROCESS;ENDreg1;3.9基本邏輯電路設(shè)計52THREE!3.9基本邏輯電路設(shè)計53How
Many
Registers?ENTITYreg1ISPORT(d :inBIT;clk :inBIT;q :outBIT);ENDreg1;ARCHITECTUREreg1OFreg1ISBEGINPROCESS(clk)VARIABLEa,b:BIT;BEGINIFclk='1'ANDclk’eventTHENa:=d;b:=a;q<=b;ENDIF;ENDPROCESS;ENDreg1;3.9基本邏輯電路設(shè)計54ONLYONE!3.9基本邏輯電路設(shè)計558位串行輸入、串行輸出移位寄存器:z0z1z2z3z4z5z6z7z83.9基本邏輯電路設(shè)計56
方法一、
8位移位寄存器描述
(結(jié)構(gòu)描述)LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSHIFT_8ISPORT(a:INSTD_LOGIC;CLK:INSTD_LOGIC;b:OUTSTD_LOGIC);ENDSHIFT;ARCHITECTURETWOOFSHIFT_8ISCOMPONENTDFFPORT(D,CLK:INSTD_LOGIC;Q:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALZ:STD_LOGIC_VECTOR(0TO8)BEGINZ(0)<=a;G1:FORI0To7GENERATDFFX:DFFPORTMAP(Z(I),CLK,Z(I+1));ENDGENERATE;b<=Z(8);ENDTWO;3.9基本邏輯電路設(shè)計57方法二、
8位移位寄存器直接用信號連接描述LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSHIFTISPORT(a:INSTD_LOGIC;CLK:INSTD_LOGIC;b:OUTSTD_LOGIC);ENDSHIFT;ARCHITECTUREONEOFSHIFTISSIGNALZ1,Z2,Z3,Z4,Z5,Z6,Z7:STD_LOGIC;BEGINPROCESS(CLK)BEGINIF(CLK'eventANDCLK='1')THEN
Z1<=a;Z2<=Z1;Z3<=Z2;Z4<=Z3;Z5<=Z4;Z6<=Z5;Z7<=Z6;b<=Z7;ENDIF;ENDPROCESS;ENDARCHITECTUREONE;3.9基本邏輯電路設(shè)計58移位寄存器仿真結(jié)果:3.9基本邏輯電路設(shè)計594、計數(shù)器
計數(shù)器分為:同步計數(shù)器
異步計數(shù)器(1)同步計數(shù)器
同步計數(shù)器指在時鐘脈沖(計數(shù)脈沖)的控制下,構(gòu)成計數(shù)器的各觸發(fā)器狀態(tài)同時發(fā)生變化的計數(shù)器。3.9基本邏輯電路設(shè)計60LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCNT10ISPORT(CLK,RST,EN:INSTD_LOGIC;CQ:OUTSTD_LOGIC_VECTOR(3DOWNTO0);COUT:OUTSTD_LOGIC);ENDCNT10;異步清0和同步時鐘使能計數(shù)器3.9基本邏輯電路設(shè)計61ARCHITECTUREbehavOFCNT10ISBEGINPROCESS(CLK,RST,EN)VARIABLECQI:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFRST='1'THENCQI:=(OTHERS=>'0');--計數(shù)器異步復(fù)位
ELSIFCLK'EVENTANDCLK='1'THEN--檢測時鐘上升沿
IFEN='1'THEN--檢測是否允許計數(shù)(同步使能)
IFCQI<9THENCQI:=CQI+1;--允許計數(shù),檢測是否小于9ELSECQI:=(OTHERS=>'0');--大于9,計數(shù)值清零
ENDIF;ENDIF;ENDIF;IFCQI=9THENCOUT<='1';--計數(shù)大于9,輸出進(jìn)位信號
ELSECOUT<='0';ENDIF;CQ<=CQI;--將計數(shù)值向端口輸出
ENDPROCESS;ENDbehav;3.9基本邏輯電路設(shè)計62異步清0和同步時鐘使能計數(shù)器仿真波形3.9基本邏輯電路設(shè)計63LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCNT10ISPORT(CLK,RST,EN:INSTD_LOGIC;CQ:OUTSTD_LOGIC_VECTOR(3DOWNTO0);COUT:OUTSTD_LOGIC);ENDCNT10;ARCHITECTUREbehavOFCNT10ISBEGINPROCESS(CLK,RST,EN)VARIABLECQI:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFRST='1'THENCQI:=(OTHERS=>'0');ELSIFCLK'EVENTANDCLK='1'THENIFEN='1'THENIFCQI=9THENCQI:=(OTHERS=>'0');COUT<='1';ELSECQI:=CQI+1;COUT<='0';ENDIF;ENDIF;ENDIF;CQ<=CQI;ENDPROCESS;ENDbehav;另一種表達(dá)方式3.9基本邏輯電路設(shè)計64LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYupdncout64ISPORT(CLK,clr,updn:INSTD_LOGIC;qa,qb,qc,qd,qe,qf:OUTSTD_LOGIC);ENDupdncout64;ARCHITECTURErt1OFupdncount64ISBEGINqa<=count_6(0);qb<=count_6(1);qc<=count_6(2);qd<=count_6(3);qe<=count_6(4);PROCESS(CLK,clr)BEGINif(clr=‘1’)thencount_6<=“000000”;elsif(clk’eventandclk=‘1’)thenif(updn=‘1’)thencount_6<=count_6+1;elsecount_6<=count_6-1;endif;endif;Endprocess;Endrt1;可逆計數(shù)器(加減計數(shù)器)3.9基本邏輯電路設(shè)計65可逆計數(shù)器仿真結(jié)果:3.9基本邏輯電路設(shè)計66例:六十進(jìn)制(分、秒)計數(shù)器Libraryieee;Useieee.std_logic_1164.all;Usestd_logic_unsigned.all;Entityclock60isport(clk,clear:instd_logic;bcd1_out:outstd_logic_vector(3downto0);bcd10_out:outstd_logic_vector(2downto0));Endclock60;Architecturert1ofclock60issignalbcd1n:std_logic_vector(3downto0);signalbcd10n:std_logic_vector(2downto0);Beginbcd1_out<=bcd1n;bcd10_out<=bcd10n;3.9基本邏輯電路設(shè)計67Process(clk,clear)Beginif(clear=‘1’)thenbcd_1n<=“0000”;bcd10n<=“000”;elsif(clk’eventandclk=‘1’)thenif(bcd1n=9)thenbcd1n<=“0000”;if(bcd10n=5)thenbcd10n<=“000”;elsebcd10n<=bcd10n+1;endif;elsebcd1n<=bcd1n+1;endif;endif;Endprocess;Endrt1;3.9基本邏輯電路設(shè)計6860進(jìn)制計數(shù)器仿真結(jié)果:3.9基本邏輯電路設(shè)計69(2)異步計數(shù)器
異步計數(shù)器又稱為行波計數(shù)器,它的低位計數(shù)器的輸出作為高位計數(shù)器的時鐘信號。異步計數(shù)器采用行波計數(shù),使計數(shù)延遲增加,計數(shù)器工作頻率較低。描述異步計數(shù)器與同步計數(shù)器的不同主要體現(xiàn)在對各級時鐘脈沖的描述上。3.9基本邏輯電路設(shè)計70例:由8個觸發(fā)器構(gòu)成的行波計數(shù)器:3.9基本邏輯電路設(shè)計71基本元件dffr的描述:Libraryieee;Useieee.std_logic_1164.all;EntitydffrisPort(clk,clr,d:instd_logic;Q:outstd_logic;QB:outstd_logic);Enddffr;ArchitecturebehofdffrisBeginProcess(clk,clr)Begin
If(clr='0')thenQ<='0';QB<='1';Elsif(clk'eventandclk='1')thenQ<=d;QB<=NOTd;Endif;Endprocess;Endbeh;3.9基本邏輯電路設(shè)計72采用元件例化描述8位行波計數(shù)器libraryieee;useieee.std_logic_1164.all;entityriple_countisport(clk,clr:instd_logic;count:outstd_logic_vector(7downto0));endriple_count;architectureBEHofriple_countissignalcount_in:std_logic_vector(8downto0);componentdffrport(clk,clr,d:instd_logic;q:outstd_logic;qb:outstd_logic);endcomponent;begincount_in(0)<=clk;gen1:foriin0to7generateU:dffrportmap(clk=>count_in(i),clr=>clr,d=>count_in(i+1),q=>count(i),qb=>count_in(i+1));endgenerategen1;endBEH;3.9基本邏輯電路設(shè)計738位行波計數(shù)器仿真結(jié)果:3.9基本邏輯電路設(shè)計745、序列信號發(fā)生器、檢測器
1)“01111110”序列發(fā)生器Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;Entitysenqgenisport(clk,clr,clock:instd_logic;zo:outstd_logic);Endsenqgen;Architectureartofsenqgenissignalcount:std_logic_vector(2downto0);signalz:std_logic:=‘0’;Beginprocess(clk,clr)beginifclr=‘1’thencount<=“000”;3.9基本邏輯電路設(shè)計75Elseifclk’eventandclk=‘1’thenifcount=“111”thencount<=“000”;elsecount<=count+1;endif;endif;Endprocess;Process(count)Begincasecountiswhen“000”=>z<=‘0’;when“001”=>z<=‘1’;when“010”=>z<=‘1’;when“011”=>z<=‘1’;when“100”=>z<=‘1’;when“101”=>z<=‘1’;when“110”=>z<=‘1’;whenothers=>z<=‘0’;endcase;endprocess;3.9基本邏輯電路設(shè)計76Process(clock,z)Beginifclock’eventandclock=‘1’thenzo<=z;endif;Endprocess;Endart;3.9基本邏輯電路設(shè)計77仿真結(jié)果:3.9基本邏輯電路設(shè)計782)序列信號檢測器,檢測“01111110”libraryieee;useieee.std_logic_1164.all;entitydetectisport(data_in:instd_logic;clk:instd_logic;q:outstd_logic);enddetect;architecturebevofdetectistypestate_typeis(s0,s1,s2,s3,s4,s5,s6,s7,s8);beginprocessvariablepresent_state:state_type;
3.9基本邏輯電路設(shè)計79beginq<='0';casepresent_stateiswhens0=>ifdata_in='0'thenpresent_state:=s1;elsepresent_state:=s0;endif;whens1=>ifdata_in='1'thenpresent_state:=s2;elsepresent_state:=s1;endif;whens2=>ifdata_in='1'thenpresent_state:=s3;elsepresent_state:=s1;endif;whens3=>ifdata_in='1'thenpresent_state:=s4;elsepresent_state:=s1;endif;whens4=>ifdata_in='1'thenpresent_state:=s5;elsepresent_state:=s1;endif;whens5=>ifdata_in='1'thenpresent_state:=s6;
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 成都小區(qū)物業(yè)管理合同
- 招投標(biāo)委托中介合同
- 伸縮縫安裝勞務(wù)承包合同
- 涵洞混凝土墊層施工方案
- 圍墻改造施工方案范本
- TDGAS 044-2024 服裝領(lǐng)域眾包車間評價技術(shù)規(guī)范
- 邢臺籃球場圍欄網(wǎng)施工方案
- 設(shè)備拆除再利用施工方案
- 普洱太陽能電池板施工方案
- 河北省邯鄲市三龍育華中學(xué)2023-2024學(xué)年高一下學(xué)期第一次月考語文試題(原卷版+解析版)
- 心肺復(fù)蘇術(shù)課件2024新版
- 經(jīng)濟(jì)法學(xué)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 道法滋養(yǎng)心靈+課件- 2024-2025學(xué)年統(tǒng)編版道德與法治七年級上冊
- 醫(yī)院培訓(xùn)課件:《嚴(yán)重創(chuàng)傷快速轉(zhuǎn)診機制》
- 廣東東莞市2025屆高考物理一模試卷含解析
- 2024-2030年中國杜仲行業(yè)市場深度調(diào)研及發(fā)展趨勢與投資前景預(yù)測研究報告
- TCECA-G 0310-2024 離網(wǎng)制氫靈活消納與柔性化工系統(tǒng)開發(fā)規(guī)范
- 集團(tuán)有限公司投融資工作管理制度
- 醫(yī)院感染管理基礎(chǔ)知識培訓(xùn)
- 河南省洛陽市瀍河回族區(qū)2023-2024學(xué)年九年級上學(xué)期期末語文試題
- 2024年3月時政熱點(一)
評論
0/150
提交評論