第三章組合邏輯電路_第1頁
第三章組合邏輯電路_第2頁
第三章組合邏輯電路_第3頁
第三章組合邏輯電路_第4頁
已閱讀5頁,還剩99頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第三章組合邏輯電路第一節(jié)組合電路的分析和設(shè)計第二節(jié)組合邏輯電路中的競爭與冒險第三節(jié)超高速集成電路硬件描述語言VHDL第四節(jié)組合邏輯電路模塊及其應(yīng)用小結(jié)相關(guān)知識回顧:邏輯運算邏輯門與或非異或同或非門與門或門與非門或非門異或門同或門本章任務(wù):1.組合邏輯電路的分析與設(shè)計2.常用組合邏輯模塊的使用由邏輯門組成第三章組合邏輯電路(2)學(xué)習(xí)常用中規(guī)模集成模塊(3)了解電路中的競爭和冒險現(xiàn)象本章重點(1)掌握分析和設(shè)計組合電路的基本方法加法器比較器譯碼器編碼器選擇器分配器本章基本內(nèi)容(1)電路分析與設(shè)計經(jīng)典的方法(2)常用組合邏輯模塊的靈活應(yīng)用組合電路的分析組合電路的設(shè)計第一節(jié)組合電路的分析和設(shè)計組合電路一、組合電路輸入:邏輯關(guān)系:Fi=fi(X1、X2、…、Xn)i=(1、2、…、m)特點:電路由邏輯門構(gòu)成;不含記憶元件;輸出無反饋到輸入的回路;輸出與電路原來狀態(tài)無關(guān)。輸出:X1、X2、…、XnF1、F2、…、FmX1X2Xn…組合網(wǎng)絡(luò)組合電路方框圖F1F2Fm…二、組合電路的分析分析已知邏輯電路功能步驟:輸出函數(shù)表達式描述電路功能已知組合電路簡化函數(shù)真值表ABCF00000010010001111000101111011111真值表因此該電路為少數(shù)服從多數(shù)電路,稱表決電路。解:(1)由電路圖得邏輯表達式(2)由邏輯表達式得真值表(3)功能分析:多數(shù)輸入變量為1,輸出F為1;多數(shù)輸入變量為0,輸出F為0。例1:試分析右圖所示邏輯電路的功能。&&&&ABCF解:(1)由電路圖得表達式(2)列出真值表例2:試分析下圖所示邏輯電路的功能。=1G2B2=1G1B1=1G0B0G3B3自然二進制碼格雷碼B3B2B1B0

G3G2G1G00000 0000000100010010001100110010010001100101011101100101011101001000110010011101101011111011111011001010110110111110100111111000(2)列出真值表(1)由電路圖得表達式本電路是自然二進制碼至格雷碼的轉(zhuǎn)換電路。(3)分析功能注意:利用此式時對碼位序號大于(n-1)的位應(yīng)按0處理,如本例碼位的最大序號i=3,故B4應(yīng)為0,才能得到正確的結(jié)果。推廣到一般,將n位自然二進制碼轉(zhuǎn)換成n位格雷碼:Gi=Bi⊕Bi+1

(i=0、1、2、…、n-1)自然二進制碼至格雷碼的轉(zhuǎn)換三、組合電路的設(shè)計步驟:根據(jù)要求設(shè)計出實際邏輯電路形式變換根據(jù)設(shè)計所用芯片要求選擇所需門電路根據(jù)設(shè)計要求分析題意,將設(shè)計要求轉(zhuǎn)化為邏輯關(guān)系,這一步為設(shè)計組合邏輯電路的關(guān)鍵確定輸入、輸出、列出真值表寫出表達式并簡化畫邏輯電路圖例3:半加器的設(shè)計(1)半加器真值表(2)輸出函數(shù)(3)邏輯圖輸入輸出被加數(shù)A

加數(shù)B

和S

進位C0000011010101101(4)邏輯符號&ABC=1S∑COSCAB半加器邏輯符號由表達式知,若無特別要求,用一個異或門和一個與門即可實現(xiàn)半加器電路。電路圖為:分析:半加器是將兩個一位二進制數(shù)相加求和及向高位進位的電路。因此,有兩個輸入(加數(shù)與被加數(shù))及兩個輸出(和與進位)。設(shè)被加數(shù)和加數(shù)分別為A和B,和與進位分別為S、C,真值表為:將用“異或”門實現(xiàn)的半加器改為用“與非”門實現(xiàn)函數(shù)表達式變換形式:用“與非”門實現(xiàn)半加器邏輯圖如圖所示:&ABC&S&&&全加器是實現(xiàn)例4:全加器的設(shè)計。學(xué)生自己完成邏輯電路全加器邏輯符號全加器真值表輸入輸出

Ai

Bi

Ci

Si

Ci+10000000110010100110110010101011100111111一位二進制數(shù)一位二進制數(shù)低位來的進位相加和高位進位∑COSiCi+1CiBiCIAi例5:試將8421BCD碼轉(zhuǎn)換成余三BCD碼。

8421碼余三碼

B3

B2

B1

B0

E3

E2

E1

E0000000011100010100200100101300110110401000111501011000601101001701111010810001011910011100101010?

?

?

?111011?

?

?

?121100?

?

?

?131101?

?

?

?141110?

?

?

?151111?

?

?

