第3章硬件描述語(yǔ)言基礎(chǔ)_第1頁(yè)
第3章硬件描述語(yǔ)言基礎(chǔ)_第2頁(yè)
第3章硬件描述語(yǔ)言基礎(chǔ)_第3頁(yè)
第3章硬件描述語(yǔ)言基礎(chǔ)_第4頁(yè)
第3章硬件描述語(yǔ)言基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩430頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡(jiǎn)介

第3章硬件描述語(yǔ)言基礎(chǔ)

內(nèi)容提要:3.1VHDL基本結(jié)構(gòu)3.2VHDL的對(duì)象、數(shù)據(jù)類型及運(yùn)算操作符3.3VHDL的主要描述語(yǔ)句3.4VHDL的預(yù)定義屬性3.5有限狀態(tài)機(jī).3.1VHDL的基本結(jié)構(gòu)

一個(gè)完整的VHDL程序(源代碼)通常包括以下5個(gè)部分:

實(shí)體(Entity):用于描述所設(shè)計(jì)的系統(tǒng)的外部信號(hào)。構(gòu)造體(Architecture):用于描述系統(tǒng)內(nèi)部的結(jié)構(gòu)和行為配置(Configuration):用于從庫(kù)中選取所需單元來(lái)組成系統(tǒng)設(shè)計(jì)的不同版本。包集合或程序包(Package):存放個(gè)設(shè)計(jì)模塊都能共享的數(shù)據(jù)類型、常數(shù)和子程序等。庫(kù)(Library):存放已經(jīng)編譯的實(shí)體、構(gòu)造體、包集合和配置??梢杂稍O(shè)計(jì)者生成和由ASIC芯片制造商提供。.1.USE定義區(qū)2.PACKAGE定義區(qū)3.ENTITY定義區(qū)4.ARCHITECTURE定義區(qū)定義元件庫(kù)5.CONFIGURATION定義區(qū)定義使用那些自定義元件庫(kù)定義電路實(shí)體的外觀:I/O接口的規(guī)格描述電路內(nèi)部的邏輯功能決定那一個(gè)architecture被使用.例:與非門(mén)的VHDL程序。Entitynand_2is---------------定義一個(gè)實(shí)體Port(a,b:instd_logic;--描述輸入信號(hào)y:outstd_logic);--描述輸出信號(hào)Endnand_2;Libraryieee;------------------IEEE庫(kù)說(shuō)明Useieee.std_Logic_1164.all;----定義元件庫(kù)ARCHITECTURErtlOFnand_2ISBEGIN-------------結(jié)構(gòu)體說(shuō)明y<=NOT(aANDb);ENDrtl;.第3章硬件描述語(yǔ)言基礎(chǔ)

內(nèi)容提要:

3.1VHDL基本結(jié)構(gòu)?

3.1.1VHDL設(shè)計(jì)的基本單元及結(jié)構(gòu)3.1.2結(jié)構(gòu)體的描述形式3.1.3VHDL結(jié)構(gòu)體的子結(jié)構(gòu)3.1.4庫(kù)、程序包和配置

3.2VHDL的對(duì)象、數(shù)據(jù)類型及運(yùn)算操作符3.3VHDL的主要描述語(yǔ)句3.4VHDL的預(yù)定義屬性3.5有限狀態(tài)機(jī).3.1.1VHDL設(shè)計(jì)的基本單元及結(jié)構(gòu)

VHDL設(shè)計(jì)中的基本單元就是設(shè)計(jì)實(shí)體,它用以描述完整系統(tǒng)、電路板、芯片、邏輯單元或門(mén)電路。設(shè)計(jì)實(shí)體的組成:

實(shí)體說(shuō)明(EntityDeclaration):描述一個(gè)設(shè)計(jì)的外貌,即對(duì)外的輸入輸出接口以及一些用于結(jié)構(gòu)體的參數(shù)定義。

結(jié)構(gòu)體或構(gòu)造體(ArchitectureBody):描述的是設(shè)計(jì)的行為和結(jié)構(gòu),指定輸入和輸出之間的行為。.設(shè)計(jì)實(shí)體、實(shí)體說(shuō)明和結(jié)構(gòu)體之間的關(guān)系

實(shí)體說(shuō)明結(jié)構(gòu)體(1)

設(shè)計(jì)實(shí)體實(shí)體說(shuō)明

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

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

結(jié)構(gòu)體n(2)…

設(shè)計(jì)實(shí)體.Entityand_gateis

Port(a:inbit;b:inbit;c:outbit);Endand_gate;Architecturebehaveofand_gateisBeginc<=aandb;Endbehave;例一個(gè)二輸入與門(mén)電路的VHDL描述。實(shí)體說(shuō)明結(jié)構(gòu)體實(shí)體名保留字說(shuō)明:VHDL是不區(qū)分大小寫(xiě)的??筛鶕?jù)習(xí)慣書(shū)寫(xiě)。.

①實(shí)體說(shuō)明功能:描述設(shè)計(jì)模塊的輸入/輸出信號(hào)或引腳,并給出設(shè)計(jì)模塊與外界的接口。實(shí)體類似一個(gè)“黑盒”,實(shí)體描述了“黑盒”的輸入輸出口。格式:

Entity實(shí)體名 is[Generic(類屬表);][Port(端口表);]End[entity]實(shí)體名;注意:實(shí)體名要一致,必須與編程文件名一致。其中[entity]選項(xiàng)是VHDL-93語(yǔ)法的要求。類屬參數(shù)說(shuō)明端口說(shuō)明.Entity__entity_nameis

Generic(__parameter_name:string:=__default_value; __parameter_name:integer:=__default_value);

