VHDL技能培訓課件 課件_第1頁
VHDL技能培訓課件 課件_第2頁
VHDL技能培訓課件 課件_第3頁
VHDL技能培訓課件 課件_第4頁
VHDL技能培訓課件 課件_第5頁
已閱讀5頁,還剩107頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

拓展培訓學校:長治高級技工學校主講人:劉新梅VHDL技能培訓VHDL語言VHDL:VHSICHardwareDescriptionLanguage.1VHDL語言基礎(chǔ)2VHDL基本結(jié)構(gòu)3VHDL語句4狀態(tài)機在VHDL中的實現(xiàn)5常用電路VHDL程序6VHDL仿真7VHDL綜合HDL----HardwareDescriptionLanguage

一種用于描述數(shù)字電路的功能或行為的語言。目的是提為電路設(shè)計效率,縮短設(shè)計周期,減小設(shè)計成本,可在芯片制造前進行有效的仿真和錯誤檢測。優(yōu)點:HDL設(shè)計的電路能獲得非常抽象級的描述。如基于RTL(RegisterTransferLevel)描述的IC,可用于不同的工藝。HDL設(shè)計的電路,在設(shè)計的前期,就可以完成電路的功能級的驗證。HDL設(shè)計的電路類似于計算機編程。常用的HDL語言:VHDL、VerilogHDL

VHDL概述VHDL是美國國防部在20世紀80年代初為實現(xiàn)其高速集成電路硬件VHSIC計劃提出的描述語言;IEEE從1986年開始致力于VHDL標準化工作,融合了其它ASIC芯片制造商開發(fā)的硬件描述語言的優(yōu)點,于93年形成了標準版本(IEEE.std_1164)。

1995年,我國國家技術(shù)監(jiān)督局推薦VHDL做為電子設(shè)計自動化硬件描述語言的國家標準。

VHDL概述VHDLVHSICHardwarterDescriptionLanguageVeryHighspeedintegratedcircuitVHSIC

覆蓋面廣,系統(tǒng)硬件描述能力強,是一個多層次的硬件描述語言;VHDL語言具有良好的可讀性,既可以被計算機接受,也容易被人們所理解;VHDL語言可以與工藝無關(guān)編程;VHDL語言已做為一種IEEE的工業(yè)標準,便于使用、交流和推廣。

VHDL語言的不足之處:

VHDL優(yōu)點:

設(shè)計的最終實現(xiàn)取決于針對目標器件的編程器,工具的不同會導致綜合質(zhì)量不一樣。VHDL概述1.1標識符(Identifiers)要求:首字符必須是字母末字符不能為下劃線不允許出現(xiàn)兩個連續(xù)的下劃線不區(qū)分大小寫

VHDL定義的保留字(關(guān)鍵字),不能用作標識符

標識符字符最長可以是32個字符。注釋由兩個連續(xù)的虛線(--)引導。1VHDL語言基礎(chǔ)

標識符用來定義常數(shù)、變量、信號、端口、子程序或參數(shù)的名字,由字母(A~Z,a~z)、數(shù)字(0~9)和下劃線(_)字符組成。例如:ABS,ACCESS,AFTER,ALL,AND,ARCHITECTURE,ARRAY,ATTRIBUTE,BEGIN,BODY,BUFFER,BUS,CASE,COMPONENT,CONSTANT,DISCONNECT,DOWNTO,ELSE,ELSIF,END,ENTITY,EXIT,F(xiàn)ILE,F(xiàn)OR,F(xiàn)UNCTION,GENERIC,GROUP,IF,INPURE,IN,INOUT,IS,LABEL,LIBRARY,LINKAGE,LOOP,MAP,MOD,NAND,NEW,NEXT,NOR,NOT,NULL,OF,ON,OPEN,OR,OTHERS,OUT,PACKAGE,POUT,PROCEDURE,PROCESS,PURE,RANGE,RECODE,REM,REPORT,RETURN,ROL,ROR,SELECT,SHARED,SIGNAL,SLA,SLL,SRA,SUBTYPE,THEN,TRANSPORT,TO關(guān)鍵字(保留字):

關(guān)鍵字(keyword)是VHDL中具有特別含義的單詞,只能做為固定的用途,用戶不能用其做為標識符。1VHDL語言基礎(chǔ)1.2數(shù)據(jù)對象(DateObjects)

常量ConstantConstantbus_width:integer:=

8;--定義總線寬度為常數(shù)8

數(shù)據(jù)對象包括常量、變量、信號和文件四種類型。

常量是對某一常量名賦予一個固定的值,而且只能賦值一次。通常賦值在程序開始前進行,該值的數(shù)據(jù)類型則在說明語句中指明。Constant常數(shù)名:數(shù)據(jù)類型:=表達式ConstantVcc:real:=5.0;--定義Vcc的數(shù)據(jù)類型是實數(shù),賦值為5.0V常量所賦的值應(yīng)和定義的數(shù)據(jù)類型一致;常量在程序包、實體、構(gòu)造體或進程的說明性區(qū)域內(nèi)必須加以說明。定義在程序包內(nèi)的常量可供所含的任何實體、構(gòu)造體所引用,定義在實體說明內(nèi)的常量只能在該實體內(nèi)可見,定義在進程說明性區(qū)域中的常量只能在該進程內(nèi)可見。1VHDL語言基礎(chǔ)Variable

變量名:數(shù)據(jù)類型:=初始值;Variablecount:integer0to255:=20