?(2)卡諾圖(1)真值表B3B2B1B000011110000111100011??1?01??00?1E3B3B2B1B000011110000111100000??0?11??11?1E0B3B2B1B000011110000111100101??0?00??11?1E1B3B2B1B000011110000111101100??1?10??01?0E2(3)表達式(2)卡諾圖B3B2B1B000011110000111100011??1?01??00?1E3B3B2B1B000011110000111100000??0?11??11?1E0B3B2B1B000011110000111100101??0?00??11?1E1B3B2B1B000011110000111101100??1?10??01?0E2(4)電路圖(3)表達式8421BCD碼B3B2B1B08421BCD碼轉(zhuǎn)換成余3BCD碼的邏輯電路余3碼E1E0E2E3&&111&&&&&1&&&≥1AFf1f2&&B&CC(a)邏輯圖(b)波形圖ABCCttttttttpgtpdf1f2F第二節(jié)組合電路中的競爭與冒險一、冒險與競爭競爭:冒險:在組合電路中,信號經(jīng)由不同的途徑達到某一會合點的時間有先有后。由于競爭而引起電路輸出發(fā)生瞬間錯誤現(xiàn)象。表現(xiàn)為輸出端出現(xiàn)了原設(shè)計中沒有的窄脈沖,常稱其為毛刺。二、競爭與冒險的判斷代數(shù)法:或的形式時,A變量的變化可能引起險象??ㄖZ圖法:如函數(shù)卡諾圖上為簡化作的圈相切,且相切處又無其他圈包含,則可能有險象。如圖所示電路的卡諾圖兩圈相切,故有險象?!?AFf1f2&&B&CCABC000111100100111100兩圈相切有險象三、冒險現(xiàn)象的消除1.增加冗余項如圖所示卡諾圖,只要在兩圈相切處增加一個圈(冗余),就能消除冒險。增加冗余項可以解決每次只有單個輸入信號發(fā)生變化時電路的冒險問題,卻不能解決多個輸入信號同時發(fā)生變化時的冒險現(xiàn)象,適用范圍有限。ABC000111100100111100增加冗余圈克服險象ABC000111100100111100兩圈相切有險象三、冒險現(xiàn)象的消除2.增加選通信號在可能產(chǎn)生冒險的門電路的輸入端增加一個選通脈沖。當輸入信號變換完成,進入穩(wěn)態(tài)后,才啟動選通脈沖,將門打開。這樣,輸出就不會出現(xiàn)冒險脈沖。1.增加冗余項增加選通信號的方法比較簡單,一般無需增加電路元件,但選通信號必須與輸入信號維持嚴格的時間關(guān)系,因此選通信號的產(chǎn)生并不容易。3.輸出接濾波電容1.增加冗余項2.增加選通信號由于競爭冒險產(chǎn)生的干擾脈沖的寬度一般都很窄,在可能產(chǎn)生冒險的門電路輸出端并接一個濾波電容(一般為4~20pF),使輸出波形上升沿和下降沿都變得比較緩慢,從而起到消除冒險現(xiàn)象的作用。三、冒險現(xiàn)象的消除輸出端接濾波電容方便易行,但會使輸出電壓波形變壞,僅適合對信號波形要求不高的場合。

第三節(jié)超高速集成電路硬件描述語言VHDL概述

VHDL語言的基本組成

VHDL數(shù)據(jù)類型和屬性

VHDL的行為描述

VHDL的結(jié)構(gòu)描述VHDL概述★

設(shè)計方法

傳統(tǒng)的電路系統(tǒng)設(shè)計方法:純硬件邏輯設(shè)計(試湊法)存在的問題:

當系統(tǒng)規(guī)模增大,設(shè)計工作量大,設(shè)計周期長;設(shè)計電路的體積大、功耗大、可靠性較低;交流性較差。◆

現(xiàn)代電路的設(shè)計方法:硬件設(shè)計+軟件設(shè)計從上至下的設(shè)計方法出現(xiàn)HardwareDescriptionLanguage,HDL★

硬件描述語言

ABEL◆

AHDL

VerilogHDL◆

VHDL美國國防部在80年代初提出了VHSIC(VeryHighSpeedIntegratedCircuit)計劃,其目標之一是為下一代集成電路的生產(chǎn),實現(xiàn)階段性的工藝極限以及完成10萬門級以上的設(shè)計,建立一項新的描述方法。1981年提出了一種新的HDL,稱之為VHSICHardwareDescriptionLanguage,簡稱為VHDL。VHDL概述IEEE標準★

VHDL語言的主要優(yōu)點

◆是一種多層次的硬件描述語言,覆蓋面廣,描述能力強。即設(shè)計的原始描述可以是非常簡練的描述,經(jīng)過層層細化求精,最終成為可直接付諸生產(chǎn)的電路級或版圖參數(shù)描述,整個過程都可以在VHDL的環(huán)境下進行。

VHDL有良好的可讀性,即可以被計算機接受,也容易被理解用VHDL書寫的原文件,即是程序,又是文檔,即是技術(shù)人員之間交換信息的文件,又可作為合同簽約者之間的文件。

VHDL概述◆VHDL本身的生命期長。因為VHDL的硬件描述與工藝技術(shù)無關(guān),不會因工藝變化而使描述過時。與工藝技術(shù)有關(guān)的參數(shù)可通過VHDL提供的屬性加以描述,工藝改變時,只需修改相應(yīng)程序中的屬性參數(shù)即可?!?/p>

支持大規(guī)模設(shè)計的分解和已有設(shè)計的再利用。一個大規(guī)模設(shè)計不可能一個人獨立完成,它將由多人、多項目組來共同完成。VHDL為設(shè)計的分解和設(shè)計的再利用提供了有力的支持。

