組合邏輯電路設(shè)計(jì)設(shè)計(jì)05(第五章Bvhdl基本語(yǔ)素、語(yǔ)法、語(yǔ)句)_第1頁(yè)
組合邏輯電路設(shè)計(jì)設(shè)計(jì)05(第五章Bvhdl基本語(yǔ)素、語(yǔ)法、語(yǔ)句)_第2頁(yè)
組合邏輯電路設(shè)計(jì)設(shè)計(jì)05(第五章Bvhdl基本語(yǔ)素、語(yǔ)法、語(yǔ)句)_第3頁(yè)
組合邏輯電路設(shè)計(jì)設(shè)計(jì)05(第五章Bvhdl基本語(yǔ)素、語(yǔ)法、語(yǔ)句)_第4頁(yè)
組合邏輯電路設(shè)計(jì)設(shè)計(jì)05(第五章Bvhdl基本語(yǔ)素、語(yǔ)法、語(yǔ)句)_第5頁(yè)
已閱讀5頁(yè),還剩100頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

數(shù)字電路與邏輯設(shè)計(jì)一、基于VHDL的組合邏輯分析數(shù)字電路與邏輯設(shè)計(jì)5-3-3基于VHDL的組合邏輯設(shè)計(jì)libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entity

sswr

isport(d:instd_logic_vector(3downto0);y:outstd_logic);end

sswr;實(shí)例1某數(shù)字電路的VHDL程序代碼如下,請(qǐng)分析其邏輯功能architecture

behave

ofsswrisbeginy<='0'whend>=0andd<5else'1'whend>=5andd<10else'Z';end

behave;LIBRARYieee;USEieee.std_logic_1164.all;ENTITYencoderISPORT(i:IN

BIT_VECTOR(7DOWNTO0);y:OUT

BIT_VECTOR(2DOWNTO0));

ENDencoder;ARCHITECTURErtlOFencoderISBEGINy<="000"wheni(0)='0'

else"001"wheni(1)='0'

else"010"wheni(2)='0'

else"011"wheni(3)='0'

else"100"wheni(4)='0'

else"101"wheni(5)='0'

else"110"wheni(6)='0'

else"111"wheni(7)='0'

else"000";ENDrtl;二、VHDL硬件描述語(yǔ)言基礎(chǔ)數(shù)字電路與邏輯設(shè)計(jì)5-3-3基于VHDL的組合邏輯設(shè)計(jì)一、VHDL概述

VHDL是超高速集成電路硬件描述語(yǔ)言

(VeryHighspeedIntegratedCircuitHardwareDescriptionLanguage)的英文縮寫(xiě)。

語(yǔ)法和風(fēng)格:(1)類(lèi)似與現(xiàn)代高級(jí)編程語(yǔ)言,如C語(yǔ)言。(2)VHDL描述的是硬件,它包含許多硬件特有的結(jié)構(gòu)。硬件描述語(yǔ)言HDL:美國(guó)Iverson,1962VHDL硬件描述語(yǔ)言:20世紀(jì)80年代初,

美國(guó)國(guó)防部VHSIC計(jì)劃目的:方便電子設(shè)計(jì)文檔的交流和成果的再利用一、VHDL概述*VHDL發(fā)展歷史1983年提出了硬件描述語(yǔ)言的標(biāo)準(zhǔn)化問(wèn)題。

1985年,第1版VHDL完成;

1987年,國(guó)際電氣與電子工程師協(xié)會(huì)(IEEE)將VHDL語(yǔ)言作為硬件描述語(yǔ)言的工業(yè)標(biāo)準(zhǔn)(IEEE1076);

1988年,美國(guó)國(guó)防部規(guī)定所有官方的ASIC設(shè)計(jì)都必須以VHDL作為設(shè)計(jì)描述語(yǔ)言,此后VHDL逐漸成為工業(yè)界標(biāo)準(zhǔn)。

1993年,IEEE在87版本的基礎(chǔ)上進(jìn)行了若干修訂,增修為IEEE1164標(biāo)準(zhǔn);

1999年,IEEE又將數(shù)字模擬混合VHDL的版本作為工業(yè)標(biāo)準(zhǔn),即IEEE1076.3;一、VHDL概述*VHDL與電路圖設(shè)計(jì)電路的方式不同:和電路圖設(shè)計(jì)方式相比:(1)易于修改;(2)設(shè)計(jì)能力更強(qiáng);(3)VHDL語(yǔ)言很方便:獨(dú)立于器件設(shè)計(jì);相同的程序代碼可以用于不同廠家生產(chǎn)的器件。一、VHDL概述VHDL硬件描述語(yǔ)言VHDL概述VHDL數(shù)據(jù)類(lèi)型與數(shù)據(jù)對(duì)象VHDL命令語(yǔ)句VHDL語(yǔ)言的程序結(jié)構(gòu)

LIBRARY(USE)-----庫(kù)

PACKAGE--------------程序包集合

ENTITY-----------------實(shí)體

ARCHITECTURE-----結(jié)構(gòu)體

CONFIGURATION----配置語(yǔ)句一、VHDL概述一、VHDL概述*include“stdio.h”;include“math.h”;intmain(void){inta,b,c;a=8;b=9;c=a+b;returnc;}Librarystd;Usestd.standard.all;Entityand2isPort(a,b:inbit;c:outbit);Endand2;Architecturea1ofand2isBeginc<=aandb;Enda1;VHDL程序C程序Library(庫(kù))是用于存放預(yù)先編譯好的Package(程序包)。Package

(程序包)中定義了基本的常數(shù)、數(shù)據(jù)類(lèi)型、元件及子程序等。

作用:聲明在實(shí)體和結(jié)構(gòu)體定義中將用到的數(shù)據(jù)類(lèi)型、元件或子程序等。聲明格式:

Library

庫(kù)名;

Use

庫(kù)名.PACKAGE名.All;一、VHDL概述(1)Library和Package部分libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;

作用:ENTITY(實(shí)體)用于定義電路的外部接口,即I/O端口的類(lèi)型和數(shù)量。

定義格式:Entity

實(shí)體名

is

Port(a:

in

bit;

b:

in

bit;

c:

out

bit);End

實(shí)體名;(2)ENTITY定義區(qū)一、VHDL概述端口名數(shù)據(jù)類(lèi)型端口模式端口模式(MODE)有以下幾種類(lèi)型:

IN;OUT;INOUT;BUFFER

端口模式可用下圖說(shuō)明:(黑框代表一個(gè)設(shè)計(jì)或模塊)

INOUTBUFFERINOUT一、VHDL概述(3)ARCHITECTURE定義區(qū)實(shí)體的實(shí)現(xiàn)。即說(shuō)明電路執(zhí)行什么動(dòng)作或?qū)崿F(xiàn)功能。定義格式:

Architecture

結(jié)構(gòu)體名of

實(shí)體名

is[聲明語(yǔ)句;(內(nèi)部信號(hào)、變量、常數(shù),元件,子程序聲明)]Begin并行描述語(yǔ)句;End

結(jié)構(gòu)體名;一、VHDL概述(4)CONFIGURATION部分

一個(gè)完整VHDL電路設(shè)計(jì)必須有一個(gè)實(shí)體和對(duì)應(yīng)的結(jié)構(gòu)體,即實(shí)體和結(jié)構(gòu)體對(duì)構(gòu)成一個(gè)完整的VHDL設(shè)計(jì)。

一個(gè)實(shí)體可對(duì)應(yīng)一個(gè)結(jié)構(gòu)體或多個(gè)結(jié)構(gòu)體,即一個(gè)實(shí)體可以有不同的描述方式。作用:當(dāng)實(shí)體有多個(gè)結(jié)構(gòu)體時(shí),系統(tǒng)默認(rèn)實(shí)體選用最后一個(gè)結(jié)構(gòu)體,利用CONFIGURATION語(yǔ)句可以任意選擇采用哪一個(gè)結(jié)構(gòu)體。一、VHDL概述*定義格式:Configuration

配置名

of實(shí)體名

isfor

選用的結(jié)構(gòu)體名endfor;endconfiguration

配置名;一、VHDL概述*

標(biāo)識(shí)符的定義原則:標(biāo)識(shí)符由字母、數(shù)字和下劃線組成,如ak_47;關(guān)于字母:(1)第一個(gè)字符必須是字母,即a666;(2)標(biāo)識(shí)符不區(qū)分大小寫(xiě),ab與AB等效;(3)標(biāo)識(shí)符不能和關(guān)鍵字(專(zhuān)用標(biāo)識(shí)符)相同,如Entity,is等。關(guān)于下劃線(1)不允許有兩個(gè)連續(xù)的下劃線,a__b錯(cuò)誤;(2)末尾不能是下劃線,mname_錯(cuò)誤;一、VHDL概述

設(shè)計(jì)范例:2輸入與門(mén)abc電路真值表abc000100010111一、VHDL概述*LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;Entityand2is

Port(a:inbit;b:inbit;c:out

bit);Endand2;--實(shí)體定義結(jié)束。

雙減號(hào)--為VHDL程序的注釋符,類(lèi)似C語(yǔ)言中的//注釋符。一、VHDL概述*ArchitectureNa

ofand2is

Beginc<=’0’whena=’0’andb=‘0’else’0’whena=’1’andb=‘0’else’0’whena=’0’andb=‘1’else‘1’;--符號(hào)<=為信號(hào)直接賦值符。

EndNa;--結(jié)構(gòu)體NaArchitectureNbof

and2is

Beginc<=aandb;--and為邏輯與操作EndNb;

--結(jié)構(gòu)體Nb一、VHDL概述*Configurations1

of

and2

isfornaendfor;endconfigurations1;--結(jié)構(gòu)體配置結(jié)束。一、VHDL概述*二、VHDL數(shù)據(jù)類(lèi)型與數(shù)據(jù)對(duì)象在VHDL程序中,我們經(jīng)常會(huì)遇到這樣的語(yǔ)句:Port(X:instd_logic);SignalA:std_logic;VariableB:std_logic_vector(7downto0);

ConstantC:integer;數(shù)據(jù)對(duì)象類(lèi)型(專(zhuān)用標(biāo)識(shí)符)數(shù)據(jù)類(lèi)型(取值空間)(專(zhuān)用標(biāo)識(shí)符)數(shù)據(jù)對(duì)象名稱(chēng)(自定義標(biāo)識(shí)符)數(shù)據(jù)對(duì)象VHDL語(yǔ)言中的基本數(shù)據(jù)類(lèi)型邏輯類(lèi)型數(shù)值類(lèi)型布爾代數(shù)(Boolean)位(Bit)標(biāo)準(zhǔn)邏輯(Std_Logic)整數(shù)(Integer)實(shí)數(shù)(Real)二、VHDL數(shù)據(jù)類(lèi)型與數(shù)據(jù)對(duì)象

邏輯數(shù)據(jù)類(lèi)型

(1)布爾代數(shù)(Boolean)型;

標(biāo)識(shí)關(guān)鍵字:BOOLEAN,

取值空間:{FALSE,TRUE};(2)位(Bit);標(biāo)識(shí)關(guān)鍵字:BIT

,取值空間:{‘0’,‘1’}