;--定義count整數(shù)變量,變化范圍0~255,初始值為20。

變量Variable

變量只能在進程語句、函數(shù)語句和過程語句結(jié)構(gòu)中使用。變量的賦值是直接的,非預設(shè)的,分配給變量的值立即成為當前值,變量不能表達“連線”或存儲元件,不能設(shè)置傳輸延遲量。變量賦值語句:目標變量名:=表達式;變量定義語句:x:=10.0;--實數(shù)變量賦值為10.0Y:=1.5+x;--運算表達式賦值,注意表達式必須與目標變量的數(shù)據(jù)類型相同A(3to6):=(“1101”);--位矢量賦值1VHDL語言基礎(chǔ)Signal

信號名:數(shù)據(jù)類型:=初始值Signalclock:bit:=‘0’;--定義時鐘信號類型,初始值為0

信號Signal

信號表示邏輯門的輸入或輸出,類似于連接線,也可以表達存儲元件的狀態(tài)。信號通常在構(gòu)造體、程序包和實體中說明。信號定義語句:Signalcount:BIT_VECTOR(3DOWNTO0);--定義count為4位位矢量信號賦值語句:目標信號名<=表達式;x<=9;Z<=xafter5ns;--在5ns后將x的值賦予z1VHDL語言基礎(chǔ)1.3數(shù)據(jù)類型

布爾:(Boolean)

位:(Bit)TYPEBITIS(‘0’,’1’);--取值為0和1,用于邏輯運算

位矢量:(Bit_Vector)TYPEBIT_VECTORISARRAY(Naturalrange<>)OFBIT;--基于Bit類型的數(shù)組,用于邏輯運算

SIGNALa:Bit_Vector(0TO7);SIGNALa:Bit_Vector(7DOWNTO0)VHDL的預定義數(shù)據(jù)類型

在VHDL標準程序包STANDARD中定義好,實際使用過程中,已自動包含進VHDL源文件中,不需要通過USE語句顯式調(diào)用。TYPEBOOLEANIS(FALSE,TRUE);--取值為FALSE和TRUE,不是數(shù)值,不能運算,一般用于關(guān)系運算符1VHDL語言基礎(chǔ)

整數(shù):(Integer)

取值范圍-(231-1)~(231-1),可用32位有符號的二進制數(shù)表示

variablea:integerrange-63to63

在實際應(yīng)用中,VHDL仿真器將Integer做為有符號數(shù)處理,而VHDL綜合器將Integer做為無符號數(shù)處理;要求用RANGE子句為所定義的數(shù)限定范圍,以便根據(jù)范圍來決定表示此信號或變量的二進制數(shù)的位數(shù)。

字符:(Character)

TYPECHARACTERIS(NUL,SOH,STX,…,‘’,‘!’,…);--通常用‘’引起來,區(qū)分大小寫;

字符串:(String)VARIABLEstring_var:STRING(1TO7);string_var:=“ABCD”;--通常用“”引起來,區(qū)分大小寫;1VHDL語言基礎(chǔ)

實數(shù):(Real)

取值范圍-1.0E38~+1.0E38,僅用于仿真不可綜合

1.0--十進制浮點數(shù)

8#43.6#e+4--八進制浮點數(shù)

43.6E-4--十進制浮點數(shù)

時間:(Time)

物理量數(shù)據(jù),完整的包括整數(shù)和單位兩個部分,用至少一個空格隔開,僅用于仿真不可綜合;

fs,ps,ns,us,ms,sec,min,hr

錯誤等級(SeverityLevel)

:表示系統(tǒng)狀態(tài),僅用于仿真不可綜合;TYPEseverity_levelIS(NOTE、WARNING、ERROR、FAILURE);1VHDL語言基礎(chǔ)IEEE預定義標準邏輯位與矢量

標準邏輯位(Std_Logic)

標準邏輯位矢量(Std_Logic_vector)基于Std_Logic類型的數(shù)組;

使用Std_Logic和Std_Logic_Vector要調(diào)用IEEE庫中的Std_Logic_1164程序包;就綜合而言,能夠在數(shù)字器件中實現(xiàn)的是“-、0、1、Z”四種狀態(tài)。在條件語句中,必須要全面考慮Std_Logic的所有可能取值情況,否則綜合器可能會插入不希望的鎖存器。U:Uninitialized;X:ForcingUnkown;0:Forcing01:Forcing1Z:HighImpedanceW:WeakUnknownL:Weak0H:Weak1—:Don’tcare1VHDL語言基礎(chǔ)枚舉:typestatesis(idle,decision,read,write);typebooleanis(false,true);

typebitis(‘0’,‘1’);數(shù)組:typevalue_typeisarray(127downto0)ofinteger;typematrix_typeisarray(0to15,0to31)ofstd_logic;

用戶自定義TYPE數(shù)據(jù)類型名IS數(shù)據(jù)類型定義OF基本數(shù)據(jù)類型或TYPE數(shù)據(jù)類型名IS數(shù)據(jù)類型定義SUBTYPE子類型名IS基本數(shù)據(jù)類型定義RANGE約束范圍subtypedigitisintegerrange0to9;1VHDL語言基礎(chǔ)1.4數(shù)據(jù)類型轉(zhuǎn)換VHDL為強定義類型語言,不同類型的數(shù)據(jù)不能進行運算和直接賦值。

類型標記法VariableA:integer;VariableB:real;A=integer(B);B=real(A);

