VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8_第1頁
VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8_第2頁
VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8_第3頁
VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8_第4頁
VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8_第5頁
已閱讀5頁,還剩343頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第8章基本邏輯電路設(shè)計8.1組合邏輯電路設(shè)計8.2時序電路設(shè)計習(xí)題與思考題第8章基本邏輯電路設(shè)計8.1組合邏輯電路設(shè)計

8.1組合邏輯電路設(shè)計

8.1.1簡單門電路簡單門電路包括2輸入“與非”門、集電極開路的2輸入“與非”門、2輸入“或非”門、反相器、集電極開路的反相器、3輸入“與”門、3輸入“與非”門、2輸入“或”門和2輸入“異或”門等,它們是構(gòu)成所有邏輯電路的基本電路。

8.1組合邏輯電路設(shè)計

8.1.1簡單門電路

1.2輸入“與非”門電路

2輸入“與非”門電路的邏輯表達(dá)式為

y?=???(a∧b)

其邏輯電路圖如圖8-1所示。

利用VHDL描述2輸入“與非”門有多種形式,現(xiàn)舉兩個例子加以說明。

1.2輸入“與非”門電路

2輸入“與非”門電路的邏圖8-1

2輸入“與非”門電路圖8-12輸入“與非”門電路

【例8-1】用VHDL描述2輸入“與非”門電路示例一。

【例8-1】用VHDL描述2輸入“與非”門電路示例一

【例8-2】用VHDL描述2輸入“與非”門電路示例二。

【例8-2】用VHDL描述2輸入“與非”門電路示例二VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

從上面兩個例子中可以看出,例8-1的描述更簡潔,更接近于2輸入“與非”門的行為描述,因此也更易于閱讀;例8-2的描述是以2輸入“與非”門的真值表為依據(jù)來編寫的,羅列了2輸入“與非”門的每種輸入狀態(tài)及其對應(yīng)的輸出結(jié)果。

從上面兩個例子中可以看出,例8-1的描述更簡潔,更接近

集電極開路的2輸入“與非”門和一般的2輸入“與非”門在VHDL的描述上沒有什么差異,所不同的只是從不同元件庫中提取相應(yīng)的電路而已。例如:

集電極開路的2輸入“與非”門和一般的2輸入“與非”門在

在第一個例子中要生成的是一般TTL的2輸入“與非”門,而在第二個例子中要生成的是TTL集電極開路的2輸入“與非”門。這里所敘述的情況對其他門電路同樣適用。因此,對不同類型門電路的集電極開路輸出門,本節(jié)將不再贅述。

在第一個例子中要生成的是一般TTL的2輸入“與非”門,

2.2輸入“或非”門電路

2輸入“或非”門電路的邏輯表達(dá)式為

y?=???(a∨b)

其邏輯電路圖如圖8-2所示。

現(xiàn)舉兩個用VHDL描述2輸入“或非”門電路的例子。

2.2輸入“或非”門電路

2輸入“或非”門電路的邏圖8-2

2輸入“或非”門電路圖8-22輸入“或非”門電路

【例8-3】用VHDL描述2輸入“或非”門電路示例一。

【例8-3】用VHDL描述2輸入“或非”門電路示例一

【例8-4】用VHDL描述2輸入“或非”門電路示例二。

【例8-4】用VHDL描述2輸入“或非”門電路示例二VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

3.反相器

反相器電路的邏輯表達(dá)式為

y

=???a

其邏輯電路圖如圖8-3所示。

VHDL對反相器的描述如例8-5和例8-6所示。

3.反相器

反相器電路的邏輯表達(dá)式為

圖8-3反相器電路圖8-3反相器電路

【例8-5】VHDL對反相器的描述一。

【例8-5】VHDL對反相器的描述一。

【例8-6】

VHDL對反相器的描述二。

【例8-6】VHDL對反相器的描述二。

VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

4.3輸入“與非”門電路

3輸入“與非”門電路的邏輯表達(dá)式為

y

=??

(a∧b∧c)

其邏輯電路如圖8-4所示。

3輸入“與非”門和2輸入“與非”門的差異僅在于多了一個輸入引腳,在用VHDL編程時,在端口說明中應(yīng)加一個輸入端口。例如,原來的輸入端口為a、b兩個,現(xiàn)在應(yīng)變?yōu)閍、b、c三個。當(dāng)然,根據(jù)邏輯表達(dá)式,該輸入端口的信號c應(yīng)與a、b一樣,一起參與邏輯運算,以得到最后的輸出y。用VHDL描述3輸入“與非”門電路示例如例8-7和例8-8所示。

4.3輸入“與非”門電路

3輸入“與非”門電路的圖8-43輸入“與非”門電路圖8-43輸入“與非”門電路

【例8-7】用VHDL描述3輸入“與非”門電路示例一。

【例8-7】用VHDL描述3輸入“與非”門電路示例一

【例8-8】用VHDL描述3輸入“與非”門電路示例二。

【例8-8】用VHDL描述3輸入“與非”門電路示例二VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

5.2輸入“異或”門電路

2輸入“異或”門電路的邏輯表達(dá)式為

其邏輯電路如圖8-5所示。

用VHDL描述2輸入“異或”門電路示例如例8-9和例8-10所示。

5.2輸入“異或”門電路

2輸入“異或”門電路的邏圖8-52輸入“異或”門電路圖8-52輸入“異或”門電路

【例8-9】用VHDL描述2輸入“異或”門電路示例一。

【例8-9】用VHDL描述2輸入“異或”門電路示例一

【例8-10】用VHDL描述2輸入“異或”門電路示例二。

【例8-10】用VHDL描述2輸入“異或”門電路示例VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

上述簡單的門電路大多用兩種不同形式的VHDL程序來描述,其行為和功能是完全一樣的。事實上還可以運用VHDL中所給出的語句來描述這些門電路,這就給編程人員提供了較大的編程靈活性。但是,一般來說,無論是編程人員還是閱讀這些程序的人員,都希望程序能一目了然,因此盡可能采用VHDL中所提供的語言和符號,用簡潔的語句描述其行為,這總是首選的描述方式。

上述簡單的門電路大多用兩種不同形式的VHDL程序來描述

8.1.2編、譯碼器與選擇器

編、譯碼器和選擇器是組合電路中較簡單的3種通用電路。它們可以由簡單的門電路組合連接構(gòu)成。例如,圖8-6所示是一個3-8譯碼器電路(74LS138)。由有關(guān)手冊可知,該譯碼器由8個3輸入“與非”門、4個反相器和一個3輸入“或非”門構(gòu)成。如果事先不作說明,只給出電路,讓讀者來判讀該電路的功能,那么毋庸置疑,要看懂該電路就要花較多的時間。如果采用VHDL,從行為、功能來對3-8譯碼器進(jìn)行描述,則不僅邏輯設(shè)計變得非常容易,而且閱讀也會很方便。

8.1.2編、譯碼器與選擇器

編、譯碼器和選擇器是圖8-63-8譯碼器電路圖8-63-8譯碼器電路

1.3-8譯碼器

3-8譯碼器是最常用的一種小規(guī)模集成電路,它有3個二進(jìn)制輸入端a、b、c和8個譯碼輸出端y0~y7。對輸入a、b、c的值進(jìn)行譯碼,就可以確定輸出端y0~y7的哪一個輸出端變?yōu)橛行?低電平),從而達(dá)到譯碼的目的。3-8譯碼器的真值表如表8-1所示。