VHDL已成為IEEE承認的一個工業(yè)標準,事實上已成為通用硬件描述語言。

VHDL概述★

VHDL語言的主要優(yōu)點一、VHDL的基本組成VHDL語言參數(shù)部分——程序包接口部分—設(shè)計實體描述部分—結(jié)構(gòu)體LIBRARY

ieee;USE

ieee.std_logic_1164.all;(一)參數(shù)部分——程序包程序包IEEE標準的標準程序包設(shè)計者自身設(shè)計的程序包

設(shè)計中的子程序和公用數(shù)據(jù)類型的集合。調(diào)用數(shù)據(jù)類型標準程序包的VHDL語言描述放在VHDL程序的最前面,表示以后在實體或結(jié)構(gòu)體中要用到數(shù)據(jù)類型包中的數(shù)據(jù)類型。調(diào)用程序包語句標準程序包定義程序包(二)接口部分—設(shè)計實體kxora1b1c1設(shè)計實體提供設(shè)計模塊的公共信息,是VHDL設(shè)計電路的最基本部分。VHDL實體的描述方法:ENTITY

kxor

ISPORT(a1,b1:INstd_logic;c1:OUTstd_logic);END

kxor;

一個模塊中僅有一個設(shè)計實體。調(diào)用程序包語句標準程序包定義程序包實體及實體聲明語句ENTITY

kxor

ISPORT(a1,b1:INstd_logic;END

kxor;c1:OUTstd_logic);ENTITY、IS、PORT、IN、OUT和END為關(guān)鍵字;ENTITY...END之間表示實體內(nèi)容;kxor表示實體的名稱,即電路的符號名;PORT——端口(引腳)信息關(guān)鍵字,描述了信號的流向;IN——輸入模式;OUT——輸出模式;std_logic表示信號取值的類型為標準邏輯。(二)接口部分—設(shè)計實體ENTITY

sel

IS

PORT(d0,d1,d2,d3:INBIT;

s:ININTEGERRANGE0TO3;

out1:OUTBIT);END

sel;d0d1d2d3sout1sel再例:(二)接口部分—設(shè)計實體(三)描述部分—結(jié)構(gòu)體結(jié)構(gòu)體描述實體硬件的互連關(guān)系、數(shù)據(jù)的傳輸和變換以及動態(tài)行為。一個實體可以對應(yīng)多個結(jié)構(gòu)體,每個結(jié)構(gòu)體可以代表該硬件的某一方面特性,例如行為特性、結(jié)構(gòu)特性。ARCHITECTURE

kxor_arc

OF

kxor

ISBEGINc1<=(NOTa1ANDb1)OR(a1AND

NOTb1);END

kxor_arc;調(diào)用程序包語句標準程序包定義程序包實體及實體聲明語句結(jié)構(gòu)體1結(jié)構(gòu)體2結(jié)構(gòu)體nkxora1b1c1a1b1c1kxora1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1a1b1c1二、VHDL數(shù)據(jù)類型和屬性

VHDL硬件描述語言中涉及了許多信號、變量和常量,它們用來保持數(shù)據(jù)。在VHDL中,保持數(shù)據(jù)的信號、變量和常量稱為目標。

VHDL是一種非常嚴格的數(shù)據(jù)類型化語言,規(guī)定每個信號、常量或變量和每個表達式有一個唯一的確定數(shù)據(jù)類型,每個目標和表達式的數(shù)據(jù)類型靜態(tài)地被確定。每一個目標都有一個數(shù)據(jù)類型來確定目標保持的那一類數(shù)據(jù)。在表達式中分配數(shù)值給目標時的數(shù)據(jù)類型不可以被混用。在VHDL中目標有三種:信號、變量和常量。

信號和變量可以賦予一系列的值,而常量一次僅被分配一個值。信號和變量又有不同,賦予信號的數(shù)值要到未來的某個時刻,信號才接受當前的數(shù)值;而賦予變量的數(shù)值,變量立即接收當前的數(shù)值。目標的一般形式如下:<目標種類><目標<,目標...>>:<目標類型>:=<表達式>;二、VHDL數(shù)據(jù)類型和屬性目標:是一個或多個代表著目標種類的字符串,多個目

標時用“,”號分開。<目標種類><目標<,目標...>>:<目標類型>:=<表達式>;目標種類:信號(SIGNAL)、變量(VARIABLE)和常量

(CONSTANT)。信號:它表示把元件的端口連接在一起的互連線。

變量:用于對暫時數(shù)據(jù)的局部存儲,變量只在進程和子

程序內(nèi)部定義。

常量:對某些特定類型數(shù)據(jù)賦予的一次性數(shù)值。表達式:表達式是為了規(guī)定目標的初始值,這是缺省部分。目標類型:為了規(guī)定目標的特征,VHDL含有很寬范圍的數(shù)據(jù)類型。VHDL除了有基本的數(shù)據(jù)類型之外,設(shè)計者還可以建立自己的數(shù)據(jù)類型,類型說明部分規(guī)定類型名和類型范圍,它的一般形式是:VARIABLEa1:INTEGER:=3;TYPE<類型名>IS<類型范圍>;標量類型、復(fù)合類型、子類型、文件類型和尋址類型。標量類型包括所有的簡單類型:如整數(shù)、實數(shù)等;復(fù)合類型包括數(shù)組和記錄;尋址類型在一般編輯語言中等價為指針;文件類型是設(shè)計者定義的文件類型為設(shè)計者提供說明的文件對象;子類型主要是對現(xiàn)有類型加以限制。VHDL可用數(shù)據(jù)類型有五類:1.標量數(shù)據(jù)類型