函數(shù)法Conv_interger(A);--由std_logic轉(zhuǎn)換為integer型,在std_logic_unsigned包。

常數(shù)轉(zhuǎn)換法/常量轉(zhuǎn)換法Typeconv_tableisarray(std_logic)ofbit;Constanttable:conv_table:=(‘0’|’L’=>’0’,‘1’|’H’=>’1’,others=>’0’);Signala:bit;signalb:std_logic;A<=table(b);--將std_logic型轉(zhuǎn)換為bit型具有轉(zhuǎn)換表性質(zhì)的常數(shù)1VHDL語言基礎(chǔ)

在“STD_LOGIC_1164”、“STD_LOGIC_ARITH”和“STD_LOGIC_UNSIGNED”的程序包中提供的數(shù)據(jù)類型變換函數(shù)。1VHDL語言基礎(chǔ)

屬性屬性提供的是關(guān)于信號、類型等的指定特性?!甧vent:若屬性對象有事件發(fā)生,則生成布爾值“true”,常用來檢查時鐘邊沿是否有效。上升沿:Clock’EVENTANDClock=‘1’’range:生成一個限制性數(shù)組對象的范圍’left:生成數(shù)據(jù)類型或數(shù)據(jù)子類型的左邊界值;’right,’high,’low,’length’range:“0ton”;’reverse_range:“ndownto0”1VHDL語言基礎(chǔ)

運算符

算術(shù)運算符:+,-,*,/,MOD,REM,SLL,SRL,SLA,SRA,ROL,ROR,**,ABS

關(guān)系運算符:=,/=,<,>,<=,>=

邏輯運算符:AND,OR,NAND,NOR,XNOR,NOT,XOR

賦值運算符:<=,:=

關(guān)聯(lián)運算符:=>

其他運算符:+,-,&1VHDL語言基礎(chǔ)并置操作符

SIGNALa:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALd:STD_LOGIC_VECTOR(1DOWNTO0);...a<='1'

'0'

d(1)

'1';--元素與元素并置,并置后的數(shù)組長度為4...IFa

d="101011"THEN...–-在IF條件句中可以使用并置符1

VHDL語言基礎(chǔ)

運算符優(yōu)先級別邏輯、算術(shù)運算符(NOT,**,ABS)

乘法運算符(/,MOD,REM,*)

正負運算符:+,-,

加減、并置運算符:+,-,&關(guān)系運算符:=,/=,<,>,<=,>=邏輯運算符:AND,OR,NAND,NOR,XNOR,NOT,XOR1VHDL語言基礎(chǔ)

移位運算符的左邊為一維數(shù)組,其類型必須是BIT或BOOLEAN,右邊必須是整數(shù)移位次數(shù)為整數(shù)的絕對值。移位運算符操作示意圖“1100”SLL1=“1000”“1100”SRL1=“0110”“1100”SLA1=“1000”“1100”SRA1=“1110”“1100”ROL1=“1001”“1100”ROR1=“0110”SLL:將位向量左移,右邊移空位補零;SRL:將位向量右移,左邊移空位補零;SLA:將位向量左移,右邊第一位的數(shù)值保持原值不變;SRA:將位向量右移,左邊第一位的數(shù)值保持原值不變;ROL和ROR:自循環(huán)左右移位。1VHDL語言基礎(chǔ)取余運算(aREMb)的符號與a相同,其絕對值小于b的絕對值。例如:(-5)REM2=(-1)5REM2=(1)

取模運算(aMODb)的符號與b相同,其絕對值小于b的絕對值。例如:(-5)MOD2=15MOD(-2)=(-1)1VHDL語言基礎(chǔ)2VHDL基本結(jié)構(gòu)

實體(Entity):描述所設(shè)計的系統(tǒng)的外部接口信號,定義電路設(shè)計中所有的輸入和輸出端口;結(jié)構(gòu)體(Architecture):描述系統(tǒng)內(nèi)部的結(jié)構(gòu)和行為;包集合(Package):存放各設(shè)計模塊能共享的數(shù)據(jù)類型、常數(shù)和子程序等;配置(Configuration):指定實體所對應(yīng)的結(jié)構(gòu)體;庫(Library):存放已經(jīng)編譯的實體、結(jié)構(gòu)體、包集合和配置。LIBRARYIEEE;--庫、程序包的說明調(diào)用USEIEEE.Std_Logic_1164.ALL;ENTITYFreDeviderIS--實體聲明PORT(Clock:INStd_logic;Clkout:OUTStd_logic);END;ARCHITECTUREBehaviorOFFreDeviderIS--結(jié)構(gòu)體定義SIGNALClk:Std_Logic;BEGINPROCESS(Clock)BEGINIFrising_edge(Clock)THENClk<=NOTClk;ENDIF;ENDPROCESS;Clkout<=Clk;END;VHDL的基本設(shè)計單元結(jié)構(gòu):程序包說明、實體說明和結(jié)構(gòu)體說明三部分。2.1實體(Entity)ENTITY

實體名IS[GENERIC(常數(shù)名:數(shù)據(jù)類型:設(shè)定值)]PORT(端口名1:端口方向端口類型;端口名2:端口方向端口類型;

..

端口名n:端口方向端口類型);END

[實體名];

實體描述了設(shè)計單元的輸入輸出接口信號或引腳,是設(shè)計實體經(jīng)封裝后對外的一個通信界面。2VHDL基本結(jié)構(gòu)ENTITYFreDeviderISPORT(Clock:INStd_logic;Clokout:OUTStd_logic);END;實體名最后一條端口聲明語句無分號端口方向端口類型端口名