1.3-8譯碼器

3-8譯碼器是最常用的一種小規(guī)模VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

3-8譯碼器還有3個選通輸入端g1、g2a和g2b。只有在g1?=?1,g2a?=?0,g2b?=?0時,3-8譯碼器才進(jìn)行正常譯碼,否則y0~y7輸出均為高電平。

3-8譯碼器還有3個選通輸入端g1、g2a和g2b。只

【例8-11】3-8譯碼器用VHDL描述如下:

【例8-11】3-8譯碼器用VHDL描述如下:

VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

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

優(yōu)先級編碼器常用于中斷的優(yōu)先級控制。例如,74LS148是一個8輸入、3位二進(jìn)制碼輸出的優(yōu)先級編碼器。當(dāng)其某一個輸入有效時,就可以輸出一個對應(yīng)的3位二進(jìn)制編碼。另外,當(dāng)同時有幾個輸入有效時,將輸出優(yōu)先級最高的那個輸入所對應(yīng)的二進(jìn)制編碼。

圖8-7是優(yōu)先級編碼器的引腳圖,它有8個輸入input(0)~input(7)和3位二進(jìn)制碼輸出y0~y2。

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

優(yōu)先級編碼器常用于中斷的優(yōu)先級控圖8-7優(yōu)先級編碼器圖8-7優(yōu)先級編碼器

該優(yōu)先級編碼器的真值表如表8-2所示。表中,“X”表示任意項,它可以是“0”,也可以是“1”。input(0)的優(yōu)先級最高,input(7)的優(yōu)先級最低。

該優(yōu)先級編碼器的真值表如表8-2所示。表中,“X”表示VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

【例8-12】用VHDL描述優(yōu)先級編碼器的程序如下:

【例8-12】用VHDL描述優(yōu)先級編碼器的程序如下:

因為VHDL中目前還不能描述任意項,所以不能用前面一貫采用的CASE語句來描述,而采用了IF語句。

因為VHDL中目前還不能描述任意項,所

3.四選一選擇器

選擇器常用于信號的切換。四選一選擇器可以用于4路信號的切換。四選一選擇器有4個信號輸入端input(0)~input(3)、2個信號選擇端a和b及一個信號輸出端y。當(dāng)a、b輸入不同的選擇信號時,就可以使input(0)~input(3)中某個相應(yīng)的輸入信號與輸出y端接通。例如,當(dāng)a?=?b?=“0”時,input(0)就與y接通。其邏輯電路如圖8-8所示。

3.四選一選擇器

選擇器常用于信號的切換。四選一選圖8-8四選一電路圖8-8四選一電路

四選一電路的真值表如表8-3所示。

四選一電路的真值表如表8-3所示。

【例8-13】用VHDL對四選一電路進(jìn)行描述的程序如下:

【例8-13】用VHDL對四選一電路進(jìn)行描述的程序VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

例8-13中的四選一選擇器是用IF語句描述的,程序中的ELSE項作為余下的條件,將選擇input(3)從y端輸出,這種描述比較安全。當(dāng)然,不用ELSE項也可以,這時必須列出sel所有可能出現(xiàn)的情況,加以一一確認(rèn)。

例8-13中的四選一選擇器是用IF語句描述的,程序中的

8.1.3加法器與求補(bǔ)器

1.加法器

加法器有全加器和半加器之分,全加器可以用兩個半加器構(gòu)成,因此下面先以半加器為例加以說明。

半加器有兩個二進(jìn)制一位的輸入端a和b、一位和的輸出端s、一位進(jìn)位位的輸出端co。半加器的真值表如表8-4所示,其電路符號如圖8-9所示。

8.1.3加法器與求補(bǔ)器

1.加法器

加法器有圖8-9半加器圖8-9半加器VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

【例8-14】用VHDL描述半加器的程序如下:

【例8-14】用VHDL描述半加器的程序如下:

用兩個半加器可以構(gòu)成一個全加器。全加器的電路如圖8-10所示。

圖8-10用兩個半加器構(gòu)成的全加器

用兩個半加器可以構(gòu)成一個全加器。全加器的電路如圖8-1

【例8-15】采用COMPONENT語句和PORTMAP語句描述全加器。

【例8-15】采用COMPONENT語句和PORTVHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

2.求補(bǔ)器

二進(jìn)制運算經(jīng)常要用到求補(bǔ)操作。8位二進(jìn)制數(shù)的求補(bǔ)電路符號如圖8-11所示。

求補(bǔ)電路的輸入為a(0)~a(7),補(bǔ)碼輸出為b(0)~b(7),其中a(7)和b(7)為符號位。該電路較復(fù)雜,如果像半加器那樣對每個門進(jìn)行描述和連接是可以做到的,但是那樣做太繁瑣。這里采用RTL描述更加簡潔、清楚。

2.求補(bǔ)器

二進(jìn)制運算經(jīng)常要用到求補(bǔ)操作。8位二進(jìn)圖8-11

8位二進(jìn)制數(shù)的求補(bǔ)電路符號圖8-118位二進(jìn)制數(shù)的求補(bǔ)電路符號

【例8-16】用RTL描述求補(bǔ)器。

【例8-16】用RTL描述求補(bǔ)器。

8.1.4三態(tài)門與總線緩沖器

三態(tài)門與雙向總線緩沖器是接口電路和總線驅(qū)動電路經(jīng)常用到的器件。它們雖然不屬于組合電路,為簡化章節(jié),也列于此處進(jìn)行介紹。

1.三態(tài)門電路

三態(tài)門電路如圖8-12所示。它具有一個數(shù)據(jù)輸入端din、一個數(shù)據(jù)輸出端dout和一個控制端en。當(dāng)en?=?'1'?時,dout?=?din;當(dāng)en?=?'0'?時,dout?=?′Z′(高阻)。三態(tài)門的真值表如表8-5所示。

8.1.4三態(tài)門與總線緩沖器

三態(tài)門與雙向總線緩沖圖8-12三態(tài)門電路圖8-12三態(tài)門電路VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

【例8-17】用VHDL描述三態(tài)門的程序如下:

【例8-17】用VHDL描述三態(tài)門的程序如下:

在第3章中讀者已經(jīng)知道,一個實體可以對應(yīng)多種構(gòu)造體。例8-18和例8-19就是用不同的VHDL描述的三態(tài)門的結(jié)構(gòu)。

在第3章中讀者已經(jīng)知道,一個實體可以對應(yīng)多種

【例8-18】用VHDL描述三態(tài)門的結(jié)構(gòu)示例一。

【例8-18】用VHDL描述三態(tài)門的結(jié)構(gòu)示例一。

該例中采用衛(wèi)式塊語句結(jié)構(gòu)來表示三態(tài)門。衛(wèi)式塊語句結(jié)構(gòu)的特點是:只有塊語句的條件滿足時,塊中所含的語句才會被執(zhí)行。在這里只有en?=?'1'?的條件滿足時,dout<=GUARDEDdin語句才會被執(zhí)行。

該例中采用衛(wèi)式塊語句結(jié)構(gòu)來表示三態(tài)門。衛(wèi)式塊語句結(jié)構(gòu)的VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

2.單向總線緩沖器

