VHDL(電子科技大學(xué))_第1頁
VHDL(電子科技大學(xué))_第2頁
VHDL(電子科技大學(xué))_第3頁
VHDL(電子科技大學(xué))_第4頁
VHDL(電子科技大學(xué))_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

硬件描述語言VHDL

1.1什么是VHDL(HDL)?

VHDL:

VHSIC(VeryHighSpeedIntegratedCircuit)

Hardware

Description

Language

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

VHDL語言是由保留字編織起來的n

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

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

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

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

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

庫(Library)

程序包(Package)

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

庫、程序包

實(shí)體(Entity)

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

(Architecture)

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

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

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

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

ENTITY<entity_name>ISGenericDeclarations(類屬表);

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

1、類屬聲明

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

語法:

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

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

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

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

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

inout

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

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

端口名稱{,端口名稱}:端口方式數(shù)據(jù)類型;

端口名稱{,端口名稱}:端口方式數(shù)據(jù)類型);例:

一個(gè)a,b輸入,q輸出的二與門的實(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)描述:說明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); --類型聲明--元件聲明--子類型聲明,等等BEGIN進(jìn)程語句并行信號(hào)賦值元件例示語句END<構(gòu)造體名>

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

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

buffer

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

數(shù)據(jù)類型(DataType)

操作數(shù)(Operands)

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

變量(Variable)

信號(hào)(Signal)三種對(duì)象的物理含義:信號(hào)代表物理設(shè)計(jì)中的某一條硬件連接線;變量代表暫存某些值的載體;常量代表數(shù)字電路中的電源、地等常數(shù)。三種對(duì)象的特點(diǎn)及說明場(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ù)類型:=表達(dá)式;2、變量聲明格式:例:

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

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

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

c.變量賦值的數(shù)據(jù)傳輸是立即發(fā)生,不存在任何延時(shí)。variable變量名:數(shù)據(jù)類型:初始值;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ù)類型:初始值;例:信號(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ù)類型

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

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

類型由ieee

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

類型由std_logic

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

4VHDL中的表達(dá)式

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

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

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

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

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

1、if語句的門閂控制

if條件then

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

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

格式:

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

順序處理語句;else

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

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

if語句的多選擇控制又稱為if語句的嵌套。格式:

if條件then

順序處理語句;elsif

條件then

順序處理語句;┇elsif

條件then

順序處理語句;else

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

if_then_elsif

語句中隱含了優(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語句

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

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

when選擇值=>順序處理語句;。。。

whenothers=>順序處理語句;

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

5VHDL并行語句(Concurrent)

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

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

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

進(jìn)程:表述了一種進(jìn)行過程,描述順序事件,內(nèi)部包含了一個(gè)代表實(shí)際實(shí)體中部分邏輯行為的、獨(dú)立的順序語句描述的進(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)程之間的通信語法:敏感信號(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{順序語句}

endprocess[標(biāo)記];敏感信號(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語句,則不允許有敏感信號(hào)表。PROCESS(a,b)BEGIN--sequentialstatementsENDPROCESS;PROCESSBEGIN--sequentialstatementsWAITON(a,b);ENDPROCESS;5.2并行信號(hào)賦值語句包括三種形式:簡(jiǎn)單信號(hào)賦值;條件信號(hào)賦值;選擇信號(hào)賦值。特點(diǎn):1、賦值目標(biāo)必須都是信號(hào)。

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

3、任何輸入信號(hào)的變化都將啟動(dòng)相關(guān)并行語句的賦值操作。1、簡(jiǎn)單并行信號(hào)賦值語句即:信號(hào)<=表達(dá)式例:以下兩種描述等價(jià)一個(gè)簡(jiǎn)單并行信號(hào)賦值語句是一個(gè)進(jìn)程的縮寫。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)賦值語句格式:賦值目標(biāo)<=表達(dá)式1when條件1else

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

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

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

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)賦值語句與進(jìn)程中的多選擇if語句等價(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)賦值語句

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

case語句等價(jià)。

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

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

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

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)賦值語句與進(jìn)程中的case語句等價(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元件聲明與元件例化語句元件聲明與例化語句屬于結(jié)構(gòu)化建模設(shè)計(jì)。用于VHDL的層次化設(shè)計(jì)的上層設(shè)計(jì)。是對(duì)上層單元中的元件或模塊進(jìn)行端口定義,用元件例化語句指名所定義的模塊或元件與該單元中其它相連的器件的連接映射關(guān)系。上層中所定義模塊的內(nèi)部功能由對(duì)應(yīng)的下層單元實(shí)現(xiàn)。1.元件聲明格式定義:對(duì)所調(diào)用的較低層次的實(shí)體模塊(元

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論