示例:Port(A:inbit);SignalB:bit;二、VHDL數(shù)據(jù)類(lèi)型與數(shù)據(jù)對(duì)象標(biāo)識(shí)關(guān)鍵字:Std_Logic;取值空間:{

‘X’,-----ForcingUnknown‘0’,-----Forcing0‘1’,-----Forcing1‘Z’,-----HignImpedance‘W’,-----WeakUnknown‘L’,-----Weak0‘H’,-----Weak1

‘U’,-----Undefined‘-’,------Don’tCare};二、VHDL數(shù)據(jù)類(lèi)型與數(shù)據(jù)對(duì)象

標(biāo)準(zhǔn)邏輯類(lèi)型(9值邏輯)對(duì)數(shù)字邏輯電路的邏輯特性描述更加完整,真實(shí),因此在VHDL程序中,對(duì)邏輯信號(hào)的定義通常采用標(biāo)準(zhǔn)邏輯類(lèi)型.(3)標(biāo)準(zhǔn)邏輯(Std_logic);

邏輯序列位序列(Bit_Vector)

標(biāo)準(zhǔn)邏輯序列(Std_Logic_Vector)二、VHDL數(shù)據(jù)類(lèi)型與數(shù)據(jù)對(duì)象Port(A:inStd_Logic_Vector(7downto0));Port(B:inBit_Vector(0to3));SignalC:Std_Logic_Vector(3downto0);序列范圍的聲明方式:To,Downto

序列的聲明二、VHDL數(shù)據(jù)類(lèi)型與數(shù)據(jù)對(duì)象多位寬度的邏輯變量(如二進(jìn)制數(shù))用序列表示。邏輯變量的最高位與聲明時(shí)的最左序號(hào)對(duì)應(yīng),以此類(lèi)推。

序列的分解與合成Port(A:IN

Std_Logic_Vector(3downto0);B:IN

Std_Logic_Vector(1downto0));Signal

C:Std_Logic_Vector(0to1);Signal

D:Std_Logic_Vector(0to3);將A邏輯變量的中間兩路信號(hào)與C相連將A的最高一路、B的全部位和常量’1’與D相連二、VHDL數(shù)據(jù)類(lèi)型與數(shù)據(jù)對(duì)象序列賦值原則:左右寬度相等。

數(shù)值類(lèi)型(1)整數(shù)

標(biāo)識(shí)關(guān)鍵字:Integer,

取值空間:{-231~231-1}示例Port(A:inInteger);Port(C:inInteger

Range0to7);(限定整數(shù)取值范圍的方法:Range…to…)SignalB:Integer;二、VHDL數(shù)據(jù)類(lèi)型與數(shù)據(jù)對(duì)象(2)無(wú)符號(hào)數(shù)標(biāo)識(shí)關(guān)鍵字:Unsigned,取值空間:{0~2n-1}與標(biāo)準(zhǔn)邏輯序列相似,聲明時(shí)必須指明其位數(shù)。Port

(A:in

Unsigned(

7

downto

0));Signal

B:Unsigned(

3

downto

0);注意:unsigned位數(shù)聲明,只能使用downto。Port

(A:in

unsigned(0

to

7));×二、VHDL數(shù)據(jù)類(lèi)型與數(shù)據(jù)對(duì)象(2)實(shí)數(shù)標(biāo)志關(guān)鍵字:Real;取值空間:{-1.7E38to1.7E38};

實(shí)數(shù)類(lèi)型的表示可用科學(xué)計(jì)數(shù)形式或者帶小數(shù)點(diǎn)的形式。二、VHDL數(shù)據(jù)類(lèi)型與數(shù)據(jù)對(duì)象*VHDL中的運(yùn)算符二、VHDL數(shù)據(jù)類(lèi)型與數(shù)據(jù)對(duì)象

算術(shù)運(yùn)算符:

+ 加

- 減

* 乘

/ 除

** 乘方

mod 求模

rem 求余

abs 求絕對(duì)值

邏輯運(yùn)算:

and

邏輯與

or

邏輯或

nand

與非

nor

或非

xor

異或

xnor 同或

not

邏輯非關(guān)系運(yùn)算符:

= 等于

/= 不等于

< 小于

<= 小于或等于

> 大于

>= 大于或等于注:其中‘<=’操作符也用于表示信號(hào)的賦值操作。

&

連接符,將兩個(gè)數(shù)據(jù)對(duì)象或矢量連接成維數(shù)更大的矢量,它可給代碼書(shū)寫(xiě)帶來(lái)方便。例如:

vabc=a&b&c;如果a=‘1’

,b=‘0’

,c=‘1’

,則

vabc=“101”

。二、VHDL數(shù)據(jù)類(lèi)型與數(shù)據(jù)對(duì)象

用戶自定義數(shù)據(jù)類(lèi)型:(1)列舉數(shù)據(jù)類(lèi)型Type列舉名稱(chēng)is(元素1,元素2,…)例子:Typestateis(S0,S1,S2,S3);SignalS:state;二、VHDL數(shù)據(jù)類(lèi)型與數(shù)據(jù)對(duì)象*(2)數(shù)組類(lèi)型

Type數(shù)組名稱(chēng)isArrary(范圍)of數(shù)據(jù)類(lèi)型;例子:

TypeByteisArrary(7downto0)ofBit;Signalsdo:Byte;二、VHDL數(shù)據(jù)類(lèi)型與數(shù)據(jù)對(duì)象*

數(shù)據(jù)類(lèi)型的轉(zhuǎn)換

在VHDL語(yǔ)言里,不同類(lèi)型的數(shù)據(jù)信號(hào)之間不能互相賦值。當(dāng)需要不同類(lèi)型數(shù)據(jù)之間傳遞信息時(shí),就需要類(lèi)型轉(zhuǎn)換函數(shù)將其中的一種類(lèi)型數(shù)據(jù)轉(zhuǎn)換為另一中數(shù)據(jù)類(lèi)型后,再進(jìn)行信號(hào)的傳遞。二、VHDL數(shù)據(jù)類(lèi)型與數(shù)據(jù)對(duì)象*例如:SignalY:Std_logic_vector(7downto0);SignalX:Integerrange0to255;Y<=CONV_STD_LOGIC_VECTOR(X,8);二、VHDL數(shù)據(jù)類(lèi)型與數(shù)據(jù)對(duì)象*CONV_INTEGER