在微型計算機(jī)的總線驅(qū)動中經(jīng)常要用單向總線緩沖器,它通常由多個三態(tài)門組成,用來驅(qū)動地址總線和控制總線。

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

用VHDL描述的8位單向總線緩沖器的程序?qū)嵗缋?-20、例8-21和例8-22所示。

2.單向總線緩沖器

在微型計算機(jī)的總線驅(qū)動中經(jīng)常要圖8-13單向總線緩沖器圖8-13單向總線緩沖器

【例8-20】用VHDL描述的8位單向總線緩沖器的程序?qū)嵗弧?/p>

【例8-20】用VHDL描述的8位單向總線緩沖器的程VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

【例8-21】用VHDL描述的8位單向總線緩沖器的程序?qū)嵗?/p>

【例8-21】用VHDL描述的8位單向總線緩沖器的程

【例8-22】用VHDL描述的8位單向總線緩沖器的程序?qū)嵗?/p>

【例8-22】用VHDL描述的8位單向總線緩沖器的程

在編寫上述程序時應(yīng)注意,不能將“Z”值賦予變量,否則就不能進(jìn)行邏輯綜合。另外,對信號賦值時“Z”和“0”或“1”不能混合使用,例如:

dout<=″Z001ZZZZ″;

這樣的語句是不允許出現(xiàn)的。但是變換賦值表達(dá)式時,分開賦值是可以的。例如:

dout(7)<="Z";

dout(6DOWNTO4)

<="001";

dout(3DOWNTO0)

<="ZZZZ";

在編寫上述程序時應(yīng)注意,不能將“Z”值賦予變量,否則就

3.雙向總線緩沖器

雙向總線緩沖器用于對數(shù)據(jù)總線進(jìn)行驅(qū)動和緩沖。典型的雙向總線緩沖器的電路圖如圖8-14所示。圖中,雙向緩沖器有兩個數(shù)據(jù)輸入輸出端a和b、一個方向控制端dr和一個選通端en。當(dāng)en?=?1時,雙向總線緩沖器未被選通,a和b都呈現(xiàn)高阻;當(dāng)en?=?0時,雙向總線緩沖器被選通,如果dr?=?0,那么a?=?b,如果dr?=?1,那么b?=?a。雙向總線緩沖器的真值表如表8-6所示。

3.雙向總線緩沖器

雙向總線緩沖器用于對數(shù)據(jù)總線進(jìn)圖8-14雙向總線緩沖器圖8-14雙向總線緩沖器VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

【例8-23】用VHDL描述雙向總線緩沖器實例。

【例8-23】用VHDL描述雙向總線緩沖器實例。

VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

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

從例8-23中可以看出,雙向總線緩沖器由兩

8.2時序電路設(shè)計

8.2.1時鐘信號和復(fù)位信號

1.時鐘信號的描述眾所周知,任何時序電路都以時鐘信號為驅(qū)動信號,時序電路只是在時鐘信號的邊沿到來時,其狀態(tài)才發(fā)生改變。因此,時鐘信號通常描述時序電路程序的執(zhí)行條件。另外,時序電路也總是以時鐘進(jìn)程的形式來進(jìn)行描述的,其描述方式一般有兩種。

8.2時序電路設(shè)計

8.2.1時鐘信號和復(fù)位信號

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

(1)進(jìn)程的敏感信號是時鐘信號。在這種情況下,時鐘信

【例8-24】進(jìn)程的敏感信號是時鐘信號實例。

【例8-24】進(jìn)程的敏感信號是時鐘信號實例。

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

(2)用進(jìn)程中的WAITON語句等待時鐘。在這種情

【例8-25】用進(jìn)程中的WAITON語句等待時鐘實例。

【例8-25】用進(jìn)程中的WAITON語句等待時鐘實

在編寫上述程序時應(yīng)注意:

·無論IF語句還是WAITON語句,在對時鐘邊沿進(jìn)行說明時,一定要注明是上升沿還是下降沿(前沿還是后沿),只說明是邊沿是不行的。

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

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

在編寫上述程序時應(yīng)注意:

·無論IF語句還是WA

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

(3)時鐘邊沿的描述。為了描述時鐘邊沿,一定要指定是

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

IFclk='1'ANDclk'LAST_VAULE='0'ANDclk'EVENT

①時鐘脈沖上升沿的描述。時鐘脈沖上升沿波形與時鐘信號

②時鐘脈沖下降沿的描述。時鐘脈沖下降沿波形與時鐘信號屬性的描述關(guān)系如圖8-16所示。其關(guān)系與圖8-15類同,此時clk'LAST_VALUE?=?'1';時鐘信號當(dāng)前值為clk='0';下降沿到來的事件為clk'EVENT。這樣表示下降沿到來的條件可寫為

IFclk='0'ANDclk'LAST_VALUE=?'1'ANDclk'EVENT

②時鐘脈沖下降沿的描述。時鐘脈沖下降沿波形與時鐘信號圖8-15時鐘脈沖上升沿波形和時鐘信號屬性的描述關(guān)系圖8-15時鐘脈沖上升沿波形和時鐘信號屬性的描述關(guān)系圖8-16時鐘脈沖下降沿波形和時鐘信號屬性的描述關(guān)系圖8-16時鐘脈沖下降沿波形和時鐘信號屬性的描述關(guān)系

根據(jù)上面關(guān)于上升沿和下降沿的描述,時鐘信號邊沿檢出條件可以統(tǒng)一描述如下:

IFclock_signal=current_valueAND

clock_signal‘LAST_VALUEANDclock_signal’EVENT

在某些書刊中邊沿檢出條件也可簡寫為

IFclock_signal=clock_signal'EVENTANDcurrent_value

根據(jù)上面關(guān)于上升沿和下降沿的描述,時鐘信號邊沿檢出條件

③由于在STD_LOGIC的數(shù)據(jù)類型中,其值除“0”和“1”以外,還可以取“2”、“X”等9種狀態(tài)值。這樣在綜合時有可能出現(xiàn)問題。為避免類似情況發(fā)生,建議盡可能用IEEE中的現(xiàn)成邊沿描述函數(shù)。例如:

上升沿可描述為

IFvising_edge(cp)THEN

下降沿可描述為

IFfalling_edge(cp)THEN

③由于在STD_LOGIC的數(shù)據(jù)類型中,其值除“0”

2.觸發(fā)器的同步和非同步復(fù)位

觸發(fā)器的初始狀態(tài)應(yīng)由復(fù)位信號來設(shè)置。復(fù)位信號對觸發(fā)器復(fù)位的操作不同,使其可以分為同步復(fù)位和非同步復(fù)位兩種。所謂同步復(fù)位,就是復(fù)位信號有效且在給定的時鐘邊沿到來時,觸發(fā)器才被復(fù)位;非同步復(fù)位則是指一旦復(fù)位信號有效,觸發(fā)器就被復(fù)位。

2.觸發(fā)器的同步和非同步復(fù)位

觸發(fā)器的初始狀態(tài)應(yīng)由

1)同步復(fù)位

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

1)同步復(fù)位

在用VHDL描述時,同步復(fù)位一定要

【例8-26】同步復(fù)位方式的描述實例一。

【例8-26】同步復(fù)位方式的描述實例一。

【例8-27】同步復(fù)位方式的描述實例二。

【例8-27】同步復(fù)位方式的描述實例二。

2)非同步復(fù)位

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

2)非同步復(fù)位

