《EDA技術(shù)案例教程》課件-第3章_第1頁(yè)
《EDA技術(shù)案例教程》課件-第3章_第2頁(yè)
《EDA技術(shù)案例教程》課件-第3章_第3頁(yè)
《EDA技術(shù)案例教程》課件-第3章_第4頁(yè)
《EDA技術(shù)案例教程》課件-第3章_第5頁(yè)
已閱讀5頁(yè),還剩103頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第3章VHDL典型電路設(shè)計(jì)3.1典型組合電路的設(shè)計(jì)3.2典型時(shí)序電路的設(shè)計(jì)3.3計(jì)數(shù)器的VHDL設(shè)計(jì)3.4基于LPM的設(shè)計(jì)3.5習(xí)題

3.1 典型組合電路的設(shè)計(jì)

3.1.1案例分析譯碼器(Decoder)是一類(lèi)多輸入多輸出組合邏輯電路器件,可以分為變量譯碼器和顯示譯碼器兩類(lèi)。變量譯碼器一般是一種較少輸入變?yōu)檩^多輸出的器件,常見(jiàn)的有n-2n線譯碼和8421BCD譯碼兩類(lèi);顯示譯碼器用來(lái)將二進(jìn)制數(shù)轉(zhuǎn)換成對(duì)應(yīng)的七段碼,一般可分為驅(qū)動(dòng)LED和驅(qū)動(dòng)LCD兩類(lèi)。

【例3-1】3-8譯碼器的VHDL設(shè)計(jì)(見(jiàn)圖3-1)。

功能分析:此例是標(biāo)準(zhǔn)集成譯碼器74LS138的VHDL描述。為了便于擴(kuò)展,譯碼器中設(shè)置了三個(gè)使能端E1、E2、E3,其中E1是高電平有效,E2、E3均為低電平有效,只有這三個(gè)使能信號(hào)均有效(即E1='1'

andE2='0'

andE3='0')時(shí),譯碼器才能工作。Y7~Y0是譯碼輸出端,低電平有效。其真值表見(jiàn)表3-1。

圖3-1

3-8譯碼器邏輯圖

設(shè)計(jì)要點(diǎn):

(1)實(shí)體中考慮到3-8譯碼器的輸入和輸出各為一組并列的多位端口,故采用標(biāo)準(zhǔn)邏輯矢量STD_LOIGIC_VECTOR類(lèi)型定義端口數(shù)據(jù)類(lèi)型。在使用此數(shù)據(jù)類(lèi)型時(shí),必須注明其數(shù)組寬度。

(2)使用IF語(yǔ)句和CASE語(yǔ)句作為功能表述語(yǔ)句,詮釋組合電路的真值表。IF語(yǔ)句描述使能端E1、E2、E3的控制功能;CASE語(yǔ)句描述譯碼功能,根據(jù)A、B、C端輸入的二進(jìn)制代碼選擇將相應(yīng)的譯碼結(jié)果送到輸出端Y。

(3)

IF、CASE語(yǔ)句屬于順序語(yǔ)句,因此必須放在進(jìn)程語(yǔ)句PROCESS中使用。

3.1.2知識(shí)點(diǎn)

1.標(biāo)準(zhǔn)邏輯矢量數(shù)據(jù)類(lèi)型STD_LOGIC_VECTOR

STD_LOGIC_VECTOR是STD_LOGIC_1164中定義的標(biāo)準(zhǔn)一維數(shù)組,數(shù)組中每個(gè)元素的數(shù)據(jù)類(lèi)型都是標(biāo)準(zhǔn)邏輯位STD_LOGIC。使用STD_LOGIC_VECTOR可以表達(dá)電路中并列的多通道端口、節(jié)點(diǎn)或者總線。

在使用此數(shù)據(jù)類(lèi)型時(shí),必須注明其數(shù)組寬度。如:

a:instd_logic_vector(2DOWNTO0); --下標(biāo)序列由高到低,用DOWNTO

y:outstd_logic_vector(0TO7); --下標(biāo)序列由低到高,用TO

上句定義輸入端a為一個(gè)具有3位位寬的總線端口信號(hào),它的最高位(居最左端)是a(2),通過(guò)數(shù)組元素排列指示關(guān)鍵字DOWNTO向右依次遞減定義a(1)和a(0)。

同理,下句定義輸出端y為一個(gè)具有8位位寬的總線端口信號(hào),通過(guò)關(guān)鍵字TO,從左往右依次遞增定義為y(0)~y(7),其中y(0)為最高位。