標量數(shù)據(jù)類型是基本的數(shù)據(jù)類型,它包括整數(shù)類型、實數(shù)類型、物理類型和枚舉類型。

物理類型要提供一個基本單位,然后在這個基本單位上定義多個或零個次級單位,每個次級單位都是基本單位的整數(shù)倍。

枚舉類型在形式上是定義括弧括起來的字符串文字表,一個字符串文字在枚舉類型定義中只能出現(xiàn)一次,但允許同樣一個字符串文字出現(xiàn)在不同的枚舉類型的字符串文字表中,枚舉類型的字符串文字表中的文字是由設(shè)計者定義的,這些字母可以是單個字母,也可以是一個字符串,例如BREAKFAST,Lunch,a等。

下面舉一個VHDL程序加深理解枚舉類型的使用。一個目標的數(shù)值有可能經(jīng)常更換或者說是包含多個值,但一個目標一次只能被一種類型說明。PACKAGEmeals_pkgIS

TYPEmealIS(breakfast,lunch,dinner);

ENDmeals_pkg;例1:USEwork.meals_pkg.all;ARCHITECTUREmeals_arcOFmealsIS

BEGIN

WITHprevious_mealSELECT

next_meal<=breakfastWHENdinner,

lunchWHENbreakfast,

dinnerWHENlunch;

ENDmeals_arc;自定義程序包的名字枚舉數(shù)據(jù)類型的名字三個枚舉數(shù)據(jù)ENTITYmealsIS

PORT(previous_meal:INmeal;

next_meal:OUTmeal);

ENDmeals;調(diào)用自定義程序包mealsnextprevious枚舉型數(shù)據(jù)2.復(fù)合數(shù)據(jù)類型

復(fù)合類型是由數(shù)組類型和記錄類型組成,它們的元素是標量類型的元素。數(shù)組類型是由相同的標量元素組成,即同構(gòu)復(fù)合類型,數(shù)組可以是一維、二維或多維。例如:TYPEmatrixIS

ARRAY(row,column)OFstd_logic;

TYPEr_maISARRAY(1TO10,1TO40)OFstd_logic;TYPEwordISARRAY(15DOWNTO0)OFBIT;TYPEcolumnISRANGE1TO40;TYPErowISRANGE1TO10;CONSTANTROM:BIT_VECTOR(0TO15);

Word(15)…word(0)共16個同數(shù)據(jù)類型的元素VHDL的屬性

VHDL中的屬性使得VHDL程序更加簡明扼要,更加容易理解,VHDL的屬性在時序程序中幾乎處處可見,如值類屬性的左邊界、右邊界、上下邊界以及值類屬性的長度,還可以檢測信號上升沿和下降沿以及前一次發(fā)生的事件等等。TYPEbit1ISARRAY(63DOWNTO32)OFBIT;

VARIABLE

left_range,right_range,uprange,lowrange:INTEGER;

BEGIN

left_range:=bit1’LEFT;--returns63

right_range:=bit1’RIGHT;--returns32

uprange:=bit1’HIGH;--returns63

lowrange:=bit1’LOW;

--returns32

值類屬性:值類屬性用于返回數(shù)組的邊界或長度,首先舉一例數(shù)組邊界的例子說明值類屬性。例2:TYPEbit1ISARRAY(0TO7)OFBIT;

TYPEbit2ISARRAY(8TO31)OFBIT;

VARIABLElen1,len2:INTEGER;

BEGIN

len1:=bit1’LENGTH;--return8

len2:=bit2’LENGTH;--return24下面再舉一個值類數(shù)組屬性的例子,讓其返回數(shù)組范圍的總長度。例:它可用來檢查一個信號的變化,并且變化剛剛發(fā)生,即推斷出在信號上發(fā)生了一個跳變。

函數(shù)信號屬性:函數(shù)信號屬性用來返回有關(guān)信號行為功能的信息,它反映一個信號是否正好有值的變化或事件的發(fā)生,如clk’EVENT,這個屬性為“EVENT”,對檢查時鐘邊沿觸發(fā)是很有效的。下面舉一個例子,說明函數(shù)信號屬性的用法。IF

clk=‘1’AND

clk’EVENT

THEN

q<=d;

ENDIF;上述語句中用到了函數(shù)信號屬性clk’EVENT,說明如果時鐘信號clk為高電平,并且事件剛剛發(fā)生,也就是說是時鐘上升沿有效,此時q得到d的信號。(三)VHDL的行為描述在VHDL硬件描述語言中,描述電路邏輯的程序稱為行為描述,行為描述有并行描述、進程描述和順序描述。三個行為既可以是相互獨立,成為單一的行為描述體,又可以相互聯(lián)系,成為混合描述體,如進程行為描述行為之間是并行行為,進程行為體的內(nèi)部是順序行為。1.VHDL的并行行為在典型的編程語言如C或Pascal中,每個賦值語句按規(guī)定的次序,一個接在另一個之后順序執(zhí)行,執(zhí)行的次序由源文件決定。在VHDL中,結(jié)構(gòu)體的內(nèi)部沒有規(guī)定語句的次序,執(zhí)行的次序僅由對語句中的敏感信號發(fā)生的事件決定,且語句是同時執(zhí)行。結(jié)構(gòu)體中并行賦值語句的一般格式如下:<對象><=<表達式>;讀作對象得到表達式的值,作用是將表達式的信號值分配給對象,即每當表達式的信號值變化時執(zhí)行該語句。每個表達式都至少有一個敏感信號,每當敏感信號改變其值時,就執(zhí)行這個信號賦值語句。在所有的并行語句中,兩個以上的并行賦值語句在字面上的順序并不表明它們的執(zhí)行順序。例如下面的兩個結(jié)構(gòu)體在功能上是等價的。ENTITYexeIS

