VHDL(電子科技大學(xué))_第1頁(yè)
VHDL(電子科技大學(xué))_第2頁(yè)
VHDL(電子科技大學(xué))_第3頁(yè)
VHDL(電子科技大學(xué))_第4頁(yè)
VHDL(電子科技大學(xué))_第5頁(yè)
已閱讀5頁(yè),還剩63頁(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)介

硬件描述語(yǔ)言VHDL

1.1什么是VHDL(HDL)?

VHDL:

VHSIC(VeryHighSpeedIntegratedCircuit)

Hardware

Description

Language

1概述VHDL設(shè)計(jì)簡(jiǎn)述器件或子系統(tǒng)ENTITYportsportsARCHITECTUREProcessProcessSequentialProcessCombinationalProcesscomponent2選1選擇器的VHDL描述:n

VHDL語(yǔ)言是由保留字編織起來(lái)的n

該語(yǔ)言,對(duì)絕大多數(shù)的部分而言,是大小寫(xiě)不敏感的n

VHDL語(yǔ)句由一個(gè);結(jié)束n

VHDL是空白不敏感的。便于閱讀n

VHDL中,注釋由“--”開(kāi)頭到行結(jié)束而結(jié)束n

VHDL模型可以被寫(xiě)成:–行為的–結(jié)構(gòu)的–混合的1.7VHDL語(yǔ)言的一些基本特點(diǎn)2VHDL程序基本結(jié)構(gòu)基本結(jié)構(gòu)包括:

庫(kù)(Library)

程序包(Package)

實(shí)體(Entity)結(jié)構(gòu)體(Architecture)配置(Configuration)

庫(kù)、程序包

實(shí)體(Entity)

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

(Architecture)

進(jìn)程或其它并行結(jié)構(gòu)

配置(Configuration)結(jié)構(gòu)單元說(shuō)明n

VHDL設(shè)計(jì)單元

-庫(kù):用來(lái)調(diào)用電路模型所需共享資源數(shù)據(jù)–實(shí)體?用來(lái)定義電路模型的外觀圖,亦即器件的符號(hào)–構(gòu)造體?用來(lái)定義電路模型的功能,亦即器件內(nèi)部電路圖–配置?用來(lái)聯(lián)系構(gòu)造體和實(shí)體–包?可以由VHDL電路模型引用的信息的匯集,亦即庫(kù)?由包聲明和包體兩個(gè)部分構(gòu)成2.2實(shí)體聲明實(shí)體聲明:定義系統(tǒng)的輸入輸出端口語(yǔ)法:

ENTITY<entity_name>ISGenericDeclarations(類(lèi)屬表);

PortDeclarations(端口表);END<entity_name>;(1076-1987version)ENDENTITY<entity_name>;(1076-1993version)

1、類(lèi)屬聲明

類(lèi)屬聲明:確定實(shí)體或組件中定義的局部常數(shù)。是一種端口界面常數(shù)。常以說(shuō)明的形式放在實(shí)體或結(jié)構(gòu)體前的說(shuō)明部分。它的值可由實(shí)體外部提供。

語(yǔ)法:

Generic(常數(shù)名稱(chēng):數(shù)據(jù)類(lèi)型[:=缺省值]{;常數(shù)名稱(chēng):數(shù)據(jù)類(lèi)型[:=缺省值]}};例:

entitymckisgeneric(width:integer:=16);port(add_bus:inbit_vector(width-1downto0);equal:outboolean);

endmck;2、端口聲明端口聲明:確定系統(tǒng)輸入輸出端口的名稱(chēng)和類(lèi)型。語(yǔ)法:其中,端口方式:

in輸入型,此端口為只讀型。

out輸出型,此端口只能在實(shí)體內(nèi)部對(duì)其賦值。

inout

(雙向)輸入輸出型,既可讀也可賦值。

buffer(帶反饋)緩沖型,與out相似,但可讀。Port(

端口名稱(chēng){,端口名稱(chēng)}:端口方式數(shù)據(jù)類(lèi)型;

端口名稱(chēng){,端口名稱(chēng)}:端口方式數(shù)據(jù)類(lèi)型);例:

一個(gè)a,b輸入,q輸出的二與門(mén)的實(shí)體定義:

ENTITYand2IS

PORT(a,b:INstd_logic;

q:OUTstd_logic);

ENDand2;2.3結(jié)構(gòu)體作用:定義系統(tǒng)(或模塊)的行為、元件及內(nèi)部的連接關(guān)系,即描述其功能。