實(shí)際使用中應(yīng)注意數(shù)組的位寬,只有同位寬、同數(shù)據(jù)類(lèi)型的矢量之間才能進(jìn)行賦值。根據(jù)以上定義,有:

y<=“10000000”; --其中y(0)為1

y(0to3)<=“0001”; --其中y(3)為1

y(5to7)<=a; --其中y(7)為a(0)

其中,多位二進(jìn)制數(shù)必須加雙引號(hào),如"10000000";而一位二進(jìn)制數(shù)則加單引號(hào),如'1'。

2.IF語(yǔ)句

IF語(yǔ)句是VHDL中最重要的語(yǔ)句結(jié)構(gòu)之一,它根據(jù)語(yǔ)句中設(shè)置的一種或多種條件,有選擇地執(zhí)行指定的順序語(yǔ)句。

IF語(yǔ)句使用比較靈活,在例3-1中使用的格式如下:

IF條件句1THEN

順序語(yǔ)句1;

ELSIF條件句2THEN

順序語(yǔ)句2;

ELSE順序語(yǔ)句3;

ENDIF;

此語(yǔ)句首先判斷條件句1,如果條件1為真,則執(zhí)行順序語(yǔ)句1,如果條件1為假則判斷條件句2;如果條件2為真,則執(zhí)行順序語(yǔ)句2,反之則執(zhí)行ELSE后面的順序語(yǔ)句3。

IF語(yǔ)句的條件之間有優(yōu)先級(jí)的差別,先出現(xiàn)的條件優(yōu)先級(jí)高于后出現(xiàn)的條件。故上述語(yǔ)句中條件句1的優(yōu)先級(jí)別高于條件句2。

IF語(yǔ)句中至少要有一個(gè)條件句,條件句必須是BOOLEAN表達(dá)式,即結(jié)果只能是TRUE或FALSE。IF語(yǔ)句根據(jù)條件句的結(jié)果,選擇執(zhí)行其后的順序語(yǔ)句。此結(jié)構(gòu)可以實(shí)現(xiàn)條件分支功能,通過(guò)關(guān)鍵詞ELSIF設(shè)定多個(gè)條件,使順序語(yǔ)句的執(zhí)行分支可以超過(guò)兩個(gè)。

3.CASE語(yǔ)句

CASE語(yǔ)句根據(jù)滿(mǎn)足的條件直接選擇多項(xiàng)順序語(yǔ)句中的一項(xiàng)執(zhí)行。格式如下:

CASE表達(dá)式IS

WHEN選擇值=>順序語(yǔ)句;

WHEN選擇值=>順序語(yǔ)句;

ENDCASE;

CASE語(yǔ)句在執(zhí)行時(shí),首先計(jì)算表達(dá)式的值,然后選擇條件語(yǔ)句中與之相同的選擇值,執(zhí)行對(duì)應(yīng)的順序語(yǔ)句。條件句的次序是不重要的,它的執(zhí)行更接近于并行方式。

選擇值可以有四種不同的表達(dá)方式:

(1)單個(gè)普通數(shù)值,如4;

(2)數(shù)值選擇范圍,如(2to4),表示取值為2、3或4;

(3)并列數(shù)值,如3│5,表示取值為3或者5;

(4)混合方式,即以上三種方式的組合。

使用CASE語(yǔ)句時(shí)應(yīng)注意:

(1)條件句中的選擇值必在表達(dá)式的取值范圍內(nèi);

(2)每一個(gè)選擇值只能出現(xiàn)一次,即可執(zhí)行條件不能有重疊;

(3)選擇值要包含表達(dá)式所有可能的取值,否則在最后必須用“OTHERS”表示;

(4)CASE語(yǔ)句執(zhí)行中必須選中,且只能選中條件句中的一條,即CASE語(yǔ)句中至少包含一個(gè)條件句。

與IF語(yǔ)句相比,CASE語(yǔ)句的特點(diǎn)是可讀性比較好,它把所有可能出現(xiàn)的情況都列出來(lái)了,可執(zhí)行條件一目了然。

有的邏輯功能既可以用IF語(yǔ)句描述,也可以用CASE語(yǔ)句描述,但有些邏輯CASE語(yǔ)句無(wú)法描述,只能用IF語(yǔ)句描述,這是因?yàn)镮F-THEN-ELSE語(yǔ)句具有條件相與的功能和自動(dòng)將邏輯值“-”包括進(jìn)去的功能(“-”有利于邏輯的化簡(jiǎn)),而CASE語(yǔ)句只有條件相或的功能。