實體名由設(shè)計者自由命名,用來表示被設(shè)計電路芯片的名稱,但是必須與VHDL程序的文件名稱相同。要與文件名一致;2VHDL基本結(jié)構(gòu)例如:GENERIC(wide:integer:=32);--說明寬度為32GENERIC(tmp:integer:=1ns);--說明延時1ns

類屬說明

類屬為設(shè)計實體與外界通信的靜態(tài)信息提供通道,用來規(guī)定端口的大小、實體中子元件的數(shù)目和實體的定時特性等。格式:

GENERIC(常數(shù)名:數(shù)據(jù)類型:設(shè)定值;∶常數(shù)名:數(shù)據(jù)類型:設(shè)定值);2VHDL基本結(jié)構(gòu)

端口方向:IN,OUT,INOUT,BUFFERINOUTINOUTBUFFER“OUT”和“BUFFER”都可定義輸出端口;若實體內(nèi)部需要反饋輸出信號,則輸出端口必須被設(shè)置為“BUFFER”,而不能為“OUT”。2VHDL基本結(jié)構(gòu)

同方向、同類型的端口可放在同一個說明語句中。ENTITYFull_adderISPORT(a,b,c:INBIT;

sum,carry:OUTBIT);ENDFull_adder;2VHDL基本結(jié)構(gòu)2.2結(jié)構(gòu)體(Architecture)ARCHITECTURE

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

實體名

IS

[聲明語句]BEGIN

功能描述語句END[結(jié)構(gòu)體名];用于聲明該結(jié)構(gòu)體將用到的信號、數(shù)據(jù)類型、常數(shù)、子程序和元件等。聲明的內(nèi)容是局部的。具體描述結(jié)構(gòu)體的功能和行為。

結(jié)構(gòu)體定義了設(shè)計單元具體的功能,描述了該基本設(shè)計單元的行為、元件和內(nèi)部的連接關(guān)系。

一個實體可對應(yīng)多個結(jié)構(gòu)體,每個結(jié)構(gòu)體代表該實體功能的不同實現(xiàn)方案或不同實現(xiàn)方式。同一時刻只有一個結(jié)構(gòu)體起作用,通過CONFIGURATION決定用哪個結(jié)構(gòu)體進行仿真或綜合。

在結(jié)構(gòu)體描述中,具體給出了輸入、輸出信號之間的邏輯關(guān)系。2VHDL基本結(jié)構(gòu)ARCHITECTUREBehaviorOFFreDeviderIS--結(jié)構(gòu)體定義SIGNALClk:Std_Logic;--信號聲明BEGINPROCESS(Clock)BEGINIFrising_edge(Clock)THENClk<=NOTClk;ENDIF;ENDPROCESS;Clkout<=Clk;END;功能描述語句進程順序語句2VHDL基本結(jié)構(gòu)2.3庫、程序包的調(diào)用LIBRARYIEEE;USEIEEE.Std_Logic_1164.ALL;LIBRARY庫名;USE庫名.程序包名.項目名;調(diào)用此程序包中所有的資源LIBRARYIEEE;USEIEEE.Std_Logic_1164.ALL;USEIEEE.Std_Logic_Arith.ALL;USEIEEE.Std_Logic_Unsigned.ALL;2VHDL基本結(jié)構(gòu)3VHDL語句3.1并行語句在結(jié)構(gòu)體中的執(zhí)行是同時進行,執(zhí)行順序與書寫順序無關(guān)。

并行信號賦值語句

簡單賦值語句目標信號名<=表達式目標信號的數(shù)據(jù)類型與右邊表達式一致ARCHITECTUREBehaviorOFFreDeviderISSIGNALClk:Std_Logic;BEGINPROCESS(Clock)BEGINIFrising_edge(Clock)THENClk<=NOTClk;ENDIF;ENDPROCESS;Clkout<=Clk;3VHDL語句

選擇信號賦值語句WITH選擇表達式

SELECT賦值目標信號

<=表達式1WHEN

選擇值1,表達式2WHEN

選擇值1,

表達式nWHEN

OTHERS;

選擇值要覆蓋所有可能情況,若不能一一指定,用OTHERS為其他情況找個出口;選擇值必須互斥,不能出現(xiàn)條件重復或重疊的情況。3VHDL語句LIBRARYIEEE;USEIEEE.Std_Logic_1164.ALL;ENTITYMUXISPORT(Data0,Data1,Data2,Data3:INStd_Logic_VECTOR(7DOWNTO0);

Sel:INStd_Logic_Vector(1DOWNTO0);

DOUT:OUTStd_Logic_Vector(7DOWNTO0));END;ARCHITECTUREDataFlowOFMUXISBEGIN

WITHSelSELECTDOUT<=Data0WHEN“00”,

Data1WHEN“01”,

Data2WHEN“10”,

Data3WHEN“11”,“00000000”WHENOTHERS;END;地址選線Sel輸出DOUT00Data001Data110Data211Data34X1多路選擇器3VHDL語句

條件信號賦值語句賦值目標信號

<=表達式1WHEN

賦值條件1ELSE

表達式2WHEN賦值條件2ELSE

表達式nWHEN賦值條件nELSE