PORT(a1,a2:INBIT;

b1,b2:OUTBIT);

ENDexe;ARCHITECTUREexe_arc1OFexeIS

BEGIN

b1<=a1ANDb2;

b2<=NOTa1ORa2;

ENDexe_arc1;ARCHITECTUREexe_arc2OFexeIS

BEGIN

b2<=NOTa1ORa2;

b1<=a1ANDb2;

ENDexe_arc2;另一種并行信號賦值語句是選擇信號賦值語句,它們的每一個賦值語句都需要給出一個表達式,同時給出與該表達式的每個可能值相關(guān)聯(lián)的信號。選擇信號賦值語句的一般形式如下:

WITH<表達式>SELECT

<對象><=<信號1>WHEN<分支1>,

<信號2>WHEN<分支2>,

<信號n>WHEN<分支n>;ARCHITECTURE

sels_arc

OF

sels

ISBEGIN

WITHsSELECT

out1<=d0WHEN0,

d1WHEN1,

d2WHEN2,

d3WHEN3;

END

sels_arc;一個典型的四路數(shù)據(jù)選擇器VHDL程序說明WITH一般形式的用法。ENTITY

sels

IS

PORT(d0,d1,d2,d3:INBIT;

s:ININTEGERRANGE0TO3;

out1:OUTBIT);

END

sels;d0d1d2d3sout1sels仍以四路數(shù)據(jù)選擇器為例,討論另一個較為復(fù)雜的并行信號賦值語句的例子,以便更詳細地說明并行概念,下面是四輸入數(shù)據(jù)選擇器的第二個VHDL程序。

例:LIBRARY

ieee;

USEieee.std_logic_1164.all;

ENTITYmux4IS

PORT(I0,I1,I2,I3,A,B:INstd_logic;

Q:OUTstd_logic);

ENDmux4;ARCHITECTUREmux4_arcOFmux4IS

SIGNAL

sel:INTEGER;

BEGIN

Q<=I0AFTER10nsWHEN

sel=0ELSE

I1AFTER10nsWHEN

sel=1ELSE

I2AFTER10nsWHEN

sel=2ELSE

I3AFTER10ns;

sel<=0WHENA=‘0’ANDB=‘0’ELSE

1WHENA=‘1’ANDB=‘0’ELSE

2WHENA=‘0’ANDB=‘1’ELSE

3;ENDmux4_arc;2.VHDL的進程行為

VHDL除了并行行為之外,還有順序行為。順序行為執(zhí)行的順序是一個接在另一個之后嚴格執(zhí)行。順序行為的語句存在于VHDL程序中的進程行為之中。而進程行為之間是并行行為語句。進程行為語句的一般形式如下:<進程標號>:PROCESS<敏感信號表><進程說明區(qū)>

BEGIN

<語句部分>

WAITON<敏感信號表>;

WAITUNTIL<條件表達式>;

WAITFOR<時間表達式>;

ENDPROCESS;整個實體模塊中的每個進程行為語句,可以在任何時候被激活,所有被激活的進程是并行執(zhí)行的。下面舉一個3線-8線通用譯碼器程序的例子,說明進程語句如何工作。LIBRARY

ieee;

USEieee.std_logic_1164.all;

USE

ieee.std_logic_arith.all;

ENTITYdecoderIS

PORT(sel:INUNSIGNED(2DOWNTO0);

dout:OUTUNSIGNED(7DOWNTO0));ENDdecoder;ARCHITECTUREdecoder_arcOFdecoderIS

SIGNALsel1:INTEGER;

BEGIN

PROCESS(sel)

BEGINsel1<=CONV_INTEGER(sel);

CASEsel1IS

WHEN0=>dout<=(‘0’,’0’,’0’,’0’,’0’,’0’,’0’,’1’)AFTER5ns;

WHEN1=>dout<=(‘0’,’0’,’0’,’0’,’0’,’0’,’1’,’0’)AFTER5ns;

WHEN2=>dout<=(‘0’,’0’,’0’,’0’,’0’,’1’,’0’,’0’)AFTER5ns;

WHEN3=>dout<=(‘0’,’0’,’0’,’0’,’1’,’0’,’0’,’0’)AFTER5ns;

WHEN4=>dout<=(‘0’,’0’,’0’,’1’,’0’,’0’,’0’,’0’)AFTER5ns;

WHEN5=>dout<=(‘0’,’0’,’1’,’0’,’0’,’0’,’0’,’0’)AFTER5ns;

WHEN6=>dout<=(‘0’,’1’,’0’,’0’,’0’,’0’,’0’,’0’)AFTER5ns;

WHENOTHERS=>dout<=(‘1’,’0’,’0’,’0’,’0’,’0’,’0’,’0’)AFTER5ns;

ENDCASE;

ENDPROCESS;

ENDdecoder_arc;此例只要sel的值一發(fā)生改變就激活進程,從第一句執(zhí)行直到滿足條件后再被掛起。PROCESS(sel)下例是另一種激活進程的方式:ENTITY

reg

IS

PORT(d,clk:INBIT;

q1,q2:OUTBIT);