非同步復(fù)位又稱異步復(fù)位,在描述時

【例8-28】非同步復(fù)位方式的描述實例。

【例8-28】非同步復(fù)位方式的描述實例。

從例8-28中可以看到,非同步復(fù)位的信號和變量的代入與賦值必須在時鐘信號邊沿有效的范圍內(nèi)進(jìn)行,如例8-28中ELSIF后進(jìn)行的那樣。

另外,添加clock_event是為了防止沒有時鐘事件發(fā)生時的誤操作。譬如,現(xiàn)在時鐘事件沒有發(fā)生而是發(fā)生了復(fù)位事件,這樣該進(jìn)程就得到了啟動。在此情況下,若復(fù)位條件沒有滿足,而時鐘邊沿條件卻是滿足的,那么與時鐘信號有關(guān)的那一段程序(ELSIF段)就會得到執(zhí)行,從而造成錯誤操作。

從例8-28中可以看到,非同步復(fù)位的信號和變量的代入與

8.2.2觸發(fā)器

觸發(fā)器的種類很多,這里僅舉常用的幾種加以說明。

1.鎖存器

根據(jù)觸發(fā)邊沿、復(fù)位和預(yù)置的方式以及輸出端不同可以將鎖存器分為多種不同形式。

8.2.2觸發(fā)器

觸發(fā)器的種類很多,這里僅舉常用的

1)

D鎖存器

正沿觸發(fā)的D鎖存器的電路符號如圖8-17所示。它是一個正沿(上升沿)觸發(fā)的D觸發(fā)器,有一個數(shù)據(jù)輸入端d、一個時鐘輸入端clk和一個數(shù)據(jù)輸出端q。D鎖存器的真值表如表8-7所示。從表中可以看到,D鎖存器的輸出端只有在正沿脈沖過后,輸入端d的數(shù)據(jù)才傳遞到輸出端q。用VHDL描述D鎖存器的程序?qū)嵗缋?-29和例8-30所示。

1)?D鎖存器

正沿觸發(fā)的D鎖存器的電路符號如圖圖8-17

D鎖存器圖8-17D鎖存器VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

【例8-29】用VHDL描述D鎖存器的程序?qū)嵗弧?/p>

【例8-29】用VHDL描述D鎖存器的程序?qū)嵗弧?/p>

【例8-30】用VHDL描述D鎖存器的程序?qū)嵗?/p>

【例8-30】用VHDL描述D鎖存器的程序?qū)嵗?/p>

2)非同步復(fù)位的D鎖存器

非同步復(fù)位的D鎖存器的電路符號如圖8-18所示。它和一般的D鎖存器的區(qū)別是多了一個復(fù)位輸入端clr。當(dāng)clr='0'?時,其q端輸出被強(qiáng)迫置為“0”。clr又稱清零輸入端。

2)非同步復(fù)位的D鎖存器

非同步復(fù)位的D鎖存器的圖8-18非同步復(fù)位的D鎖存器圖8-18非同步復(fù)位的D鎖存器

【例8-31】用VHDL描述的非同步復(fù)位的D鎖存器的程序?qū)嵗缦拢?/p>

【例8-31】用VHDL描述的非同步復(fù)位的D鎖存器的

3)非同步復(fù)位/置位D鎖存器

非同步復(fù)位/置位D鎖存器的電路符號如圖8-19所示。除了前述的d、clk和q端外,還有clr和pset的復(fù)位、置位端。當(dāng)clr='0'?時復(fù)位,使q='0';當(dāng)pset='0'?時置位,使q=

'1'。

圖8-19非同步復(fù)位/置位D鎖存器

3)非同步復(fù)位/置位D鎖存器

非同步復(fù)位/置位D

【例8-32】用VHDL描述的非同步復(fù)位/置位鎖存器的程序?qū)嵗缦拢?/p>

【例8-32】用VHDL描述的非同步復(fù)位/置位鎖存器VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

4)同步復(fù)位的D鎖存器

同步復(fù)位的D鎖存器的電路如圖8-20所示。與非同步方式不同的是,當(dāng)復(fù)位信號clr有效(clr?=?'1')以后,只是在有效時鐘邊沿到來時才能進(jìn)行復(fù)位操作。圖中clr='1'?以后,在clk的上升沿到來時,q輸出才變?yōu)椤?”。

另外,從圖中還可以看出,復(fù)位信號的優(yōu)先級比d端數(shù)據(jù)輸入的優(yōu)先級高。也就是說,當(dāng)clr='1'?時,無論d端輸入什么信號,在clk的上升沿到來時,q輸出總為“0”。

4)同步復(fù)位的D鎖存器

同步復(fù)位的D鎖存器的電路圖8-20同步復(fù)位的D鎖存器圖8-20同步復(fù)位的D鎖存器

【例8-33】用VHDL描述的同步復(fù)位D鎖存器的程序?qū)嵗缦拢?/p>

【例8-33】用VHDL描述的同步復(fù)位D鎖存器的程序VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

2.JK觸發(fā)器

帶有復(fù)位/置位功能的JK觸發(fā)器的電路符號如圖8-21所示。JK觸發(fā)器的輸入端有置位輸入pset、復(fù)位輸入clr、控制輸入j和k、時鐘信號輸入clk,輸出端有正向輸出端q和反向輸出端qb。JK觸發(fā)器的真值表如表8-8所示。表中,q0表示原狀態(tài)不變,翻轉(zhuǎn)表示改變原來的狀態(tài),如原來為“0”則變成“1”,原來為“1”則變成“0”。

2.JK觸發(fā)器

帶有復(fù)位/置位功能的JK觸發(fā)器的電圖8-21JK觸發(fā)器圖8-21JK觸發(fā)器VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

【例8-34】用VHDL描述JK觸發(fā)器的程序?qū)嵗缦拢?/p>

【例8-34】用VHDL描述JK觸發(fā)器的程序?qū)嵗缦耉HDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

例8-34中的復(fù)位和置位顯然也是非同步的,且pset的優(yōu)先級比clr高。也就是說,當(dāng)pset?=?'0'?且clr?=?'0'?時,q將輸出“1”,qb輸出“0”。這種結(jié)果和表8-8所示的真值表是不一致的。為了避免這種情況,程序可以改寫成例8-35所示。

例8-34中的復(fù)位和置位顯然也是非同步的,且

【例8-35】例8-34改寫以后的程序。

【例8-35】例8-34改寫以后的程序。

在例8-35中,pset='0',clr='0'?這種情況未加以考慮,那么在邏輯綜合時,其輸出是未知的。

在例8-35中,pset='0',

8.2.3寄存器

寄存器一般由多位觸發(fā)器連接而成,通常有鎖存寄存器和移位寄存器等。下面主要介紹移位寄存器。

1.串行輸入、串行輸出移位寄存器

串行輸入、串行輸出移位寄存器的電原理圖如圖8-22所示。它具有兩個輸入端(數(shù)據(jù)輸入端a和時鐘輸入端clk)與一個數(shù)據(jù)輸出端b。圖中所示為8位的串行移位寄存器,在時鐘信號的作用下,前級的數(shù)據(jù)向后級移動。該8位移位寄存器由8個D觸發(fā)器構(gòu)成。

8.2.3寄存器

寄存器一般由多位觸發(fā)器連接而成,圖8-22串行輸入、串行輸出的8位移位寄存器圖8-22串行輸入、串行輸出的8位移位寄存器