將數(shù)據(jù)類(lèi)型UNSIGNED,SIGNED轉(zhuǎn)換為INTEGER類(lèi)型.CONV_UNSIGNED

將數(shù)據(jù)類(lèi)型INTEGER,SIGNED轉(zhuǎn)換為UNSIGNED類(lèi)型.CONV_SIGNED

將數(shù)據(jù)類(lèi)型INTEGER,UNSIGNED轉(zhuǎn)換為SIGNED類(lèi)型. CONV_STD_LOGIC_VECTOR

將數(shù)據(jù)類(lèi)型INTEGER,UNSIGNED,SIGNED,STD_LOGIC轉(zhuǎn)換為STD_LOGIC_VECTOR類(lèi)型.

二、VHDL數(shù)據(jù)類(lèi)型與數(shù)據(jù)對(duì)象*

數(shù)據(jù)對(duì)象常量(Constant)信號(hào)(Signal)變量(Variable)(DataObjects)二、VHDL數(shù)據(jù)類(lèi)型與數(shù)據(jù)對(duì)象

數(shù)據(jù)對(duì)象常量(Constant)信號(hào)(Signal)變量(Variable)(DataObjects)二、VHDL數(shù)據(jù)類(lèi)型與數(shù)據(jù)對(duì)象(1)常量(constant)

定義格式:Constant常量名稱(chēng):數(shù)據(jù)類(lèi)型:=給定值;常量通常來(lái)來(lái)定義延遲和功耗等參數(shù)。

注意!常數(shù)定義的同時(shí)進(jìn)行賦初值。

常數(shù)在程序包說(shuō)明、實(shí)體說(shuō)明、結(jié)構(gòu)體描述、過(guò)程說(shuō)明、函數(shù)調(diào)用中使用。二、VHDL數(shù)據(jù)類(lèi)型與數(shù)據(jù)對(duì)象*libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;--必需定義+entityexam1is

port(ip:instd_logic_vector(3downto0);op:outstd_logic_vector(3downto0));endexam1;architecturem1ofexam1isconstantnum:integer:=6;beginop<=ip+num;endm1;二、VHDL數(shù)據(jù)類(lèi)型與數(shù)據(jù)對(duì)象*(2)信號(hào)定義格式I.(端口)信號(hào)Port(端口信號(hào)名稱(chēng):數(shù)據(jù)類(lèi)型);例如:Port(A:instd_logic);II.內(nèi)部信號(hào)Signal信號(hào)名稱(chēng):數(shù)據(jù)類(lèi)型[:=初始值];例如:SignalB:std_logic;二、VHDL數(shù)據(jù)類(lèi)型與數(shù)據(jù)對(duì)象“信號(hào)”數(shù)據(jù)對(duì)象的物理意義信號(hào)代表電路元件的端口和內(nèi)部的物理連線,因此信號(hào)的賦值有一定的延遲時(shí)間.端口信號(hào)代表電路的輸入/輸出(在實(shí)體中說(shuō)明);內(nèi)部信號(hào)代表電路中間信號(hào)或中間連接線路,其在元件之間起互連作用(在結(jié)構(gòu)體中說(shuō)明和使用)。信號(hào)賦值的語(yǔ)法格式為:

信號(hào)名<=表達(dá)式;

例如:

SignalS1:Std_logic_vector(3Downto0);S1<=“0000”;(3)變量定義格式Variable變量名稱(chēng):數(shù)據(jù)類(lèi)型[:=初始值];

變量只能用于進(jìn)程之中,變量的賦值是立即生效的,常用于高層次抽象的算法描述當(dāng)中。二、VHDL數(shù)據(jù)類(lèi)型與數(shù)據(jù)對(duì)象*“變量”數(shù)據(jù)對(duì)象,它用于對(duì)中間數(shù)據(jù)的臨時(shí)存儲(chǔ),并不一定代表電路的某一組件。注意!變量定義的時(shí)候盡管可以直接賦初值,但系統(tǒng)往往忽略。建議變量對(duì)象定義后再進(jìn)行賦值。變量為局部量。僅限于進(jìn)程(Process)或子程序中使用。變量賦值的語(yǔ)法格式為:目標(biāo)信號(hào)值:=表達(dá)式;如:VariableS1:Std_logic_vector(3Downto0);S1:=“0000”;二、VHDL數(shù)據(jù)類(lèi)型與數(shù)據(jù)對(duì)象*信號(hào)和變量的比較*

(1)信號(hào)和變量的對(duì)應(yīng)關(guān)系不同:信號(hào)代表電路內(nèi)部信號(hào)或連接線路;而變量則不是。

(2)信號(hào)和變量聲明的位置不同:信號(hào)聲明在子程序、進(jìn)程的外部;而變量聲明在子程序、進(jìn)程的內(nèi)部。

(3)信號(hào)為全局量,而變量只在定義它的域中才可見(jiàn)。因此,變量不能在兩個(gè)進(jìn)程之間傳遞信息。

(4)在一個(gè)進(jìn)程中多次為一個(gè)信號(hào)賦值時(shí),只有最后一個(gè)值會(huì)起作用;而變量則不同,每次賦值都會(huì)改變它的值。(5)賦值不同。在進(jìn)程中,信號(hào)賦值只有在進(jìn)程結(jié)束時(shí)起作用,而變量賦值是立即進(jìn)行的。而且賦值符號(hào)不同:信號(hào)賦值為“<=”,變量賦值為“:=”。數(shù)據(jù)對(duì)象屬性*(1)數(shù)值類(lèi)屬性:(數(shù)組類(lèi)型的數(shù)據(jù)對(duì)象)數(shù)值類(lèi)屬性有

