《EDA技術及應用》課件-第7章_第1頁
《EDA技術及應用》課件-第7章_第2頁
《EDA技術及應用》課件-第7章_第3頁
《EDA技術及應用》課件-第7章_第4頁
《EDA技術及應用》課件-第7章_第5頁
已閱讀5頁,還剩443頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第7章VHDL基本邏輯電路設計7.1組合邏輯電路設計7.2時序邏輯電路設計7.3輸入輸出電路設計7.4有限狀態(tài)機設計

7.1組合邏輯電路設計

7.1.1基本門電路

1.“與”門電路

在數(shù)字電路中,最簡單的“與”門電路是二輸入“與”門電路,它的邏輯表達式如下所示:

F?=?A·B

二輸入“與”門電路的邏輯符號如圖7-1所示,真值表如表7-1所示。圖7-1二輸入“與”門電路邏輯符號由于VHDL語法的多樣性和靈活性,通??梢圆捎貌煌姆绞絹韺﹂T電路的邏輯功能進行描述。根據(jù)二輸入“與”門電路的邏輯表達式,可以采用行為描述方式,它的VHDL設計程序如例7.1所示。根據(jù)二輸入“與”門電路的真值表,也可以采用寄存器傳輸描述方式(或稱數(shù)據(jù)流描述方式),它的VHDL設計程序如例7.2所示。

【例7.1】二輸入“與”門電路的VHDL程序一。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYand_gateIS

PORT(A:INSTD_LOGIC;

B:INSTD_LOGIC;

F:OUTSTD_LOGIC);

ENDand_gate;

ARCHITECTUREbehaveOFand_gateIS

BEGIN

F<=AANDB;

ENDbehave;

【例7.2】二輸入“與”門電路的VHDL程序二。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYand_gateIS

PORT(A:INSTD_LOGIC;

B:INSTD_LOGIC;

F:OUTSTD_LOGIC);

ENDand_gate;

ARCHITECTURErtlOFand_gateIS

BEGIN

PROCESS(A,B)

VARIABLEcomb:STD_LOGIC_VECTOR(1DOWNTO0);

BEGIN

comb:=A&B;

CASEcombIS

WHEN"00"=>F<='0':

WHEN“01”=>F<=‘0’;

WHEN“10”=>F<=‘0’;

WHEN“11”=>F<=‘1’;

WHENOTHERS=>F<=‘X’;

ENDCASE;

ENDPROCESS;

ENDrtl;對二輸入“與”門電路的VHDL設計程序進行仿真,不難得到VHDL設計程序的仿真波形如圖7-2所示。圖7-2二輸入“與”門仿真波形

2.“或”門電路

在數(shù)字電路中,最簡單的“或”門電路是二輸入“或”門電路,它的邏輯表達式如下所示:

F=A+B

二輸入“或”門電路的邏輯符號如圖7-3所示,真值表如表7-2所示。圖7-3二輸入“或”門電路邏輯符號根據(jù)二輸入“或”門電路的邏輯表達式,可以給出采用行為描述方式的VHDL設計程序,如例7.3所示;根據(jù)二輸入“或”門電路的真值表,也可以給出采用寄存器傳輸描述方式的VHDL設計程序,如例7.4所示。

【例7.3】二輸入“或”門電路的VHDL程序一。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYor_gateIS

PORT(A:INSTD_LOGIC;

B:INSTD_LOGIC;

F:OUTSTD_LOGIC);

ENDor_gate;

ARCHITECTUREbehaveOFor_gateIS

BEGIN

F<=AORB;

ENDbehave;

【例7.4】二輸入“或”門電路的VHDL程序二。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYor_gateIS

PORT(A:INSTD_LOGIC;

B:INSTD_LOGIC;

F:OUTSTD_LOGIC);

ENDand_gate;

ARCHITECTURErtlOFor_gateIS

BEGIN

PROCESS(A,B)

VARIABLEcomb:STD_LOGIC_VECTOR(1DOWNTO0);

BEGIN

comb:=A&B;

CASEcombIS

WHEN"00"=>F<='0':

WHEN“01”=>F<=‘1’;

WHEN“10”=>F<=‘1’;

WHEN“11”=>F<=‘1’;

WHENOTHERS=>F<=‘X’;

ENDCASE;

ENDPROCESS;

ENDrtl;對二輸入“或”門電路的VHDL設計程序進行仿真,不難得到VHDL設計程序的仿真波形,如圖7-4所示。圖7-4二輸入“或”門電路仿真波形

3.“非”門電路

數(shù)字電路中,“非”門電路的邏輯表達式如下所示:

F?=A

?“非”門電路的邏輯符號如圖7-5所示,真值表如表7-3所示。圖7-5“非”門電路邏輯符號根據(jù)“非”門電路的邏輯表達式,可以給出采用行為描述方式的VHDL設計程序,如例7.5所示;根據(jù)“非”門電路的真值表,也可以給出采用寄存器傳輸描述方式的VHDL,設計程序如例7.6所示。

【例7.5】“非”門電路的VHDL程序一。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYnot_gateIS

PORT(A:INSTD_LOGIC;

F:OUTSTD_LOGIC);

ENDnot_gate;

ARCHITECTUREbehaveOFnot_gateIS

BEGIN

F<=NOTA;

ENDbehave;

【例7.6】“非”門電路的VHDL程序二。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYnot_gateIS

PORT(A:INSTD_LOGIC;

F:OUTSTD_LOGIC);