【例8-36】利用GENERATE語句和D觸發(fā)器的描述寫出的8位移位寄存器的VHDL程序如下:

【例8-36】利用GENERATE語句和D觸發(fā)器的描

例8-36中把dff看作已經(jīng)生成的元件,然后利用GENERATE來循環(huán)生成串行連接的8個D觸發(fā)器。

例8-36中把dff看作已經(jīng)生成的元件,然后

【例8-37】8位移位寄存器直接利用信號來連接的描述如下:

【例8-37】8位移位寄存器直接利用信號來連接的描述VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

2.循環(huán)移位寄存器

在計算機(jī)的運算操作中經(jīng)常用到循環(huán)移位,它可以用硬件電路來實現(xiàn)。一個8位循環(huán)左移的寄存器的電路符號如圖8-23所示。該電路有8個數(shù)據(jù)輸入端din(0)~din(7)、移位和數(shù)據(jù)輸出控制端enb、時鐘信號輸入端clk、移位位數(shù)控制輸入端s(0)~s(2)、8位數(shù)據(jù)輸出端dout(0)~dout(7)。循環(huán)左移操作的示意圖如圖8-24所示。

當(dāng)enb?=?1時,根據(jù)s(0)~s(2)輸入的數(shù),確定在時鐘脈沖作用下,循環(huán)左移幾位。圖8-24所示是循環(huán)左移了3位。當(dāng)enb?=?0時,din直接輸出至dout。

2.循環(huán)移位寄存器

在計算機(jī)的運算操作中經(jīng)常用到循圖8-23

8位循環(huán)移位寄存器圖8-238位循環(huán)移位寄存器圖8-24循環(huán)左移操作的示意圖圖8-24循環(huán)左移操作的示意圖

【例8-38】在CPAC中循環(huán)左移函數(shù)的描述如下:

【例8-38】在CPAC中循環(huán)左移函數(shù)的描述如下:

VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

【例8-39】利用CPAC中循環(huán)左移函數(shù)描述8位循環(huán)左移寄存器的程序如下:

【例8-39】利用CPAC中循環(huán)左移函數(shù)描述8位循環(huán)VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

3.帶清零端的8位并行裝載移位寄存器

該移位寄存器就是TTL手冊中的74166,其引腳圖如圖8-25所示。

圖中各引腳的名稱及功能如下:

a~h——8位并行數(shù)據(jù)輸入端;

se——串行數(shù)據(jù)輸入端;

q——串行數(shù)據(jù)輸出端;

clk——時鐘信號輸入端;

fe——時鐘信號禁止端;

s/l——移位/裝載控制端;

clr——清零端。

3.帶清零端的8位并行裝載移位寄存器

該移位寄存器圖8-25帶清零端的8位并行裝載移位寄存器圖8-25帶清零端的8位并行裝載移位寄存器

其真值表如表8-9所示。

其真值表如表8-9所示。

從表8-9中可以看到,當(dāng)清零輸入端clr為“0”時,8位寄存器的輸出均為“0”,從而使q輸出也為“0”。fe是時鐘禁止端,當(dāng)它為“1”時將禁止時鐘,即不管時鐘信號如何變化,移位寄存器的狀態(tài)不發(fā)生改變。另外,時鐘信號只在上升沿時才有效,此時fe?=?0。如果時鐘信號的上升沿未到來,則移位寄存器的狀態(tài)仍不會發(fā)生變化。s/l是移位/裝載控制信號。當(dāng)s/l?=?1時是移位狀態(tài),在時鐘信號上升沿的控制下,向右移一位,串行輸入端se的信號將移入qa位,而q的輸出將是移位前的內(nèi)部qg輸出;當(dāng)s/l?=?0時是裝載狀態(tài),在時鐘脈沖上升沿的作用下,數(shù)據(jù)輸入端a~h的信號就裝載到移位寄存器的qa~qh。

從表8-9中可以看到,當(dāng)清零輸入端clr為“0”時,8VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

8.2.4計數(shù)器

計數(shù)器分為同步計數(shù)器和異步計數(shù)器兩種。計數(shù)器是一個典型的時序電路,分析計數(shù)器就能更好地了解時序電路的特性。

1.同步計數(shù)器

所謂同步計數(shù)器,就是在時鐘脈沖(計數(shù)脈沖)的控制下,構(gòu)成計數(shù)器的各觸發(fā)器狀態(tài)同時發(fā)生變化。

8.2.4計數(shù)器

計數(shù)器分為同步計數(shù)器和異步計

1)帶允許端的十二進(jìn)制計數(shù)器

該計數(shù)器由4個觸發(fā)器構(gòu)成,clr輸入端用于清零,en端用于控制計數(shù)器工作,clk為時鐘脈沖(計數(shù)脈沖)輸入端,qa、qb、qc、qd為計數(shù)器的4位二進(jìn)制計數(shù)值輸出端。該計數(shù)器的真值表如表8-10所示。

1)帶允許端的十二進(jìn)制計數(shù)器

該計數(shù)器由4個觸發(fā)器構(gòu)VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

該程序?qū)?yīng)電路的引腳圖如圖8-26所示。

圖8-26帶允許端的十二進(jìn)制計數(shù)器電路

該程序?qū)?yīng)電路的引腳圖如圖8-26所示。

圖8-26

2)可逆計數(shù)器

所謂可逆計數(shù)器,就是根據(jù)計數(shù)控制信號的不同,在時鐘脈沖作用下,計數(shù)器可以進(jìn)行加1操作或者減1操作。

可逆計數(shù)器有一個特殊的控制端,即updn端。當(dāng)updn?=?'1'?時,計數(shù)器進(jìn)行加1操作;當(dāng)updn?=?'0'?時,計數(shù)器進(jìn)行減1操作。一種6位二進(jìn)制可逆計數(shù)器的真值表如表8-11所示。

2)可逆計數(shù)器

所謂可逆計數(shù)器,就是根據(jù)計數(shù)控制VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

該程序?qū)?yīng)電路的引腳圖如圖8-27所示。

圖8-27

6位二進(jìn)制可逆計數(shù)器電路

該程序?qū)?yīng)電路的引腳圖如圖8-27所示。

圖8-27

3)六十進(jìn)制計數(shù)器

眾所周知,用一個4位二進(jìn)制計數(shù)器可以構(gòu)成1位十進(jìn)制計數(shù)器,即可以構(gòu)成1位BCD計數(shù)器,而2位十進(jìn)制計數(shù)器連接起來可以構(gòu)成一個六十進(jìn)制計數(shù)器。六十進(jìn)制計數(shù)器常用于時鐘計數(shù)。

一個六十進(jìn)制計數(shù)器的電路引腳圖如圖8-28所示。

3)六十進(jìn)制計數(shù)器

眾所周知,用一個4位二進(jìn)制計圖8-28六十進(jìn)制計數(shù)器電路圖8-28六十進(jìn)制計數(shù)器電路

六十進(jìn)制計數(shù)器的輸入和輸出端的名稱及功能說明如下:

clk——時鐘輸入端;

bcd1wr——個位寫控制端;

bcd10wr——十位寫控制端;

cin——進(jìn)位輸入端;

co——進(jìn)位輸出端;

datain——數(shù)據(jù)輸入端,共有4條輸入線datain(0)~datain(3);