'left,'right,'low,'high,'length。其中用符號(hào)‘隔開(kāi)對(duì)象名及其屬性。

left表示數(shù)組的左邊界;

right表示數(shù)組的右邊界;

low表示數(shù)組的下邊界;

high表示數(shù)組的上邊界;

length表示數(shù)組的長(zhǎng)度。如:SignalA:std_logic_vector(7downto0);SignalB:std_logic_vector(0to3);則這兩個(gè)信號(hào)的屬性值分別為:

A’left=7;A’right=0;A’low=0;A’high=7;A’length=8;B’left=0;B’right=3;B’low=0;B’high=3;B’length=4;數(shù)據(jù)對(duì)象屬性*(2)'event屬性:

'event屬性,它的值為布爾型,如果剛好有事件發(fā)生在該屬性所附著的信號(hào)上(即信號(hào)有變化),則其取值為T(mén)rue,否則為False。

利用此屬性可決定時(shí)鐘信號(hào)的變化情況,即時(shí)鐘是否發(fā)生。

數(shù)據(jù)對(duì)象屬性*例如:時(shí)鐘邊沿表示:

signalclk:instd_logic;

則clk’eventandclk=’1’表示時(shí)鐘的上升沿。即時(shí)鐘變化了,且其值為1。

clk’eventandclk=’0’表示時(shí)鐘的下降沿。即時(shí)鐘變化了,且其值為0。此外,還可利用兩個(gè)函數(shù)來(lái)表示時(shí)鐘的邊沿。 rising_edge(clk)

表示時(shí)鐘的上升沿

falling_edge(clk)

表示時(shí)鐘的下降沿?cái)?shù)據(jù)對(duì)象屬性*libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;ENTITYMISIS PORT(op1,op2:INUNSIGNED(3downto0); c0:INSTD_LOGIC; result:OUTUNSIGNED(3downto0); c5:OUTSTD_LOGIC);ENDMIS;實(shí)例2某數(shù)字電路的VHDL程序代碼如下,試分析其邏輯功能ARCHITECTURE

OP

OFMISISsignalsum5,op1_5,op2_5,op_cin_5:unsigned(4downto0);BEGIN op1_5<='0'&op1; op2_5<='0'&op2; op_cin_5<="0000"&c0; sum5<=op1_5+op2_5+op_cin_5; result<=sum5(3downto0); c5<=sum5(4);END

OP;例3:四位二進(jìn)制數(shù)轉(zhuǎn)換為BCD碼。三、VHDL命令語(yǔ)句并列語(yǔ)句順序語(yǔ)句VHDL命令語(yǔ)句并列語(yǔ)句*

并列語(yǔ)句一般處于進(jìn)程(PROCESS)的外部。所有并列語(yǔ)句都是并行執(zhí)行的,即與它們出現(xiàn)的先后次序無(wú)關(guān)。

并列語(yǔ)句有三個(gè)特點(diǎn):a.所有語(yǔ)句的執(zhí)行是并行的;b.每條語(yǔ)句的執(zhí)行和其所在的位置無(wú)關(guān);c.并列語(yǔ)句的輸出僅僅依賴(lài)于輸入,沒(méi)有其它的限制條件。

并列語(yǔ)句(1)直接賦值語(yǔ)句:<=賦值運(yùn)算符(2)條件賦值語(yǔ)句:When-Else(3)選擇賦值語(yǔ)句:With-Select-When(4)Process(進(jìn)程)語(yǔ)句(5)Block(塊)語(yǔ)句(6)函數(shù)調(diào)用語(yǔ)句(7)Component(元件)例化語(yǔ)句(8)For-Generate語(yǔ)句(1)直接賦值語(yǔ)句直接賦值語(yǔ)句的格式:Signal_name<=expression;示例:SignalA,B:std_logic_vector(7downto0);A<="00000000";B<="10000000"; op_cin_5<="0000"&c0; sum5<=op1_5+op2_5+op_cin_5; c5<=sum5(4);(1)直接賦值語(yǔ)句*直接賦值語(yǔ)句的格式:

Signal_name<=expression;如:SignalA,B:std_logic_vector(7downto0);A<="00000000";B<="10000000";我們也可以這樣賦值:A<=(others=>’0’);

結(jié)果信號(hào)A的每一位的值都為0。B<=(‘1’,others=>’0’);信號(hào)對(duì)象的位數(shù)很多時(shí),采用others來(lái)賦值很方便。(2)When-Else條件賦值語(yǔ)句例如:f<=‘1’when(x1=x2)

else‘0’whenx1<x2else‘Z’;通用語(yǔ)法格式:Signal_name<=

expression1When

logic_expression1

Elseexpression2When

logic_expression2

Elseexpression3;Entityand2isPort(a:inbit;b:inbit;c:outbit);Endand2;ArchitectureNaofand2isBeginc<=‘0’whena=‘0’andb=‘0’else‘0’whena=‘1’andb=‘0’else‘0’whena=‘0’andb=‘1’else‘1’;EndNa;Entity

example

isPort(x,y:instd_logic;z:outstd_logic_vector(1downto0));End

example;ArchitectureaofexampleISsignal

tmp:std_logic_vector(1downto0);Begintmp<=x&y;With

tmpSelectz<=‘1’

when

“01”,'1'when"10",'0'whenothers;Enda;With-Select-When選擇式賦值(3)With-Select-When選擇式賦值選擇賦值語(yǔ)句通用格式:With

expression

SelectSignal_name<=expression1When