ENDnot_gate;

ARCHITECTURErtlOFnot_gateIS

BEGIN

PROCESS(A)

BEGIN

CASEAIS

WHEN‘0’=>F<=‘1’;

WHEN'1'=>F<='0';

WHENOTHERS=>F<=‘X’;

ENDCASE;

ENDPROCESS;

ENDrtl;

對“非”門電路的VHDL設計程序進行仿真,不難得出VHDL設計程序的仿真波形,如圖7-6所示。圖7-6“非”門電路仿真波形

4.多輸入邏輯門電路

在數(shù)字電路設計的過程中,邏輯門電路的輸入往往不止一個(對于非門電路來說是一個)或者兩個,有時候還存在多個輸入的情況,這時就需要采用多輸入邏輯門電路來進行相應的設計。下面我們以8輸入“或”門為例來介紹多輸入邏輯門電路的VHDL程序設計,其設計程序如例7.7所示。

【例7.7】8輸入“或”門電路程序。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYor8_gateIS

PORT(A:INSTD_LOGIC_VECTOR(7DOWNTO0);

F:OUTSTD_LOGIC);

ENDor8_gate;

ARCHITECTUREbehaveOFor8_gateIS

BEGIN

F<=A(7)ORA(6)ORA(5)ORA(4)ORA(3)ORA(2)ORA(1)ORA(0);

ENDbehave;7.1.2數(shù)據(jù)選擇器

數(shù)據(jù)選擇器具有2N條輸入數(shù)據(jù)線、N條地址選擇線和一條輸出數(shù)據(jù)線。下面我們以四選一數(shù)據(jù)選擇器為例來介紹數(shù)據(jù)選擇器的VHDL設計過程,它的邏輯符號如圖7-7所示,功能如表7-4所示。圖7-7四選一數(shù)據(jù)選擇器的邏輯符號由于VHDL語法的多樣性和靈活性,通常可以采用IF語句、CASE語句、選擇信號賦值語句和條件信號賦值語句來描述四選一數(shù)據(jù)選擇器的邏輯功能。由于篇幅限制,下面僅給出采用IF語句描述四選一數(shù)據(jù)選擇器的VHDL程序,其他方式讀者可參照例7.8自行完成。

【例7.8】四選一數(shù)據(jù)選擇器的VHDL程序。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTlTYmux4IS

PORT(d0:INSTD_LOGIC;

d1:INSTD_LOGIC;

d2:INSTD_LOGIC;

d3:INSTD_LOGIC;

s0:INSTD_LOGIC;

s1:INSTD_LOGIC;

y:OUTSTD_LOGIC);

ENDmux4;

ARHCITECTURErtlOFmux4IS

BEGIN

PROCESS(d0,d1,d2,d3,s0,s1)

BEGIN

IFs1=‘0’ANDs0=‘0’THEN

y<=d0;

ELSIFs1=‘0’ANDs0=‘1’THEN

y<=d1;

ELSIFs1=‘1’ANDs0=‘0’THEN

y<=d2;

ELSIFs1=‘1’ANDs0=‘1’THEN

y<=d3;

ELSE

y<=‘Z’;

ENDIF;

ENDPROCESS;

ENDrtl;

對四選一數(shù)據(jù)選擇器的VHDL程序進行仿真驗證,不難得到相應設計的時序仿真波形,如圖7-8所示。圖7-8四選一數(shù)據(jù)選擇器的仿真波形

【例7.9】八選一數(shù)據(jù)選擇器的VHDL程序。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYmux8IS

PORT(data:INSTD_LOGIC_VECTOR(7DOWNTO0);

s0:INSTD_LOGIC;

s1:INSTD_LOGIC;

s2:INSTD_LOGIC;

y:OUTSTD_LOGIC);ENDmux8;

ARCHITECTURErtlOFmux8IS

SIGNALsel:STD_LOGIC_VECTOR(2DOWNTO0);

BEGIN

sel<=s2&s1&s0;

PROCESS(data,sel)

BEGIN

CASEselIS

WHEN"000"=>y<=data(0);

WHEN"001"=>y<=data(1);

WHEN“010”=>y<=data(2);

WHEN“011”=>y<=data(3);

WHEN“100”=>y<=data(4);

WHEN“101”=>y<=data(5);

WHEN“110”=>y<=data(6);

WHENOTHERS=>y<=data(7);

ENDCASE;

ENDPROCESS;

ENDrtl;對上述的八選一數(shù)據(jù)選擇器進行仿真驗證,其功能仿真波形如圖7-9所示。圖7-9八選一數(shù)據(jù)選擇器的功能仿真波形7.1.3編碼器和譯碼器

1.編碼器

在數(shù)字電路中,為了區(qū)分一系列不同的事物,將其中的每一個事物用一個二進制代碼來表示,這就是編碼的含義。編碼器的邏輯功能就是把編碼器輸入的每一個高、低電平的信號編寫成一個對應的二進制信號,即把2N個輸入信號轉化為N位編碼輸出。圖7-108-3編碼器的邏輯符號

1)普通編碼器

最簡單的普通編碼器是8-3編碼器,它的邏輯符號如圖

7-10所示,真值表如表7-5所示。可以看出8-3編碼器的功能是對8個輸入信號進行編碼操作,然后以3位二進制碼的形式輸出(這里輸入信號是低電平有效)。

【例7.10】8-3普通編碼器的VHDL程序設計。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYencoderIS

PORT(din:INSTD_LOGIC_VECTOR(7DOWNTO0);

y:OUTSTD_LOGIC_VECTOR(2DOWNTO0));

ENDencoder;ARCHITECTURErtlOFencoderIS

BEGIN

PROCESS(din)

BEGIN

CASEdinIS

WHEN"01111111"=>y<="111";

WHEN"10111111"=>y<="110";

WHEN"11011111"=>y<="101";

WHEN"11101111"=>y<="100";

WHEN"11110111"=>y<="011";

WHEN“11111011”=>y<=“010”;

WHEN“11111101”=>y<=“001”;

WHEN“11111110”=>y<=“000”;

WHENOTHERS=>y<=”ZZZ”;

ENDCASE;

ENDPROCESS;

ENDrtl;對上述8-3普通編碼器的VHDL設計程序進行仿真驗證,其仿真波形如圖7-11所示。圖7-118-3普通編碼器的仿真波形

2)優(yōu)先編碼器

在某一個給定時刻,輸入端允許同時出現(xiàn)兩個或兩個以上的輸入信號,而且只對優(yōu)先級最高的輸入信號進行編碼的編碼器稱為優(yōu)先編碼器??梢钥闯?,優(yōu)先編碼器與普通編碼器的最大不同是允許在同一時刻出現(xiàn)多個有效的輸入信號,同時所有的有效輸入信號按照優(yōu)先級高低進行排序,當幾個輸入信號同時出現(xiàn)時,只對其中優(yōu)先級最高的一個輸入信號進行編碼。常用的簡單優(yōu)先編碼器是74LS148,它的邏輯符號如圖

7-12所示,它的功能表如表7-6所示。在功能表中,“X”代表任意項;EI是74LS148的使能控制端,低電平有效;EO是無編碼信號輸入狀態(tài)標志端,低電平有效;GS是有編碼信號輸入狀態(tài)標志端,低電平有效。EO和GS兩個控制端對于編碼器的級聯(lián)是十分有用的。由74LS148的功能表可以看出,它的邏輯功能是對8個輸入信號進行帶有優(yōu)先級的編碼操作,然后將編碼結果以3位二進制碼的形式送到輸出端,這里輸入信號D7的優(yōu)先級最高。根據(jù)優(yōu)先編碼器74LS148的功能表來進行相應的VHDL設計,其對應的VHDL設計程序如例7.11所示。由于目前VHDL還不能用來描述任意項,因此語句“WHEN“0XXXXXXX”=>

q<=“000”;”是非法的,所以在這里采用IF語句而沒有采用CASE語句來描述74LS148的功能。圖7-1274LS148的邏輯符號

【例7.11】74LS148優(yōu)先編碼器的VHDL程序。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYencoder_priorityIS

PORT(D:INSTD_LOGIC_VECTOR(7DOWNTO0);

EI:INSTD_LOGIC;

Q:OUTSTD_LOGIC_VECTOR(2DOWNTO0);

GS:OUTSTD_LOGIC;

EO:OUTSTD_LOGIC);

ENDencoder_priority;

ARCHITECTURErtlOFencoder_priorityIS

BEGIN

PROCESS(EI,D)

BEGIN

IF(EI='1')THEN

GS<='1';

EO<='1';

ELSIF(D=“11111111”ANDEI='0')THEN

Q<=“111”;

GS<='1';

EO<='0';

ELSIF(D(7)='0'ANDEI='0')THEN

Q<=“000”;

GS<='0';

EO<='1';

ELSIF(D(6)='0'ANDEI='0')THEN

Q<=“001”;

GS<='0';

EO<='1';

ELSIF(D(5)='0'ANDEI='0')THEN

Q<=“010”;

GS<='0';

EO<='1';

ELSIF(D(4)='0'ANDEI='0')THEN

Q<=“011”;

GS<='0';

EO<='1';

ELSIF(D(3)='0'ANDEI='0')THEN

Q<=“100”;

GS<='0';

EO<='1';

ELSIF(D(2)='0'ANDEI='0')THEN

Q<=“101”;

GS<='0';

EO<='1';

ELSIF(D(1)='0'ANDEI='0')THEN

Q<=“110”;

GS<='0';

EO<='1';

ELSIF(D(0)='0'ANDEI='0')THEN

Q<=“111”;

GS<='0';

EO<='1';

ELSE

Q<=“111”;

GS<='1';

EO<='0';

ENDI;

ENDPROCESS;

ENDrtl;下面對優(yōu)先編碼器74LS148的VHDL設計程序進行仿真驗證,不難得出如圖7-13所示的仿真波形。圖7-13優(yōu)先編碼器74LS148的仿真波形

2.譯碼器

1)二進制譯碼器

二進制譯碼器的邏輯功能是把輸入的二進制代碼的各種組合狀態(tài)翻譯成對應的輸出信號,有時也稱為變量譯碼器。在數(shù)字電路中,最常用的二進制譯碼器是74LS138,它的邏輯符號如圖7-14所示,功能表如表7-7所示??梢钥闯?,譯碼器74LS138的功能是對3個輸入信號進行譯碼以確定8個信號的輸出,因此它也稱為3-8譯碼器。圖7-1474LS138譯碼器邏輯符號

【例7.12】74LS138譯碼器的VHDL程序。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYvariable_decoderIS

