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

下載本文檔

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

文檔簡介

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

7.1組合邏輯電路設(shè)計(jì)

7.1.1基本門電路

1.“與”門電路

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

F?=?A·B

二輸入“與”門電路的邏輯符號(hào)如圖7-1所示,真值表如表7-1所示。圖7-1二輸入“與”門電路邏輯符號(hào)由于VHDL語法的多樣性和靈活性,通??梢圆捎貌煌姆绞絹韺﹂T電路的邏輯功能進(jìn)行描述。根據(jù)二輸入“與”門電路的邏輯表達(dá)式,可以采用行為描述方式,它的VHDL設(shè)計(jì)程序如例7.1所示。根據(jù)二輸入“與”門電路的真值表,也可以采用寄存器傳輸描述方式(或稱數(shù)據(jù)流描述方式),它的VHDL設(shè)計(jì)程序如例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設(shè)計(jì)程序進(jìn)行仿真,不難得到VHDL設(shè)計(jì)程序的仿真波形如圖7-2所示。圖7-2二輸入“與”門仿真波形

2.“或”門電路

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

F=A+B

二輸入“或”門電路的邏輯符號(hào)如圖7-3所示,真值表如表7-2所示。圖7-3二輸入“或”門電路邏輯符號(hào)根據(jù)二輸入“或”門電路的邏輯表達(dá)式,可以給出采用行為描述方式的VHDL設(shè)計(jì)程序,如例7.3所示;根據(jù)二輸入“或”門電路的真值表,也可以給出采用寄存器傳輸描述方式的VHDL設(shè)計(jì)程序,如例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設(shè)計(jì)程序進(jìn)行仿真,不難得到VHDL設(shè)計(jì)程序的仿真波形,如圖7-4所示。圖7-4二輸入“或”門電路仿真波形

3.“非”門電路

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

F?=A

?“非”門電路的邏輯符號(hào)如圖7-5所示,真值表如表7-3所示。圖7-5“非”門電路邏輯符號(hào)根據(jù)“非”門電路的邏輯表達(dá)式,可以給出采用行為描述方式的VHDL設(shè)計(jì)程序,如例7.5所示;根據(jù)“非”門電路的真值表,也可以給出采用寄存器傳輸描述方式的VHDL,設(shè)計(jì)程序如例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設(shè)計(jì)程序進(jìn)行仿真,不難得出VHDL設(shè)計(jì)程序的仿真波形,如圖7-6所示。圖7-6“非”門電路仿真波形

4.多輸入邏輯門電路

在數(shù)字電路設(shè)計(jì)的過程中,邏輯門電路的輸入往往不止一個(gè)(對于非門電路來說是一個(gè))或者兩個(gè),有時(shí)候還存在多個(gè)輸入的情況,這時(shí)就需要采用多輸入邏輯門電路來進(jìn)行相應(yīng)的設(shè)計(jì)。下面我們以8輸入“或”門為例來介紹多輸入邏輯門電路的VHDL程序設(shè)計(jì),其設(shè)計(jì)程序如例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設(shè)計(jì)過程,它的邏輯符號(hào)如圖7-7所示,功能如表7-4所示。圖7-7四選一數(shù)據(jù)選擇器的邏輯符號(hào)由于VHDL語法的多樣性和靈活性,通??梢圆捎肐F語句、CASE語句、選擇信號(hào)賦值語句和條件信號(hào)賦值語句來描述四選一數(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程序進(jìn)行仿真驗(yàn)證,不難得到相應(yīng)設(shè)計(jì)的時(shí)序仿真波形,如圖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ù)選擇器進(jìn)行仿真驗(yàn)證,其功能仿真波形如圖7-9所示。圖7-9八選一數(shù)據(jù)選擇器的功能仿真波形7.1.3編碼器和譯碼器

1.編碼器

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

1)普通編碼器

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

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

【例7.10】8-3普通編碼器的VHDL程序設(shè)計(jì)。

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設(shè)計(jì)程序進(jìn)行仿真驗(yàn)證,其仿真波形如圖7-11所示。圖7-118-3普通編碼器的仿真波形

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

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

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

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

【例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設(shè)計(jì)程序進(jìn)行仿真驗(yàn)證,不難得出如圖7-13所示的仿真波形。圖7-13優(yōu)先編碼器74LS148的仿真波形

2.譯碼器

1)二進(jìn)制譯碼器

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