bcd1——計數(shù)值個位輸出,共有4條輸出線bcd1(0)~bcd1(3);

bcd10——計數(shù)值十位輸出,共有3條輸出線bcd10(0)~bcd10(2)。

六十進(jìn)制計數(shù)器的輸入和輸出端的名稱及功能說明如下:

在該六十進(jìn)制計數(shù)器的電路中,bcd1wr和bcd10wr與datain配合,以實現(xiàn)對六十進(jìn)制計數(shù)器的個位和十位的裝載操作,即可以實現(xiàn)對個位和十位值的預(yù)置操作。應(yīng)注意,在對個位和十位進(jìn)行預(yù)置操作時,datain輸入端是公用的,因而個位和十位的預(yù)置操作必定要串行進(jìn)行。

在該六十進(jìn)制計數(shù)器的電路中,bcd1wr和bcd10wVHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

在例8-43中,第一個進(jìn)程處理個位計數(shù),第二個進(jìn)程處理十位計數(shù),第三個進(jìn)程處理進(jìn)位輸出co的輸出值。應(yīng)注意,個位和十位的計數(shù)條件是不一樣的。

在例8-43中,第一個進(jìn)程處理個位計數(shù),第

2.異步計數(shù)器

異步計數(shù)器又稱行波計數(shù)器,它的下一位計數(shù)器的輸出作為上一位計數(shù)器的時鐘信號,這樣一級一級串行連接起來就構(gòu)成了一個異步計數(shù)器。

異步計數(shù)器與同步計數(shù)器的不同之處就在于時鐘脈沖的提供方式,異步計數(shù)器同樣可以構(gòu)成各種各樣的計數(shù)器。但是,由于異步計數(shù)器采用行波計數(shù),因而使計數(shù)延遲增加,在要求延遲小的領(lǐng)域受到了很大限制。盡管如此,由于它的電路簡單,故仍有廣泛的應(yīng)用。

2.異步計數(shù)器

異步計數(shù)器又稱行波計數(shù)器,它的下一

用VHDL描述異步計數(shù)器與上述同步計數(shù)器的不同之處主要表現(xiàn)在對各級時鐘脈沖的描述上,這一點請讀者在閱讀例程時多加注意。

用VHDL描述異步計數(shù)器與上述同步計數(shù)器的不同之處主要VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

8位行波計數(shù)器的電原理圖如圖8-29所示。

圖8-29

8位行波計數(shù)器的電原理圖

8位行波計數(shù)器的電原理圖如圖8-29所示。

圖8-2

習(xí)題與思考題

8.1試設(shè)計一個2位二進(jìn)制的加法器。

8.2試設(shè)計一個2位的BCD計數(shù)器。

8.3同步計數(shù)器和異步計數(shù)器在設(shè)計時有哪些區(qū)別?試用一個六進(jìn)制計數(shù)器和一個十進(jìn)制計數(shù)器構(gòu)成一個六十進(jìn)制同步計數(shù)器。

習(xí)題與思考題

8.1試設(shè)計一個2位二進(jìn)制的加法器

8.4某一輸入/輸出接口電路的引腳如圖8-30所示。

圖8-30某一輸入/輸出接口電路的引腳圖

8.4某一輸入/輸出接口電路的引腳如圖8-30所示感謝感謝173謝謝,精品課件資料搜集謝謝,精品課件資料搜集174第8章基本邏輯電路設(shè)計8.1組合邏輯電路設(shè)計8.2時序電路設(shè)計習(xí)題與思考題第8章基本邏輯電路設(shè)計8.1組合邏輯電路設(shè)計

8.1組合邏輯電路設(shè)計

8.1.1簡單門電路簡單門電路包括2輸入“與非”門、集電極開路的2輸入“與非”門、2輸入“或非”門、反相器、集電極開路的反相器、3輸入“與”門、3輸入“與非”門、2輸入“或”門和2輸入“異或”門等,它們是構(gòu)成所有邏輯電路的基本電路。

8.1組合邏輯電路設(shè)計

8.1.1簡單門電路

1.2輸入“與非”門電路

2輸入“與非”門電路的邏輯表達(dá)式為

y?=???(a∧b)

其邏輯電路圖如圖8-1所示。

利用VHDL描述2輸入“與非”門有多種形式,現(xiàn)舉兩個例子加以說明。

1.2輸入“與非”門電路

2輸入“與非”門電路的邏圖8-1

2輸入“與非”門電路圖8-12輸入“與非”門電路

【例8-1】用VHDL描述2輸入“與非”門電路示例一。

【例8-1】用VHDL描述2輸入“與非”門電路示例一

【例8-2】用VHDL描述2輸入“與非”門電路示例二。

【例8-2】用VHDL描述2輸入“與非”門電路示例二VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

從上面兩個例子中可以看出,例8-1的描述更簡潔,更接近于2輸入“與非”門的行為描述,因此也更易于閱讀;例8-2的描述是以2輸入“與非”門的真值表為依據(jù)來編寫的,羅列了2輸入“與非”門的每種輸入狀態(tài)及其對應(yīng)的輸出結(jié)果。

從上面兩個例子中可以看出,例8-1的描述更簡潔,更接近

集電極開路的2輸入“與非”門和一般的2輸入“與非”門在VHDL的描述上沒有什么差異,所不同的只是從不同元件庫中提取相應(yīng)的電路而已。例如:

集電極開路的2輸入“與非”門和一般的2輸入“與非”門在

在第一個例子中要生成的是一般TTL的2輸入“與非”門,而在第二個例子中要生成的是TTL集電極開路的2輸入“與非”門。這里所敘述的情況對其他門電路同樣適用。因此,對不同類型門電路的集電極開路輸出門,本節(jié)將不再贅述。

在第一個例子中要生成的是一般TTL的2輸入“與非”門,

2.2輸入“或非”門電路

2輸入“或非”門電路的邏輯表達(dá)式為

y?=???(a∨b)

其邏輯電路圖如圖8-2所示。

現(xiàn)舉兩個用VHDL描述2輸入“或非”門電路的例子。

2.2輸入“或非”門電路

2輸入“或非”門電路的邏圖8-2

2輸入“或非”門電路圖8-22輸入“或非”門電路

【例8-3】用VHDL描述2輸入“或非”門電路示例一。

【例8-3】用VHDL描述2輸入“或非”門電路示例一

【例8-4】用VHDL描述2輸入“或非”門電路示例二。

【例8-4】用VHDL描述2輸入“或非”門電路示例二VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

3.反相器

反相器電路的邏輯表達(dá)式為

y

=???a

其邏輯電路圖如圖8-3所示。

VHDL對反相器的描述如例8-5和例8-6所示。

3.反相器

反相器電路的邏輯表達(dá)式為

圖8-3反相器電路圖8-3反相器電路

【例8-5】VHDL對反相器的描述一。

【例8-5】VHDL對反相器的描述一。

【例8-6】

VHDL對反相器的描述二。

【例8-6】VHDL對反相器的描述二。

VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

4.3輸入“與非”門電路

3輸入“與非”門電路的邏輯表達(dá)式為

y

=??

(a∧b∧c)

其邏輯電路如圖8-4所示。