PORT(A:INSTD_LOGIC;

B:INSTD_LOGIC:

C:INSTD_LOGIC;

G1:INSTD_LOGIC;

G2A:INSTD_LOGIC;

G2B:INSTD_LOGIC;

Y:OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDvariable_decoder;

ARCHITECTURErtlOFvariable_decoderIS

BEGIN

PROCESS(G1,G2A,G2B,A,B,C)

VARIABLECOMB:STD_LOGIC_VECTOR(2DOWNTO0);

BEGIN

IF(G1=‘1’ANDG2A=‘0’ANDG2B=‘0’)THEN

COMB:=C&B&A;

CASECOMBIS

WHEN"000"=>Y<="11111110";WHEN"001"=>Y<="11111101";

WHEN"010"=>Y<="11111011";

WHEN"011"=>Y<="11110111";

WHEN"100"=>Y<="11101111";

WHEN"101"=>Y<="11011111";

WHEN"110"=>Y<="10111111";

WHEN"111"=>Y<="01111111";

WHENOTHERS=>Y<="XXXXXXXX";

ENDCASE;

ELSE

Y<=“11111111”;

ENDIF;

ENDPROCESS;

ENDrtl;

下面對譯碼器74LS138的VHDL設計程序進行仿真驗證,不難得出如圖7-15所示的仿真波形。圖7-1574LS138仿真波形

2)數(shù)碼顯示譯碼器

數(shù)碼顯示譯碼器用來驅動各種顯示器件,從而將用二進制代碼表示的數(shù)字、文字、符號直觀地顯示出來。其結構如圖

7-16所示,數(shù)碼顯示譯碼器的真值表如表7-8所示。圖7-16數(shù)碼顯示器的結構

【例7.13】七段數(shù)碼管顯示譯碼電路的VHDL程序。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYxsymIS

PORT(num:INSTD_LOGIC_VECTOR(3DOWNTO0);

dout:OUTSTD_LOGIC_VECTOR(6DOWNTO0));

ENDxsym;

ARCHITECTURErtlOFxsymIS

BEGIN

WITHNUMSELECT

dout<="1111110"WHEN"0000",--0?"0110000"WHEN"0001",--1

"1101101"WHEN"0010",--2

"1111001"WHEN"0011",--3

"0110011"WHEN"0100",--4

"1011011"WHEN"0101",--5

"1011111"WHEN"0110",--6

"1110000"WHEN"0111",--7

"1111111"WHEN"1000",--8

"1111011"WHEN"1001",--9

"0000000"WHENOTHERS;

ENDrtl;下面我們對上述的VHDL程序進行仿真驗證,其仿真波形如圖7-17所示。圖7-17數(shù)碼顯示譯碼電路的仿真波形7.1.4加法器

1.半加器

1位半加器有兩個輸入端,兩個輸出端。其邏輯符號如圖7-18所示,其中a、b為被加數(shù)和加數(shù)輸入端,s為和輸出端,co為進位輸出端,其真值表如表7-9所示。圖7-18半加器邏輯符號

【例7.14】1位半加器的VHDL程序。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYhalf_adderIS

PORT(a:INSTD_LOGIC;

b:INSTD_LOGIC;

s:OUTSTD_LOGIC;

co:OUTSTD_LOGIC);

ENDhalf_adder;

ARCHITECTURErtlOFhalf_adderIS

SIGNALc,d:STD_LOGIC;

BEGIN

c<=aORb;

d<=aNANDb;

co<=NOTd;

s<=cANDd;

ENDrtl;下面對半加器的VHDL設計程序進行仿真驗證,不難得出如圖7-19所示的仿真波形。圖7-19半加器的仿真波形

2.全加器

全加器有3個二進制輸入端a、b和低位進位端cin,以及1位和的輸出端s和進位輸出端cout,其真值表如表7-10所示,邏輯功能符號如圖7-20所示。圖7-20全加器的邏輯符號根據(jù)表7-10所示的真值表,可以得到一位全加器的輸出和與進位輸出的邏輯表達式如下所示:

【例7.15】1位全加器的VHDL程序(寄存器描述方式)。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYfull_adderIS

PORT(a:INSTD_LOGIC;

b:INSTD_LOGIC;

cin:INSTD_LOGIC;

s:OUTSTD_LOGIC;

co:OUTSTD_LOGIC);

ENDfull_adder;

ARCHITECTURErtlOFfull_adderIS

SIGNALtmp1,tmp2:STD_LOGIC;

BEGIN

tmp1<=aORb;

tmp2<=tmp1ANDcin;

s<=tmp1XORcin;

co<=tmp2OR(aANDb);

ENDrtl;下面將對1位全加器的VHDL設計程序進行仿真驗證,可以得到相應的仿真波形如圖7-21所示。圖7-211位全加器的仿真波形在實際設計中,1位全加器通常采用2個半加器來構成,則全加器的電路圖如圖7-22所示。圖7-22用2個半加器構成的全加器

【例7.16】1位全加器的VHDL程序(結構化描述方式)。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYfull_adderIS

PORT(a:INSTD_LOGIC;

b:INSTD_LOGIC;

cin:INSTD_LOGIC;

s:OUTSTD_LOGIC;

cout:OUTSTD_LOGIC);

ENDfull_adder;

ARCHITECTUREstructureOFfull_adderIS

COMPONENThalf_adder

PORT(a:INSTD_LOGIC;

b:INSTD_LOGIC;

s:INSTD_LOGIC;

co:OUTSTD_LOGIC);

ENDCOMPONENT;