Port( __input_name,__input_name:instd_logic; __bidir_name,__bidir_name:inoutstd_logic; __output_name,__output_name:outstd_logic);End__entity_name;類屬參數(shù)說(shuō)明端口說(shuō)明.1)實(shí)體名實(shí)體名實(shí)際上是器件名,最好根據(jù)相應(yīng)的電路功能確定。如4位2進(jìn)制計(jì)數(shù)器用counter4b;8位加法器用add8b;3/8譯碼器用ym_38。實(shí)體名必須與程序的文件名相同,否則無(wú)法編譯。實(shí)體名不能用工具庫(kù)中定義好的元件名。實(shí)體名不能用中文,也不能用數(shù)字開(kāi)頭。.2)類屬參數(shù)說(shuō)明作用:用以將信息參數(shù)傳遞到實(shí)體。如定義端口寬度、器件延遲時(shí)間等。一般格式:其中:常數(shù)名由設(shè)計(jì)者確定;數(shù)據(jù)類型通常取integer或time等;提供時(shí)間參數(shù)、總線寬度等信息。Generic(常數(shù)名:數(shù)據(jù)類型[:=設(shè)定值; ……);如:Generic(awidth:integer:=3; timex:time);.使用類屬參數(shù)說(shuō)明語(yǔ)句易于使設(shè)計(jì)具有通用性。例:在電路中多次使用二輸入與門(mén)電路,但延遲時(shí)間不同。二輸入與門(mén)電路的VHDL程序。Entityand_gateis

Generic(delay:time);Port(a:inbit;b:inbit;c:outbit);Endand_gate;Architecturebehaveofand_gateisBeginc<=aandbafter(delay);Endbehave;.現(xiàn)在要求實(shí)現(xiàn)這樣一個(gè)設(shè)計(jì):由三個(gè)二輸入與門(mén)電路組成下圖所示的四輸入與門(mén)功能,要求門(mén)1的延遲時(shí)間為5ns,門(mén)2的延遲時(shí)間為6ns,門(mén)2的延遲時(shí)間為7ns。.其VHDL程序如下:Entityand4isPort(a,b,c,d:inbit;q:outbit);Endand4;Architecturebehaveofand4iscomponentand_gate

Generic(delay:time);Port(a:inbit;b:inbit;c:outbit);Endcomponent;Signalq1,q2:bit;BeginU1:and_gategenericmap(5ns)Portmap(a,b,q1);U2:and_gategenericmap(6ns)Portmap(c,d,q2);U3:and_gategenericmap(7ns)Portmap(q1,q2,q);Endbehave;.3)端口說(shuō)明說(shuō)明內(nèi)容

端口說(shuō)明是用來(lái)描述設(shè)計(jì)實(shí)體與外部的接口,是對(duì)端口名稱、數(shù)據(jù)類型和模式(方向)的描述。每一個(gè)輸入輸出信號(hào)都稱為端口,對(duì)應(yīng)于電路圖上的一個(gè)引腳。格式Port(input_name,input_name:instd_logic;input_vector_name:instd_logic_vector(__highdownto__low);bidir_name,bidir_name:inout

std_logic;output_name,output_name:out

std_logic);端口名稱端口模式數(shù)據(jù)類型.a.端口名稱

是端口的標(biāo)識(shí)符,由字母、數(shù)字和下劃線組成,其命名規(guī)則為:第一個(gè)字符必須是字母;下劃線不能連用;最后一個(gè)字符不能是下劃線;不區(qū)分大小寫(xiě);命名不能與保留字相同。

如:不合法的例子

_clk,8mclk,data__bus,buffer,data_.b.端口模式(方向):在端口說(shuō)明中,模式有五種:輸入、輸出、雙向、緩沖和鏈接。輸入模式(in):信號(hào)自端口進(jìn)入實(shí)體,而實(shí)體內(nèi)部的信號(hào)不能從該端口輸出。輸出模式(out):信號(hào)從實(shí)體內(nèi)部經(jīng)該端口輸出,而不能通過(guò)該端口向?qū)嶓w內(nèi)部輸入信號(hào)。雙向模式(inout):可以輸入也可以輸出,實(shí)體內(nèi)部的信號(hào)和外部向?qū)嶓w內(nèi)部輸入的信號(hào)都可以經(jīng)過(guò)該端口。緩沖模式(buffer):可以作為實(shí)體內(nèi)部的驅(qū)動(dòng)即用于實(shí)體內(nèi)部的反饋。只能連接內(nèi)部信號(hào)和具有緩沖模式的端口。鏈接模式(linkage):用來(lái)說(shuō)明端口無(wú)指定方向,可以與任意方向的信號(hào)相連。.說(shuō)明:1)雙向模式可以代替輸入、輸出和緩沖模式的任何一種。2)“out”和“buffer”都可以定義輸出端口。其區(qū)別:圖(a):只能用于輸出。圖(b):構(gòu)造體內(nèi)部也要使用該信號(hào)時(shí),只能定義成“buffer”。.Port(d0,d1,sel:inbit;q:outbit;bus:outbit_vector(7downto0));c.數(shù)據(jù)類型在VHDL語(yǔ)言中有10種數(shù)據(jù)類型。在邏輯電路中只用到兩種:bit(位)和bit_vector(位向量)。bit:為位邏輯數(shù)據(jù)類型,信號(hào)取值是邏輯值“1”和“0”。bit_vector:取值是一組二進(jìn)制位的值。如:8位數(shù)據(jù)總線數(shù)端口.Libraryieee;Useieee.std_logic_1164.all;EntitymuisPort(d0,d1,sel:instd_logic;q:outstd_logic;bus:outstd_logic_vector(7downto0));3)在某些VHDL程序中,數(shù)據(jù)類型的說(shuō)明符號(hào)有所不同,如:.實(shí)體舉例Entityblack_boxisGeneric(constantwidth:integer:=7;);Port( clk,rst:instd_logic; d:instd_logic_vector(widthdownto0); q:out std_logic_vector(widthdownto0); co:outstd_logic);Endblack_box;黑盒rstd[7:0]clkq[7:0]co關(guān)鍵字類屬參量端口定義端口模式端口數(shù)據(jù)類型實(shí)體結(jié)束.練習(xí)一

編寫(xiě)包含以下內(nèi)容的實(shí)體代碼: 端口D為12位輸入總線; 端口OE和CLK都是1位輸入; 端口AD為12位雙向總線; 端口A為12位輸出總線; 端口INT是1位輸出; 端口AS是一位輸出同時(shí)被用作內(nèi)部反饋。my_designd[11:0]oeclkad[11:0]a[11:0]intas.練習(xí)一答案Libraryieee;Useieee.std_logic_1164.ALL;Entitymy_designisPORT(d:instd_logic_vector(11downto0); oe,clk:instd_logic; ad:inoutstd_logic_vector(11downto0); a:outstd_logic_vector(11downto0); int:outstd_logic; as:bufferstd_logic);Endmy_design;my_designd[11:0]oeclkad[11:0]a[11:0]intas.練習(xí)

1、編寫(xiě)包含全加器的實(shí)體代碼。2、編寫(xiě)4選1數(shù)據(jù)選擇器的實(shí)體代碼。 Full_adderabcsumcoMux_41absycd.②結(jié)構(gòu)體通過(guò)若干并行語(yǔ)句來(lái)描述設(shè)計(jì)實(shí)體的邏輯功能(行為描述)或內(nèi)部電路結(jié)構(gòu)(結(jié)構(gòu)描述),從而建立設(shè)計(jì)實(shí)體輸出與輸入之間的關(guān)系。一個(gè)設(shè)計(jì)實(shí)體可以有多個(gè)結(jié)構(gòu)體。結(jié)構(gòu)體的結(jié)構(gòu):