【例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設(shè)計(jì)程序進(jìn)行仿真驗(yàn)證,不難得出如圖7-15所示的仿真波形。圖7-1574LS138仿真波形

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

數(shù)碼顯示譯碼器用來驅(qū)動(dòng)各種顯示器件,從而將用二進(jìn)制代碼表示的數(shù)字、文字、符號(hào)直觀地顯示出來。其結(jié)構(gòu)如圖

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

【例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程序進(jìn)行仿真驗(yàn)證,其仿真波形如圖7-17所示。圖7-17數(shù)碼顯示譯碼電路的仿真波形7.1.4加法器

1.半加器

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

【例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設(shè)計(jì)程序進(jìn)行仿真驗(yàn)證,不難得出如圖7-19所示的仿真波形。圖7-19半加器的仿真波形

2.全加器

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

【例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設(shè)計(jì)程序進(jìn)行仿真驗(yàn)證,可以得到相應(yīng)的仿真波形如圖7-21所示。圖7-211位全加器的仿真波形在實(shí)際設(shè)計(jì)中,1位全加器通常采用2個(gè)半加器來構(gòu)成,則全加器的電路圖如圖7-22所示。圖7-22用2個(gè)半加器構(gòu)成的全加器

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

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位全加器的仿真驗(yàn)證波形同圖7-21,這里留給讀者自行完成。7.1.5比較器

表7-11給出了一種最簡單的1位數(shù)值比較器的功能表,可以看出它具有等于、大于和小于三種比較結(jié)果。根據(jù)表7-11可以很容易地給出描述其邏輯功能的VHDL設(shè)計(jì)程序,如例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設(shè)計(jì)程序進(jìn)行仿真驗(yàn)證,可以得到如圖7-23所示的仿真波形。圖7-231位數(shù)值比較器的仿真波形實(shí)際使用中,應(yīng)用較為廣泛的數(shù)值比較器是4位數(shù)數(shù)值比較器CC14585,它的邏輯符號(hào)如圖7-24所示,功能表如表7-12所示??梢钥闯?,4位數(shù)值比較器CCl4585的具體邏輯功能如下:

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

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

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

【例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設(shè)計(jì)程序進(jìn)行仿真驗(yàn)證,不難得出相應(yīng)的仿真波形,如圖7-25所示。圖7-254位數(shù)值比較器CC14585的仿真波形7.1.6三態(tài)門和總線緩沖器

1.三態(tài)門

三態(tài)門電路是在普通門電路的基礎(chǔ)上附加控制電路構(gòu)成的。三態(tài)門電路的邏輯符號(hào)如圖7-26所示,真值表如表7-13所示??梢钥闯觯绻刂贫丝诘妮斎胄盘?hào)EN=1,那么輸入數(shù)據(jù)直接送到dout端口上;否則,輸出端口為高阻狀態(tài)。圖7-26三態(tài)門邏輯符號(hào)

【例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程序進(jìn)行驗(yàn)證,其仿真波形如圖7-27所示。圖7-27三態(tài)門仿真波形

2.總線緩沖器

1)單向總線緩沖器

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

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

【例7.20】8位單向總線緩沖器的VHDL設(shè)計(jì)程序。

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

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

【例7.21】雙向總線緩沖器的VHDL設(shè)計(jì)程序。

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)門組成,利用信號(hào)aout和bout將兩組三態(tài)門連接起來。由于在實(shí)際工作中a、b都不可能同時(shí)出現(xiàn)“0”和“1”,故在這里沒有使用判決

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

7.2.1時(shí)鐘信號(hào)和復(fù)位信號(hào)

1.時(shí)鐘信號(hào)

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

【例7.22】進(jìn)程的敏感信號(hào)是時(shí)鐘信號(hào)示例。

PROCESS(clk_signal)

BEGIN

IF(clock_edge_condition)THEN

signal_out<=signal_in

ENDIF;

ENDPROCESS;

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

【例7.23】用進(jìn)程中的WAITON語句等待時(shí)鐘示例。

PROCESS

BEGIN

WAITON(clock_signal)UNTIL(clock_edge_condition)

signal_out<=signal_in

ENDPROCESS;在編寫上述程序時(shí)應(yīng)注意以下幾點(diǎn):

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