3種描述方式:行為描述:數(shù)據(jù)流描述:結(jié)構(gòu)描述:說(shuō)明n結(jié)構(gòu)體的關(guān)鍵點(diǎn)–相當(dāng)于:電路–描述模型的功能和時(shí)序–必須與一個(gè)ENTITY相關(guān)聯(lián)–ENTITY可以有多個(gè)結(jié)構(gòu)體結(jié)構(gòu)體聲明格式ARCHITECTURE<結(jié)構(gòu)體名>

OF<entity名>IS--構(gòu)造體聲明段(所列并非全部)signaltemp:integer:=1; --信號(hào)聲明constantload:boolean

:=true; --常數(shù)聲明typestatesis(S1,S2,S3,S4); --類(lèi)型聲明--元件聲明--子類(lèi)型聲明,等等BEGIN進(jìn)程語(yǔ)句并行信號(hào)賦值元件例示語(yǔ)句END<構(gòu)造體名>

;(1076-1987版)ENDARCHITECTURE<構(gòu)造體_標(biāo)識(shí)符>;(1076-1993版)例:一個(gè)完整描述(3bit計(jì)數(shù)器)

3bit計(jì)數(shù)器的等效描述(out

buffer

的區(qū)別):四類(lèi)語(yǔ)言要素:數(shù)據(jù)對(duì)象(DataObject)

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

操作數(shù)(Operands)

操作符(Operator)3VHDL語(yǔ)言要素?cái)?shù)據(jù)對(duì)象三種對(duì)象:常量(Constant)

變量(Variable)

信號(hào)(Signal)三種對(duì)象的物理含義:信號(hào)代表物理設(shè)計(jì)中的某一條硬件連接線;變量代表暫存某些值的載體;常量代表數(shù)字電路中的電源、地等常數(shù)。三種對(duì)象的特點(diǎn)及說(shuō)明場(chǎng)合:信號(hào):全局量,用于architecture、package、entitiy。

變量:局部量,用于process、function、procedure。

常量:全局量,可用于上面兩種場(chǎng)合。1、常量聲明常量聲明:對(duì)某一個(gè)常量名賦予一個(gè)固定的值。格式:例:constantwidth:integer:=8;

constantx:new_bit:=‘x’;

constant常數(shù)名:數(shù)據(jù)類(lèi)型:=表達(dá)式;2、變量聲明格式:例:

variablea,b:bit;variablecount:integerrange0to255:=10;注:

a.變量的初值可用于仿真,但綜合時(shí)被忽略。

b.只能在進(jìn)程、子程序中使用。

c.變量賦值的數(shù)據(jù)傳輸是立即發(fā)生,不存在任何延時(shí)。variable變量名:數(shù)據(jù)類(lèi)型:初始值;3、信號(hào)聲明

信號(hào)是電子電路內(nèi)部硬件連接的接點(diǎn)。與“端口”概念相似。格式:

例:signala,b:bit;

注:a.綜合時(shí)初值被忽略。

b.可在結(jié)構(gòu)體、實(shí)體、塊中聲明和使用信號(hào),在進(jìn)程和子程序中只能使用信號(hào),不能聲明信號(hào)。

c.信號(hào)的賦值存在延時(shí)。signal信號(hào)名:數(shù)據(jù)類(lèi)型:初始值;例:信號(hào)與變量的使用Entityexisport(…..);endex;architecturearch_exofexissignala,b:std_logic;beginprocess(a,b)variablec,d:std_logic;beginc:=a+b;d:=a-b;……endprocess;endarch_ex;3VHDL數(shù)據(jù)類(lèi)型

VHDL是一種“強(qiáng)”數(shù)據(jù)類(lèi)型語(yǔ)言。1)整數(shù)(integer)

integer表示所有正的和負(fù)的整數(shù)。硬件實(shí)現(xiàn)時(shí),利用32位的位矢量來(lái)表示??蓪?shí)現(xiàn)的整數(shù)范圍為:-(231-1)to(231-1)2)std_logic

類(lèi)型由ieee

庫(kù)中的std_logic_1164程序包定義,為九值邏輯系統(tǒng),如下:(‘U’,‘X’,‘0’,‘1’,‘Z’,‘W’,‘L’,‘H’,‘-’)3)std_logic_vector

類(lèi)型由std_logic

構(gòu)成的數(shù)組。

4VHDL中的表達(dá)式

表達(dá)式:由操作符和操作數(shù)構(gòu)成,完成算術(shù)或邏輯運(yùn)算。操作符

VHDL操作符的分類(lèi):邏輯操作符、關(guān)系操作符加減操作符、一元操作符乘除操作符

**abs雜散*/modrem乘除+-符號(hào)+-&加減=/=<<=>>=關(guān)系Notandornandnorxorxnor(1)邏輯運(yùn)算符