Architecture<結(jié)構(gòu)體名>of<實(shí)體名>is[結(jié)構(gòu)體說(shuō)明部分];Begin<并行處理語(yǔ)句>;End[architecture]<結(jié)構(gòu)體名>;.Architectureaof__entity_nameis

Signalsignal_name:std_logic;

Signalsignal_name:std_logic;Begin

Enda;結(jié)構(gòu)體說(shuō)明并行處理語(yǔ)句--ProcessStatement;--ConcurrentProcedureCall;--ConcurrentSignalAssignment;--ConditionalSignalAssignment;--SelectedSignalAssignment; --ComponentInstantiationStatement;--GenerateStatement;.結(jié)構(gòu)體名

對(duì)結(jié)構(gòu)體的命名,是結(jié)構(gòu)體的唯一標(biāo)識(shí)符。Of后面的實(shí)體名表明了該結(jié)構(gòu)的所對(duì)應(yīng)的實(shí)體。結(jié)構(gòu)體的名稱可由設(shè)計(jì)者自己命名,通常把結(jié)構(gòu)體命名為behavioral(行為)、dataflow(數(shù)據(jù)流)或者structural(結(jié)構(gòu))。結(jié)構(gòu)體說(shuō)明結(jié)構(gòu)體說(shuō)明用于對(duì)結(jié)構(gòu)體內(nèi)部所使用的信號(hào)、常數(shù)、數(shù)據(jù)類型和函數(shù)進(jìn)行定義。最常見(jiàn)的是對(duì)內(nèi)部流動(dòng)的信號(hào)的定義。但不能定義變量。結(jié)構(gòu)體說(shuō)明部分位于結(jié)構(gòu)體architecture和begin之間。格式

Signal

signal_name:bit;保留字信號(hào)名數(shù)據(jù)類型.并行處理語(yǔ)句并行處理語(yǔ)句具體地描述了結(jié)構(gòu)體的行為和結(jié)構(gòu)。并行處理語(yǔ)句位于結(jié)構(gòu)體中begin和end之間。并行語(yǔ)句有五種類型,可以把它們看成結(jié)構(gòu)體的五種子結(jié)構(gòu)。這五種語(yǔ)句結(jié)構(gòu)本身是并行語(yǔ)句,但內(nèi)部可能含有并行運(yùn)行的邏輯描述語(yǔ)句或順序運(yùn)行的邏輯描述語(yǔ)句,如進(jìn)程內(nèi)部包含的即為順序語(yǔ)句。五種語(yǔ)句結(jié)構(gòu)分別為塊語(yǔ)句、進(jìn)程語(yǔ)句、信號(hào)賦值語(yǔ)句、子程序調(diào)用語(yǔ)句和元件例化語(yǔ)句。例:進(jìn)程(process)語(yǔ)句。[進(jìn)程標(biāo)號(hào):]process[(敏感信號(hào)表)][is] [進(jìn)程語(yǔ)句說(shuō)明部分];

Begin <進(jìn)程語(yǔ)句部分>;

Endprocess[進(jìn)程標(biāo)號(hào)];.Libraryieee;Uselibraryieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;Entityadderisport(q1:instd_logic_vector(7downto0);q2:instd_logic_vector(7downto0);cs:instd_logic;q:outstd_logic_vector(7downto0));Endadder;Architecturebehaveofadderisbegin

process(cs)beginif(cs=‘1’)thenq<=q1+q2;endif;endprocess;Endbehave;實(shí)體描述結(jié)構(gòu)體描述例:.結(jié)構(gòu)體結(jié)構(gòu)圖結(jié)構(gòu)體說(shuō)明語(yǔ)句功能描述語(yǔ)句塊語(yǔ)句進(jìn)程語(yǔ)句信號(hào)賦值語(yǔ)句子程序調(diào)用語(yǔ)句元件例化語(yǔ)句由若干并行執(zhí)行語(yǔ)句包裝在一起形成一個(gè)子模塊。定義順序語(yǔ)句模塊,用從外部獲得的信號(hào)值,或內(nèi)部的運(yùn)算數(shù)據(jù)向其它的信號(hào)進(jìn)行賦值。將設(shè)計(jì)實(shí)體內(nèi)的處理結(jié)果向定義的信號(hào)或界面端口進(jìn)行賦值用以調(diào)用過(guò)程或函數(shù),并將獲得的結(jié)果賦值于信號(hào)。元件調(diào)用,用來(lái)調(diào)用另一個(gè)實(shí)體所描述的電路。.實(shí)體和結(jié)構(gòu)體之間的關(guān)系Input1InputnOutput1Outputn實(shí)體AMUX_Out2SelBCD.第3章硬件描述語(yǔ)言基礎(chǔ)

內(nèi)容提要:3.1VHDL基本結(jié)構(gòu)

3.1.1VHDL設(shè)計(jì)的基本單元及結(jié)構(gòu)

?

3.1.2結(jié)構(gòu)體的描述形式

3.1.3VHDL結(jié)構(gòu)體的子結(jié)構(gòu)3.1.4庫(kù)、程序包和配置

3.2VHDL的對(duì)象、數(shù)據(jù)類型及運(yùn)算操作符3.3VHDL的主要描述語(yǔ)句3.4VHDL的預(yù)定義屬性3.5有限狀態(tài)機(jī)

.共有4種:結(jié)構(gòu)(Structure)描述方式數(shù)據(jù)流(DateFlow)描述方式