②當(dāng)時(shí)鐘信號(hào)作為進(jìn)程敏感信號(hào)時(shí),在敏感信號(hào)列表中不能出現(xiàn)一個(gè)以上的時(shí)鐘信號(hào),除時(shí)鐘信號(hào)以外,像復(fù)位信號(hào)等是可以和時(shí)鐘信號(hào)一起出現(xiàn)在敏感信號(hào)列表中的。

③WAITON語句只能放在進(jìn)程的最前面或是最后面。

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

降沿。

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

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

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

IFclock_signal=current_valueAND

clock_signal‘LAST_VALUE=’0‘AND

clock_signal’EVENT;

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

IFclock_signal=current_valueANDclock_signal'EVENT圖7-33時(shí)鐘脈沖下降沿波形和時(shí)鐘信號(hào)屬性描述關(guān)系

2.復(fù)位信號(hào)

1)同步復(fù)位

在使用VHDL語言描述時(shí),同步復(fù)位一定在以時(shí)鐘為敏感信號(hào)的進(jìn)程中定義,且用IF語句來描述必要的復(fù)位條件。下面兩個(gè)例子就是同步復(fù)位的描述實(shí)例。

【例7.24】同步復(fù)位描述方式一。

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】同步復(fù)位描述方式二。

PROCESS

BEGIN

WAITON(clock_signal)UNTIL(clock_edge_condition)

IF(reset_condition)

ELSE

signal_out<=signal_in;

ENDIF;

ENDIF;

ENDPROCESS;

2)異步復(fù)位

異步復(fù)位在描述時(shí)與同步方式不同。首先在進(jìn)程的敏感信號(hào)中除時(shí)鐘信號(hào)以外,還應(yīng)加上復(fù)位信號(hào);其次是用IF語句描述復(fù)位條件;最后在ELSIF段描述時(shí)鐘信號(hào)邊沿的條件,并加上EVENT屬性。其描述方式如例7.26所示。

【例7.26】異步復(fù)位描述方式示例。

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可以看出,非同步時(shí)的信號(hào)和變量的代入值必須在時(shí)鐘信號(hào)邊沿有效的范圍內(nèi)進(jìn)行,如在例7.26中的ELSIF后進(jìn)行的那樣。

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

1.觸發(fā)器

1)?D觸發(fā)器

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

【例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設(shè)計(jì)程序進(jìn)行仿真驗(yàn)證,不難得出其設(shè)計(jì)的仿真波形如圖7-35所示。圖7-35D觸發(fā)器的時(shí)序仿真波形一般來說,實(shí)際設(shè)計(jì)中并非所有的器件在上電時(shí)都能處于復(fù)位或置位狀態(tài),因此實(shí)際應(yīng)用中的器件都會(huì)含有相應(yīng)的復(fù)位或置位控制端口。同樣,所有實(shí)用的D觸發(fā)器也都含有復(fù)位或置位控制端口。常用的異步置位/復(fù)位D觸發(fā)器的邏輯符號(hào)如圖7-36所示,它的功能表如表7-17所示。圖7-36異步置位/復(fù)位D觸發(fā)器符號(hào)

【例7.28】異步置位/復(fù)位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設(shè)計(jì)程序進(jìn)行仿真驗(yàn)證,其仿真波形如圖7-37所示。圖7-37異步置位/復(fù)位D觸發(fā)器的仿真波形

2)?JK觸發(fā)器

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

【例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;

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

2.鎖存器

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

【例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設(shè)計(jì)程序進(jìn)行仿真驗(yàn)證,如圖7-41所示。圖7-41D鎖存器仿真波形7.2.3計(jì)數(shù)器

1.同步計(jì)數(shù)器

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

【例7.31】同步計(jì)數(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’; --進(jìn)位輸出

PROCESS(clk,nreset)

BEGIN

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

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的實(shí)現(xiàn)

IF(ql_tmp=9)THEN

ql_tmp<=“0000”;

IF(qh_tmp=5)THEN

qh_tmp<=“0000”;

ELSE

--計(jì)數(shù)功能實(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碼同步計(jì)數(shù)器的VHDL程序進(jìn)行仿真驗(yàn)證,其仿真波形如圖7-43所示。圖7-438421BCD碼同步計(jì)數(shù)器仿真波形

2.異步計(jì)數(shù)器

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

【例7.32】異步復(fù)位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位異步計(jì)數(shù)器VHDL程序。

LIBRARYIEEE;

USEIE

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論