END

reg;

ARCHITECTURE

reg_arc

OF

reg

IS

BEGIN

PROCESS

BEGIN

WAITUNTIL

clk=‘1’;

q1<=d;

ENDPROCESS;

PROCESS

BEGIN

WAITUNTIL

clk=‘0’;q2<=d;

ENDPROCESS;END

reg_arc;進程行為語句之間是并行關(guān)系,進程行為語句內(nèi)部是順序關(guān)系。

VHDL的每個結(jié)構(gòu)體中可以有多個進程行為語句。它的關(guān)鍵之處是:3.VHDL的順序行為順序行為語句可分為兩大類:條件控制類,循環(huán)控制類。在這兩類中選出六種IF、CASE、FOR、WHILE..LOOP、EXIT和ASSERT進行討論

IF<條件>THEN

<語句>;

ELSIF<條件>THEN

<語句>;

ELSIF<條件>THEN

<語句>;

ELSE

<語句>;

ENDIF;(1)IF語句IF語句的一般形式為:ARCHITECTUREalarm_arcOFalarmIS

BEGIN下面舉例說明IF條件語句的用法。例:用VHDL設(shè)計一家用報警系統(tǒng)的控制邏輯,它有來自傳感器的三個輸入信號smoke、door、water和準備傳輸?shù)礁婢O(shè)備的三個輸出觸發(fā)信號fire_alarm、burg_alarm、water_alarm以及使能信號en和alarm_en。VHDL程序描述如下:LIBRARY

ieee;

USEieee.std_logic_1164.all;

ENTITYalarmIS

PORT(smoke,door,water:INstd_logic;

en,alarm_en:INstd_logic;

fire_alarm,burg_alarm,water_alarm:OUTstd_logic);

ENDalarm;PROCESS(smoke,door,water,en,alarm_en)

BEGIN

IF((smoke=‘1’)AND(en=‘0’))THEN

fire_alarm<=‘1’;

ELSE

fire_alarm<=‘0’;

ENDIF;IF((door=‘1’)AND((en=‘0’)AND(alarm_en=‘0’)))THEN

burg_alarm<=‘1’;

ELSE

burg_alarm<=‘0’;

ENDIF;IF((water=‘1’)AND(en=‘0’))THEN

water_alarm<=‘1’;

ELSE

water_alarm<=‘0’;

ENDIF;ENDPROCESS;

ENDalarm_arc;(2)CASE

語句CASE語句的一般形式:CASE<表達式>IS

WHEN<值>=><語句>;

WHEN<值>|<值>=><語句>;

WHEN<離散范圍>=><語句>;

WHENOTHERS

=><語句>;

ENDCASE;

CASE語句是VHDL提供的另一種形式的控制語句,每當單個表達式的值在多個起作用的項中選擇時,用此語句是較合適的,它根據(jù)所給表達式的值或域,選擇“=>”后面的執(zhí)行語句。用CASE語句應(yīng)該注意三個問題:

A)關(guān)鍵字WHEN的數(shù)量不作限制,但不容許兩個語句用一個值;

B)所有WHEN后面的值在CASE語句中合起來的值是值域中的全部;C)WHEN語句的次序可以任意排定。下面舉例說明ASSERT語句的用法。例:由兩個或非門構(gòu)成的RS觸發(fā)器。ENTITYRSFFISPORT(R,S:INBIT;

Q:OUTBIT);ENDRSFF;ARCFITECTURERSFF_ARCOFRSFFISBEGIN

PROCESS(R,S)

VARIABLELAST_STATE:BIT:=‘0’;

BEGIN

ASSERTNOT(R=‘1’ANDS=‘1’)

REPORT“BOTHRANDSEQUALTO‘1’”

SEVERITYERROR;

IFR=‘0’ANDS=‘0’THENLAST_STATE:=LAST_STATE;

ELSIFR=‘1’ANDS=‘0’THEN

為真時,執(zhí)行IF語句。

LAST_STATE:=‘0’;

ELSE

LAST_STATE:=‘1’;

ENDIF;Q<=LAST_STATE;ENDPROCESS;ENDRSFF_ARC;信號可被看作兩個元件之間數(shù)據(jù)傳輸?shù)耐贰?四)VHDL的結(jié)構(gòu)描述實體主要描述元件、端口與信號。元件是硬件的描述,即門、芯片或者電路板。端口是元件與外界的連接點,數(shù)據(jù)通過端口進入或流出元件。而信號則是作為硬件連線的一種抽象描述,它既能保持變化的數(shù)據(jù),又可以連接各個子元件。下面舉例說明“調(diào)用元件語句”的用法。對一個硬件的結(jié)構(gòu)進行描述,就是要描述它由哪些子元件組成,以及各個子元件之間的互連關(guān)系。結(jié)構(gòu)描述比行為描述更加具體化,即結(jié)構(gòu)描述與硬件之間的關(guān)系要比行為描述與硬件之間的關(guān)系更明顯。前面討論,行為描述的基本單元是進程語句。結(jié)構(gòu)描述的基本單元則是“調(diào)用元件語句”。例:用VHDL結(jié)構(gòu)描述設(shè)計一全減器,全減器可由兩個半減器和一個或門組成。首先用VHDL的行為描述設(shè)計半減器:ENTITY

halfsub

IS

PORT(A,B:INBIT;

T,C:OUTBIT);

END

halfsub;

PROCESS(A,B)

BEGIN

T<=AXORBAFTER10ns;