名/符號(hào)運(yùn)算符類(lèi)型VHDL

運(yùn)算符ENTITYoverloadISENDoverload;ARCHITECTUREexampleOFoverloadISBEGIN adder_body:PROCESS(a,b) BEGIN

ENDPROCESSadder_body;ENDexample;LIBRARYieee;USEieee.std_logic_1164.all;USEieee.std_logic_unsigned.all;PORT(a:INSTD_LOGIC_VECTOR(3downto0); b:INSTD_LOGIC_VECTOR(3downto0); sum:OUTSTD_LOGIC_VECTOR(4downto0));

sum<=a+b;在設(shè)計(jì)文件的開(kāi)頭部分包括這些語(yǔ)句允許對(duì)非內(nèi)建的數(shù)據(jù)類(lèi)型進(jìn)行運(yùn)算運(yùn)算符重載的使用4VHDL的常用語(yǔ)句VHDL語(yǔ)句主要分為兩大類(lèi):順序(Sequential)描述語(yǔ)句并行(Concurrent)描述語(yǔ)句4.1VHDL順序語(yǔ)句順序語(yǔ)句:語(yǔ)句的執(zhí)行順序與書(shū)寫(xiě)順序一致,只能出現(xiàn)在進(jìn)程與子程序中。常用的順序描述語(yǔ)句:賦值語(yǔ)句;if語(yǔ)句;case語(yǔ)句;4.1賦值語(yǔ)句賦值語(yǔ)句所表達(dá)的數(shù)據(jù)對(duì)象是:信號(hào)和變量語(yǔ)法格式變量:=表達(dá)式;--變量賦值信號(hào)<=表達(dá)式;--信號(hào)賦值要求:表達(dá)式的值必須與對(duì)象的類(lèi)型、寬度一致。例:一位賦值temp(7)<=‘1’;ortemp(7):=‘1’;

位片賦值temp(7downto4)<=“1010”;

一位:?jiǎn)我?hào)

(‘)

多位:雙引號(hào)

(“)變量賦值與信號(hào)賦值的差異:1)賦值方式的不同:變量:=表達(dá)式;信號(hào)<=表達(dá)式;2)硬件實(shí)現(xiàn)的功能不同:信號(hào)代表電路單元、功能模塊間的互聯(lián),代表實(shí)際的硬件連線;變量代表電路單元內(nèi)部的操作,代表暫存的臨時(shí)數(shù)據(jù)。4.2if語(yǔ)句

if語(yǔ)句是一種條件語(yǔ)句,按指定的順序執(zhí)行所設(shè)置的一個(gè)或多個(gè)條件的值。

1、if語(yǔ)句的門(mén)閂控制

if條件then

順序處理語(yǔ)句;endif;例:if(ena=‘1’)thenq<=d;

endif;綜合后生成鎖存器(latch)例:D觸發(fā)器:2、if語(yǔ)句的二選擇控制

格式:

用條件來(lái)選擇兩條不同程序執(zhí)行的路徑。if條件then

順序處理語(yǔ)句;else

順序處理語(yǔ)句;endif;此描述的典型電路是二選一電路:

architecturertlofmux2isbeginprocess(a,b,sel)beginif(sel=‘1’)theny<=a;elsey<=b;endif;endprocess;endrtl;3、if語(yǔ)句的多選擇控制

if語(yǔ)句的多選擇控制又稱(chēng)為if語(yǔ)句的嵌套。格式:

if條件then

順序處理語(yǔ)句;elsif

條件then

順序處理語(yǔ)句;┇elsif

條件then

順序處理語(yǔ)句;else

順序處理語(yǔ)句;endif;典型電路是多選一電路。如四選一電路:

if_then_elsif

語(yǔ)句中隱含了優(yōu)先級(jí)別的判斷,最先出現(xiàn)的條件優(yōu)先級(jí)最高,可用于設(shè)計(jì)具有優(yōu)先級(jí)的電路。如8-3優(yōu)先級(jí)編碼器。

libraryieee;useieee.std_logic_1164.all;entitycoderis

port(input:instd_logic_vector(7downto0);

output:outstd_logic_vector(2downto0));endcoder;

architectureartofcoderisbeginprocess(input)beginifinput(7)=‘0’thenoutput<=“000”;

elsifinput(6)=‘0’thenoutput<=“001”;

elsifinput(5)=‘0’thenoutput<=“010”;

elsifinput(4)=‘0’thenoutput<=“011”;

elsifinput(3)=‘0’thenoutput<=“100”;

elsifinput(2)=‘0’thenoutput<=“101”;