SIGNALtemp1,temp2,temp3:STD_LOGIC;

BEGIN

u0:half_adderPORTMAP(a,b,temp1,temp2);

u1:half_adderPORTMAP(temp1,cin,s,temp3);

cout<=temp2ORtemp3;

ENDstructure;

對上述1位全加器的仿真驗證波形同圖7-21,這里留給讀者自行完成。7.1.5比較器

表7-11給出了一種最簡單的1位數(shù)值比較器的功能表,可以看出它具有等于、大于和小于三種比較結果。根據(jù)表7-11可以很容易地給出描述其邏輯功能的VHDL設計程序,如例7.17所示。

【例7.17】?1位比較器的VHDL程序。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYcompIS

PORT(A:INSTD_LOGIC;

B:INSTD_LOGIC;

Q:OUTSTD_LOGIC_VECTOR(2DOWNTO0));

ENDcomp;

ARCHITECTURErtlOFcompIS

BEGIN

PROCESS(A,B)

BEGIN

IF(A=B)THEN

Q<=“001”;

ELSIF(A>B)THEN

Q<=“010”;

ELSE

Q<=“100”;

ENDIF;

ENDPROCESS;

ENDrtl;

對1位數(shù)值比較器的VHDL設計程序進行仿真驗證,可以得到如圖7-23所示的仿真波形。圖7-231位數(shù)值比較器的仿真波形實際使用中,應用較為廣泛的數(shù)值比較器是4位數(shù)數(shù)值比較器CC14585,它的邏輯符號如圖7-24所示,功能表如表7-12所示??梢钥闯?,4位數(shù)值比較器CCl4585的具體邏輯功能如下:

(1)當輸入數(shù)據(jù)A大于輸入數(shù)據(jù)B時,有GT=l,EQ=LT=0。

(2)當輸入數(shù)據(jù)A小于輸入數(shù)據(jù)B時,有LT=1,GT=EQ=0。

(3)如果輸入數(shù)據(jù)A等于輸入數(shù)據(jù)B,則當I1=1時,GT=1,EQ=LT=0;當I2=1時,EQ=1,GT=LT=0;當I3=1時,LT=1,GT=EQ=0。圖7-24CC14585數(shù)值比較器符號圖

【例7.18】4位數(shù)值比較器CC14585的VHDL程序。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYcomp4IS

PORT(A:INSTD_LOGIC_VECTOR(3DOWNTO0);

B:INSTD_LOGIC_VECTOR(3DOWNTO0);

I1:INSTD_LOGIC;

I2:INSTD_LOGIC;

I3:INSTD_LOGIC;

GT:OUTSTD_LOGIC;

EQ:OUTSTD_LOGIC;

LT:OUTSTD_LOGIC);

ENDcomp4;

ARCHITECTURErtlOFcomp4IS

BEGIN

GT<=‘0’WHENA<BOR((A=B)ANDI2=‘1’)OR((A=B)ANDI3=‘1’)

ELSE‘1’WHENA>BOR((A=B)ANDI1=‘1’)

ELSE‘Z’;

EQ<='0'WHENA>BORA<BOR((A=B)ANDI1='1')OR((A=B)ANDI3='1')

ELSE‘1’WHEN((A=B)ANDI2=‘1’)

ELSE‘Z’;

LT<=‘0’WHENA>BOR((A=B)ANDI2=‘1’)OR((A=B)ANDI1=‘1’)

ELSE‘1’WHENA<BOR((A=B)ANDI3=‘1’)

ELSE‘Z’;

ENDrtl;對上述的4位數(shù)值比較器CC14585的VHDL設計程序進行仿真驗證,不難得出相應的仿真波形,如圖7-25所示。圖7-254位數(shù)值比較器CC14585的仿真波形7.1.6三態(tài)門和總線緩沖器

1.三態(tài)門

三態(tài)門電路是在普通門電路的基礎上附加控制電路構成的。三態(tài)門電路的邏輯符號如圖7-26所示,真值表如表7-13所示??梢钥闯?,如果控制端口的輸入信號EN=1,那么輸入數(shù)據(jù)直接送到dout端口上;否則,輸出端口為高阻狀態(tài)。圖7-26三態(tài)門邏輯符號

【例7.19】三態(tài)門的VHDL程序。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYtri_state_gateIS

PORT(din:INSTD_LOGIC;

en:INSTD_LOGIC;

dout:OUTSTD_LOGIC);

ENDtri_state_gate;

ARCHITECTUREbehaveOFtri_state_gateIS

BEGIN

PROCESS(en,din)

BEGIN

IF(en=‘1’)THEN

dout<=din;

ELSE

dout<=‘Z’;

ENDIF;

ENDPROCESS;

ENDbehave;下面我們對三態(tài)門的VHDL程序進行驗證,其仿真波形如圖7-27所示。圖7-27三態(tài)門仿真波形

2.總線緩沖器

1)單向總線緩沖器

典型的8位單向總線緩沖器如圖7-28所示,真值表如表

7-14所示。8位單向總線緩沖器由8個三態(tài)門組成,具有8個輸入和輸出端口。所有三態(tài)門的控制端連在一起,由一個控制輸入端en控制。圖7-288位單向總線緩沖器符號

【例7.20】8位單向總線緩沖器的VHDL設計程序。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYsingle_buff8IS