行為(BehaviorProcess)描述方式混合描述方式采用后兩種描述的可以進(jìn)行邏輯綜合,而采用行為的大部分只用于系統(tǒng)仿真,少數(shù)的也可以進(jìn)行邏輯綜合。3.1.2結(jié)構(gòu)體的描述形式.①BehaviorProcess描述architectureoneofmux21isbeginy<=awhens='0'elseb;endone;真值表所謂行為描述,是對(duì)設(shè)計(jì)實(shí)體的數(shù)學(xué)模型進(jìn)行描述。當(dāng)要描述一個(gè)設(shè)計(jì)實(shí)體的行為時(shí),只需要用一組狀態(tài)來(lái)描述即可。即只描述所希望電路的功能或者電路行為(輸入輸出間轉(zhuǎn)換的行為),而沒(méi)有指明或涉及實(shí)現(xiàn)這些行為的硬件結(jié)構(gòu)。與數(shù)字電路中的真值表描述相似。如:.行為描述抽象程度遠(yuǎn)遠(yuǎn)高于數(shù)據(jù)流和結(jié)構(gòu)描述方式。行為描述類似于高級(jí)編程語(yǔ)言,當(dāng)要描述一個(gè)設(shè)計(jì)實(shí)體的行為時(shí),只需要用一組狀態(tài)來(lái)描述即可。優(yōu)點(diǎn)在于只需描述清楚輸入與輸出的關(guān)系,而不需要關(guān)注設(shè)計(jì)功能的門(mén)級(jí)描述。在行為描述方式的程序中大量采用算術(shù)運(yùn)算、關(guān)系運(yùn)算、慣性延時(shí)、傳輸延時(shí)等難于進(jìn)行邏輯綜合和不能進(jìn)行邏輯綜合的語(yǔ)句。一般用于系統(tǒng)模型的仿真或者系統(tǒng)工作原理的仿真。在VHDL中存在一些專門(mén)用于描述系統(tǒng)行為的語(yǔ)句。.1)代入語(yǔ)句是VHDL進(jìn)行行為描述的最基本的語(yǔ)句。其格式為:信號(hào)量<=敏感信號(hào)量表達(dá)式如:a<=b;z<=anor(bnandc);具有延時(shí)時(shí)間的代入語(yǔ)句:

a<=bafter5ns;例:二輸入與門(mén)

entityand2isport(a,b:inbit;c:outbit);endand2;architectureand2_behavofand2isBeginc<=aandbafter5ns;Endand_behav;.例:四選一電路的行為描述方法Libraryieee;Useieee.std_logic_1164.all;Entitymux4isport(i0,i1,i2,i3,a,b:instd_logic;q:outstd_logic);Endmux4;Architecturebehavofmux4issignalsel:integer;Beginwithselselect.

q<=i0after10nswhen0,i1after10nswhen1,i2after10nswhen2,i3after10nswhen3,‘X’after10nswhenothers;sel<=0whena=‘0’andb=‘0’else1whena=‘1’andb=‘0’else2whena=‘0’andb=‘1’else3whena=‘1’andb=‘1’else4;Endbehav;在第二個(gè)語(yǔ)句中,a和b是信號(hào)敏感量,當(dāng)a和b任何一個(gè)值發(fā)生變化,該語(yǔ)句被執(zhí)行;第一個(gè)語(yǔ)句的信號(hào)敏感量為sel。這兩個(gè)語(yǔ)句是可以并發(fā)執(zhí)行。.

2)延時(shí)語(yǔ)句在VHDL中有兩種延時(shí):慣性延時(shí)和傳輸延時(shí)。a.慣性延時(shí)在VHDL中,慣性延時(shí)是缺省的,不作特別的說(shuō)明,產(chǎn)生的延時(shí)是慣性延時(shí)。在慣性模型中,系統(tǒng)和器件的輸出信號(hào)發(fā)生變化必須有一段時(shí)間的延時(shí)。稱為系統(tǒng)和器件的慣性或慣性延時(shí)。其特點(diǎn):當(dāng)一個(gè)系統(tǒng)或器件的輸入信號(hào)變化周期小于慣性延時(shí)時(shí),其輸出保持不變。幾乎所有器件都存在慣性延時(shí),在代入語(yǔ)句總要加上慣性延時(shí)時(shí)間的說(shuō)明。如:b<=aafter10ns;慣性延時(shí)只在行為仿真時(shí)有意義,邏輯綜合時(shí)將被忽略。.b.傳輸延時(shí)在VHDL中,傳輸延時(shí)是不可缺省的,必須在語(yǔ)句中明確說(shuō)明。常用于描述總線延時(shí)、連接線的延時(shí)及ASIC芯片中的路徑延時(shí)。具有傳輸延時(shí)的代入語(yǔ)句。如:b<=transportaafter20ns;ab20ns.3)類屬(Generic)說(shuō)明語(yǔ)句類屬說(shuō)明的一般格式:

Generic(常數(shù)名:數(shù)據(jù)類型[:設(shè)定值]{;常數(shù)名:數(shù)據(jù)類型[:設(shè)定值]});類屬參量是一種端口界面常數(shù),常以一種說(shuō)明的形式放在實(shí)體或塊結(jié)構(gòu)體的說(shuō)明部分。類屬為所說(shuō)明的環(huán)境提供了一種靜態(tài)信息通道。類屬與常數(shù)不同,常數(shù)只能從設(shè)計(jì)實(shí)體的內(nèi)部得到賦值,且不能再改變,而類屬的值可以由設(shè)計(jì)實(shí)體外部提供。用于設(shè)計(jì)實(shí)體和其外部環(huán)境通信的參數(shù)和傳遞信息。從環(huán)境外部動(dòng)態(tài)地接受賦值,類似于端口PORT說(shuō)明。.[例]Libraryieee;Useieee.std_logic_1164.all;Entityandnisgeneric(n:integer);--定義類屬參數(shù)及其類型port(a:instd_logic_vector(n-1downto0);--限制矢量長(zhǎng)度c:outstd_logic);Endandn;ArchitecturebehavofandnisBeginprocess(a)variableint:std_logic;beginint:=‘1’;foriina’length-1downto0loopifa(i)=‘0’thenint:=‘0’;endif;endloop;c<=int;endprocess;Endbehav;.Libraryieee;Useieee.std_logic_1164.all;Entityexnisport(d1,d2,d3,d4,d5,d6,d7:instd_logic;q1,q2:outstd_logic);Endexn;Architectureexn_behavofexniscomponentandn--元件調(diào)用聲明generic(n:integer);port(a:instd_logic_vector(n-1downto0);c:outstd_logic);endcomponentBeginu1:andngenericmap(n=>2);--定義類屬變量,賦值為2portmap(a(0)=>d1,a(1)=>d2,c=>q1);u2:andngenericmap(n=>5);portmap(a(0)=>d3,a(1)=>d4,a(2)=>d5,a(3)=>d6,a(4)=>d7,c=>q2);Endexn_behav;例:.4)類屬映射語(yǔ)句