elsifinput(1)=‘0’thenoutput<=“110”’;elseoutput<=“111”;endif;endprocess;endart;4.3case語(yǔ)句

case語(yǔ)句根據(jù)滿(mǎn)足的所有條件直接選擇多項(xiàng)順序語(yǔ)句中的一項(xiàng)執(zhí)行。格式如下:注:除條件句中所有選擇值能完全覆蓋CASE語(yǔ)句中表達(dá)式的取值,否則最末一個(gè)條件句中的選擇必須用“OTHERS”表示。

case表達(dá)式iswhen選擇值=>順序處理語(yǔ)句;

when選擇值=>順序處理語(yǔ)句;。。。

whenothers=>順序處理語(yǔ)句;

endcase;┇例:用case語(yǔ)句描述四選一電路

5VHDL并行語(yǔ)句(Concurrent)

Architecture并行語(yǔ)句在結(jié)構(gòu)體中的執(zhí)行是同步進(jìn)行的,執(zhí)行方式與書(shū)寫(xiě)順序無(wú)關(guān)。并行語(yǔ)句內(nèi)部運(yùn)行有兩種方式:并行執(zhí)行方式(如快語(yǔ)句)和順序執(zhí)行方式(如進(jìn)程語(yǔ)句)并行語(yǔ)句并行語(yǔ)句并行語(yǔ)句信號(hào)信號(hào)信號(hào)

常用的并行描述語(yǔ)句有:并行信號(hào)賦值語(yǔ)句;進(jìn)程(process)語(yǔ)句;元件例化語(yǔ)句;

5.1進(jìn)程(process)語(yǔ)句

進(jìn)程:表述了一種進(jìn)行過(guò)程,描述順序事件,內(nèi)部包含了一個(gè)代表實(shí)際實(shí)體中部分邏輯行為的、獨(dú)立的順序語(yǔ)句描述的進(jìn)程。PROCESS放在結(jié)構(gòu)體中,一個(gè)結(jié)構(gòu)體可有多個(gè)PROCESS并行運(yùn)行。特點(diǎn):

1、進(jìn)程之間的并行性;

2、進(jìn)程內(nèi)部的順序性;

3、進(jìn)程的啟動(dòng);

4、進(jìn)程之間的通信語(yǔ)法:敏感信號(hào)表:進(jìn)程內(nèi)要讀取的所有敏感信號(hào)(包括端口)的列表。每一個(gè)敏感信號(hào)的變化,都將啟動(dòng)進(jìn)程。進(jìn)程中所有輸入信號(hào)都要列入敏感表中。

[標(biāo)記:]process[(敏感信號(hào)表)]{進(jìn)程聲明項(xiàng)}begin{順序語(yǔ)句}

endprocess[標(biāo)記](méi);敏感信號(hào)表的特點(diǎn):1、同步進(jìn)程的敏感信號(hào)表中只有時(shí)鐘信號(hào)。如:process(clk)beginif(clk’eventandclk=‘1’)then

ifreset=‘1’thendata<=“00”;else

data<=in_data;endif;endif;endprocess;2、異步進(jìn)程敏感信號(hào)表中除時(shí)鐘信號(hào)外,還有其它信號(hào)。例:process(clk,reset)begin

ifreset=‘1’thendata<=“00”;

elsif(clk’eventandclk=‘1’)thendata<=in_data;endif;endprocess;

3、如果有wait語(yǔ)句,則不允許有敏感信號(hào)表。PROCESS(a,b)BEGIN--sequentialstatementsENDPROCESS;PROCESSBEGIN--sequentialstatementsWAITON(a,b);ENDPROCESS;5.2并行信號(hào)賦值語(yǔ)句包括三種形式:簡(jiǎn)單信號(hào)賦值;條件信號(hào)賦值;選擇信號(hào)賦值。特點(diǎn):1、賦值目標(biāo)必須都是信號(hào)。

2、每條賦值語(yǔ)句相當(dāng)于一條縮寫(xiě)的進(jìn)程語(yǔ)句,且語(yǔ)句中的所有輸入信號(hào)都被隱性地列入此過(guò)程的敏感信號(hào)表中。

3、任何輸入信號(hào)的變化都將啟動(dòng)相關(guān)并行語(yǔ)句的賦值操作。1、簡(jiǎn)單并行信號(hào)賦值語(yǔ)句即:信號(hào)<=表達(dá)式例:以下兩種描述等價(jià)一個(gè)簡(jiǎn)單并行信號(hào)賦值語(yǔ)句是一個(gè)進(jìn)程的縮寫(xiě)。architecturebehavofa_varisbeginoutput<=a(i);endbehav;architecturebehavofa_varisbeginprocess(a,i)beginoutput<=a(i);endprocess;endbehav;等效:LIBRARYieee;USEieee.std_logic_1164.all;ENTITYsimp