constant_value1,

expression2When

constant_value2,

expression3When

constant_value3;libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entityFBIisport(a,b,ci:instd_logic;y,cout:outstd_logic);endFBI;實(shí)例3試用VHDL語(yǔ)言設(shè)計(jì)1位全加器architecturebh2ofFBIisbeginy<=axorbxorci;cout<=(aandb)or(aandci)or(bandci);endbh2;architecturebh1offull_bit_adderisbeginy<=((nota)and(notb)andci)or((nota)and(b)and(notci))or((a)and(notb)and(notci))or((a)and(b)and(ci));cout<=(bandci)or(aandci)or(aandb);endbh1;一、基于VHDL的組合邏輯分析二、VHDL基本語(yǔ)素及語(yǔ)法三、基于VHDL的組合邏輯設(shè)計(jì)數(shù)字電路與邏輯設(shè)計(jì)5-3基于VHDL的組合邏輯分析與設(shè)計(jì)一、常用組合邏輯電路分析題目1某數(shù)字電路libraryieee;useieee.std_logic_1164.all;entitytrioutisport(A:in

std_logic_vector(7downto0);en:in

std_logic;B:out

std_logic_vector(7downto0));endtriout;architecturebehaveoftrioutisbegin

B<=Awhenen='1'else

"ZZZZZZZZ";

endbehave;

--注意多位時(shí)用雙引號(hào);三態(tài)輸出電路(多位寬度)

A7-A0ENB7-B0EN=1B=A;EN=0B=高阻態(tài)88一、常用組合邏輯電路分析題目2某數(shù)字電路libraryieee;useieee.std_logic_1164.all;entitymux81isPort(D:in

std_logic_vector(0to7);sel:in

std_logic_vector(2downto0);Y:out

std_logic);endmux81;architecture

archmux

ofmux41is

begin

with

sel

select

Y<=D(0)when"000",D(1)when"001",D(2)when"010",D(3)when"011",D(4)when"100",D(5)when"101",D(6)when"110",D(7)whenothers;end

archmux;

(2)數(shù)據(jù)選擇器MUX8選1(單刀八擲)????一、常用組合邏輯電路分析題目3某數(shù)字電路Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;ENTITYcmpabIS

PORT

(A,B:in

std_logic_vector(7downto0); AGTB,ALTB,AEQB:out

std_logic); ENDcmpab;ARCHITECTUREaOFcmpabISBEGIN

aeqb<='1'when

a=belse'0';agtb<='1'whena>belse'0';altb<='1'whena<belse'0';ENDa;(3)比較器AGTBALTBAEQBABA和B都是8位二進(jìn)制數(shù),用三個(gè)輸出表示A、B的大小關(guān)系。如果A>B,輸出為:agtb=‘1’,altb=‘0’,aeqb=‘0’;如果A<B,輸出為:agtb=‘0’,altb=‘1’,aeqb=‘0’;如果A=B,輸出為:agtb=‘0’,altb=‘0’,aeqb=‘1’。一、常用組合邏輯電路分析題目4某數(shù)字電路LIBRARYieee;USEieee.std_logic_1164.all;ENTITYencoderISPORT(i:IN

BIT_VECTOR(7DOWNTO0);y:OUT

BIT_VECTOR(2DOWNTO0));

ENDencoder;ARCHITECTURErtlOFencoderISBEGINy<="000"wheni(0)='0'

else"001"wheni(1)='0'

else"010"wheni(2)='0'

else"011"wheni(3)='0'

else"100"wheni(4)='0'

else"101"wheni(5)='0'

else"110"wheni(6)='0'

else"111"wheni(7)='0'

else"000";ENDrtl;(4)編碼器(B優(yōu)先8-3編碼器)I6I7I5I4I3I2I1I0Y2Y1Y08-3編碼器I7I6I5I4I3I2I1I0Y2Y1Y0xxxxxxx0000xxxxxx01001xxxxx011010xxxx0111011xxx01111100xx011111101x0111111110