3輸入“與非”門和2輸入“與非”門的差異僅在于多了一個輸入引腳,在用VHDL編程時,在端口說明中應(yīng)加一個輸入端口。例如,原來的輸入端口為a、b兩個,現(xiàn)在應(yīng)變?yōu)閍、b、c三個。當(dāng)然,根據(jù)邏輯表達(dá)式,該輸入端口的信號c應(yīng)與a、b一樣,一起參與邏輯運算,以得到最后的輸出y。用VHDL描述3輸入“與非”門電路示例如例8-7和例8-8所示。

4.3輸入“與非”門電路

3輸入“與非”門電路的圖8-43輸入“與非”門電路圖8-43輸入“與非”門電路

【例8-7】用VHDL描述3輸入“與非”門電路示例一。

【例8-7】用VHDL描述3輸入“與非”門電路示例一

【例8-8】用VHDL描述3輸入“與非”門電路示例二。

【例8-8】用VHDL描述3輸入“與非”門電路示例二VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

5.2輸入“異或”門電路

2輸入“異或”門電路的邏輯表達(dá)式為

其邏輯電路如圖8-5所示。

用VHDL描述2輸入“異或”門電路示例如例8-9和例8-10所示。

5.2輸入“異或”門電路

2輸入“異或”門電路的邏圖8-52輸入“異或”門電路圖8-52輸入“異或”門電路

【例8-9】用VHDL描述2輸入“異或”門電路示例一。

【例8-9】用VHDL描述2輸入“異或”門電路示例一

【例8-10】用VHDL描述2輸入“異或”門電路示例二。

【例8-10】用VHDL描述2輸入“異或”門電路示例VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

上述簡單的門電路大多用兩種不同形式的VHDL程序來描述,其行為和功能是完全一樣的。事實上還可以運用VHDL中所給出的語句來描述這些門電路,這就給編程人員提供了較大的編程靈活性。但是,一般來說,無論是編程人員還是閱讀這些程序的人員,都希望程序能一目了然,因此盡可能采用VHDL中所提供的語言和符號,用簡潔的語句描述其行為,這總是首選的描述方式。

上述簡單的門電路大多用兩種不同形式的VHDL程序來描述

8.1.2編、譯碼器與選擇器

編、譯碼器和選擇器是組合電路中較簡單的3種通用電路。它們可以由簡單的門電路組合連接構(gòu)成。例如,圖8-6所示是一個3-8譯碼器電路(74LS138)。由有關(guān)手冊可知,該譯碼器由8個3輸入“與非”門、4個反相器和一個3輸入“或非”門構(gòu)成。如果事先不作說明,只給出電路,讓讀者來判讀該電路的功能,那么毋庸置疑,要看懂該電路就要花較多的時間。如果采用VHDL,從行為、功能來對3-8譯碼器進(jìn)行描述,則不僅邏輯設(shè)計變得非常容易,而且閱讀也會很方便。

8.1.2編、譯碼器與選擇器

編、譯碼器和選擇器是圖8-63-8譯碼器電路圖8-63-8譯碼器電路

1.3-8譯碼器

3-8譯碼器是最常用的一種小規(guī)模集成電路,它有3個二進(jìn)制輸入端a、b、c和8個譯碼輸出端y0~y7。對輸入a、b、c的值進(jìn)行譯碼,就可以確定輸出端y0~y7的哪一個輸出端變?yōu)橛行?低電平),從而達(dá)到譯碼的目的。3-8譯碼器的真值表如表8-1所示。

1.3-8譯碼器

3-8譯碼器是最常用的一種小規(guī)模VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

3-8譯碼器還有3個選通輸入端g1、g2a和g2b。只有在g1?=?1,g2a?=?0,g2b?=?0時,3-8譯碼器才進(jìn)行正常譯碼,否則y0~y7輸出均為高電平。

3-8譯碼器還有3個選通輸入端g1、g2a和g2b。只

【例8-11】3-8譯碼器用VHDL描述如下:

【例8-11】3-8譯碼器用VHDL描述如下:

VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

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

優(yōu)先級編碼器常用于中斷的優(yōu)先級控制。例如,74LS148是一個8輸入、3位二進(jìn)制碼輸出的優(yōu)先級編碼器。當(dāng)其某一個輸入有效時,就可以輸出一個對應(yīng)的3位二進(jìn)制編碼。另外,當(dāng)同時有幾個輸入有效時,將輸出優(yōu)先級最高的那個輸入所對應(yīng)的二進(jìn)制編碼。

圖8-7是優(yōu)先級編碼器的引腳圖,它有8個輸入input(0)~input(7)和3位二進(jìn)制碼輸出y0~y2。

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

優(yōu)先級編碼器常用于中斷的優(yōu)先級控圖8-7優(yōu)先級編碼器圖8-7優(yōu)先級編碼器

該優(yōu)先級編碼器的真值表如表8-2所示。表中,“X”表示任意項,它可以是“0”,也可以是“1”。input(0)的優(yōu)先級最高,input(7)的優(yōu)先級最低。

該優(yōu)先級編碼器的真值表如表8-2所示。表中,“X”表示VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

【例8-12】用VHDL描述優(yōu)先級編碼器的程序如下:

【例8-12】用VHDL描述優(yōu)先級編碼器的程序如下:

因為VHDL中目前還不能描述任意項,所以不能用前面一貫采用的CASE語句來描述,而采用了IF語句。

因為VHDL中目前還不能描述任意項,所

3.四選一選擇器

選擇器常用于信號的切換。四選一選擇器可以用于4路信號的切換。四選一選擇器有4個信號輸入端input(0)~input(3)、2個信號選擇端a和b及一個信號輸出端y。當(dāng)a、b輸入不同的選擇信號時,就可以使input(0)~input(3)中某個相應(yīng)的輸入信號與輸出y端接通。例如,當(dāng)a?=?b?=“0”時,input(0)就與y接通。其邏輯電路如圖8-8所示。

3.四選一選擇器

選擇器常用于信號的切換。四選一選圖8-8四選一電路圖8-8四選一電路

四選一電路的真值表如表8-3所示。

四選一電路的真值表如表8-3所示。

【例8-13】用VHDL對四選一電路進(jìn)行描述的程序如下:

【例8-13】用VHDL對四選一電路進(jìn)行描述的程序VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

例8-13中的四選一選擇器是用IF語句描述的,程序中的ELSE項作為余下的條件,將選擇input(3)從y端輸出,這種描述比較安全。當(dāng)然,不用ELSE項也可以,這時必須列出sel所有可能出現(xiàn)的情況,加以一一確認(rèn)。

例8-13中的四選一選擇器是用IF語句描述的,程序中的

8.1.3加法器與求補(bǔ)器

1.加法器

加法器有全加器和半加器之分,全加器可以用兩個半加器構(gòu)成,因此下面先以半加器為例加以說明。

半加器有兩個二進(jìn)制一位的輸入端a和b、一位和的輸出端s、一位進(jìn)位位的輸出端co。半加器的真值表如表8-4所示,其電路符號如圖8-9所示。

8.1.3加法器與求補(bǔ)器

1.加法器

加法器有圖8-9半加器圖8-9半加器VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

【例8-14】用VHDL描述半加器的程序如下:

【例8-14】用VHDL描述半加器的程序如下:

用兩個半加器可以構(gòu)成一個全加器。全加器的電路如圖8-10所示。

圖8-10用兩個半加器構(gòu)成的全加器

用兩個半加器可以構(gòu)成一個全加器。全加器的電路如圖8-1

【例8-15】采用COMPONENT語句和PORTMAP語句描述全加器。