表達式;各賦值語句有優(yōu)先級的差別,按書寫順序從高到低排列;各賦值條件可以重疊。3VHDL語句8輸入優(yōu)先編碼器I7I6I5A2I4A1I3A0I2I1I0高低優(yōu)先級LIBRARYIEEE;USEIEEE.Std_Logic_1164.ALL;ENTITYPriority_EncoderISPORT(I:INStd_Logic_VECTOR(7DOWNTO0);

A:OUTStd_Logic_Vector(2DOWNTO0));END;ARCHITECTUREDataFlowOFPriority_EncoderISBEGINA<=“111”WHENI(7)=‘1’ELSE“110”WHENI(6)=‘1’ELSE“101”WHENI(5)=‘1’ELSE“100”WHENI(4)=‘1’ELSE“011”WHENI(3)=‘1’ELSE“010”WHENI(2)=‘1’ELSE“001”WHENI(1)=‘1’ELSE“000”WHENI(0)=‘1’ELSE“111”;END;3VHDL語句

進程語句

進程本身是并行語句,但內(nèi)部是順序語句;進程只有在特定的時刻(敏感信號發(fā)生變化)才會被激活。

[進程標號:]PROCESS(敏感信號參數(shù)表)[聲明區(qū)];

BEGIN

順序語句

ENDPROCESS[進程標號];在進程中起作用的局部變量

一個進程可以有多個敏感信號,任一敏感信號發(fā)生變化都會激活進程

進程語句定義順序語句模塊,用于將從外部獲得的信號值,或內(nèi)部的運算數(shù)據(jù)向其他的信號進行賦值。3VHDL語句

進程的工作原理當某個敏感信號的值發(fā)生變化時,每個進程語句立即完成進程內(nèi)順序語句所定義的功能行為。執(zhí)行過程終止

順序語句所定義的功能行為的結(jié)果可以賦值給信號,并通過信號被其他的進程讀取或賦值。

進程與時鐘在每個上升沿啟動一次進程(執(zhí)行進程內(nèi)所有的語句)。上升沿描述:Clock’EVENTANDClock=‘1’下降沿描述:Clock’EVENTANDClock=‘0’上升沿描述:rising_edge(Clock)下降沿描述:falling_edge(Clock)3VHDL語句LIBRARYIEEE;USEIEEE.Std_Logic_1164.ALL;ENTITYFreDeviderISPORT(Clock:INStd_logic;Clkout:OUTStd_logic);END;ARCHITECTUREBehaviorOFFreDeviderISSIGNALClk:Std_Logic;BEGINPROCESS(Clock)--將時鐘作為進程的敏感信號BEGINIFrising_edge(Clock)THENClk<=NOTClk;--在時鐘上升沿執(zhí)行Clk<=NOTClkENDIF;ENDPROCESS;Clkout<=Clk;END;LIBRARYIEEE;USEIEEE.Std_Logic_1164.ALL;ENTITYCounterISPORT(RESET:INStd_Logic;--異步復位信號

Clock:INStd_logic;--時鐘信號

NUM:BUFFERIntegerRANGE0TO3);--計數(shù)器輸出值END;ARCHITECTUREBehaviorOFCounterISBEGINPROCESS(RESET,Clock)--將復位、時鐘作為進程的敏感信號BEGINIFRESET=‘1’THENNum<=0;--復位時Num清0ELSIFrising_edge(Clock)THENIFNum=3THENNum<=0;--如果Num=3就清0ELSENum<=Num+1;--否則自加1ENDIF;ENDIF;ENDPROCESS;END;仿真波形:3VHDL語句LIBRARYIEEE;USEIEEE.Std_Logic_1164.ALL;USEIEEE.Std_Logic_unsigned.ALL;ENTITYCounterISPORT(clr:INStd_Logic;inl:instd_logic_vector(3downto0);outl:outstd_logic_vector(3downto0)

--計數(shù)器輸出值);END;ARCHITECTUREBehaviorOFCounterISBEGINPROCESS(clr,inl)--進程的敏感信號BEGINIF(clr=‘1’orinl=“1001”)THENoutl<=“0000”;ELSEoutl<=inl+1;ENDIF;ENDPROCESS;END;重載符號,在庫IEEE.Std_Logic_unsigned中預先聲明LIBRARYIEEE;USEIEEE.Std_Logic_1164.ALL;USEIEEE.Std_Logic_unsigned.ALL;ENTITYCounterISPORT(clr,clk:INStd_Logic;cnt:bufferstd_logic_vector(3downto0)

--計數(shù)器輸出值);END;ARCHITECTUREBehaviorOFCounterISBEGINPROCESSBEGINWaituntilclk’eventandclk=‘1’;IF(clr=‘1’orcnt=9)THENcnt<=“0000”;ELSEcnt<=cnt+1;ENDIF;ENDPROCESS;END;Wait語句,信號賦值有寄存功能,引入時序器件

進程的啟動

當process的敏感信號參數(shù)表重沒有列出任何敏感信號時,進程通過wait語句啟動。ARCHITECTUREBehaviorOFstateISBEGINPROCESS--敏感信號列表為空BEGIN

waituntilClock;

--等待clock激活進程

IF(drive=‘1’)THEN

CASEoutputISWHENs1=>output<=s2;WHENs2=>output<=s3;WHENs3=>output<=s4;WHENs4=>output<=s1;ENDCASE;

ENDIF;ENDPROCESS;END;3VHDL語句

進程注意事項:

進程本身是并行語句,但內(nèi)部為順序語句;進程在敏感信號發(fā)生變化時被激活,在使用了敏感表的進程中不能含wait語句;在同一進程中對同一信號多次賦值,只有最后一次生效;在不同進程中,不可對同一信號進行賦值;一個進程不可同時對時鐘上、下沿敏感。進程中的信號賦值是在進程掛起時生效的,而變量賦值是即時生效。相對于結(jié)構(gòu)體而言,信號具有全局性,是進程間進行并行聯(lián)系的重要途徑。進程為綜合器支持,且其建模方式直接影響仿真和綜合結(jié)果,綜合后對應(yīng)于進程的硬件結(jié)構(gòu)對進程中所有可讀入信號都是敏感的。SIGNALA,B:IntegerRANGE0TO7;

:PROCESS(Clock)BEGINIFrising_edge(Clock)THEN:B<=A+1;

B<=B+1;

:ENDIF;ENDPROCESS;PROCESS(Clock)BEGINIFrising_edge(Clock)THEN:ELSIFfalling_edge(Clock)THEN;

:ENDIF;ENDPROCESS;

元件例化語句

元件例化引入一種連接關(guān)系,將預先設(shè)計好的實體定義為元件,并將此元件與當前設(shè)計實體中的端口相連接,從而為當前設(shè)計實體引入一個新的低一級的設(shè)計層次。Component元件名

port(端口名表);Endcomponent元件名;例化名:元件名portmap([元件端口名=>]連接端口名,…);要插在電路系統(tǒng)板上的芯片較大的電路系統(tǒng)電路板上準備接受芯片的插座元件定義語句元件例化語句列出對外通信的各端口名

當前系統(tǒng)與準備接入的元件對應(yīng)端口相連的通信端口。名字關(guān)聯(lián)方式:portmap語句中位置可以任意;位置關(guān)聯(lián)方式:端口名和關(guān)聯(lián)連接符號可省去,連接端口名的排列方式與所需例化的元件端口定義中的端口名相對應(yīng)。3VHDL語句LIBRARYIEEE;USEIEEE.Std_Logic_1164.ALL;ENTITYnd2ISPORT(a,b:INStd_Logic;c:outstd_logic);END;ARCHITECTUREnd2behvOFnd2ISBEGINy<=aNANDb;END;設(shè)計2輸入與非門:LIBRARYIEEE;USEIEEE.Std_Logic_1164.ALL;ENTITYord41ISPORT(a1,b1,c1,d1:INStd_Logic;z1:outstd_logic);END;ARCHITECTUREord41behvOFord41ISBEGINCOMPONENTnd2PORT(a,b:INStd_Logic;c:outstd_logic);EndCOMPONENT;SIGNALx,y:STD_LOGIC;BEGINu1:nd2PORTMAP(a1,b1,x);--位置關(guān)聯(lián)方式u2:nd2PORTMAP(a=>c1,c=>y,b=>d1);--名字關(guān)聯(lián)方式u3:nd2PORTMAP(x,y,c=>z1);--混和關(guān)聯(lián)方式END;元件例化:3VHDL語句1位二進制全加器內(nèi)部端口外部端口3VHDL語句外部端口內(nèi)部端口端口連線3.2順序語句

順序語句僅出現(xiàn)在進程和子程序中。順序語句綜合后,映射為實際的門電路,系統(tǒng)一上電,門電路開始工作。電路可實現(xiàn)邏輯上的順序執(zhí)行,實際上所有門電路是并行工作的。

賦值語句流程控制語句空操作語句等待語句子程序調(diào)用語句返回語句3VHDL語句

賦值語句ENTITYTEST_SignalISPORT(Reset,Clock:INStd_logic;NumA,NumB:OUTIntegerRANGE0TO255);END;ARCHITECTURETESTOFTEST_SignalISSIGNALA,B:IntegerRANGE0TO255;BEGINPROCESS(RESET,Clock)VARIABLEC:IntegerRANGE0TO255;

BEGINIFRESET=‘1’THENA<=0;B<=2;C:=0;ELSEIFrising_edge(Clock)THENC:=C+1;A<=C+1;B<=A+2;ENDIF;ENDPROCESS;NumA<=A;NumB<=B;END;3VHDL語句

流程控制語句IF語句:IF條件式THEN

順序語句ENDIF;IF條件式THEN

順序語句ELSE

順序語句ENDIF;IF條件式THEN

順序語句ELSEIF條件式2THEN

順序語句

ELSE

順序語句ENDIF;有優(yōu)先級3VHDL語句

用IF語句描述組合邏輯電路時,務(wù)必涵蓋所有的情況,否則綜合后將引入鎖存器!ENTITYEncoderISPORT(En:INStd_logic;I:INStd_logic_Vetor(7DOWNTO0);A:OUTStd_logic_Vetor(2DOWNTO0);Idle:OUTStd_logic);END;ARCHITECTUREBehaviorOFEncoderISBEGINPROCESS(En,I)BEGINIFEn=‘1’THENIFI(7)=‘1’THENA<=“111”;Idle<=‘0’;ELSIFIFI(6)=‘1’THENA<=“110”;Idle<=‘0’;