綜合后,對(duì)相同的邏輯功能,CASE語(yǔ)句比IF語(yǔ)句的描述耗用更多的硬件資源。

例3-2中的信號(hào)“s”是STD_LOGIC_VECTOR類(lèi)型,它的取值除了0和1以外,還可能有其他的值,如高阻態(tài)Z、不定態(tài)X等,因此最后一個(gè)條件句使用了關(guān)鍵詞OTHERS,使用OTHERS的目的是涵蓋信號(hào)“s”所有可能的取值。

在CASE語(yǔ)句中,OTHERS只能出現(xiàn)一次,且只能作為最后一種條件取值。

4.進(jìn)程語(yǔ)句PROCESS

進(jìn)程語(yǔ)句是VHDL程序中用來(lái)描述硬件電路工作行為的最常用、最基本的語(yǔ)句。進(jìn)程語(yǔ)句本身是并行語(yǔ)句,即一個(gè)結(jié)構(gòu)體中多個(gè)進(jìn)程之間是并行關(guān)系,各個(gè)進(jìn)程之間可以通過(guò)信號(hào)進(jìn)行通信。進(jìn)程內(nèi)部只能使用順序語(yǔ)句。

進(jìn)程語(yǔ)句不是單條語(yǔ)句,而是由順序語(yǔ)句組成的程序結(jié)構(gòu),其基本格式如下:

[進(jìn)程標(biāo)號(hào)]: PROCESS[(敏感信號(hào)表)]

IS

[進(jìn)程說(shuō)明部分]

BEGIN

順序語(yǔ)句

END PROCESS

[進(jìn)程標(biāo)號(hào)];

進(jìn)程是由關(guān)鍵字“PROCESS”引導(dǎo),到語(yǔ)句“ENDPROCESS”結(jié)束的語(yǔ)句結(jié)構(gòu)。每一個(gè)進(jìn)程可以賦予一個(gè)進(jìn)程標(biāo)號(hào),但進(jìn)程標(biāo)號(hào)不是必需的,敏感信號(hào)表后面的“IS”也不是必需的。

可見(jiàn),PROCESS語(yǔ)句是由三個(gè)部分組成的,即進(jìn)程說(shuō)明部分、順序語(yǔ)句描述部分和敏感信號(hào)表。

一個(gè)進(jìn)程可以看作是設(shè)計(jì)實(shí)體中的一部分功能相對(duì)獨(dú)立的電路模塊;一個(gè)設(shè)計(jì)實(shí)體中可以包含多個(gè)進(jìn)程,進(jìn)程之間是并行關(guān)系,各個(gè)進(jìn)程之間可以通過(guò)信號(hào)進(jìn)行通信。下面是一個(gè)包含兩個(gè)進(jìn)程的例子。

例3-5中有兩個(gè)進(jìn)程:pa和pb,它們的敏感信號(hào)分別為a、b、selx和tmp、c、sely,兩個(gè)進(jìn)程是完全獨(dú)立的。內(nèi)部信號(hào)tmp在進(jìn)程pa中是輸出,在進(jìn)程pb中則作為輸入,可見(jiàn),信號(hào)tmp是連接兩個(gè)進(jìn)程的通信線。這兩個(gè)進(jìn)程描述的都是2選1多路開(kāi)關(guān),將綜合成如圖3-2所示的電路。

圖3-2例3-5的電路

3.1.3相關(guān)知識(shí)

1.條件信號(hào)賦值語(yǔ)句WHEN-ELSE

條件信號(hào)賦值語(yǔ)句執(zhí)行時(shí)按書(shū)寫(xiě)的先后順序逐條測(cè)定賦值條件,一旦發(fā)現(xiàn)條件成立,就立即將表達(dá)式的值賦給賦值目標(biāo)。最后一個(gè)表達(dá)式可以不跟條件句,表示以上條件都不滿(mǎn)足時(shí)將此表達(dá)式的值賦予賦值目標(biāo)。

條件信號(hào)賦值語(yǔ)句格式如下:

賦值目標(biāo)<=表達(dá)式WHEN賦值條件ELSE

表達(dá)式WHEN賦值條件ELSE

表達(dá)式;

使用WHEN-ELSE語(yǔ)句時(shí)應(yīng)注意:

(1)條件信號(hào)賦值語(yǔ)句是并行語(yǔ)句,不能在進(jìn)程中使用;

(2)條件語(yǔ)句測(cè)試具有順序性,第一子句具有最高賦值優(yōu)先級(jí);

(3)執(zhí)行時(shí)按書(shū)寫(xiě)的先后順序逐條測(cè)定賦值條件,一旦賦值條件為T(mén)RUE,就立即將表達(dá)式的值賦給賦值目標(biāo)。最后一個(gè)表達(dá)式可以不跟條件句,表示以上條件都不滿(mǎn)足時(shí),將此表達(dá)式的值賦予賦值目標(biāo)。

注意:條件信號(hào)語(yǔ)句允許有重疊現(xiàn)象,這與CASE語(yǔ)句不同。

應(yīng)該注意,由于條件測(cè)試的順序性,第一個(gè)條件句具有最高優(yōu)先級(jí),第二句其次,第三句最后。也就是說(shuō),例3-6中如果p1和p2同時(shí)為1,則z獲得的賦值是a。

2.選擇信號(hào)賦值語(yǔ)句WITH-SELECT

選擇信號(hào)賦值語(yǔ)句也是并行語(yǔ)句,其功能與進(jìn)程中的CASE語(yǔ)句相似。選擇信號(hào)賦值語(yǔ)句的格式如下:

WITH選擇表達(dá)式SELECT

賦值目標(biāo)<=表達(dá)式WHEN選擇值,

表達(dá)式WHEN選擇值,

表達(dá)式WHEN選擇值;

使用WITH-SELECT語(yǔ)句時(shí)應(yīng)注意:

(1)選擇信號(hào)賦值語(yǔ)句不能在進(jìn)程中使用。

(2)與條件信號(hào)賦值語(yǔ)句不同,對(duì)選擇值(賦值條件)的測(cè)試不是順序進(jìn)行,而是同時(shí)進(jìn)行的。

(3)功能和進(jìn)程中的CASE語(yǔ)句相似,各子句的條件(選擇值)不能有重疊,且必須包含所有的條件。

(4)選擇信號(hào)賦值語(yǔ)句也有敏感量,就是WITH旁的選擇表達(dá)式,每當(dāng)選擇表達(dá)式的值發(fā)生變化就啟動(dòng)語(yǔ)句,將選擇表達(dá)式的值與各選擇值進(jìn)行對(duì)比,一旦相符就將對(duì)應(yīng)表達(dá)式的值賦給賦值目標(biāo)。

下面是一個(gè)簡(jiǎn)化的指令譯碼器的例子,由A、B、C三個(gè)位構(gòu)成不同的指令碼,對(duì)DATA1和DATA2兩個(gè)輸入值進(jìn)行不同的邏輯運(yùn)算,結(jié)果從DATAOUT輸出。

注意:選擇信號(hào)賦值語(yǔ)句的每一子句的結(jié)尾是逗號(hào),最后一句是分號(hào);而條件信號(hào)賦值語(yǔ)句每一子句的結(jié)尾沒(méi)有標(biāo)點(diǎn),只有最后一句有分號(hào)。

3.2 典型時(shí)序電路的設(shè)計(jì)

3.2.1 案例分析

【例3-10】D觸發(fā)器的VHDL設(shè)計(jì)。分析:圖3-3所示電路有時(shí)鐘端CP,輸入端D,一組互逆輸出端Q和NQ。該電路的功能是CP為上升沿時(shí),。圖3-3

D觸發(fā)器符號(hào)圖

設(shè)計(jì)要點(diǎn):

(1)邊沿觸發(fā)器在時(shí)鐘沿觸發(fā)時(shí)發(fā)生翻轉(zhuǎn),程序中“cp‘eventandcp=’1‘”是VHDL中上升沿的表述方式。

(2)相對(duì)于組合電路,時(shí)序電路有記憶,觸發(fā)器具有存儲(chǔ)數(shù)據(jù)的功能。使用IF語(yǔ)句的不完整形式(IF-THEN-ENDIF)可以實(shí)現(xiàn)保持功能。

(3)時(shí)序電路輸出端有反饋,與端口模式OUT的單向性矛盾,故需設(shè)置中間信號(hào)“signalxh:std_logic”。

3.2.2知識(shí)點(diǎn)

1.邊沿的檢測(cè)

例3-10條件中的判斷表達(dá)式“cp‘eventandcp=’1‘