C<=(NOTA)ANDBAFTER10ns;ENDPROCESS;ARCHITECTURE

halfsub_arc

OF

halfsub

IS

BEGINEND

halfsub_arc;一定記住輸入、輸出端口的順序。下面再將或門的VHDL程序描述如下:ARCHITECTURE

orgate_arc

OF

orgate

IS

BEGINO1<=A1ORB1;END

orgate_arc;下面將兩個半減器,一個或門的端口,通過定義一些中間信號將其連接起來形成VHDL的結(jié)構(gòu)描述。ENTITY

orgate

IS

PORT(A1,B1:INBIT;O1:OUTBIT);END

orgate;一定記住輸入、輸出端口的順序。在下面舉的全減器例子里可以看到定義了中間信號

temp_T,temp_c1和temp_c2ENTITY

fullsub

ISPORT(I1,I2,C_IN:INBIT;FT,C_OUT:OUTBIT);END

fullsub;ARCHITECTURE

fullsub_arc

OF

fullsub

ISSIGNAL

temp_T,temp_c1,temp_c2:BIT;COMPONENT

halfsub

PORT(A,B:INBIT;T,C:OUTBIT);ENDCOMPONENT;COMPONENT

orgate

PORT(A1,B1:INBIT;O1:OUTBIT);ENDCOMPONENT;在說明區(qū)定義中間變量。在說明區(qū)說明調(diào)用的半加器。一定記住順序。三個輸入,兩個輸出。圖中虛線框各元件之間的連線命名。temp_T將第一個半減器的差位輸出連到第二個半減器的輸入端。信號temp_c1將第一個半減器的借位輸出連至“或”門的一個輸入端,信號temp_c2將第二個半減器的借位輸出連至“或”門的另一個輸入端。用三個元件調(diào)用語句定義這三個連接關(guān)系。BEGINU0:halfsubPORTMAP(I1,I2,temp_T,temp_c1);U1:halfsubPORTMAP(temp_T,C_IN,FT,temp_c2);U2:orgatePORTMAP(temp_c1,temp_c2,C_OUT);END

fullsub_arc;

U0halfsubI1I2temp_Ttemp_c1

U1halfsubC_INFTtemp_c2U2C_OUT減數(shù)、被減數(shù)。低位借位與和位。fullsub第四節(jié)組合邏輯電路模塊及其應(yīng)用編碼器譯碼器數(shù)據(jù)選擇器數(shù)值比較器加法器一、編碼器優(yōu)先編碼功能:輸入m位代碼;輸出n位二進制代碼(m≤2n)。

優(yōu)先編碼器允許幾個輸入端同時加上信號,電路只對其中優(yōu)先級別最高的信號進行編碼。邏輯功能:任何一個輸入端接低電平時,三個輸出端有一組對應(yīng)的二進制代碼輸出。(一)二進制編碼器將輸入信號編成二進制代碼的電路任何時刻只允許一個輸入端有信號輸入。8線—3線優(yōu)先編碼器74148編碼輸入I0I1I2I3I4I5I6I7使能輸入S使能輸出YS擴展輸出YEX編碼輸出Y0Y1Y2~~:編碼輸出端。:使能輸入端;=0時,編碼,=1時,禁止編碼。:使能輸出端,編碼狀態(tài)下(=0),若無輸入信號,=0。:擴展輸出端,編碼狀態(tài)下(=0),若有輸入信號,=0。管腳定義::輸入,低電平有效,優(yōu)先級別依次為~。二—十進制編碼器編碼輸入I1I2I3I4I5I6I7I8I9編碼輸出Y0Y1Y2Y3

PROCESS(input)

ENDPROCESS;END

rtl;LIBRARYIEEE;USEIEEE.std_logic_1164.all;ENTITY

priorityencoder