【例8-15】采用COMPONENT語句和PORTVHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

2.求補(bǔ)器

二進(jìn)制運算經(jīng)常要用到求補(bǔ)操作。8位二進(jìn)制數(shù)的求補(bǔ)電路符號如圖8-11所示。

求補(bǔ)電路的輸入為a(0)~a(7),補(bǔ)碼輸出為b(0)~b(7),其中a(7)和b(7)為符號位。該電路較復(fù)雜,如果像半加器那樣對每個門進(jìn)行描述和連接是可以做到的,但是那樣做太繁瑣。這里采用RTL描述更加簡潔、清楚。

2.求補(bǔ)器

二進(jìn)制運算經(jīng)常要用到求補(bǔ)操作。8位二進(jìn)圖8-11

8位二進(jìn)制數(shù)的求補(bǔ)電路符號圖8-118位二進(jìn)制數(shù)的求補(bǔ)電路符號

【例8-16】用RTL描述求補(bǔ)器。

【例8-16】用RTL描述求補(bǔ)器。

8.1.4三態(tài)門與總線緩沖器

三態(tài)門與雙向總線緩沖器是接口電路和總線驅(qū)動電路經(jīng)常用到的器件。它們雖然不屬于組合電路,為簡化章節(jié),也列于此處進(jìn)行介紹。

1.三態(tài)門電路

三態(tài)門電路如圖8-12所示。它具有一個數(shù)據(jù)輸入端din、一個數(shù)據(jù)輸出端dout和一個控制端en。當(dāng)en?=?'1'?時,dout?=?din;當(dāng)en?=?'0'?時,dout?=?′Z′(高阻)。三態(tài)門的真值表如表8-5所示。

8.1.4三態(tài)門與總線緩沖器

三態(tài)門與雙向總線緩沖圖8-12三態(tài)門電路圖8-12三態(tài)門電路VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

【例8-17】用VHDL描述三態(tài)門的程序如下:

【例8-17】用VHDL描述三態(tài)門的程序如下:

在第3章中讀者已經(jīng)知道,一個實體可以對應(yīng)多種構(gòu)造體。例8-18和例8-19就是用不同的VHDL描述的三態(tài)門的結(jié)構(gòu)。

在第3章中讀者已經(jīng)知道,一個實體可以對應(yīng)多種

【例8-18】用VHDL描述三態(tài)門的結(jié)構(gòu)示例一。

【例8-18】用VHDL描述三態(tài)門的結(jié)構(gòu)示例一。

該例中采用衛(wèi)式塊語句結(jié)構(gòu)來表示三態(tài)門。衛(wèi)式塊語句結(jié)構(gòu)的特點是:只有塊語句的條件滿足時,塊中所含的語句才會被執(zhí)行。在這里只有en?=?'1'?的條件滿足時,dout<=GUARDEDdin語句才會被執(zhí)行。

該例中采用衛(wèi)式塊語句結(jié)構(gòu)來表示三態(tài)門。衛(wèi)式塊語句結(jié)構(gòu)的VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

2.單向總線緩沖器

在微型計算機(jī)的總線驅(qū)動中經(jīng)常要用單向總線緩沖器,它通常由多個三態(tài)門組成,用來驅(qū)動地址總線和控制總線。

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

用VHDL描述的8位單向總線緩沖器的程序?qū)嵗缋?-20、例8-21和例8-22所示。

2.單向總線緩沖器

在微型計算機(jī)的總線驅(qū)動中經(jīng)常要圖8-13單向總線緩沖器圖8-13單向總線緩沖器

【例8-20】用VHDL描述的8位單向總線緩沖器的程序?qū)嵗弧?/p>

【例8-20】用VHDL描述的8位單向總線緩沖器的程VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

【例8-21】用VHDL描述的8位單向總線緩沖器的程序?qū)嵗?/p>

【例8-21】用VHDL描述的8位單向總線緩沖器的程

【例8-22】用VHDL描述的8位單向總線緩沖器的程序?qū)嵗?/p>

【例8-22】用VHDL描述的8位單向總線緩沖器的程

在編寫上述程序時應(yīng)注意,不能將“Z”值賦予變量,否則就不能進(jìn)行邏輯綜合。另外,對信號賦值時“Z”和“0”或“1”不能混合使用,例如:

dout<=″Z001ZZZZ″;

這樣的語句是不允許出現(xiàn)的。但是變換賦值表達(dá)式時,分開賦值是可以的。例如:

dout(7)<="Z";

dout(6DOWNTO4)

<="001";

dout(3DOWNTO0)

<="ZZZZ";

在編寫上述程序時應(yīng)注意,不能將“Z”值賦予變量,否則就

3.雙向總線緩沖器

雙向總線緩沖器用于對數(shù)據(jù)總線進(jìn)行驅(qū)動和緩沖。典型的雙向總線緩沖器的電路圖如圖8-14所示。圖中,雙向緩沖器有兩個數(shù)據(jù)輸入輸出端a和b、一個方向控制端dr和一個選通端en。當(dāng)en?=?1時,雙向總線緩沖器未被選通,a和b都呈現(xiàn)高阻;當(dāng)en?=?0時,雙向總線緩沖器被選通,如果dr?=?0,那么a?=?b,如果dr?=?1,那么b?=?a。雙向總線緩沖器的真值表如表8-6所示。

3.雙向總線緩沖器

雙向總線緩沖器用于對數(shù)據(jù)總線進(jìn)圖8-14雙向總線緩沖器圖8-14雙向總線緩沖器VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

【例8-23】用VHDL描述雙向總線緩沖器實例。

【例8-23】用VHDL描述雙向總線緩沖器實例。

VHDL硬件描述語言與數(shù)字邏輯電路設(shè)計(第五版)侯伯亨章課件8

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

從例8-23中可以看出,雙向總線緩沖器由兩

8.2時序電路設(shè)計

8.2.1時鐘信號和復(fù)位信號

1.時鐘信號的描述眾所周知,任何時序電路都以時鐘信號為驅(qū)動信號,時序電路只是在時鐘信號的邊沿到來時,其狀態(tài)才發(fā)生改變。因此,時鐘信號通常描述時序電路程序的執(zhí)行條件。另外,時序電路也總是以時鐘進(jìn)程的形式來進(jìn)行描述的,其描述方式一般有兩種。

8.2時序電路設(shè)計

8.2.1時鐘信號和復(fù)位信號

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

(1)進(jìn)程的敏感信號是時鐘信號。在這種情況下,時鐘信

【例8-24】進(jìn)程的敏感信號是時鐘信號實例。

【例8-24】進(jìn)程的敏感信號是時鐘信號實例。

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

(2)用進(jìn)程中的WAITON語句等待時鐘。在這種情

【例8-25】用進(jìn)程中的WAITON語句等待時鐘實例。

【例8-25】用進(jìn)程中的WAITON語句等待時鐘實

在編寫上述程序時應(yīng)注意:

·無論IF語句還是WAITON語句,在對時鐘邊沿進(jìn)行說明時,一定要注明是上升沿還是下降沿(前沿還是后沿),只說明是邊沿是不行的。

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

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

在編寫上述程序時應(yīng)注意:

·無論IF語句還是WA

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

(3)時鐘邊沿的描述。為了描述時鐘邊沿,一定要指定是

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

IFclk='1'ANDclk'LAST_VAULE='0'AND

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論