PORT(din:INSTD_LOGIC_VECTOR(7DOWNTO0);

en:INSTD_LOGIC;

dout:OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDsingle_buff8;

ARCHITECTUREbehaveOFsingle_buff8IS

BEGIN

PROCESS(en,din)

BEGIN

IF(en=‘1’)THEN

dout<=din;

ELSE

dout<=“ZZZZZZZZ”;

ENDIF;

ENDPROCESS;

ENDbehave;圖7-298位單向總線緩沖器仿真波形

2)雙向總線緩沖器

典型的8位雙向總線緩沖器如圖7-30所示。圖中的雙向緩沖器有兩個數(shù)據(jù)輸入輸出端a、b,一個方向控制端dir和一個選通端en。當en=1時,雙向總線緩沖器未被選通,a和b呈現(xiàn)高阻狀態(tài);當en=0時,雙向總線緩沖器被選通,如果dir=0,那么a=b,如果dir=1,那么b=a。雙向總線緩沖器的真值表如表

7-15所示。圖7-30雙向總線緩沖器

【例7.21】雙向總線緩沖器的VHDL設計程序。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYbi_buff8IS

PORT(a,b:INOUTSTD_LOGIC_VECTOR(7DOWNTO0);

en,dir:INSTD_LOGIC);

ENDbi_buff8;ARCHITECTUREbehaveOFbi_buff8IS

SIGNALaout,bout:STD_LOGIC_VECTOR(7DOWNTO0);

BEGIN

PROCESS(a,dir,en)

BEGIN

IF(en='0')AND(dir='1')THEN

bout<=a;

ELSE

bout<="ZZZZZZZZ";

ENDIF;

b<=bout;ENDPROCESS;

PROCESS(b,dir,en)

BEGIN

IF(en='0')AND(dir='0')THEN

aout<=b;

ELSE

aout<="ZZZZZZZZ";

ENDIF;

a<=aout;

ENDPROCESS;

ENDbehave;

從例7.21可以看出,雙向總線緩沖器由兩組三態(tài)門組成,利用信號aout和bout將兩組三態(tài)門連接起來。由于在實際工作中a、b都不可能同時出現(xiàn)“0”和“1”,故在這里沒有使用判決

函數(shù)。圖7-318位雙向總線緩沖器仿真波形7.2時序邏輯電路設計

7.2.1時鐘信號和復位信號

1.時鐘信號

(1)進程的敏感信號是時鐘信號。在這種情況下,時鐘信號應作為敏感信號,顯式地出現(xiàn)在PROCESS語句后跟的括號中,例如PROCESS(clock_signal)。時鐘信號邊沿的到來,將作為時序電路語句執(zhí)行的條件,如例7.22所示。

【例7.22】進程的敏感信號是時鐘信號示例。

PROCESS(clk_signal)

BEGIN

IF(clock_edge_condition)THEN

signal_out<=signal_in

ENDIF;

ENDPROCESS;

(2)用進程中的WAITON語句等待時鐘。在這種情況下,描述時序電路的進程將沒有敏感信號,而是用WAITON語句來控制進程的執(zhí)行。也就是說,進程通常停留在WAITON語句上,只有在時鐘信號到來且滿足邊沿條件時,其余的語句才能執(zhí)行,如例7.23所示。

【例7.23】用進程中的WAITON語句等待時鐘示例。

PROCESS

BEGIN

WAITON(clock_signal)UNTIL(clock_edge_condition)

signal_out<=signal_in

ENDPROCESS;在編寫上述程序時應注意以下幾點:

①無論IF語句還是WAITON語句,在時鐘邊沿說明時,一定要注明是上升沿還是下降沿,僅僅說明邊沿還是不行的。

②當時鐘信號作為進程敏感信號時,在敏感信號列表中不能出現(xiàn)一個以上的時鐘信號,除時鐘信號以外,像復位信號等是可以和時鐘信號一起出現(xiàn)在敏感信號列表中的。

③WAITON語句只能放在進程的最前面或是最后面。

(3)時鐘邊沿的描述。為了描述時鐘邊沿,一定要指定是上升沿還是下降沿,這一點可以使用時鐘信號的屬性描述來實現(xiàn)。也就是說,時鐘信號的值是從“0”到“1”變化,還是從“1”到“0”變化,由此可以得知是時鐘脈沖信號的上升沿還是下

降沿。

①時鐘脈沖的上升沿描述。時鐘脈沖上升沿波形與時鐘信號屬性的描述關系如圖7-32所示。從圖中可以看出,時鐘信號起始值為“0”,故其屬性值clk’LAST_VALUE=‘0’;上升沿的到來表示發(fā)生了一個事件,故用clk’EVENT表示;上升沿以后,時鐘信號的值為“1”,故其當前值為clk=‘1’,這樣,表示上升沿到來的條件可以寫為

IFclk='1'ANDclk'LAST_VALUE='0'ANDclk'EVENT;圖7-32時鐘脈沖上升沿波形和時鐘信號屬性描述關系②時鐘脈沖下降沿描述。時鐘信號下降沿波形與時鐘信號屬性的描述關系如圖7-33所示。其關系與圖7-32類同,此時clk’LAST_VALUE=‘1’;時鐘信號當前值為clk=‘0’;下降沿到來的事件為clk’EVENT。這樣表示下降沿到來的條件可寫為

IFclk='0'ANDclk'LAST_VALUE='0'ANDclk'EVENT;根據(jù)上面的上升沿和下降沿的描述,時鐘信號邊沿檢出條件可以統(tǒng)一描述如下:

IFclock_signal=current_valueAND