ISPORT(input:INSTD_LOGIC_VECTURE(7DOWNTO0);y:OUTSTD_LOGIC_VECTURE(2DOWNTO0);END

priorityencoder;ARCHITECTURE

rtl

OF

priorityencoder

ISBEGIN優(yōu)先編碼器的VHDL描述

首先判斷input(7)是否為低,若為低,執(zhí)行接下來的語句,將結(jié)果送到輸出,然后退出進程。否則繼續(xù)判別IF語句,執(zhí)行程序。

IF(input(7)='0')THENy<=''000'';

ELSIF(input(6)='0')THENy<=''001'';……

ELSIF(input(1)='0')THENy<=''110'';

ELSEy<=''111'';

ENDIF;(二)編碼器的應(yīng)用(3)第一片工作時,編碼器輸出:0000-0111

第二片工作時,編碼器輸出:1000-1111解:(1)編碼器輸入16線,用兩片8-3線編碼器,高位為第一片,低位為第二片。高位低位(2)實現(xiàn)優(yōu)先編碼:高位選通輸出與低位控制端連接。例:用8-3線優(yōu)先編碼器74148擴展成16線-4線編碼器。A0A1A2A3A4A5A6A7A8A9A10A11A12A13A14A15Z1Z0Z2Z3譯碼輸入譯碼輸出

a1

a0

y0

y1

y2

y30010000101001000101100012位二進制譯碼器譯碼輸入譯碼輸出

a1

a0

y0

y1

y2

y30001110110111011011111102位二進制譯碼器二、譯碼器(一)變量譯碼器

二進制譯碼器輸入輸出滿足:m=2n如:2線-4線譯碼器集成譯碼器741388421BCD譯碼器

譯碼輸入:n位二進制代碼譯碼輸出m位:一位為1,其余為0或一位為0,其余為12線—4線譯碼器

1&Y3&Y2&Y1&Y0S1B1A譯碼輸入,二進制編碼0~7依次對應(yīng)8個輸出。3線-8線譯碼器(74LS138)八個輸出端,低電平有效。譯碼狀態(tài)下,相應(yīng)輸出端為0;禁止譯碼狀態(tài)下,輸出均為1?!玈1、使能輸入,與邏輯。EN=1(

EN=0,禁止譯碼,輸出均為1。),譯碼。A0

~A2Y0Y1Y2Y3Y4Y5Y6Y7A0A1A2S3S2S101234567BIN/OCT012G70&EN

3—8譯碼器的VHDL描述

LIBRARYIEEE;USEIEEE.std_logic_1164.all;ENTITYdecoder_3_to_8ISPORT(a,b,c,g1,g2a,g2b:INSTD_LOGIC;

y:OUTSTD_LOGIC_VECTOR(2DOWNTO0);ENDdecoder_3_to_8;ARCHITECTURErtlOFdecoder_3_to_8ISSIGNALindata:STD_LOGIC_VECTOR(2DOWNTO0);BEGIN

indata<=c&b&a;PROCESS(indata,g1,g2a,g2b)BEGINIF(g1='1'ANDg2a='0'ANDg2b='0')THEN選通輸入端g1=1,g2a=0,g2b=0時,3-8譯碼器才進行正常譯碼。

CASE

indataISWHEN''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<=''11111111'';ENDcase;ELSE

y<=''11111111'';ENDIF;ENDPROCESS;ENDrtl;

否則y0

~y7輸出均為高電平使能端的兩個作用:(1)消除譯碼器輸出尖峰干擾EN端正電平的出現(xiàn)在A0~A2穩(wěn)定之后;EN端正電平的撤除在A0~A2再次改變之前。

(2)邏輯功能擴展例:用3線-8譯碼器構(gòu)成4線-16譯碼器。避免A0~A2在變化過程中引起輸出端產(chǎn)生瞬時負脈沖。例:用3線-8線譯碼器構(gòu)成4線-16線譯碼器。X0~X3:譯碼輸入E:譯碼控制E=0,譯碼E=1,禁止譯碼X3~X0:0000~0111,第一片工作X3~X0:1000~1111第二片工作000~111

譯碼輸入001000000~111

譯碼輸入101001例:試用74138和與非門構(gòu)成一位全加器。解:全加器的最小項表達式應(yīng)為(三)譯碼器的應(yīng)用Si=Ci+1=&SiY0Y1Y2Y3Y4Y5Y6Y7A0A1A2S3S2S101234567BIN/OCT012G70&ENCiBiAi1

&Ci+18421BCD譯碼器

輸入端輸入端Y0Y1Y2Y3Y4Y5Y6Y7Y8Y9A0A1A2A30123456789BIN/DEC0123G90&ENS3S2S1利用譯碼器實現(xiàn)組合邏輯電路

例:用譯碼器和門電路實現(xiàn)邏輯函數(shù)

=CBAY0Y1Y2Y3Y4Y5Y6Y7A0A1A2S3S2S101234567BIN/OCT012G70&EN1F&輸入數(shù)據(jù)用譯碼器構(gòu)成數(shù)據(jù)分配器地址選擇碼多路數(shù)據(jù)輸出D0D1D2D3D4D5D6D7A0A1A2S3S2S101234567BIN/OCT012G70&END1(二)數(shù)字顯示譯碼器1.七段數(shù)碼管2.七段顯示譯碼器共陰極共陽極:高電平亮:低電平亮每一段由一個發(fā)光二極管組成。輸入:二—十進制代碼輸出:譯碼結(jié)果,可驅(qū)動相應(yīng)的七段數(shù)碼管顯示正確的數(shù)字。顯示譯碼器動畫七段譯碼器7448BCD碼輸入信號譯碼輸出,低電平有效本信號為低電平時,熄滅。當LT為低電平時,BI/RBI為高電平時,試燈。

當LT為高電平,RBI為低電平時,滅零。在多個通道中選擇其中的某一路,或多個信息中選擇其中的某一個信息傳送或加以處理。數(shù)據(jù)選擇器多輸入一輸出選擇三、數(shù)據(jù)選擇器(一)分類:2選1、4選1、8選1、16選1。雙四選一數(shù)據(jù)選擇器74153三、數(shù)據(jù)選擇器(一)分類:二選一、四選一、八選一、十六選一。雙四選一數(shù)據(jù)選擇器74153使能端輸出端數(shù)據(jù)輸入公用控制輸入S1F1F2D10D11D12D13D20D21D22D23A0A1S2D10D11D12D13D20

D21

D22

D2374153A0A1S2S1F2F2D8D9D10D11D12D13D14D15A0A1A2D0D1D2D3D4D5D6D774151(2)A0A1A2SS1(1)F1F1D0D1D2D3D4D5D6D7A0A1A2D0D1D2D3D4D5D6D774151(1)A0A1A2SS8選1數(shù)據(jù)選擇器74LS151八選一需3位地址碼(二)數(shù)據(jù)選擇器的通道擴展

例:試用最少數(shù)量的8選1選擇器擴展成16選1選擇器。將地址連接在一起將兩片的輸出原端用或門連載一起,和非端用與門連接在一起。F≥1F&1A3如果A3=0,則(1)片工作,根據(jù)A2~A0,從D7~D0中選擇一路輸出;如果A3=1,則(2

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論