ISPORT(a,b:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDsimp;ARCHITECTURElogicOFsimp

ISSIGNALc:STD_LOGIC;BEGINc<=aandb;y<=c;ENDlogic;LIBRARYieee;USEieee.std_logic_1164.all;ENTITYsimp_prc

ISPORT(a,b:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDsimp_prc;ARCHITECTURElogicOFsimp_prc

ISSIGNALc:STD_LOGIC;BEGINprocess1:PROCESS(a,b)BEGINc<=aandb;ENDPROCESSprocess1;process2:PROCESS(c)BEGINy<=c;ENDPROCESSprocess2;ENDlogic;不等效:LIBRARYieee;USEieee.std_logic_1164.all;ENTITYsimp

ISPORT(a,b:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDsimp;ARCHITECTURElogicOFsimp

ISSIGNALc:STD_LOGIC;BEGINc<=aandb;y<=c;ENDlogic;LIBRARYieee;USEieee.std_logic_1164.all;ENTITYsimp_prc

ISPORT(a,b:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDsimp_prc;ARCHITECTURElogicOFsimp_prc

ISSIGNALc:STD_LOGIC;BEGINPROCESS(a,b)BEGINc<=aandb;y<=c;ENDPROCESS;ENDlogic;2、條件信號(hào)賦值語(yǔ)句格式:賦值目標(biāo)<=表達(dá)式1when條件1else

表達(dá)式2when條件2else

表達(dá)式3when條件3else┆

表達(dá)式n;例:用條件信號(hào)賦值語(yǔ)句描述四選一電路

entitymux4isport(i0,i1,i2,i3,a,b:instd_logic;q:outstd_logic);endmux4;architecturertlofmux4issignalsel:std_logic_vector(1downto0);begin

sel<=b&a;q<=i0whensel=“00”elsei1whensel=“01”elsei2whensel=“10”elsei3whensel=“11”;endrtl;條件信號(hào)賦值語(yǔ)句與進(jìn)程中的多選擇if語(yǔ)句等價(jià):q<=aWHENsela=‘1’ELSEbWHENselb=‘1’ELSEc;PROCESS(sela,selb,a,b,c)BEGINIFsela=‘1’THENq<=a;ELSIFselb=‘1’THENq<=b;ELSEq<=c;ENDIF;ENDPROCESS;3、選擇信號(hào)賦值語(yǔ)句

選擇信號(hào)賦值語(yǔ)句與進(jìn)程中的

case語(yǔ)句等價(jià)。

格式:注:1)不能有重疊的條件分支。

2)最后條件可為others。否則,其它條件必須能包含表達(dá)式的所有可能值。with表達(dá)式select

賦值目標(biāo)<=表達(dá)式1when選擇值1,表達(dá)式2when選擇值2,┆表達(dá)式nwhen選擇值n;例:用選擇信號(hào)賦值語(yǔ)句描述四選一電路

entitymux4isport(i0,i1,i2,i3,a,b:instd_logic;q:outstd_logic);endmux4;architecturertlofmux4issignalsel:std_logic_vector(1downto0);begin

sel<=b&a;withselselectq<=i0whensel=“00”,i1whensel=“01”,i2whensel=“10”,i3whensel=“11”,‘X’whenothers;

endrtl;選擇信號(hào)賦值語(yǔ)句與進(jìn)程中的case語(yǔ)句等價(jià):PROCESS(sel,a,b,c,d)BEGIN

CASEsel

ISWHEN“00”=>q<=a;WHEN“01”=>q<=b;WHEN“10”=>q<=c;WHENOTHERS=>q<=d;ENDCASE;ENDPROCESS;WITHsel

SELECTq<=aWHEN“00”,bWHEN“01”,cWHEN“10”,dWHENOTHERS;5.3元件聲明與元件例化語(yǔ)句元件聲明與例化語(yǔ)句屬于結(jié)構(gòu)化建模設(shè)計(jì)。用于VHDL的層次化設(shè)計(jì)的上層設(shè)計(jì)。是對(duì)上層單元中的元件或模塊進(jìn)行端口定義,用元件例化語(yǔ)句指名所定義的模塊或元件與該單元中其它相連的器件的連接映射關(guān)系。上層中所定義模塊的內(nèi)部功能由對(duì)應(yīng)的下層單元實(shí)現(xiàn)。1.元件聲明格式定義:對(duì)所調(diào)用的較低層次的實(shí)體模塊(元

溫馨提示

  • 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)論