clock_signal‘LAST_VALUE=’0‘AND

clock_signal’EVENT;

實際中,經(jīng)常將邊沿檢出的條件簡寫為如下形式:

IFclock_signal=current_valueANDclock_signal'EVENT圖7-33時鐘脈沖下降沿波形和時鐘信號屬性描述關系

2.復位信號

1)同步復位

在使用VHDL語言描述時,同步復位一定在以時鐘為敏感信號的進程中定義,且用IF語句來描述必要的復位條件。下面兩個例子就是同步復位的描述實例。

【例7.24】同步復位描述方式一。

PROCESS(clock_signal)

BEGIN

IF(clock_edge_condition)THEN

IF(reset_condition)THEN

signal_out<=reset_value;

ELSE

signal_out<=signal_in;

ENDIF;

ENDIF;

ENDPROCESS;

【例7.25】同步復位描述方式二。

PROCESS

BEGIN

WAITON(clock_signal)UNTIL(clock_edge_condition)

IF(reset_condition)

ELSE

signal_out<=signal_in;

ENDIF;

ENDIF;

ENDPROCESS;

2)異步復位

異步復位在描述時與同步方式不同。首先在進程的敏感信號中除時鐘信號以外,還應加上復位信號;其次是用IF語句描述復位條件;最后在ELSIF段描述時鐘信號邊沿的條件,并加上EVENT屬性。其描述方式如例7.26所示。

【例7.26】異步復位描述方式示例。

PROCESS(reset_signal,clock_signal)

BEGIN

IF(reset_condition)THEN

signal_out<=reset_value;

ELSIF(clock_eventANDclock_edge_condition)THEN

signal_out<=signal_in;

ENDIF;

ENDPROCESS;從例7.26可以看出,非同步時的信號和變量的代入值必須在時鐘信號邊沿有效的范圍內(nèi)進行,如在例7.26中的ELSIF后進行的那樣。

另外,添加clock_event是為了防止沒有時鐘信號發(fā)生時的誤操作。譬如,現(xiàn)在時鐘事件沒有發(fā)生而是發(fā)生了復位事件,這樣該進程就得到了啟動。7.2.2觸發(fā)器和鎖存器

1.觸發(fā)器

1)?D觸發(fā)器

D觸發(fā)器是一種應用十分廣泛的鐘控觸發(fā)器,它是構成各種復雜系統(tǒng)的基本單元。一個基本的D觸發(fā)器的邏輯符號如圖7-34所示,它的真值表如表7-16所示。圖7-34D觸發(fā)器邏輯符號

【例7.27】D觸發(fā)器的VHDL程序。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYdff1IS

PORT(d,cp:INSTD_LOGIC;

q:OUTSTD_LOGIC;

qb:OUTSTD_LOGIC);

ENDdff1;

ARCHITECTURErtlOFdff1IS

BEGIN

PROCESS(cp)

BEGIN

IF(cp=‘1’)AND(cp‘EVENT)THEN

q<=d;

qb<=NOTd;

ENDIF;

ENDPROCESS;

ENDrtl;下面對D觸發(fā)器的VHDL設計程序進行仿真驗證,不難得出其設計的仿真波形如圖7-35所示。圖7-35D觸發(fā)器的時序仿真波形一般來說,實際設計中并非所有的器件在上電時都能處于復位或置位狀態(tài),因此實際應用中的器件都會含有相應的復位或置位控制端口。同樣,所有實用的D觸發(fā)器也都含有復位或置位控制端口。常用的異步置位/復位D觸發(fā)器的邏輯符號如圖7-36所示,它的功能表如表7-17所示。圖7-36異步置位/復位D觸發(fā)器符號

【例7.28】異步置位/復位D觸發(fā)器的VHDL程序。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYdffcsIS

PORT(d,cp,clr,set:INSTD_LOGIC;

q,qb:OUTSTD_LOGIC);

ENDdffcs;

ARCHITECTURErtlOfdffcsIS

BEGIN

PROCESS(cp,clr,set)

BEGIN

IF(clr='0')THEN

q<='0';

qb<='1';

ELSIF(set=‘0’)THEN

q<='1';

qb<='0';

ELSIF(cp‘EVENTANDcp='1')THEN

q<=d;

qb<=NOTd;

ENDIF;

ENDPROCESS;

ENDrtl;

下面對例7.28的VHDL設計程序進行仿真驗證,其仿真波形如圖7-37所示。圖7-37異步置位/復位D觸發(fā)器的仿真波形

2)?JK觸發(fā)器

在數(shù)字電路中,JK觸發(fā)器也是一種應用較為廣泛的觸發(fā)器。一般來說,JK觸發(fā)器的種類很多,可以用在不同目的的數(shù)字電路設計中。這里將討論一個異步置位/復位的JK觸發(fā)器的VHDL設計,該觸發(fā)器的邏輯符號如圖7-38所示,它的功能表如表7-18所示。圖7-38異步置位/復位JK觸發(fā)器邏輯符號

【例7.29】用VHDL程序描述JK觸發(fā)器的功能。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYjkffIS

PORT(j,k,cp,clr,set:INSTD_LOGIC;

q,qb:OUTSTD_LOGIC);

ENDjkff;

ARCHITECTURErtlOFjkffIS

SIGNALq_s,qb_s:STD_LOGIC;

BEGIN

PROCESS(cp,clr,set,j,k)

BEGIN