格式為:genericmap(類屬表)描述相應(yīng)元件類屬參數(shù)間的銜接和傳送方式。用于設(shè)計(jì)從外部端口改變?cè)?nèi)部參數(shù)或結(jié)構(gòu)規(guī)模的元件,或稱類屬元件,這些元件在例化中特別方便,在改變電路結(jié)構(gòu)或元件升級(jí)方面顯得尤為便捷。與端口映射語(yǔ)句portmap()具有相似的功能和使用方法,類屬參數(shù)銜接表達(dá)方式相同。.全加器:ABCinSCoBACinSCo0000001010100101100100110011011010111111真值表:規(guī)律:S:1010Co:1100add1.Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;Entityadd1isport(A:instd_logic;B:instd_logic;Cin:instd_logic;Co:outstd_logic;S:outstd_logic);Endadd1;實(shí)現(xiàn)全加器功能的行為描述:Architecturebehaveofadd1isBeginprocess(A,B,Cin)variablen:integerrange0to3;constantS_vector:std_logic_vector(0to3):=“1010”;constantCo_vector:std_logic_vector(0to3):=“1100”;beginn:=0;if(A=‘1’)thenn:=n+1;endif;if(B=‘1’)thenn:=n+1;endif;if(Cin=‘1’)thenn:=n+1;endif;S<=S_vector(n);Co<=Co_vector(n);Endprocess;Endbehave;.程序仿真結(jié)果.architectureoneofmux21isbeginy<=(aand(nots)or(bands);endone;②DateFlow描述

(也稱為寄存器傳輸描述方式)邏輯函數(shù)式類似于寄存器傳輸級(jí)的方式描述數(shù)據(jù)的傳輸和變換,與數(shù)字電路中的邏輯表達(dá)式描述相似。數(shù)據(jù)流描述方式是對(duì)從信號(hào)到信號(hào)的數(shù)據(jù)流的路徑形式的描述,因此很容易進(jìn)行邏輯綜合。要對(duì)信號(hào)的流動(dòng)路徑進(jìn)行描繪,要求對(duì)設(shè)計(jì)實(shí)體以及內(nèi)部電路要有一定的認(rèn)識(shí)。.例:全加器邏輯描述.Libraryieee;Useieee.std_logic_1164.all;Entityadd1isport(A:instd_logic;B:instd_logic;Cin:instd_logic;Co:outstd_logic;S:outstd_logic);Endadd1;Architecturedataflowofadd1isSignaltmp1,tmp2:std_logic;Begintmp1<=AxorB;tmp2<=tmp1andCin;S<=tmp1xorCin;Co<=tmp2or(AandB);Enddataflow;實(shí)現(xiàn)全加器功能的數(shù)據(jù)流描述.程序仿真結(jié)果.③

Structure描述根據(jù)硬件結(jié)構(gòu)描述該設(shè)計(jì)單元,即描述該硬件是如何構(gòu)成的,類似于數(shù)字電路中的邏輯圖描述。

結(jié)構(gòu)描述方式就是在多層次的設(shè)計(jì)中,通過(guò)調(diào)用庫(kù)中的元件或是已經(jīng)設(shè)計(jì)好的模塊來(lái)完成設(shè)計(jì)實(shí)體功能的描述。即高層次的設(shè)計(jì)模塊調(diào)用低層次的設(shè)計(jì)模塊。結(jié)構(gòu)體中描述元件(或模塊)和元件(或模塊)之間的互連關(guān)系,就像網(wǎng)表一樣。邏輯圖.architectureoneofmux21issingled,e:bit;begind<=aand(not)s;e<=bands;y<=dore;endone;例.1)結(jié)構(gòu)描述步驟:例化元件的創(chuàng)建創(chuàng)建一個(gè)具有所需功能的項(xiàng)目,并將其保存在工作庫(kù)中。元件的說(shuō)明在引用例化元件時(shí),在結(jié)構(gòu)體說(shuō)明部分進(jìn)行例化元件的說(shuō)明。元件的例化在使用元件時(shí),采用元件例化語(yǔ)句對(duì)要引用的元件進(jìn)行例化。如portmap。.2)元件例化語(yǔ)句語(yǔ)句格式:

Component元件名

is--元件定義語(yǔ)句

Generic(類屬表);

Port(端口名表);

Endcomponent元件名;例化名:元件名portmap(

--元件例化語(yǔ)句

[端口名=>]連接端口,…);元件定義語(yǔ)句相當(dāng)于對(duì)一個(gè)現(xiàn)成的設(shè)計(jì)實(shí)體進(jìn)行封裝,使其只留出對(duì)外的接口界面。類屬表可列出端口的數(shù)據(jù)類型和參數(shù),端口名表列出對(duì)外的個(gè)端口名。元件例化語(yǔ)句中的例化名必須存在。類似于電路板中的插座名,而元件名則是準(zhǔn)備在此插座上插入的元件名。portmap是端口映射的意思。.端口映射方法指下一層元件的端口信號(hào)與實(shí)際信號(hào)的連接關(guān)系。有兩種映射方法:位置映射和名稱映射。位置映射在下一層中元器件端口說(shuō)明中的信號(hào)書(shū)寫(xiě)順序位置和portmap()中指定的實(shí)際信號(hào)書(shū)寫(xiě)順序位置一一對(duì)應(yīng)。如:在二輸入與門(mén)中端口的輸入輸出定義為:

port(a,b:inbitc:outbit);

在設(shè)計(jì)的引用中u2的信號(hào)對(duì)應(yīng)關(guān)系描述為:

u2:and2portmap(nsel,d1,ab);

即u2的nsel

對(duì)應(yīng)a,d1對(duì)應(yīng)b,ab對(duì)應(yīng)c。.名稱映射將已經(jīng)存在于庫(kù)中的現(xiàn)成模塊的各端口名稱,賦予設(shè)計(jì)中模塊的信號(hào)名。例如:

u2:and2portmap(a=>nsel,b=>d1,c=>ab);在輸出信號(hào)沒(méi)有連接的情況下,對(duì)應(yīng)端口的描述可以省略。Portmap()句中的位置可以是任意的。.全加器的原理框圖.Libraryieee;Useieee.std_logic_1164.all;Entityadd1isport(A:instd_logic;B:instd_logic;Cin:instd_logic;Co:outstd_logic;S:outstd_logic);Endadd1;Architecturestructureofdd1isComponentand2Port(a:instd_logic;b:instd_logic;c:outstd_logic);Endcomponent;實(shí)現(xiàn)全加器功能的結(jié)構(gòu)描述Componentor2Port(a:instd_logic;b:instd_logic;c:outstd_logic);Endcomponent;Componentxor2Port(a:instd_logic;b:instd_logic;c:outstd_logic);Endcomponent;signaltmp1,tmp2,tmp3:std_logic;BeginU1:xor2portmap(A,B,tmp1);U2:and2portmap(tmp1,Cin,tmp2);U3:xor2portmap(tmp1,Cin,S);U4:and2portmap(A,B,tmp3);U5:or2portmap(tmp2,tmp3,Co);Endstructure;.④混合描述方式混合描述方式就是上述三種描述方式的組合。小結(jié):行為描述方式→真值表數(shù)據(jù)流描述方式→邏輯表達(dá)式結(jié)構(gòu)描述方式→電路圖