”是用于時(shí)鐘信號(hào)CP上升沿的檢測(cè)的。如果檢測(cè)到CP的上升沿,那么表達(dá)式的輸出為T(mén)URE。

在信號(hào)類(lèi)屬性中,最常用的當(dāng)屬EVENT,它用來(lái)檢測(cè)信號(hào)在一個(gè)極短的時(shí)間段內(nèi)有無(wú)“事件”發(fā)生,如果有,就返回一個(gè)布爾值TRUE,反之就返回FALSE。這里所說(shuō)的事件是指信號(hào)的值發(fā)生變化,如信號(hào)從0變?yōu)?,或從1變?yōu)?都是事件。

例如:語(yǔ)句“IF(CLK‘EVENTANDCLK=’1‘)THEN…”是用來(lái)檢測(cè)CLK信號(hào)上升沿的,當(dāng)CLK’EVENT和CLK?=?‘1’的值都為T(mén)RUE時(shí),就說(shuō)明CLK信號(hào)有一個(gè)上升沿。

同理,CLK‘EVENTANDCLK=’0‘可以表示下降沿。

但必須注意,只有當(dāng)CLK信號(hào)是BIT類(lèi)型時(shí)才能用這種方式檢測(cè)上升沿,因?yàn)锽IT類(lèi)型只有0和1兩種取值。如果CLK是STD_LOGIC類(lèi)型,它可能的取值有9種,當(dāng)CLK'EVENT和CLK='1'都為T(mén)RUE時(shí)就不一定是上升沿了,此時(shí)應(yīng)該用“IFRISING_EDGE(CLK)THEN…”來(lái)檢測(cè)信號(hào)的上升沿。

RISING_EDGE()和FALLING_EDGE()是STD_LOGIC_1164標(biāo)準(zhǔn)程序包中預(yù)定義的兩個(gè)函數(shù),可用來(lái)檢測(cè)標(biāo)準(zhǔn)邏輯信號(hào)的上升沿和下降沿。

STABLE的值與EVENT相反,即沒(méi)有事件時(shí)返回TRUE,有事件時(shí)返回FALSE,下面兩條語(yǔ)句的功能是一樣的:

NOTCLK‘STABLEANDCLK=’1‘

CLK'EVENTANDCLK='1'

2.不完整條件句的保持功能

IF語(yǔ)句的不完整條件句格式如下:

IF條件句THEN

順序語(yǔ)句;

ENDIF;

這種結(jié)構(gòu)是最簡(jiǎn)單的IF語(yǔ)句結(jié)構(gòu),執(zhí)行此句時(shí),首先判斷條件句的結(jié)果,若結(jié)果為T(mén)RUE,則執(zhí)行關(guān)鍵詞“THEN”和“ENDIF”之間的順序語(yǔ)句;若條件為FALSE,則跳過(guò)順序語(yǔ)句不予執(zhí)行,相關(guān)信號(hào)的值維持不變。

3.利用BUFFER模式實(shí)現(xiàn)反饋

根據(jù)電路功能Q和NQ是一對(duì)互逆的輸出端,可知“NQ<=NOTQ;”。定義端口Q為OUT,為單向輸出模式,可以在設(shè)計(jì)實(shí)體中向此端口賦值,但不能作為賦值源,故需要設(shè)置SIGNAL作為中間量。

例3-10的另一個(gè)處理方案是利用BUFFER模式,將端口Q定義為具有數(shù)據(jù)讀入功能的輸出端口,即可以將輸出至端口的信號(hào)回讀,

Q:BUFFERSTD_LOGIC;

NQ:OUTSTD_LOGIC;

此時(shí)無(wú)需定義內(nèi)部信號(hào)“xh”,就可直接使用“NQ<=NOTQ;”語(yǔ)句。

從本質(zhì)上看,BUFFER模式仍是OUT模式,它與雙向模式的區(qū)別在于BUFFER模式回讀的信號(hào)不是外部輸入的,而是由內(nèi)部產(chǎn)生并保存的。

3.2.3相關(guān)知識(shí)

1.WAIT語(yǔ)句

在進(jìn)程PROCESS中,當(dāng)執(zhí)行到WAIT語(yǔ)句時(shí),程序?qū)⒈粧炱?SUSPENSION),直到設(shè)置的條件滿(mǎn)足后再重新開(kāi)始運(yùn)行。

WAIT語(yǔ)句主要有以下兩種形式:

WAITON信號(hào)表;

WAITUNTIL條件表達(dá)式;

例3-11中的進(jìn)程將在WAIT語(yǔ)句處被掛起,只有當(dāng)條件表達(dá)式中的信號(hào)發(fā)生變化,并且滿(mǎn)足所設(shè)的條件時(shí),才能脫離掛起狀態(tài)。一般來(lái)說(shuō),只有這種形式的WAIT語(yǔ)句(WAIT-UNTIL)才能被綜合,其他形式的等待語(yǔ)句只能用于仿真。

注意:此例中的PROCESS語(yǔ)句未列出敏感信號(hào),VHDL規(guī)定,已列出敏感量的進(jìn)程中不能使用任何的WAIT語(yǔ)句。

2.屬性描述與定義語(yǔ)句

VHDL中的某些項(xiàng)目可以具有屬性(Attribute),包括數(shù)據(jù)類(lèi)型、過(guò)程、函數(shù)、信號(hào)、變量、常量、實(shí)體、結(jié)構(gòu)體、配置、程序包、元件和語(yǔ)句標(biāo)號(hào)等。屬性代表這些項(xiàng)目的某種特征,通??梢杂靡粋€(gè)值或一個(gè)表達(dá)式來(lái)表示。

3.其他時(shí)序元件的設(shè)計(jì)

除了上面介紹的D觸發(fā)器外,VHDL中還可以實(shí)現(xiàn)其他基本時(shí)序元件,如JK觸發(fā)器等。

【例3-13】JK觸發(fā)器的VHDL設(shè)計(jì)。

邊沿JK觸發(fā)器特性如表3-2所示。

3.3 計(jì)數(shù)器的VHDL設(shè)計(jì)

【例3-14】帶異步清零端的四位二進(jìn)制加法計(jì)數(shù)器的VHDL設(shè)計(jì)。分析:該電路的輸入端包括清零、使能、時(shí)鐘,輸出端包括計(jì)數(shù)結(jié)果和進(jìn)位,見(jiàn)圖3-4。電路功能詳見(jiàn)表3-3。圖3-4帶異步清零端的四位二進(jìn)制加法計(jì)數(shù)器符號(hào)圖

設(shè)計(jì)要點(diǎn):

(1)之所以用“USEIEEE.STD_LOGIC_UNSIGNED.ALL;”打開(kāi)STD_LOGIC_UNSIGNED程序包,是因?yàn)閂HDL規(guī)定加法只能對(duì)整數(shù)INTEGER進(jìn)行操作。打開(kāi)程序包重載函數(shù)后,可對(duì)STD_LOGIC_VECTOR進(jìn)行加法運(yùn)算。

(2)注意異步端和同步端處理的區(qū)別,一是其與時(shí)鐘端的位置關(guān)系,二是正確使用IF-IF及IF-ELSIF表示邏輯關(guān)系。以清零端為例介紹如下。

①異步清零端:

IFRST=‘1’THENOUTY<=“0000”;

ELSIFCLK‘EVENTANDCLK=’1‘THEN

②同步清零端:

IFCLK’EVENTANDCLK=‘1’THEN

IFRST=‘1’THENOUTY<=“0000”;

(3)計(jì)數(shù)器加法累加表達(dá)式“OUTY<=OUTY+1;”中,表達(dá)式的賦值源部分出現(xiàn)了OUTY,故其端口模式不使用單向端OUT,而選擇具有反饋功能的BUFFER模式。

(4)進(jìn)位的處理方法“COUT<=OUTY(0)ANDOUTY(1)ANDOUTY(2)ANDOUTY(3);”,當(dāng)指針對(duì)計(jì)數(shù)器計(jì)滿(mǎn)值為“1111”時(shí)才有效。如果要實(shí)現(xiàn)其他計(jì)數(shù)范圍的進(jìn)位,則不可使用例3-14的方法。

3.3.2知識(shí)點(diǎn)

1.運(yùn)算符重載

在使用操作符時(shí)要注意適用的數(shù)據(jù)類(lèi)型,如加減操作只適用于整數(shù)。如果要對(duì)位矢量進(jìn)行算術(shù)運(yùn)算,則需要打開(kāi)“STD_LOGIC_UNSIGNED”程序包。如:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