ELSIFIFI(4)=‘1’THENA<=“100”;Idle<=‘0’;ELSIFIFI(3)=‘1’THENA<=“011”;Idle<=‘0’;ELSIFIFI(2)=‘1’THENA<=“010”;Idle<=‘0’;ELSIFIFI(1)=‘1’THENA<=“001”;Idle<=‘0’;ELSIFIFI(0)=‘1’THENA<=“000”;Idle<=‘0’;ELSEA<=“000”;Idle<=‘1’;ENDIF;ENDPROCESS;END;引入ELSE,否則綜合器將引入鎖存器。3VHDL語句ENTITYCOMP_BADISPORT(a1:INBIT;b1:INBIT;q1:OUTBIT);END;ARCHITECTUREoneOFCOMP_BADISBEGINPROCESS(a1,b1)BEGINIFa1>b1THENq1<='1';ELSIFa1<b1THENq1<=‘0’;--未提及當a1=b1時,q1作何操作ENDIF;ENDPROCESS;END;不完整條件語句與時序電路3VHDL語句綜合結(jié)果:3VHDL語句ENTITYCOMP_GOODISPORT(a1:INBIT;b1:INBIT;q1:OUTBIT);END;ARCHITECTUREoneOFCOMP_GOODISBEGINPROCESS(a1,b1)BEGINIFa1>b1THENq1<='1';ELSEq1<='0';ENDIF;ENDPROCESS;END;完整條件語句3VHDL語句

CASE語句CASE

表達式IS

WHEN

選擇值[|選擇值]=>順序語句;

WHEN選擇值[|選擇值]=>順序語句;

WHENOTHERS=>順序語句;ENDCASE;

選擇值不可重復或重疊;

當CASE語句的選擇值無法覆蓋所有的情況時,要用OTHERS指定未能列出的其他所有情況的輸出值;3VHDL語句LIBRARYIEEE;USEIEEE.Std_Logic_1164.ALL;ENTITYMUXISPORT(Data0,Data1,Data2,Data3:INStd_Logic_VECTOR(7DOWNTO0);

Sel:INStd_Logic_Vector(1DOWNTO0);

DOUT:OUTStd_Logic_Vector(7DOWNTO0));END;

ARCHITECTUREDataFlowOFMUXISBEGIN

CASESelIS

WHEN“00”=>DOUT<=Data0;WHEN“01”=>DOUT<=Data1;WHEN“10”=>DOUT<=Data2;WHEN“11”=>DOUT<=Data3;WHENOTHERS=>DOUT<=“00000000”;

ENDCASE;

ENDPROCESS;END;3VHDL語句

LOOP語句[LOOP標號:]FOR

循環(huán)變量

IN

循環(huán)次數(shù)范圍LOOP

順序語句

ENDLOOP[LOOP標號];臨時變量,僅在此LOOP中有效,無需事先定義?!?TO….….DOWNTO…..從初值開始,每執(zhí)行完一次后遞增(遞減),直到終值為止。Sum:=0;FORiIN0TO9LOOPSum:=Sum+i;ENDLOOP;VARIABLELength:IntegerRANGE0TO15;FORiIN0TOLengthLOOP

ENDLOOP;循環(huán)次數(shù)只能用具體數(shù)值表達,否則不可綜合3VHDL語句

NEXT語句NEXT語句主要用在LOOP語句執(zhí)行中有條件或無條件轉(zhuǎn)向控制,跳向LOOP語句的起點。NEXT[循環(huán)標號][WHEN條件];NEXT;--無條件終止當前循環(huán),跳回到本次循環(huán)LOOP語句處,開始下一次循環(huán)。NEXTLOOP標號;--當有多重LOOP語句嵌套時,跳轉(zhuǎn)到指定標號LOOP語句處,重新開始執(zhí)行循環(huán)操作。NEXTLOOP標號WHEN條件表達式;--條件表達式為TRUE,執(zhí)行NEXT語句,進入跳轉(zhuǎn)操作,否則向下執(zhí)行。3VHDL語句EXIT語句EXIT語句主要用在LOOP語句執(zhí)行中有條件或無條件內(nèi)部轉(zhuǎn)向控制,跳向LOOP語句的終點,用于退出循環(huán)。當程序需要處理保護、出錯和警告狀態(tài)時,語句能提供一個快捷、簡便的方法。EXIT[循環(huán)標號][WHEN條件];EXIT;--無條件從當前循環(huán)中退出。EXITLOOP標號;--程序執(zhí)行退出動作無條件從循環(huán)標號所標明的循環(huán)中退出。EXITLOOP標號WHEN條件表達式;--條件表達式為TRUE,程序從當前循環(huán)中退出。3VHDL語句

NULL語句NULL為空操作語句,一般用于CASE中,表示在某些情況下對輸出不作任何改變,隱含鎖存信號。不能用于純組合邏輯電路。PROCESS(Clock)BEGINIFrising_edge(Clock)THEN

CASESelISWHEN…WHENOTHERS=>NULL;ENDCASE;ENDIF;ENDPROCESS;3VHDL語句

WAIT語句

在進程或過程中執(zhí)行到WAIT語句時,程序?qū)⒈粧炱?,并設(shè)置好再次執(zhí)行的條件。WAIT[ON信號表][UNTIL條件表達式][FOR時間表達式];WAIT;--未設(shè)置停止掛起的條件,表示永遠掛起。WAITON信號表;--敏感信號等待語句,敏感信號的變化將結(jié)束掛起,再次啟動進程。WAITUNTIL條件表達式;--條件表達式為中所含的信號發(fā)生變化,且滿足WAIT語句所設(shè)條件,則結(jié)束掛起,再次啟動進程。WAITFOR時間表達式;--超時等待語句,從執(zhí)行當前的WAIT語句開始,在此時間段內(nèi),進程處于掛起狀態(tài),超過這一時間段后,程序自動恢復執(zhí)行。3VHDL語句Configuration