01111111111一、常用組合邏輯電路分析題目5某數(shù)字電路LIBRARYieee;USEieee.std_logic_1164.all;ENTITYdecode_3to8ISPORT(a,b,c,G1,G2A,G2B:INSTD_LOGIC;Y:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDdecode_3to8;ARCHITECTURErtlOFdecode_3to8ISSIGNALindata:STD_LOGIC_VECTOR(5DOWNTO0);BEGINindata<=G1&G2A&G2B&c&b&a;y<="11111110"whenindata="100000"else"11111101"whenindata="100001"else"11111011"whenindata="100010"else"11110111"whenindata="100011"else"11101111"whenindata="100100"else"11011111"whenindata="100101"else"10111111"whenindata="100110"else"01111111"whenindata="100111"else"11111111";ENDrtl;(5)譯碼器A.3-8譯碼器順序語(yǔ)句

(1)順序語(yǔ)句每一條語(yǔ)句的執(zhí)行都是順序進(jìn)行的。如同高級(jí)編程語(yǔ)言中的命令執(zhí)行方式,一次一條命令,按書(shū)寫(xiě)順序由上而下執(zhí)行。(2)順序語(yǔ)句只能出現(xiàn)在進(jìn)程和子程序內(nèi)部。(3)由于順序語(yǔ)句的次序很重要,因此,順序語(yǔ)句要與并行語(yǔ)句分割開(kāi),這可以通過(guò)Process語(yǔ)句來(lái)實(shí)現(xiàn)。Process語(yǔ)句出現(xiàn)在結(jié)構(gòu)體中,它將其內(nèi)部的語(yǔ)句進(jìn)行封裝。順序語(yǔ)句有三個(gè)特點(diǎn):

a.所有語(yǔ)句的執(zhí)行是順序進(jìn)行的;

b.每條語(yǔ)句的執(zhí)行和其所在的位置有關(guān);

c.順序語(yǔ)句的輸出不僅依賴(lài)于輸入,而且還受位置的影響。順序語(yǔ)句(1)Process語(yǔ)句(2)If-Else語(yǔ)句(3)Case-When語(yǔ)句(4)Null語(yǔ)句

(5)For-Loop語(yǔ)句(6)Waituntil語(yǔ)句(7)變量賦值語(yǔ)句

(8)Procedure(過(guò)程)調(diào)用語(yǔ)句

并列語(yǔ)句語(yǔ)句的順序不影響代碼的含義。例如:When…else;With—Select;順序語(yǔ)句語(yǔ)句的順序可能影響代碼的含義。例如:if—else;case語(yǔ)句;因此,為了在代碼段中區(qū)分順序語(yǔ)句,VHDL規(guī)定順序語(yǔ)句一定要放在Process語(yǔ)句內(nèi)部;進(jìn)程語(yǔ)句ProcessProcess語(yǔ)句格式[Process-label:]Process[(Sensitivitylist)][Variabledeclarations]--變量聲明Begin[ifstatements][casestatements][Procedure調(diào)用語(yǔ)句][waituntilstatement][variableassignmentstatements]EndProcess;entityabcisport(w0,w1,s:instd_logic;f:outstd_logic);endabc;architecturebhofabcisbeginproc1:process(w0,w1,s)

beginf<=w0;--語(yǔ)句Aifs='1'thenf<=w1;endif;--語(yǔ)句B

endprocess;endbh;(1)一個(gè)結(jié)構(gòu)體當(dāng)中可以有多個(gè)Process語(yǔ)句,

不同Process語(yǔ)句是同時(shí)起作用的并列語(yǔ)句。(2)Process內(nèi)的語(yǔ)句卻是按順序“執(zhí)行”(被編譯器解釋)的順序語(yǔ)句。(3)多進(jìn)程之間的信息通過(guò)信號(hào)對(duì)象來(lái)傳遞。進(jìn)程語(yǔ)句Process特點(diǎn)進(jìn)程語(yǔ)句Process的語(yǔ)義敏感表每當(dāng)任何信號(hào)的取值發(fā)生變化時(shí),進(jìn)程就會(huì)有效。只要進(jìn)程有效:進(jìn)程中的語(yǔ)句就會(huì)順序執(zhí)行。在進(jìn)程內(nèi)部所有語(yǔ)句執(zhí)行完畢之前,進(jìn)程內(nèi)部的信號(hào)賦值對(duì)于進(jìn)程外部都不可見(jiàn)。如果對(duì)相同信號(hào)進(jìn)行了多次賦值,那么只有最后一次賦值在進(jìn)程外部可見(jiàn)。

敏感表(Sensitivitylist)包括進(jìn)程的一些信號(hào),當(dāng)敏感表中的某個(gè)信號(hào)變化時(shí)進(jìn)程才被激活,進(jìn)程內(nèi)的順序語(yǔ)句被執(zhí)行。當(dāng)進(jìn)程結(jié)束時(shí),進(jìn)程內(nèi)的輸出信號(hào)值被更新,進(jìn)程進(jìn)入等待(睡眠)狀態(tài),直到敏感表中的某一信號(hào)發(fā)生變化,進(jìn)程被再次激活。進(jìn)程語(yǔ)句Process的語(yǔ)義Process模型-基本形式Process()begin If-elseEndprocess;Process()begin Case-whenEndprocess;條件語(yǔ)句IF-ELSEIfexpression1Thenstatement1;[statement;]Elsestatement2;[statement;]Endif;

If-else語(yǔ)句選擇分支語(yǔ)句:從多個(gè)條件中選擇一個(gè)滿足條件的子句執(zhí)行;如果條件都不滿足則無(wú)操作;條件的排列方式有兩種基本形式:1.并列;2.嵌套(分層);每個(gè)if-else語(yǔ)句都有明確的語(yǔ)句控制域:控制域以“if”開(kāi)始,以“endif”結(jié)束。If…else語(yǔ)句塊—常用樣式If……then

子句1Endif;

If……then

子句1else

子句2End

if;If……then

子句1elsif…..then

子句2elsif…..then

子句3Endif;If……then

子句1elsif…..then

子句2elsif…..then

子句3else

子句4

Endif;①②③④嵌套if-else

if(clk'eventandclk='1')then

if(up_down=‘0’)then

if(q<9)then q<=q+1;

elseq<="0000";

endif;

elsif(up_down='1‘)then__________

endif;endif;ARCHITECTUREbehaviorOFmux4ISBEGIN process(i0,i1,i2,i3,sel) begin if(sel="00")then q<=i0; elsif(sel="01")then q<=i1; elsif(sel="10")then q<=i2; elsif(sel="11")then q<=i3; else q<='X'; endif; endprocess;ENDbehavior;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(i0,i1,i2,i3:INSTD_LOGIC;sel:INSTD_LOGIC_vector(1downto0);

q:OUTSTD_LOGIC);

ENDmux4;Case-when語(yǔ)句Case選擇信號(hào)

iswhen值1=>

子句1;when值2=>

子句2;whenothers=>

子句3;Endcase;選擇分支語(yǔ)句:根據(jù)選擇信號(hào)的值從多個(gè)子句中選擇一個(gè)子句執(zhí)行;ARCHITECTUREbehaviorOFmux4ISBEGIN process(i0,i1,i2,i3,sel) begin caseselis when"00"=> q<=i0; when"01"=> q<=i1; when"10"=> q<=i2; when"11"=> q<=i3; whenothers=> q<='X'; endcase; endprocess;ENDbehavior;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(i0,i1,i2,i3:INSTD_LOGIC;sel:INSTD_LOGIC_vector(1downto0);

q:OUTSTD_LOGIC);

ENDmux4;變量賦值語(yǔ)句由于變量賦值是立即起作用的,所以在進(jìn)程中變量賦值是順序語(yǔ)句。例如:Process variablea,b:integer;begina:=30;b:=40;a:=b;b:=a;endprocess;由于變量的賦值是順序進(jìn)行的,所以運(yùn)行結(jié)果是a=b=40。

數(shù)字邏輯電路—VHDL代碼—CPLD/FPGA數(shù)字邏輯電路的表示方法邏輯表達(dá)式邏輯圖真值表波形圖HDL卡諾圖VHDL代碼QuartusII編譯、綜合CPLD/FPGAQuartusII集成開(kāi)發(fā)環(huán)境—軟件模塊設(shè)計(jì)輸入編輯器仿真器HDL綜合器適配器(或布局布線器)下載器編譯器PLD開(kāi)發(fā)流程110原理圖/VHDL文本編輯綜合FPGA/CPLD適配FPGA/CPLD編程下載FPGA/CPLD器件和電路系統(tǒng)時(shí)序與功能門(mén)級(jí)仿真1、功能仿真2、時(shí)序仿真邏輯綜合器結(jié)構(gòu)綜合器編譯器VHDL的電路建模電路的輸入、輸出變量=>端口信號(hào);電路的內(nèi)部電路節(jié)點(diǎn)=>內(nèi)部信號(hào);邏輯關(guān)系=>代碼的含義;代碼的兩種模型并列模型進(jìn)程模型組合電路組合電路時(shí)序電路直接賦值語(yǔ)句,when-else,with-select直接賦值語(yǔ)句,if-else,case-when二、常用時(shí)序邏輯電路設(shè)計(jì)(1)觸發(fā)器設(shè)計(jì)(D、JK)(2)計(jì)數(shù)器設(shè)計(jì)(分頻器)(3)移位寄存器設(shè)計(jì)(4)狀態(tài)機(jī)設(shè)計(jì):序列信號(hào)發(fā)生器及檢測(cè)器

狀態(tài)機(jī)示例—序列信號(hào)發(fā)生器序列信號(hào):110序列發(fā)生器CLKZARCHITECTUREaOFmealyISTYPESTATE_TYPEIS(s0,s1,s2);SIGNALstate:STATE_TYPE;BEGIN

PROCESS(clk) BEGIN

If

(clk’EVENTANDclk=‘1’)thenCASEstateIS

WHENs0=>z<=‘1’;state<=s1;WHENs1=>

z<=‘1’;state<=s2;

WHENs2=>

z<=‘0’state<=s0;

WHENothers=> state<=s0; ENDCASE;Endif;

ENDPROCESS;ENDa;

(5)狀態(tài)機(jī)設(shè)計(jì)

我們可以用輸入信號(hào)X和電路狀態(tài)Q來(lái)描述時(shí)序電路的邏輯功能,這時(shí)時(shí)序電路稱(chēng)為

狀態(tài)機(jī)(StateMachine)。根據(jù)輸出信號(hào)和輸入信號(hào)以及電路狀態(tài)的關(guān)系,狀態(tài)機(jī)可以分為兩種:穆?tīng)枺∕oore)型和米利(Mealy)型。Y=F[X,Q]

Y=F[Q]

米利(Mealy)型:穆?tīng)枺∕oore)型:狀態(tài)機(jī)示例—序列信號(hào)檢測(cè)器序列信號(hào):110序列檢測(cè)器CLKZxS0S20/01/0S11/00/10/01/0Mealy型序列信號(hào)檢測(cè)器—狀態(tài)圖序列信號(hào):110Sx/Z‘1’‘11’S0/0S2/001S1/0101Moore型序列信號(hào)檢測(cè)器—狀態(tài)圖序列信號(hào):110S/Zx‘1’‘11’S3/1‘110’001LIBRARYieee;USEieee.std_logic_1164.ALL;ENTITYsqsISPORT(x,clk:inStd_logic;z:outStd_logic);ENDsqs;Mealy型-VHDL代碼轉(zhuǎn)換ARCHITECTUREaOFmealyISTYPESTATE_TYPEIS(s0,s1,s2);SIGNALstate:STATE_TYPE;BEGIN