四種描述風(fēng)格各有各的特點(diǎn)。常用的是結(jié)構(gòu)描述和混合描述方式。信號(hào)流描述方式最簡(jiǎn)單實(shí)用。最不常用的是行為描述方式,因?yàn)樾袨槊枋鲋杏幸恍┱Z(yǔ)句不能進(jìn)行邏輯綜合和難于綜合。.第3章硬件描述語(yǔ)言基礎(chǔ)

內(nèi)容提要:3.1VHDL基本結(jié)構(gòu)

3.1.1VHDL設(shè)計(jì)的基本單元及結(jié)構(gòu)

3.1.2結(jié)構(gòu)體的描述形式

?

3.1.3VHDL結(jié)構(gòu)體的子結(jié)構(gòu)

3.1.4庫(kù)、程序包和配置

3.2VHDL的對(duì)象、數(shù)據(jù)類型及運(yùn)算操作符3.3VHDL的主要描述語(yǔ)句3.4VHDL的預(yù)定義屬性3.5有限狀態(tài)機(jī)

.3.1.3VHDL結(jié)構(gòu)體的子結(jié)構(gòu)對(duì)于大型設(shè)計(jì),一般將其劃分為幾個(gè)相對(duì)比較獨(dú)立的模塊。一個(gè)設(shè)計(jì)的結(jié)構(gòu)體就可以用幾個(gè)子結(jié)構(gòu)來(lái)表示。提高設(shè)計(jì)的條理性和程序的可讀性。有三種子結(jié)構(gòu):

塊(Block)語(yǔ)句結(jié)構(gòu)進(jìn)程(process)語(yǔ)句結(jié)構(gòu)子程序(subprograms)結(jié)構(gòu).①塊語(yǔ)句[塊標(biāo)號(hào):]block[衛(wèi)式表達(dá)式][類屬子句[類屬接口表;]];[端口子句[端口接口表;]];[塊說(shuō)明部分];Begin<塊語(yǔ)句部分>;Endblock[塊標(biāo)號(hào)];一個(gè)設(shè)計(jì)的結(jié)構(gòu)體對(duì)應(yīng)于總電路原理圖,而塊語(yǔ)句就對(duì)應(yīng)于總電路原理圖中的子原理圖。塊語(yǔ)句的結(jié)構(gòu).Libraryieee;Useieee.std_logic_1164.all;Entitymux2isport(d0:instd_logic_vector(3downto0);d1:instd_logic_vector(3downto0);s:instd_logic;y:outstd_logic_vector(3downto0));Endentitymux2;Architecturedataflowofmux2issignaltmp1,tmp2,tmp3:std_logic_vector(3downto0);Beginlabel1:blockbegintmp1(3)<=d0(3)ands;tmp1(2)<=d0(2)ands;tmp1(1)<=d0(1)ands;tmp1(0)<=d0(0)ands;tmp2(3)<=d1(3)and(nots);tmp2(2)<=d1(2)and(nots);tmp2(1)<=d1(1)and(nots);tmp2(0)<=d1(0)and(nots);tmp3<=tmp1ortmp2;y<=tmp3;endblocklabel1;Enddataflow;例:2-1多路選擇器.程序仿真結(jié)果.Block和子原理圖的關(guān)系Block1Block2Block3Block4子圖1子圖2子圖3子圖3EntityseparateArchitectureBlock1BlockBlock2BlockBlock3BlockBlock4Block.

塊語(yǔ)句還有一種特殊的控制方式:在塊語(yǔ)句中包含一個(gè)衛(wèi)式表達(dá)式。

當(dāng)衛(wèi)式表達(dá)式是真時(shí),執(zhí)行塊語(yǔ)句;當(dāng)衛(wèi)式表達(dá)式是假時(shí),不執(zhí)行塊語(yǔ)句。這種通過(guò)衛(wèi)式表達(dá)式來(lái)對(duì)塊中的驅(qū)動(dòng)器進(jìn)行使能控制的塊語(yǔ)句就稱為衛(wèi)式塊語(yǔ)句。塊語(yǔ)句部分所描述的各個(gè)語(yǔ)句都是并行執(zhí)行的語(yǔ)句,與書(shū)寫(xiě)順序無(wú)關(guān),這種語(yǔ)句在VHDL中將可并行執(zhí)行的語(yǔ)句稱為并發(fā)語(yǔ)句。塊語(yǔ)句的并發(fā)性衛(wèi)式塊語(yǔ)句Block[衛(wèi)式表達(dá)式].Libraryieee;Useieee.std_logic_1164.all;Entitydffisport(d,clk:instd_logic;q,qb:outstd_logic);Enddff;ArchitecturedataflowofdffisBeginlabel1:block(clk=‘1’)beginq<=guardeddafter3ns;qb<=guarded(notd)after5ns;Endblocklabel1;Enddataflow;例:D觸發(fā)器衛(wèi)式表達(dá)式前衛(wèi)關(guān)鍵詞guarded表示只有衛(wèi)式表達(dá)式為真時(shí)語(yǔ)句才被執(zhí)行dclkqqb.②進(jìn)程語(yǔ)句在一個(gè)設(shè)計(jì)實(shí)體的結(jié)構(gòu)體中,所有的處理語(yǔ)句都是并行處理語(yǔ)句,但是仍然存在順序語(yǔ)句。并行語(yǔ)句是并行執(zhí)行,與書(shū)寫(xiě)順序無(wú)關(guān)。順序語(yǔ)句是一個(gè)接一個(gè)按照嚴(yán)格順序來(lái)執(zhí)行的。進(jìn)程語(yǔ)句本身是并行語(yǔ)句,進(jìn)程與進(jìn)程之間是并行執(zhí)行的,但進(jìn)程內(nèi)部的語(yǔ)句是順序語(yǔ)句,內(nèi)部是順序執(zhí)行的。.1)結(jié)構(gòu)[進(jìn)程標(biāo)號(hào):]PROCESS[敏感信號(hào)表][is][進(jìn)程語(yǔ)句說(shuō)明部分];BEGIN <進(jìn)程語(yǔ)句部分>;ENDPROCESS[進(jìn)程標(biāo)號(hào)];進(jìn)程標(biāo)號(hào)是一個(gè)進(jìn)程的名字標(biāo)號(hào),它是一個(gè)可選項(xiàng)。敏感信號(hào)表中可以是一個(gè)或多個(gè)信號(hào),當(dāng)其中的信號(hào)值改變時(shí),則在進(jìn)程內(nèi)部引起語(yǔ)句執(zhí)行。當(dāng)進(jìn)程中沒(méi)有敏感信號(hào)表時(shí),進(jìn)程語(yǔ)句中必須有其他形式的敏感信號(hào)激勵(lì);當(dāng)進(jìn)程中有敏感信號(hào)表時(shí),進(jìn)程語(yǔ)句就不允許再顯示wait、waitfor、waituntil和waiton中的任何一種語(yǔ)句。.進(jìn)程語(yǔ)句說(shuō)明部分用來(lái)定義局部數(shù)據(jù)環(huán)境,主要包括數(shù)據(jù)類型說(shuō)明、子程序說(shuō)明和變量說(shuō)明等。進(jìn)程語(yǔ)句部分是用來(lái)設(shè)計(jì)某一個(gè)功能獨(dú)立的電路。與塊語(yǔ)句的區(qū)別在于:塊語(yǔ)句中的塊語(yǔ)句部分是并行執(zhí)行的;而進(jìn)程語(yǔ)句中的進(jìn)程語(yǔ)句部分則是按照順序一條條向下執(zhí)行的,與語(yǔ)句書(shū)寫(xiě)的順序有關(guān)。進(jìn)程可以看成是無(wú)限循環(huán)的。激勵(lì)條件滿足后,進(jìn)程啟動(dòng),begin和endprocess間的語(yǔ)句將從上到下順序執(zhí)行一次;當(dāng)執(zhí)行完最后一條語(yǔ)句后,返回進(jìn)程的第一條語(yǔ)句,等待滿足下一次激勵(lì)條件。.process_label:PROCESS(signal_name,signal_name) VARIABLEvariable_name:STD_LOGIC; VARIABLEvariable_name:STD_LOGIC;BEGIN --SignalAssignmentStatement --VariableAssignmentStatement --ProcedureCallStatement --IfStatement --CaseStatement --LoopStatementENDPROCESS__process_label;.注意:進(jìn)程中語(yǔ)句的順序性在系統(tǒng)仿真時(shí),進(jìn)程結(jié)構(gòu)中的語(yǔ)句是按順序一條一條向下執(zhí)行的。與語(yǔ)句書(shū)寫(xiě)的順序有關(guān)。進(jìn)程的啟動(dòng)