這個(gè)程序包中對(duì)算術(shù)運(yùn)算符做了重新定義,使得位矢量也能進(jìn)行算術(shù)運(yùn)算。類(lèi)似地,關(guān)系運(yùn)算符中除了“=”和“/=”適用于所有數(shù)據(jù)類(lèi)型外,其他的關(guān)系運(yùn)算符對(duì)數(shù)據(jù)類(lèi)型都有限制,在程序包“STD_LOGIC_UNSIGNED”中對(duì)關(guān)系運(yùn)算符也做了重新定義,使得位矢量和整數(shù)也能進(jìn)行關(guān)系運(yùn)算。

2.BUFFER、INOUT和OUT模式

(1)

INOUT為輸入輸出雙向端口,即從端口內(nèi)部看,可以對(duì)端口進(jìn)行賦值,即輸出數(shù)據(jù);也可以從此端口讀入數(shù)據(jù),即輸入。

(2)

BUFFER為緩沖端口,功能與INOUT類(lèi)似,區(qū)別在于當(dāng)需要讀入數(shù)據(jù)時(shí),只允許內(nèi)部回讀內(nèi)部產(chǎn)生的輸出信號(hào),即反饋。舉個(gè)例子,設(shè)計(jì)一個(gè)計(jì)數(shù)器的時(shí)候可以將輸出的計(jì)數(shù)信號(hào)定義為BUFFER,這樣回讀輸出信號(hào)可以做下一計(jì)數(shù)值的初始值。

(3)

OUT顧名思義是只能單向輸出數(shù)據(jù)。

3.元件例化語(yǔ)句

元件例化就是將事先設(shè)計(jì)好的實(shí)體定義為一個(gè)元件,然后用專(zhuān)門(mén)的語(yǔ)句定義一種連接關(guān)系,將此元件與當(dāng)前設(shè)計(jì)實(shí)體中指定的端口相連接,從而為當(dāng)前設(shè)計(jì)實(shí)體引入一個(gè)新的設(shè)計(jì)層次。這時(shí),當(dāng)前的設(shè)計(jì)實(shí)體相當(dāng)于一個(gè)較大的電路系統(tǒng),所定義的例化元件相當(dāng)于這個(gè)系統(tǒng)中的一個(gè)芯片。元件例化是實(shí)現(xiàn)自上而下層次化設(shè)計(jì)的一種重要途徑。

元件例化語(yǔ)句由兩部分組成,前一部分將事先設(shè)計(jì)好的實(shí)體定義為一個(gè)元件,第二部分則是定義此元件與當(dāng)前設(shè)計(jì)實(shí)體的連接關(guān)系。

定義元件語(yǔ)句的格式如下:

COMPONENT元件名

GENERIC(類(lèi)屬表);

PORT(端口名表);

ENDCOMPONENT元件名;

定義元件例化語(yǔ)句的格式如下:

元件名PORTMAP(

[端口名=>]連接端口名,[端口名=>]連接端口名,…);

【例3-15】首先完成一個(gè)2輸入與非門(mén)的設(shè)計(jì),然后在一個(gè)新的設(shè)計(jì)實(shí)體中調(diào)用這個(gè)元件,如圖3-5所示。

圖3-5ORD41原理圖

注意:程序1、程序2這兩個(gè)程序要分別進(jìn)行編譯和綜合,并放在同一個(gè)目錄下。

PORTMAP是端口映射語(yǔ)句,用來(lái)說(shuō)明例化元件與當(dāng)前實(shí)體端口的連接關(guān)系。要表示這種連接關(guān)系有兩種方式,一種是名字關(guān)聯(lián)方式,一種是位置關(guān)聯(lián)方式,這兩種方式也可以混合使用。

4.生成語(yǔ)句

生成語(yǔ)句有一種復(fù)制作用,能用來(lái)在結(jié)構(gòu)體中產(chǎn)生多個(gè)相同的結(jié)構(gòu)或邏輯描述。生成語(yǔ)句有兩種形式,一種是FOR-GENERATE形式,格式如下:

[標(biāo)號(hào)]:FOR循環(huán)變量IN取值范圍GENERATE

生成語(yǔ)句

ENDGENERATE[標(biāo)號(hào)];

另一種是IF-GENERATE形式,格式如下:

[標(biāo)號(hào)]:IF條件GENERATE

生成語(yǔ)句

ENDGENERATE[標(biāo)號(hào)];

【例3-16】以下語(yǔ)句調(diào)用了8個(gè)D觸發(fā)器DFF,生成八D觸發(fā)器。