Mealy型-VHDL代碼轉(zhuǎn)換PROCESS(clk) BEGIN

If

(clk’EVENTANDclk=‘1’)thenCASEstateIS

WHENs0=>IFdin=‘1’

THENstate<=s1;

elsestate<=s0; ENDIF;

WHENs1=>IFdin=‘1'THENstate<=s2;

elsestate<=s0; ENDIF;

WHENs2=>IFdin='0'THENstate<=s0;

elsestate<=s2; ENDIF;

WHENothers=> state<=s0; ENDCASE;Endif;

ENDPROCESS;z<='1'when(state=s2anddin=’0’)else'0';

--輸出不僅與狀態(tài)有關(guān),而且和輸入有關(guān)。ENDa;

Mealy型-VHDL代碼轉(zhuǎn)換I.Mealy型Mealy型-VHDL代碼轉(zhuǎn)換標(biāo)準(zhǔn)形式P0:PROCESS(clk)BEGIN

IFclk'eventandclk='1'THENcurrent_state<=excitation;

ENDIF;ENDPROCESSp0;P1:PROCESS(current_state,in1)BEGINCASEcurrent_stateISWHENs0=>IFin1='1'THENexcitation<=s1;ENDIF;WHENs1=>IFin1='0'THENexcitation<=s2;ENDIF;WHENs2=>IFin1='1'THENexcitation<=s3;ENDIF;WHENs3=>IFin1='0'THENexcitation<=s0;ENDIF;ENDCASE;END

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論