執(zhí)行狀態(tài):當(dāng)敏感信號(hào)發(fā)生變化(由“0”變?yōu)椤?”或由“1”變?yōu)椤?”)或激勵(lì)條件滿足時(shí),進(jìn)程啟動(dòng),begin和endprocess間的語(yǔ)句將從上到下順序執(zhí)行一次;當(dāng)執(zhí)行完最后一條語(yǔ)句后,返回進(jìn)程的第一條語(yǔ)句,等待滿足下一次激勵(lì)條件。敏感信號(hào)信號(hào)變化一次,進(jìn)程執(zhí)行一次。

等待狀態(tài):當(dāng)敏感信號(hào)不發(fā)生變化或激勵(lì)條件不滿足時(shí),進(jìn)程處于等待狀態(tài)。.Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;Entitymux4isport(d0:instd_logic_vector(7downto0);d1:instd_logic_vector(7downto0);d2:instd_logic_vector(7downto0);d3:instd_logic_vector(7downto0);s0:instd_logic;s1:instd_logic;q:outstd_logic_vector(7downto0));Endentitymux4;例:4-1多路選擇器.Architecturebehaveofmux4isBeginlabel1:process(d0,d1,d2,d3,s0,s1)variabletmp:integerrange0to3;begintmp:=0;if(s0=‘1’)thentmp:=tmp+1;endif;if(s1=‘1’)thentmp:=tmp+2;endif;casetmpiswhen0=>q<=d0;when1=>q<=d1;when2=>q<=d2;when3=>q<=d3;whenothers=>null;endcase;endprocesslabel1;Endbehave;.程序仿真結(jié)果.2)進(jìn)程同步在每個(gè)結(jié)構(gòu)體中可以有多個(gè)進(jìn)程語(yǔ)句,多個(gè)進(jìn)程語(yǔ)句之間是并行的關(guān)系。ArchitecturedataflowofexampleisBegin

Enddataflow;label2:processbeginwaituntilclk=‘0’;q2<=d;Endprocesslabel2;label1:processbeginwaituntilclk=‘1’;q1<=d;Endprocesslabel1;說(shuō)明:第1個(gè)進(jìn)程表示當(dāng)clk為高時(shí),將數(shù)據(jù)送至q1;第2個(gè)進(jìn)程表示當(dāng)clk為低時(shí),將數(shù)據(jù)送至q2;兩個(gè)進(jìn)進(jìn)程并發(fā)執(zhí)行。.程序仿真結(jié)果.同一個(gè)結(jié)構(gòu)體中不僅可以存在多個(gè)進(jìn)程,而且多個(gè)進(jìn)程之間還可以互相通信,同步執(zhí)行。Architecturertlofsyncissignalcounter:integer;Begin

Endrtl;label1:processbeginwaituntilclk=‘1’;counter<=counter+1;Endprocesslabel1;label2:processbeginwaituntilclk=‘1’;if(counter=4)thenirq<=‘0’;elseirq<=‘1’;Endif;Endprocesslabel2;.程序仿真結(jié)果.ArchitecturebehaveofclockisBeginlabel1:process(clk)begin