配置名of

實體名is

配置說明End配置名;3.3配置語句

配置主要為頂層設(shè)計實體指定結(jié)構(gòu)體,或為參與例化的元件實體指定所希望的結(jié)構(gòu)體,以層次方式來對元件例化做結(jié)構(gòu)配置。3VHDL語句Configuration

配置名of

實體名is

配置說明End配置名;

為頂層設(shè)計實體指定結(jié)構(gòu)體Entitynandisport(a,b:instd_logic;c:outstd_logic);Endentitynand;Architectureoneofnandisbeginc<=not(aandb);Endarchitectureone;Architecturetwoofnandisbeginc<=‘1’when(a=‘0’)and(b=‘0’)else‘1’when(a=‘0’)and(b=‘1’)else‘1’when(a=‘1’)and(b=‘0’)else‘0’when(a=‘1’)and(b=‘1’)else‘0’;Endarchitecturetwo;Configurationsecondofnandisfortwoendfor;Endsecond;Configurationfirstofnandisforoneendfor;Endfirst;3VHDL語句

用實體nand構(gòu)成更高層次設(shè)計實體中的元件,由配置語句指定元件實體nand使用哪個結(jié)構(gòu)體。LIBRARYIEEE;USEIEEE.Std_Logic_1164.ALL;Entityrsisport(r,s:instd_logic;q,qf:outstd_logic);Endentityrs;ArchitecturersfofrsisComponentnandPORT(a,b:INStd_Logic;c:outstd_logic);EndComponent;BEGINu1:nandPORTMAP(a=>s,b=>qf,c=>q);u2:nandPORTMAP(a=>q,b=>r,c=>qf);Configurationselofrsisforrsfforu1,u2:nand

useentitywork.nand(two);endfor;endfor;Endsel;

為參與例化的元件實體指定所希望的結(jié)構(gòu)體,以層次方式來對元件例化做結(jié)構(gòu)配置。3VHDL語句4狀態(tài)機在VHDL中的實現(xiàn)4.1Moore狀態(tài)機的VHDL描述輸出僅取決于其所處的狀態(tài)。LIBRARYIEEE;USEIEEE.Std_Logic_1164.ALL;ENTITYMooreISPORT(Reset,Clock,DIN:INStd_Logic;

DOUT:OUTStd_Logic_Vetor(2DOWNTO0));END;ARCHITECTUREMooremachineOFMooreISTYPEState_typeIS(S0,S1,S2,S3);--定義State_type為枚舉型數(shù)據(jù)類型SIGNALState:State_type;BEGINChange_State:PROCESS(Reset,Clock)--時序邏輯進程BEGINIFReset=‘1’THENState<=S0;4狀態(tài)機在VHDL中的實現(xiàn)ELSEIFrising_edge(Clock)THENCASEStateISWHENS0=〉IFDIN=‘1’THENState<=S1;ENDIF;

WHENS1=〉IFDIN=‘1’THENState<=S2;ENDIF;

WHENS2=〉IFDIN=‘1’THENState<=S3;ENDIF;

WHENS3=〉IFDIN=‘1’THENState<=S0;

ELSEState<=S1;

ENDIF;

ENDCASE;

ENDIF;ENDPROCESS;--定義輸出進程,組合邏輯Output_Process:PROCESS(State)BEGINCASEStateISWHENS0=>DOUT<=“001”;

WHENS1=>DOUT<=“011”;

WHENS2=>DOUT<=“101”;

WHENS3=>DOUT<=“111”;

ENDCASE;

ENDPROCESS;END;仿真波形圖:4狀態(tài)機在VHDL中的實現(xiàn)時鐘同步Moore狀態(tài)機結(jié)構(gòu)圖:4狀態(tài)機在VHDL中的實現(xiàn)LIBRARYIEEE;USEIEEE.Std_Logic_1164.ALL;ENTITYMooreISPORT(Reset,Clock,DIN:inStd_Logic;

DOUT:outStd_Logic_Vetor(2DOWNTO0));END;ARCHITECTUREMooremachineOFMooreISTYPEState_typeIS(S0,S1,S2,S3);

SIGNALPresentState,NextState:State_type;--定義狀態(tài)轉(zhuǎn)換信號

BEGINState_Reg:PROCESS(Reset,Clock)--狀態(tài)寄存器

BEGINIFReset=‘1’THEN--異步復位

PresentState<=S0;

ELSEIFrising_edge(Clock)THENPresentState<=NextState;--時鐘上升沿,轉(zhuǎn)換至下一狀態(tài)

ENDIF;

ENDPROCESS;4狀態(tài)機在VHDL中的實現(xiàn)Change_State:PROCESS(PresentState,DIN)--組合邏輯進程BEGINCASEPresentStateISWHENS0=〉ifDIN=‘1’thenNextState<=S1;

elseNextState<=S0;endif;

DOUT<=“001”;

WHENS1=〉ifDIN=‘1’thenNextState<=S2;

elseNextState<=S1;endif;

DOUT<=“011”;

WHENS2=〉ifDIN=‘1’thenNextState<=S3;

elseNextState<=S2;endif;

DOUT<=“101”;

WHENS3=〉ifDIN=‘1’thenNextState<=S0;

elseNextState<=S1;endif;

DOUT<=“111”;

ENDCASE;ENDPROCESS;

溫馨提示

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

評論

0/150

提交評論