【例3-17】四位異步計(jì)數(shù)器的VHDL設(shè)計(jì)。

該電路的輸入CLK為時(shí)鐘端,輸出COUNT為四位計(jì)數(shù)結(jié)果。電路在CLK上升沿的觸發(fā)下進(jìn)行加法計(jì)數(shù)。以下是四位異步計(jì)數(shù)器的VHDL程序,該程序使用元件例化和生成語(yǔ)句實(shí)現(xiàn)異步時(shí)鐘結(jié)構(gòu)。

(1)D觸發(fā)器(略,見(jiàn)例3-10)。

(2)四位異步計(jì)數(shù)器。

使用RTL視圖輔助工具(Tools→NetlistViewers→RTLViewer),可查看綜合后的電路RTL結(jié)構(gòu),如圖3-6所示。

圖3-6四位異步計(jì)數(shù)器RTL視圖

3.3.3相關(guān)知識(shí)

例3-14的另一種處理是使用INTEGER數(shù)據(jù)類(lèi)型,其VHDL程序如下:

此時(shí)無(wú)需打開(kāi)STD_LOGIC_UNSIGNED程序包。

整數(shù)類(lèi)型的數(shù)代表正整數(shù)、負(fù)整數(shù)和零,只用來(lái)表示總線的狀態(tài),不能直接按位操作,也不能進(jìn)行邏輯運(yùn)算。

在使用整數(shù)時(shí),要用RANGE子句定義取值范圍,以便綜合器決定表示此信號(hào)或變量的二進(jìn)制數(shù)的位數(shù)。

例如:

SIGNALNUM:INTEGERRANGE0TO15;

定義一個(gè)整數(shù)型信號(hào)NUM,取值范圍是0~15,可用4位二進(jìn)制數(shù)表示,因此NUM將被綜合成4條信號(hào)線構(gòu)成的總線形式。

注意:如要給整數(shù)類(lèi)型的信號(hào)賦值,則數(shù)據(jù)不需要加引號(hào)。

3.4基于LPM的設(shè)計(jì)

LPM是LibraryofParameterizedModules(參數(shù)可設(shè)置模塊庫(kù))的縮寫(xiě),這個(gè)庫(kù)中包含了很多典型的電路模塊,可以用圖形或硬件描述語(yǔ)言的形式方便地調(diào)用,它們都是優(yōu)秀電子技術(shù)人員的設(shè)計(jì)成果。作為EDIF標(biāo)準(zhǔn)的一部分,LPM得到了EDA工具的良好支持。

【例3-18】基于LPM的設(shè)計(jì)方法。

作為定制LPM的一個(gè)示例,以下介紹一種有許多重要用途的先進(jìn)先出存儲(chǔ)器(FIFO)的定制方法。

(1)進(jìn)入QuartusⅡ,選擇菜單Tools→MegaWizardPlug-InManager…,進(jìn)入LPM元件定制界面,如圖3-7所示。

圖3-7PLM元件定制界面1

(2)在圖3-7中勾選“CreateanewCustommegafunctionVariation”,然后按“Next”按鈕進(jìn)入如圖3-8所示的界面。

圖3-8LPM元件定制界面2

在圖3-8所示界面的左欄有三項(xiàng)選擇:Arithmetic(算術(shù)運(yùn)算模塊)、Gates(組合門(mén)電路模塊)、Storage(存儲(chǔ)器模塊),選擇Storage模塊中的LPM_FIFO,然后選擇輸出文件的類(lèi)型為VHDL,并在“Browse”按鈕下的文本框中鍵入輸出文件名“myfifo”及其存儲(chǔ)路徑,再按“Next”按鈕進(jìn)入下一界面(見(jiàn)圖3-9)。

(3)在圖3-9所示的界面中選擇FIFO的數(shù)據(jù)線寬度為8位,深度為16,即此FIFO能存儲(chǔ)8位二進(jìn)制數(shù)共16個(gè),然后按“Next”按鈕進(jìn)入如圖3-10所示的界面。

圖3-9LPM元件定制界面3

(4)在圖3-10所示的界面中,除了時(shí)鐘信號(hào)clock、數(shù)據(jù)輸入端口data[7..0]、輸出端口q[7..0]、寫(xiě)入請(qǐng)求信號(hào)wrreq和讀出請(qǐng)求信號(hào)rdreq等必需的端口外,再設(shè)置一個(gè)數(shù)據(jù)溢出信號(hào)full和異步

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論