if(clk'eventandclk='1')thenq1<=b;endif;Endprocesslabel1;label2:process(clk)begin

if(clk='1')thenq2<=b;endif;Endprocesslabel2;在進(jìn)程中,用時(shí)鐘來(lái)進(jìn)行同步是常常使用的,下面介紹幾種不同描述方法:label3:processbegin

waituntilclk='1';q3<=b;Endprocesslabel3;label4:process(clk)begin

if(clk’last_valueandclk’eventandclk='1')thenq2<=b;endif;Endprocesslabel2;Endbehave;.程序仿真結(jié)果.③子程序結(jié)構(gòu)子程序就是在主程序調(diào)用它以后能夠?qū)⑻幚斫Y(jié)果返回主程序的程序模塊。它們可以被反復(fù)調(diào)用,避免大量重復(fù)源代碼的書(shū)寫(xiě)。子程序通常包括子程序說(shuō)明部分和子程序定義部分。子程序說(shuō)明部分主要定義了其他設(shè)計(jì)調(diào)用該子程序時(shí)的接口,子程序定義部分則描述該子程序具體功能的實(shí)現(xiàn)。在VHDL中,子程序有兩類類型:過(guò)程和函數(shù)。兩者的區(qū)別在于:過(guò)程可以返回多個(gè)值,而函數(shù)只能返回一個(gè)值;過(guò)程中參數(shù)可以有三種模式:in、out和inout,而函數(shù)中參數(shù)只有in方式;過(guò)程中可以有wait語(yǔ)句,而函數(shù)中卻不能有該語(yǔ)句。.1)過(guò)程Procedure<過(guò)程名>([對(duì)象種類]參數(shù)名[,參數(shù)名…]:[方式]類型;[對(duì)象種類]參數(shù)名[,參數(shù)名…]:[方式]類型;[對(duì)象種類]參數(shù)名[,參數(shù)名…]:[方式]類型;……);Procedure<過(guò)程名>([對(duì)象種類]參數(shù)名[,參數(shù)名…]:[方式]類型;[對(duì)象種類]參數(shù)名[,參數(shù)名…]:[方式]類型;……)is[常量說(shuō)明;][變量說(shuō)明;][類型說(shuō)明;]Begin<過(guò)程語(yǔ)句部分>;End[procedure]<過(guò)程名>;過(guò)程定義的結(jié)構(gòu)過(guò)程說(shuō)明的結(jié)構(gòu).參數(shù)有三種方式:in、out和inout,默認(rèn)方式為in。過(guò)程中的參數(shù)可以接受變量、常量和信號(hào)作為對(duì)象種類。輸入(in)默認(rèn)為常量,輸出(out和inout)默認(rèn)為變量。常量說(shuō)明、變量說(shuō)明和類型說(shuō)明主要是對(duì)過(guò)程中要使用的常量、變量和類型進(jìn)行說(shuō)明,且說(shuō)明只在該過(guò)程中有效。在過(guò)程中不能定義新的信號(hào)。過(guò)程定義的位置有三個(gè):程序包(package)、結(jié)構(gòu)體(architecture)和進(jìn)程(process)過(guò)程調(diào)用的方式有兩種:并行過(guò)程調(diào)用(在結(jié)構(gòu)體并行處理語(yǔ)句部分)順序過(guò)程調(diào)用(在進(jìn)程語(yǔ)句或另一個(gè)子程序內(nèi)部).Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;Entityconvertisport(i:instd_logic_vector(3downto0);f:outboolean;o:inoutintegerrange0to15);Endconvert;Architecturebehaveofconvertisprocedurevector_to_int(input:instd_logic_vector;flag:outboolean;q:inoutinteger)is

例:將位矢量轉(zhuǎn)換成整數(shù)beginq:=0;flag:=false;foriininput’rangeloopq:=q*2;if(input(i)=‘1’)thenq:=q+1;elsif(input(i)/=‘0’)thenflag:=true;endif;endloop;endvector_to_int;Beginprocess(i)variablea:boolean;variableb:integer;beginvector_to_int(i,a,b);f<=a;o<=b;endprocess;Endbehave;.提示:該程序執(zhí)行循環(huán)語(yǔ)句時(shí)候,循環(huán)變量i是不需要人為定義的。且i的取值是從3取到0,該條件語(yǔ)句相當(dāng)于foriin3to0loop。該程序定義過(guò)程是在結(jié)構(gòu)體中,因此應(yīng)在結(jié)構(gòu)體中被調(diào)用。該程序調(diào)用過(guò)程是采用順序過(guò)程調(diào)用語(yǔ)句。.程序仿真結(jié)果.Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;Entityconvert2isport(i1,i2:instd_logic_vector(3downto0);f1,f2:outboolean;o1,o2:inoutintegerrange0to15);Endconvert2;Architecturebehaveofconvert2isprocedurevector_to_int(input:instd_logic_vector;signalflag:outboolean;signalq:inoutinteger)is例:將位矢量轉(zhuǎn)換成整數(shù).

beginq<=0;flag<=false;foriininput’rangeloopq<=q*2;if(input(i)=‘1’)thenq<=q+1;elsif(input(i)/=‘0’)thenflag<=true;endif;endloop;endvector_to_int;Beginvector_to_int(i1,f1,o1);process(i2)beginvector_to_int(i2,f2,o2);endprocess;Endbehave;

并行調(diào)用順序調(diào)用.注意:該程序中過(guò)程說(shuō)明中將其輸出q和flag定義為信號(hào)類型。過(guò)程中,變量參數(shù)不允許出現(xiàn)在并行過(guò)程調(diào)用語(yǔ)句中,而信號(hào)參數(shù)可以。由于過(guò)程定義的參數(shù)為信號(hào)類型,因此在調(diào)用過(guò)程時(shí),可以直接用輸出信號(hào)作為實(shí)參。該程序調(diào)用過(guò)程時(shí)既采用了順序過(guò)程調(diào)用語(yǔ)句,又有并行過(guò)程調(diào)用語(yǔ)句。在MAX+PLUS2中不支持過(guò)程并行調(diào)用,也不支持信號(hào)參數(shù)。.2)函數(shù)function<函數(shù)名>([對(duì)象種類]參數(shù)名[,參數(shù)名…]:[in]類型;[對(duì)象種類]參數(shù)名[,參數(shù)名…]:[in]類型;[對(duì)象種類]參數(shù)名[,參數(shù)名…]:[in]類型;……)return類型;function<函數(shù)名>([對(duì)象種類]參數(shù)名[,參數(shù)名…]:[in]類型;[對(duì)象種類]參數(shù)名[,參數(shù)名…]:[in]類型;……)return類型is[常量說(shuō)明;][變量說(shuō)明;][類型說(shuō)明;]Begin<函數(shù)語(yǔ)句部分>;Return(表達(dá)式);End[function]<函數(shù)名>;函數(shù)說(shuō)明的結(jié)構(gòu)函數(shù)定義的結(jié)構(gòu).函數(shù)中參數(shù)只有一種方式:in,因此參數(shù)的方式說(shuō)明可以省略。函數(shù)中的參數(shù)只可以接受常量和信號(hào)作為對(duì)象種類。如果沒(méi)有指定,則默認(rèn)為常量。常量說(shuō)明、變量說(shuō)明和類型說(shuō)明主要是對(duì)函數(shù)中要使用的常量、變量和類型進(jìn)行說(shuō)明,且說(shuō)明只在該函數(shù)中才有效。在函數(shù)中不能定義新的信號(hào)。函數(shù)總要返回一個(gè)值,該值的數(shù)據(jù)類型在函數(shù)參數(shù)說(shuō)明之后進(jìn)行說(shuō)明。函數(shù)定義的位置:程序包(package)、結(jié)構(gòu)體(architecture)、進(jìn)程(process)、實(shí)體說(shuō)明部分.函數(shù)在不同位置的定義a.在程序包中的定義例:求最大值Libraryieee;Useieee.std_logic_1164.all;Packageexampleisfunctionmaximum(a,b:integerrange0to100)returninteger;endexample;Packagebodyexampleisfunctionmax

溫馨提示

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