IF(clr='0')AND(set=1')THEN

q_s<='0';

qb_s<='1';

ELSIF(clr='1')AND(set='0')THEN

q_s<='1';

qb_s<='0';

ELSIF(cp‘EVENTANDcp='1')THEN

IF(j='0')AND(k='1')THEN

q_s<='0';

qb_s<='1';

ELSIF(j='1')AND(k='0')THEN

q_s<='1';

qb_s<='0';

ELSIF(j='1')AND(k='1')THEN

q_s<=NOTq_s;

qb_s<=NOTqb_s;

ELSE

q_s<=q_s;

qb_s<=qb_s;

ENDIF;

q<=q_s;

qb<=qb_s;

ENDIF;

ENDPROCESS;

ENDrtl;

下面對異步置位/復位JK觸發(fā)器的VHDL設計程序進行仿真驗證,不難得到其設計對應的仿真波形,如圖7-39示。圖7-39異步置位/復位JK觸發(fā)器仿真波形

2.鎖存器

鎖存器是觸發(fā)器的一種應用類型,廣泛用于計算機與數(shù)字系統(tǒng)的輸入緩沖電路,其作用是將輸入信號暫時寄存,等待處理。下面我們就對D鎖存器作以介紹,其邏輯符號如圖7-40所示,真值表如表7-19所示。圖7-40D鎖存器邏輯符號

【例7.30】?D鎖存器的VHDL程序。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYlatchIS

PROT(d,cp:INSTD_LOGIC;

q:OUTSTD_LOGIC);

ENDlatch;

ARCHITECTURErtlOFlatchIS

BEGIN

PROCESS(cp)

BEGIN

IF(cp=‘1’)THEN

q<=d;

ENDIF;

ENDPROCESS

ENDrtl;

下面我們對D鎖存器的VHDL設計程序進行仿真驗證,如圖7-41所示。圖7-41D鎖存器仿真波形7.2.3計數(shù)器

1.同步計數(shù)器

下面給出一個帶有異步復位、同步置數(shù)功能的8421BCD碼計數(shù)器的例子,來說明同步計數(shù)器的VHDL設計過程。8421BCD碼計數(shù)器的邏輯符號如圖7-42所示,計數(shù)器功能表如表7-20所示。圖7-428421BCD碼計數(shù)器邏輯符號

【例7.31】同步計數(shù)器的VHDL程序。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYcntm60IS

PORT(ci:INSTD_LOGIC;

nreset:INSTD_LOGIC;

load:INSTD_LOGIC;

data:INSTD_LOGIC_VECTOR(7DOWNTO0);

clk:INSTD_LOGIC;

co:OUTSTD_LOGIC;

qh:OUTSTD_LOGIC_VECTOR(3DOWNTO0);

ql:OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDENTITYcntm60;

ARCHITECTUREartOFcntm60IS

SIGNALqh_tmp,ql_tmp:STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

co<=‘1’WHEN(qh_tmp=“0101”ANDql_tmp=“1001”ANDci=‘1’)ELSE‘0’; --進位輸出

PROCESS(clk,nreset)

BEGIN

IF(nreset='0')THEN--異步復位

qh_tmp<="0000";

ql_tmp<="0000";

ELSIF(clk'EVENTANDclk='1')THEN --同步置數(shù)

IF(load='1')THEN

qh_tmp<=data(7DOWNTO4);

ql_tmp<=data(3DOWNTO0);

ELSIF(ci=‘1’)THEN --模60的實現(xiàn)

IF(ql_tmp=9)THEN

ql_tmp<=“0000”;

IF(qh_tmp=5)THEN

qh_tmp<=“0000”;

ELSE

--計數(shù)功能實現(xiàn)

qh_tmp<=qh_tmp+1;

ENDIF;

ELSE

ql_tmp<=ql_tmp+1;

ENDIF;

ENDIF;

ENDIF;

ENDPROCESS;

qh<=qh_tmp;

ql<=ql_tmp;

ENDARCHITECTUREart;下面對8421BCD碼同步計數(shù)器的VHDL程序進行仿真驗證,其仿真波形如圖7-43所示。圖7-438421BCD碼同步計數(shù)器仿真波形

2.異步計數(shù)器

在數(shù)字電路中,常見的一種4位異步計數(shù)器的邏輯電路如圖7-44所示。這種計數(shù)器是由4個具有異步復位控制端口的D觸發(fā)器構成的。其中,第1個觸發(fā)器的時鐘輸入端口用來接收外來的時鐘信號,而其余觸發(fā)器的時鐘信號則來自于前一個觸發(fā)器的反相輸出。圖7-444位異步計數(shù)器的邏輯電路

【例7.32】異步復位D觸發(fā)器的VHDL程序。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYdffIS

PORT(d:INSTD_LOGIC;

cp:INSTD_LOGIC;

r:INSTD_LOGIC;

q:OUTSTD_LOGIC;

qb:OUTSTD_LOGIC);

ENDENTITYdff;

ARCHITECTUREartOFdffIS

BEGIN

PROCESS(cp,r)

BEGIN

IF(r=‘0’)THEN

q<=‘0’;

qb<='1';

ELSIF(cp‘EVENTANDcp=’1‘)THEN

q<=d;

qb<=NOTd;

ENDIF

ENDPROCESS;

ENDARCHITECTUREart;

【例7.33】4位異步計數(shù)器VHDL程序。

LIBRARYIEEE;

USEIE

溫馨提示

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

最新文檔

評論

0/150

提交評論