版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第3章VHDL編程基礎3.1概述3.2VHDL程序基本結構3.3VHDL語言要素3.4VHDL順序語句3.5VHDL并行語句3.6子程序(SUBPROGRAM)3.7庫、程序包及其他3.8VHDL描述風格3.9基本邏輯電路設計3.10狀態(tài)機的VHDL設計習題
3.1概述3.1.1常用硬件描述語言簡介常用硬件描述語言有VHDL、Verilog和ABEL語言。VHDL起源于美國國防部的VHSIC;Verilog起源于集成電路的設計;ABEL來源于可編程邏輯器件的設計。下面從使用方面將三者進行對比。(1)邏輯描述層次。一般的硬件描述語言可以在三個層次上進行電路描述,其層次由高到低依次可分為行為級、RTL級和門電路級。(2)設計要求。用VHDL進行電子系統(tǒng)設計時可以不了解電路的結構細節(jié),設計者所做的工作較少;用Verilog和ABEL語言進行電子系統(tǒng)設計時需了解電路的結構細節(jié),設計者需做大量的工作。(3)綜合過程。任何一種語言源程序,最終都要轉換成門電路級才能被布線器或適配器所接受。(4)對綜合器的要求。VHDL描述語言層次較高,不易控制底層電路,因而對綜合器的性能要求較高;Verilog和ABEL對綜合器的性能要求較低。(5)支持的EDA工具。支持VHDL和Verilog的EDA工具很多,但支持ABEL的綜合器僅僅Dataio一家。(6)國際化程度。VHDL和Verilog已成為IEEE標準;ABEL正朝國際化標準努力。3.1.2VHDL的優(yōu)點
VHDL的英文全名是Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage,誕生于1982年。1987年底,VHDL被IEEE(TheInstituteofElectricalandElectronicsEngineers)和美國國防部確認為標準硬件描述語言。
VHDL主要用于描述數(shù)字系統(tǒng)的結構、行為、功能和接口。應用VHDL進行工程設計的優(yōu)點是多方面的,具體如下:(1)與其他的硬件描述語言相比,VHDL具有更強的行為描述能力。(2)VHDL具有豐富的仿真語句和庫函數(shù),使得在任何大系統(tǒng)的設計早期,就能查驗設計系統(tǒng)的功能可行性,隨時可對系統(tǒng)進行仿真模擬,使設計者對整個工程的結構和功能可行性做出判斷。(3)VHDL語句的行為描述能力和程序結構,決定了它具有支持大規(guī)模設計的分解和已有設計的再利用功能。(4)用VHDL完成一個確定的設計,可以利用EDA工具進行邏輯綜合和優(yōu)化,并自動把VHDL描述設計轉變成門級網(wǎng)表(根據(jù)不同的實現(xiàn)芯片)。(5)VHDL對設計的描述具有相對獨立性。(6)VHDL具有類屬描述語句和子程序調用等功能,對于完成的設計,在不改變源程序的條件下,只需改變類屬參量或函數(shù),就能輕易地改變設計的規(guī)模和結構。3.1.3VHDL程序設計約定為了便于程序的閱讀和調試,本書對VHDL程序設計特作如下約定:(1)語句結構描述中方括號“[]”內(nèi)的內(nèi)容為可選內(nèi)容。(2)對于VHDL的編譯器和綜合器來說,程序文字的大小寫是不加區(qū)分的。(3)程序中的注釋使用雙橫線“--”。(4)為了便于程序的閱讀與調試,書寫和輸入程序時,使用層次縮進格式,同一層次的對齊,低層次的,較高層次的縮進兩個字符。(5)考慮到MAX+plusII要求源程序文件的名字與實體名必須一致,因此為了使同一個VHDL源程序文件能適應各個EDA開發(fā)軟件的使用要求,建議各個源程序文件的命名均與其實體名一致。3.2VHDL程序基本結構3.2.1VHDL程序設計舉例當我們使用一個集成芯片時,根據(jù)數(shù)字電子技術的知識,我們至少需要了解三個方面的信息:①該芯片符合什么規(guī)范,是誰生產(chǎn)的,是否大家認可;②該芯片有多少管腳,每個管腳是輸入還是輸出,每個管腳對輸入/輸出有什么要求;③該芯片各管腳之間的關系,以及能完成什么邏輯功能。相應地,當我們使用VHDL語言設計一個硬件電路時,我們至少需要描述三個方面的信息:①設計是在什么規(guī)范范圍內(nèi)設計的,亦即此設計符合某個設計規(guī)范,能得到大家的認可,這就是庫、程序包使用說明;②所設計的硬件電路與外界的接口信號,這就是設計實體的說明;③所設計的硬件電路其內(nèi)部各組成部分的邏輯關系以及整個系統(tǒng)的邏輯功能,這就是該設計實體對應的結構體說明。1.設計思路根據(jù)數(shù)字電子技術的知識,我們知道,74LS00是一個四—2輸入與非門,亦即該芯片由四個2輸入與非門組成,因此我們設計時可先設計一個2輸入與非門(如圖3.1(a)所示),再由四個2輸入與非門構成一個整體——MY74LS00(如圖3.1(b)所示)。2.VHDL源程序1)2輸入與非門NAND2的邏輯描述--IEEE庫及其中程序包的使用說明
LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;--實體NAND2的說明
ENTITYNAND2ISPORT(A,B:INSTD_LOGIC;Y:OUTSTD_LOGIC);ENDENTITYNAND2;圖3.1MY74LS00的設計過程示意圖--實體NAND2的結構體ART1的說明ARCHITECTUREART1OFNAND2ISBEGINY<=ANANDB;ENDARCHITECTUREART1;2)MY74LS00的邏輯描述--IEEE庫及其中程序包的使用說明
LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;--實體MY74LS00的說明ENTITYMY74LS00ISPORT(A1,B1,A2,B2,A3,B3,A4,B4:INSTD_LOGIC;Y1,Y2,Y3,Y4:OUTSTD_LOGIC);ENDENTITYMY74LS00;--實體MY74LS00的結構體ART2的說明
ARCHITECTUREART2OFMY74LS00IS--元件調用聲明
COMPONENTNAND2ISPORT(A,B:INSTD_LOGIC;Y:OUTSTD_LOGIC);ENDCOMPONENTNAND2;--元件連接說明BEGINU1:NAND2PORTMAP(A=>A1,B=>B1,Y=>Y1);U2:NAND2PORTMAP(A=>A2,B=>B2,Y=>Y2);U3:NAND2PORTMAP(A3,B3,Y3);U4:NAND2PORTMAP(A4,B4,Y4);ENDARCHITECTUREART2;3.說明與分析(1)整個設計包括兩個設計實體,分別為NAND2和MY74LS00,其中,實體MY74LS00為頂層實體。(2)實體NAND2定義了2輸入與非門NAND2的引腳信號A、B(輸入)和Y(輸出),其對應的結構體ART1描述了輸入與輸出信號間的邏輯關系,即將輸入信號A、B與非后傳給輸出信號端Y。(3)實體MY74LS00及對應的結構體ART2描述了一個如圖3.1(b)所示的四—2輸入與非門。由其結構體的描述可以看到,它是由四個2輸入與非門構成的。(4)在MY74LS00接口邏輯VHDL描述中,根據(jù)圖3.1(b)右側的MY74LS00的原理圖,實體MY74LS00定義了引腳的端口信號屬性和數(shù)據(jù)類型。(5)在結構體ART2中,COMPONENT→ENDCOMPONENT語句結構對所要調用的NAND2元件作了聲明。(6)實體MY74LS00引導的邏輯描述也是由三個主要部分構成的,即庫、程序包使用說明,實體說明和結構體。3.2.2VHDL程序的基本結構一個相對完整的VHDL程序(或稱為設計實體)具有如圖3.2所示的比較固定的結構,即至少應包括三個基本組成部分:庫、程序包使用說明,實體說明和實體對應的結構體說明。圖3.2VHDL程序設計基本結構3.2.3實體(ENTITY)
實體是一個設計實體的表層設計單元,其功能是對這個設計實體與外部電路進行接口描述。它規(guī)定了設計單元的輸入/輸出接口信號或引腳,是設計實體經(jīng)封裝后對外的一個通信界面。
1.實體語句結構實體說明單元的常用語句結構如下:
ENTITY實體名IS[GENERIC(類屬表);][PORT(端口表);]
END[ENTITY][實體名];2.類屬(GENERIC)說明語句類屬(GENERIC)參量是一種端口界面常數(shù),常以一種說明的形式放在實體或塊結構體前的說明部分。內(nèi)部電路結構和規(guī)模。類屬說明的一般書寫格式如下:
GENERIC([常數(shù)名:數(shù)據(jù)類型[:設定值]{;常數(shù)名:數(shù)據(jù)類型[:=設定值]});
【例3.2.1】
ENTITYMCKISGENERIC(WIDTH:INTEGER:=16);PORT(ADD_BUS:OUTSTD_LOGIC_VECTOR(WIDTH-1DOWNTO0));...在這里,GENERIC語句對實體MCK的作為地址總線的端口ADD_BUS的數(shù)據(jù)類型和寬度作了定義,即定義ADD_BUS為一個16位的位矢量?!纠?.2.2】2輸入與門的實體描述。
ENTITYAND2ISGENERIC(RISEW:TIME:=1ns;FALLW:TIME:=1ns);PORT(A1:INSTD_LOGIC;A0:INSTD_LOGIC;Z0:OUTSTD_LOGIC);ENDENTITYAND2;3.PORT端口說明由PORT引導的端口說明語句是對于一個設計實體界面的說明。實體端口說明的一般書寫格式如下:
PORT(端口名:端口模式數(shù)據(jù)類型;{端口名:端口模式數(shù)據(jù)類型});
IEEE1076標準包中定義了四種常用的端口模式,各端口模式的功能及符號分別見表3.1和圖3.3。在實際的數(shù)字集成電路中,IN相當于只可輸入的引腳,OUT相當于只可輸出的引腳,BUFFER相當于帶輸出緩沖器并可以回讀的引腳(與TRI引腳不同),而INOUT相當于雙向引腳(即BIDIR引腳)。由圖3.3的INOUT電路可見,此模式的端口是普通輸出端口(OUT)加入三態(tài)輸出緩沖器和輸入緩沖器構成的。在實用中,端口描述中的數(shù)據(jù)類型主要有兩類:位(BIT)和位矢量(BIT_VECTOR)。若端口的數(shù)據(jù)類型定義為BIT,則其信號值是一個1位的二進制數(shù),取值只能是0或1;若端口數(shù)據(jù)類型定義為BIT_VECTOR,則其信號值是一組二進制表。表3.1端口模式說明端口模式端口模式說明(以設計實體為主體)IN輸入,只讀模式,將變量或信號信息通過該端口讀入OUT輸出,單向賦值模式,將信號通過該端口輸出BUFFER具有讀功能的輸出模式,可以讀或寫,只能有一個驅動源INOUT雙向,可以通過該端口讀入或寫出信息圖3.3端口模式符號圖3.2.4結構體(ARCHITECTURE)
結構體是用于描述設計實體的內(nèi)部結構以及實體端口間的邏輯關系。結構體內(nèi)部構造的描述層次和描述內(nèi)容一般可以用圖3.4來說明。一般地,一個完整的結構體由兩個基本層次組成:對數(shù)據(jù)類型、常數(shù)、信號、子程序和元件等元素的說明部分。描述實體邏輯行為的,以各種不同的描述風格表達的功能描述語句。圖3.4結構體構造圖結構體將具體實現(xiàn)一個實體。每個實體可以有多個結構體,每個結構體對應著實體不同結構和算法實現(xiàn)方案,其間的各個結構體的地位是同等的,它們完整地實現(xiàn)了實體的行為,但同一結構體不能為不同的實體所擁有。結構體不能單獨存在,它必須有一個界面說明,即一個實體。對于具有多個結構體的實體,必須用CONFIGURATION(配置)語句指明用于綜合的結構體和用于仿真的結構體,即在綜合后的可映射于硬件電路的設計實體中,一個實體只對應一個結構體。在電路中,如果實體代表一個器件符號,則結構體描述了這個符號的內(nèi)部行為。當把這個符號例化成一個實際的器件安裝到電路上時,則需用配置語句為這個例化的器件指定一個結構體(即指定一種實現(xiàn)方案),或由編譯器自動選一個結構體。1.結構體的一般語句格式結構體的語句格式如下:ARCHITECTURE結構體名OF實體名IS[說明語句;]BEGIN[功能描述語句;]END[ARCHITECTURE][結構體名];2.結構體說明語句結構體中的說明語句是對結構體的功能描述語句中將要用到的信號(SIGNAL)、數(shù)據(jù)類型(TYPE)、常數(shù)(CONSTANT)、元件(COMPONENT)、函數(shù)(FUNCTION)和過程(PROCEDURE)等加以說明的語句。3.功能描述語句結構如圖3.4所示的功能描述語句結構可以含有五種不同類型的、以并行方式工作的語句結構,而在每一語句結構的內(nèi)部可能含有并行運行的邏輯描述語句或順序運行的邏輯描述語句。各語句結構的基本組成和功能分別是:(1)塊語句是由一系列并行執(zhí)行語句構成的組合體,它的功能是將結構體中的并行語句組成一個或多個模塊。(2)進程語句定義順序語句模塊,用以將從外部獲得的信號值,或內(nèi)部的運算數(shù)據(jù)向其他的信號進行賦值。(3)信號賦值語句將設計實體內(nèi)的處理結果向定義的信號或界面端口進行賦值。(4)子程序調用語句用于調用一個已設計好的子程序。(5)元件例化語句對其他的設計實體作元件調用說明,并將此元件的端口與其他的元件、信號或高層次實體的界面端口進行連接。3.3VHDL語言要素3.3.1VHDL文字規(guī)則
VHDL文字(Literal)主要包括數(shù)值和標識符。數(shù)值型文字主要有數(shù)字型、字符串型和位串型等。1.數(shù)字型文字數(shù)字型文字的值有多種表達方式,現(xiàn)列舉如下:
1.數(shù)字型文字數(shù)字型文字的值有多種表達方式,現(xiàn)列舉如下:(1)整數(shù)文字:整數(shù)文字都是十進制的數(shù),如:5,678,0,156E2(=15600),45_234_287(=45234287)(2)實數(shù)文字:實數(shù)文字也都是十進制的數(shù),但必須帶有小數(shù)點,如:188.993,88_670_551.453_909(=88670551.453909),1.0,44.99E-2(=0.4499),1.335,0.0(3)以數(shù)制基數(shù)表示的文字:用這種方式表示的數(shù)由五個部分組成。第一部分,用十進制數(shù)標明數(shù)制進位的基數(shù);第二部分,數(shù)制隔離符號“#”;第三部分,表達的文字;第四部分,指數(shù)隔離符號“#”;第五部分,用十進制表示的指數(shù)部分,這一部分的數(shù)如果是0可以省去不寫?,F(xiàn)舉例如下:10#170# --(十進制數(shù)表示,等于170)2#1111_1110# --(二進制數(shù)表示,等于254)16#E#E1 --(十六進制數(shù)表示,等于2#11100000#,等于224)16#F.01#E+2 --(十六進制數(shù)表示,等于3841.00)(4)物理量文字(VHDL綜合器不接受此類文字)。如:60s(60秒),100m(100米),kΩ(千歐姆),177A(177安培)2.字符串型文字字符是用單引號引起來的ASCII字符,可以是數(shù)值,也可以是符號或字母,如:‘R’,‘A’,‘*’,‘Z’。而字符串則是一維的字符數(shù)組,須放在雙引號中。VHDL中有兩種類型的字符串:文字字符串和數(shù)位字符串。(1)文字字符串:文字字符串是用雙引號引起來的一串文字,如:“ERROR”,“BOTHSANDQEQUATOL”,“X”,“BB$CC”(2)數(shù)位字符串:數(shù)位字符串也稱位矢量,是預定義的數(shù)據(jù)類型BIT的一維數(shù)組,它們所代表的是二進制、八進制或十六進制的數(shù)組,其位矢量的長度即為等值的二進制數(shù)的位數(shù)。數(shù)位字符串的表示首先要有計算基數(shù),然后將該基數(shù)表示的值放在雙引號中,基數(shù)符以“B”、“O”和“X”表示,并放在字符串的前面。它們的含義分別是:
B:二進制基數(shù)符號,表示二進制數(shù)位0或1,在字符串中每一個位表示一個BIT。
O:八進制基數(shù)符號,在字符串中的每一個數(shù)代表一個八進制數(shù),即代表一個3位(BIT)的二進制數(shù)。
X:十六進制基數(shù)符號(0~F),字符串中的每一位代表一個十六進制數(shù),即代表一個4位的二進制數(shù)。例如:
B“1_1101_1110”--二進制數(shù)數(shù)組,位矢數(shù)組長度是9
X“AD0”--十六進制數(shù)數(shù)組,位矢數(shù)組長度是123.標識符標識符用來定義常數(shù)、變量、信號、端口、子程序或參數(shù)的名字。VHDL的基本標識符就是以英文字母開頭,不連續(xù)使用下劃線“_”,不以下劃線“_”結尾的,由26個大小寫英文字母、數(shù)字0~9以及下劃線“_”組成的字符串。VHD’93標準還支持擴展標識符,但是目前仍有許多VHDL工具不支持擴展標識符。標識符中的英語字母不分大小寫。VHDL的保留字不能用于作為標識符使用。4.下標名及下標段名下標名用于指示數(shù)組型變量或信號的某一元素,而下標段名則用于指示數(shù)組型變量或信號的某一段元素,其語句格式如下:數(shù)組類型信號名或變量名(表達式1[TO/DOWNTO表達式2]);如下是下標名及下標段名使用示例:SIGNAA,B,C:BIT_VECTOR(0TO7);SIGNAM:INTEGERRANGE0TO3;SIGNAY,Z:BIT;Y<=A(M); --M是不可計算型下標表示Z<=B(3); --3是可計算型下標表示C(0TO3)<=A(4TO7); --以段的方式進行賦值C(4TO7)<=A(0TO3); --以段的方式進行賦值3.3.2VHDL數(shù)據(jù)對象在VHDL中,數(shù)據(jù)對象(DataObjects)類似于一種容器,它接受不同數(shù)據(jù)類型的賦值。數(shù)據(jù)對象有三種,即常量(CONSTANT)、變量(VARIABLE)和信號(SIGNAL)。1.常量(CONSTANT)
常量的定義和設置主要是為了使設計實體中的常數(shù)更容易閱讀和修改。例如,將位矢的寬度定義為一個常量,只要修改這個常量就能很容易地改變寬度,從而改變硬件結構。在程序中,常量是一個恒定不變的值,一旦作了數(shù)據(jù)類型的賦值定義后,在程序中不能再改變,因而具有全局意義。常量的定義形式如下:
CONSTANT常量名:數(shù)據(jù)類型:=表達式;例如:CONSTANTFBUS﹕BIT_VECTOR:=“010115”;CONSTANTVCC﹕REAL:=5.0;CONSTANTDELY﹕TIME:=25ns;
VHDL要求所定義的常量數(shù)據(jù)類型必須與表達式的數(shù)據(jù)類型一致。常量的數(shù)據(jù)類型可以是標量類型或復合類型,但不能是文件類型(File)或存取類型(Access)。
常量定義語句所允許的設計單元有實體、結構體、程序包、塊、進程和子程序。在程序包中定義的常量可以暫不設具體數(shù)值,它可以在程序包體中設定。常量的可視性,即常量的使用范圍取決于它被定義的位置。在程序包中定義的常量具有最大全局化特征,可以用在調用此程序包的所有設計實體中;定義在設計實體中的常量,其有效范圍為這個實體定義的所有的結構體;定義在設計實體的某一結構體中的常量,則只能用于此結構體;定義在結構體的某一單元的常量,如一個進程中,則這個常量只能用在這一進程中。2.變量(VARIABLE)
在VHDL語法規(guī)則中,變量是一個局部量,只能在進程和子程序中使用。變量不能將信息帶出對它作出定義的當前設計單元。變量的賦值是一種理想化的數(shù)據(jù)傳輸,是立即發(fā)生,不存在任何延時的行為。VHDL語言規(guī)則不支持變量附加延時語句。變量常用在實現(xiàn)某種算法的賦值語句中。定義變量的語法格式如下:VARIABLE變量名:數(shù)據(jù)類型:=初始值;例如:VARIABLEA:INTEGER; --定義A為整數(shù)型變量VARIABLEB,C:INTEGER:=2;--定義B和C為整型變量,初始值為2變量作為局部量,其適用范圍僅限于定義了變量的進程或子程序中。仿真過程中惟一的例外是共享變量。變量的值將隨變量賦值語句的運算而改變。變量定義語句中的初始值可以是一個與變量具有相同數(shù)據(jù)類型的常數(shù)值,也可以是一個全局靜態(tài)表達式,這個表達式的數(shù)據(jù)類型必須與所賦值變量一致。此初始值不是必需的,綜合過程中綜合器將略去所有的初始值。變量數(shù)值的改變是通過變量賦值來實現(xiàn)的,其賦值語句的語法格式如下:目標變量名:=表達式;賦值語句的用法見3.4節(jié)。3.信號(SIGNAL)
信號是描述硬件系統(tǒng)的基本數(shù)據(jù)對象,它類似于連接線。信號可以作為設計實體中并行語句模塊間的信息交流通道。在VHDL中,信號及其相關的信號賦值語句、決斷函數(shù)、延時語句等很好地描述了硬件系統(tǒng)的許多基本特征。如硬件系統(tǒng)運行的并行性;信號傳輸過程中的慣性延時特性;多驅動源的總線行為等。信號作為一種數(shù)值容器,不但可以容納當前值,也可以保持歷史值。這一屬性與觸發(fā)器的記憶功能有很好的對應關系。信號的定義格式如下:
SIGNA信號名:數(shù)據(jù)類型:=初始值;信號初始值的設置不是必需的,而且初始值僅在VHDL的行為仿真中有效。與變量相比,信號的硬件特征更為明顯,它具有全局性特性。以下是信號的定義示例:SIGNAS1:STD_LOGIG:=0; --定義了一個標準位的單值信號S1,初始值為低電平SIGNAS2,S3:BIT; --定義了兩個為BIT的信號S2和S3SIGNAS4:STD_LOGIC_VECTOR(15DOWNTO0); --定義了一個標準位矢的位矢量(數(shù)組、總--線)信號,共有16個信號元素以下示例定義的信號數(shù)據(jù)類型是設計者自行定義的,這是VHDL所允許的:
TYPEFOURIS(‘X’,‘0’,‘I’,‘Z’);SIGNAS1﹕FOUR;SIGNAS2﹕FOUR:=‘X’;SIGNAS3﹕FOUR:=‘L’;4.三者的使用比較(1)從硬件電路系統(tǒng)來看,常量相當于電路中的恒定電平,如GND或VCC接口,而變量和信號則相當于組合電路系統(tǒng)中門與門間的連接及其連線上的信號值。(2)從行為仿真和VHDL語句功能上看,信號和變量的區(qū)別主要表現(xiàn)在接受和保持信息的方式、信息保持與傳遞的區(qū)域大小上。(3)從綜合后所對應的硬件電路結構來看,信號一般將對應更多的硬件結構,但在許多情況下,信號和變量并沒有什么區(qū)別。(4)雖然VHDL仿真器允許變量和信號設置初始值,但在實際應用中,VHDL綜合器并不會把這些信息綜合進去。3.3.3VHDL數(shù)據(jù)類型
VHDL是一種強類型語言,要求設計實體中的每一個常數(shù)、信號、變量、函數(shù)以及設定的各種參量都必須具有確定的數(shù)據(jù)類型,并且只有數(shù)據(jù)類型相同的量才能互相傳遞和作用。VHDL作為強類型語言的好處是能使VHDL編譯或綜合工具很容易地找出設計中的各種常見錯誤。VHDL中的數(shù)據(jù)類型可以分成四大類。標量型(SCALARTYPE):屬單元素的最基本的數(shù)據(jù)類型,通常用于描述一個單值數(shù)據(jù)對象,它包括實數(shù)類型、整數(shù)類型、枚舉類型和時間類型。復合類型(COMPOSITETYPE):可以由細小的數(shù)據(jù)類型復合而成,如可由標量復合而成。復合類型主要有數(shù)組型(ARRAY)和記錄型(RECORD)。
存取類型(ACCESSTYPE):為給定的數(shù)據(jù)類型的數(shù)據(jù)對象提供存取方式。文件類型(FILESTYPE):用于提供多值存取類型。1.VHDL的預定義數(shù)據(jù)類型
VHDL的預定義數(shù)據(jù)類型都是在VHDL標準程序包STANDARD中定義的,在實際使用中,已自動包含進VHDL的源文件中,因而不必通過USE語句以顯式調用。1)布爾(BOOLEAN)數(shù)據(jù)類型程序包STANDARD中定義布爾數(shù)據(jù)類型的源代碼如下:
TYPEBOOLEANIS(FALSE,TRUE);
布爾數(shù)據(jù)類型實際上是一個二值枚舉型數(shù)據(jù)類型,它的取值有FALSE和TRUE兩種。2)位(BIT)數(shù)據(jù)類型位數(shù)據(jù)類型也屬于枚舉型,取值只能是1或0。位數(shù)據(jù)類型的數(shù)據(jù)對象,如變量、信號等,可以參與邏輯運算,運算結果仍是位的數(shù)據(jù)類型。VHDL綜合器用一個二進制位表示BIT。在程序包STANDARD中定義的源代碼是:
TYPEBITIS(‘0’,‘1’);3)位矢量(BIT_VECTOR)數(shù)據(jù)類型位矢量只是基于BIT數(shù)據(jù)類型的數(shù)組,在程序包STANDARD中定義的源代碼是:
TYPEBIT_VETORISARRAY(NATURARANGE<>)OFBIT;
4)字符(CHARACTER)數(shù)據(jù)類型字符類型通常用單引號引起來,如‘A’。字符類型區(qū)分大小寫,如‘B’不同于‘b’。字符類型已在STANDARD程序包中作了定義。5)整數(shù)(INTEGER)數(shù)據(jù)類型整數(shù)類型的數(shù)代表正整數(shù)、負整數(shù)和零。整數(shù)常量的書寫方式示例如下:2 --十進制整數(shù)10E4
--十進制整數(shù)16#D2#
--十六進制整數(shù)2#11011010# --二進制整數(shù)6)自然數(shù)(NATURAL)和正整數(shù)(POSITIVE)數(shù)據(jù)類型自然數(shù)是整數(shù)的一個子類型,是非負的整數(shù),即零和正整數(shù);正整數(shù)也是整數(shù)的一個子類型,它包括整數(shù)中非零和非負的數(shù)值。它們在STANDARD程序包中定義的源代碼如下:
SUBTYPENATURAISINTEGERRANGE0TOINTEGER'HIGH;SUBTYPEPOSITIVEISINTEGERRANGE1TOINTEGER'HIGH;7)實數(shù)(REAL)數(shù)據(jù)類型
VHDL的實數(shù)類型類似于數(shù)學上的實數(shù),或稱浮點數(shù)。實數(shù)的取值范圍為-1.0E38~+1.0E38。通常情況下,實數(shù)類型僅能在VHDL仿真器中使用,VHDL綜合器不支持實數(shù),因為實數(shù)類型的實現(xiàn)相當復雜,目前在電路規(guī)模上難以承受。實數(shù)常量的書寫方式舉例如下:65971.333333 --十進制浮點數(shù)8#43.6#E+4 --八進制浮點數(shù)43.6E-4
--十進制浮點數(shù)8)字符串(STRING)數(shù)據(jù)類型字符串數(shù)據(jù)類型是字符數(shù)據(jù)類型的一個非約束型數(shù)組,或稱為字符串數(shù)組。字符串必須用雙引號標明。如:
VARIABLESTRING_VAR﹕STRING(1TO7);…STRING_VAR﹕“ABCD”;9)時間(TIME)數(shù)據(jù)類型
VHDL中惟一的預定義物理類型是時間。完整的時間類型包括整數(shù)和物理量單位兩部分,整數(shù)和單位之間至少留一個空格,如55ms,20ns。STANDARD程序包中也定義了時間。定義如下:TYPETIMEISRANGE-2147483647TO2147483647units
fs; --飛秒,VHDL中的最小時間單位
ps=1000fs; --皮秒
ns=1000ps; --納秒
us=1000ns; --微秒
ms=1000us;--毫秒
sec=1000ms;--秒
min=60sec; --分
hr=60min; --時enduntis;10)錯誤等級(SEVERITY_LEVEL)
在VHDL仿真器中,錯誤等級用來指示設計系統(tǒng)的工作狀態(tài),共有四種可能的狀態(tài)值:NOTE(注意)、WARNING(警告)、ERROR(出錯)、FAILURE(失敗)。在仿真過程中,可輸出這四種值來提示被仿真系統(tǒng)當前的工作情況。其定義如下:
TYPESEVERITY_LEVEIS(NOTE,WARNING,ERROR,F(xiàn)AILURE);
2.IEEE預定義標準邏輯位與矢量在IEEE庫的程序包STD_LOGIC_1164中,定義了兩個非常重要的數(shù)據(jù)類型,即標準邏輯位STD_LOGIC和標準邏輯矢量STD_LOGIC_VECTOR。1)標準邏輯位STD_LOGIC數(shù)據(jù)類型以下是定義在IEEE庫程序包STD_LOGIC_1164中的數(shù)據(jù)類型。數(shù)據(jù)類型STD_LOGIC的定義如下所示:TYPESTD_LOGICIS('U','X',‘0’,'1','Z','W','L','H','-');各值的含義是:'U'--未初始化的,'X'--強未知的,‘0’--強0,'1'--強1,'Z'--高阻態(tài),'W'--弱未知的,'L'--弱0,'H'--弱1,'-'--忽略。在程序中使用此數(shù)據(jù)類型前,需加入下面的語句:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;由定義可見,STD_LOGIC是標準的BIT數(shù)據(jù)類型的擴展,共定義了九種值。2)標準邏輯矢量(STD_LOGIC_VECTOR)數(shù)據(jù)類型STD_LOGIC_VECTOR類型定義如下:TYPESTD_LOGIC_VECTORISARRAY(NATURARANGE<>)OFSTD_LOGIC;
【例3.3.1】…TYPET_DATAISARRAY(7DOWNTO0)OFSTD_LOGIC; --自定義數(shù)組類型
SIGNADATABUS,MEMORY:T_DATA; --定義信號DATABUS,MEMORYCPU﹕PROCESSIS--CPU工作進程開始VARIABLEREG1﹕T_DATA;--定義寄存器變量REG1BEGIN…DATABUS<=REG1;--向8位數(shù)據(jù)總線賦值ENDPROCESSCPU;--CPU工作進程結束MEM﹕PROCESSIS--RAM工作進程開始BEGIN…DATABUS<=MEMORY;ENDPROCESSMEM;…3.其他預定義標準數(shù)據(jù)類型
VHDL綜合工具配帶的擴展程序包中,定義了一些有用的類型。如Synopsys公司在IEEE庫中加入的程序包STD_LOGIC_ARITH中定義了如下的數(shù)據(jù)類型:無符號型(UNSIGNED)、有符號型(SIGNED)和小整型(SMAL_INT)。在程序包STD_LOGIC_ARITH中的類型定義如下:TYPEUNSIGNEDISARRAY(NATURARANGE<>)OFSTD_LOGIC;TYPESIGNEDISARRAY(NATURARANGE<>)OFSTD_LOGIC;SUBTYPESMALL_INTISINTEGERRANGE0TO1;如果將信號或變量定義為這幾個數(shù)據(jù)類型,就可以使用本程序包中定義的運算符。在使用之前,請注意必須加入下面的語句:
LIBRARYIEEE;USEIEEE.STD_LOGIC_ARITH.ALL;1)無符號數(shù)據(jù)類型(UNSIGNEDTYPE)UNSIGNED數(shù)據(jù)類型代表一個無符號的數(shù)值,在綜合器中,這個數(shù)值被解釋為一個二進制數(shù),這個二進制數(shù)的最左位是其最高位。2)有符號數(shù)據(jù)類型(SIGNEDTYPE)SIGNED數(shù)據(jù)類型表示一個有符號的數(shù)值,綜合器將其解釋為補碼,此數(shù)的最高位是符號位,例如:SIGNED(“0101”)代表+5,5;SIGNED(“1101”)代表-5。4.用戶自定義數(shù)據(jù)類型方式
VHDL允許用戶自行定義新的數(shù)據(jù)類型,它們可以有多種,如枚舉類型(ENUMERA-TIONTYPE)、整數(shù)類型(INTEGERTYPE)、數(shù)組類型(ARRAYTYPE)、記錄類型(RECORDTYPE)、時間類型(TIMETYPE)、實數(shù)類型(REATYPE)等。1)TYPE語句用法TYPE語句語法結構如下:TYPE數(shù)據(jù)類型名IS數(shù)據(jù)類型定義[OF基本數(shù)據(jù)類型];2)SUBTYPE語句用法子類型SUBTYPE只是由TYPE所定義的原數(shù)據(jù)類型的一個子集,它滿足原數(shù)據(jù)類型的所有約束條件,原數(shù)據(jù)類型稱為基本數(shù)據(jù)類型。子類型SUBTYPE的語句格式如下:
SUBTYPE子類型名IS基本數(shù)據(jù)RANGE約束范圍;5.枚舉類型
VHDL中的枚舉數(shù)據(jù)類型是用文字符號來表示一組實際的二進制數(shù)的類型(若直接用數(shù)值來定義,則必須使用單引號)?!纠?.3.2】
TYPEM_STATEIS(STATE1,STATE2,STATE3,STATE4,STATE5);SIGNACURRENT_STATE,NEXT_STATE:M_STATE;
在這里,信號CURRENT_STATE和NEXT_STATE的數(shù)據(jù)類型定義為M_STATE,它們的取值范圍是可枚舉的,即從STATE1~STATE5共五種,而這些狀態(tài)代表五組惟一的二進制數(shù)值。6.整數(shù)類型和實數(shù)類型整數(shù)和實數(shù)的數(shù)據(jù)類型在標準的程序包中已作了定義,但在實際應用中,特別在綜合中,由于這兩種非枚舉型的數(shù)據(jù)類型的取值定義范圍太大,綜合器無法進行綜合。實際應用中,VHDL仿真器通常將整數(shù)或實數(shù)類型作為有符號數(shù)處理,VHDL綜合器對整數(shù)或實數(shù)的編碼方法是:對用戶已定義的數(shù)據(jù)類型和子類型中的負數(shù),編碼為二進制補碼;對用戶已定義的數(shù)據(jù)類型和子類型中的正數(shù),編碼為二進制原碼?!纠?.3.3】數(shù)據(jù)類型定義綜合結果TYPEN1ISRANGE0TO100;--7位二進制原碼TYPEN2ISRANGE10TO100;--7位二進制原碼TYPEN3ISRANGE-100TO100;--8位二進制補碼SUBTYPEN4ISN3RANGE0TO6;--3位二進制原碼7.數(shù)組類型數(shù)組類型屬復合類型,它是將一組具有相同數(shù)據(jù)類型的元素集合在一起,作為一個數(shù)據(jù)對象來處理的數(shù)據(jù)類型。數(shù)組可以是一維(每個元素只有一個下標)數(shù)組或多維數(shù)組(每個元素有多個下標)。VHDL仿真器支持多維數(shù)組,但VHDL綜合器只支持一維數(shù)組。數(shù)組的元素可以是任何一種數(shù)據(jù)類型,用以定義數(shù)組元素的下標范圍子句決定了數(shù)組中元素的個數(shù)以及元素的排序方向,即下標數(shù)是由低到高,或是由高到低。
限定性數(shù)組定義語句格式如下:
TYPE數(shù)組名ISARRAY(數(shù)組范圍)OF數(shù)據(jù)類型;其中,數(shù)組名是新定義的限定性數(shù)組類型的名稱,可以是任何標識符,其類型與數(shù)組元素相同;數(shù)組范圍明確指出數(shù)組元素的定義數(shù)量和排序方式,以整數(shù)來表示其數(shù)組的下標;數(shù)據(jù)類型即指數(shù)組各元素的數(shù)據(jù)類型?!纠?.3.4】
TYPESTBISARRAY(7DOWNTO0)OFSTD_LOGIC;
這個數(shù)組類型的名稱是STB,它有八個元素,它的下標排序是7,6,5,4,3,2,1,0,各元素的排序是STB(7),STB(6),…,STB(1),STB(0)?!纠?.3.5】
TYPEXIS(LOW,HIGH);TYPEDATA_BUSISARRAY(0TO7,X)OFBIT;
首先定義X為兩元素的枚舉數(shù)據(jù)類型,然后將DATA_BUS定義為一個數(shù)組類型,其中每一元素的數(shù)據(jù)類型是BIT。
非限制性數(shù)組的定義語句格式如下:
TYPE數(shù)組名ISARRAY(數(shù)組下標名RANGE<>)OF數(shù)據(jù)類型;其中,數(shù)組名是定義的非限制性數(shù)組類型的取名;數(shù)組下標名是以整數(shù)類型設定的一個數(shù)組下標名稱;符號“<>”是下標范圍待定符號,用到該數(shù)組類型時,再填入具體的數(shù)值范圍;數(shù)據(jù)類型是數(shù)組中每一元素的數(shù)據(jù)類型。【例3.3.6】TYPEBIT_VECTORISARRAY(NATURARANE<>)OFBIT;VARABLEVA:BIT_VECTOR(1TO6); --將數(shù)組取值范圍定在1~6【例3.3.7】TYPEREAL_MATRIXISARRAY(POSITIVERANGE<>)OFREAL;VARIABLEREAL_MATRIX_OBJECT:REAL_MATRIX(1TO8); --限定范圍【例3.3.8】
TYPELOGIC_VECTORISARRAY(NATURARANGE<>,POSITIVERANGE<>)OFLOGIC;VARIABLEL16_OBJECT:LOGIC_VECTOR(0TO7,1TO2); --限定范圍8.記錄類型由已定義的、數(shù)據(jù)類型不同的對象元素構成的數(shù)組稱為記錄類型的對象。定義記錄類型的語句格式如下:
TYPE記錄類型名ISRECORD
元素名:元素數(shù)據(jù)類型;元素名:元素數(shù)據(jù)類型;…
ENDRECORD[記錄類型名];【例3.3.9】TYPERECDATAISRECORD --將RECDATA定義為三元素記錄類型ELEMENT1﹕TIME; --將元素ELEMENT1定義為時間類型ELEMENT2﹕TIME; --將元素ELEMENT2定義為時間類型ELEMENT3﹕STD_LOGIC; --將元素ELEMENT3定義為標準位類型ENDRECORDRECDATA;【例3.3.10】利用記錄類型定義的一個微處理器命令信息表。TYPEREGNAMEIS(AX,BX,CX,DX);TYPEOPERATIONISRECORDOPSTR﹕STRING(1TO10);OPCODE﹕BIT_VECTOR(3DOWNTO0);OP1,OP2,RES:REGNAME;ENDRECORDOPERATION;VARIABLEINSTR1,INSTR2:OPERATION;…INSTR1:=("ADDAX,BX","0001",AX,BX,AX);INSTR2:=("ADDAX,BX",“0010",OTHERS=>BX);VARIABLEINSTR3﹕OPERATION;…INSTR3.OPSTR:="MUAX,BX";INSTR3.OP1:=AX;9.數(shù)據(jù)類型轉換由于VHDL是一種強類型語言,這就意味著即使對于非常接近的數(shù)據(jù)類型的數(shù)據(jù)對象,在相互操作時,也需要進行數(shù)據(jù)類型轉換。1)類型轉換函數(shù)方式類型轉換函數(shù)的作用就是將一種屬于某種數(shù)據(jù)類型的數(shù)據(jù)對象轉換成屬于另一種數(shù)據(jù)類型的數(shù)據(jù)對象?!纠?.3.11】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYCNT4ISPORT(CLK﹕INSTD_LOGIC;P﹕INOUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDENTITYCNT4;LIBRARYDATAIO;USEDATAIO.STD_LOGIC_OPS.ALLARCHITECTUREARTOFCNT4ISBEGINPROCESS(CLK)ISBEGINIFCLK=‘1’ANDCLK'EVENTTHENP<=TO_VECTOR(2,TO_INTEGER(P)+1);ENDIF;
ENDPROCESS;ENDARCHITECTUREART;
此例中利用了DATAIO庫中的程序包STD_LOGIC_OPS中的兩個數(shù)據(jù)類型轉換函數(shù):TO_VECTOR和TO_INTEGER(前者將INTEGER轉換成STD_LOGIC_VECTOR,后者將STD_LOGIC_VECTOR轉換成INTEGER)。【例3.3.12】FUCTIONTO_BIT(S﹕STD_ULOGIC;XMAP﹕BIT:=‘0’)RETURNBIT;FUNCTIONTO_BITVECTOR(S﹕STD_LOGIC_VECTOR;XMAP﹕BIT:=‘0’)RETURNBIT_VECTOR;FUNCTIONTO_BITVECTOR(S﹕STD_ULOGIC_VECTOR;XMAP﹕BIT:=‘0’)RETURNBIT_VECTOR;下面是轉換函數(shù)TO_BITVECTOR的函數(shù)體:FUNCTIONTO_BITVECTOR(S﹕STD_LOGIC_VECTOR;XMAP﹕BIT:=‘0’)RETURNBIT_VECTORISALIASSV﹕STD_LOGIC_VECTOR(S'LENGTH-1DOWNTO0)ISS;VARIABLERESULT﹕BIT_VECTOR(S'LENGTH-1DOWNTO0);BEGINFORIINRESULT'RANGELOOPCASESV(I)ISWHEN'0'|'L'=>RESULT(I):='0';WHEN'1'|'H'=>RESULT(I):='1';WHENOTHERS=>RESULT(I):=XMAP;ENDCASE;ENDLOOP;RETURNRESULT;ENDFUNCTIONTO_BITVECTOR;2)直接類型轉換方式直接類型轉換的一般語句格式是:數(shù)據(jù)類型標識符(表達式);一般情況下,直接類型轉換僅限于非常關聯(lián)(數(shù)據(jù)類型相互間的關聯(lián)性非常大)的數(shù)據(jù)類型之間,必須遵循以下規(guī)則:(1)所有的抽象數(shù)字類型是非常關聯(lián)的類型(如整型、浮點型),如果浮點數(shù)轉換為整數(shù),則轉換結果是最接近的一個整型數(shù)。(2)如果兩個數(shù)組有相同的維數(shù),且兩個數(shù)組的元素是同一類型,并且在各處的下標范圍內(nèi)索引是同一類型或非常接近的類型,那么這兩個數(shù)組是非常關聯(lián)類型。(3)枚舉型不能被轉換。如果類型標識符所指的是非限定數(shù)組,則結果會將被轉換的數(shù)組的下標范圍去掉,即成為非限定數(shù)組?!纠?.3.13】
VARIABLEDATAC,PARAMC:INTEGER;
…DATAC:=INTEGER(74.94*REAL(PARAMC));
在類型與其子類型之間無需類型轉換。即使兩個數(shù)組的下標索引方向不同,這兩個數(shù)組仍有可能是非常關聯(lián)類型的。3.3.4VHDL操作符
VHDL的各種表達式由操作數(shù)和操作符組成,其中,操作數(shù)是各種運算的對象,而操作符則規(guī)定運算的方式。1.操作符種類及對應的操作數(shù)類型在VHDL中,一般有四類操作符,即邏輯操作符(LogicaOperator)、關系操作符(RelationaOperator)、算術操作符(ArithmeticOperator)和符號操作符(SignOperator),前三類操作符是完成邏輯和算術運算的最基本的操作符的單元。此外還有重載操作符(OverloadingOperator),它是對基本操作符作了重新定義的函數(shù)型操作符。各種操作符所要求的操作數(shù)的類型詳見表3.2,操作符之間的優(yōu)先級別見表3.3。表3.2VHDL操作符列表表3.3VHDL操作符優(yōu)先級2.各種操作符的使用說明(1)嚴格遵循在基本操作符間操作數(shù)是同數(shù)據(jù)類型的規(guī)則;嚴格遵循操作數(shù)的數(shù)據(jù)類型必須與操作符所要求的數(shù)據(jù)類型完全一致的規(guī)則。(2)注意操作符之間的優(yōu)先級別。當一個表達式中有兩個以上的運算符時,可使用括號將這些運算分組。(3)VHDL共有七種基本邏輯操作符,對于數(shù)組型(如STD_LOGIC_VECTOR)數(shù)據(jù)對象的相互作用是按位進行的。(4)關系操作符的作用是將相同數(shù)據(jù)類型的數(shù)據(jù)對象進行數(shù)值比較(=、/=)或關系排序判斷(<、<=、>、>=),并將結果以布爾類型(BOOLEAN)的數(shù)據(jù)表示出來,即TRUE或FALSE兩種。(5)表3.2中所列的17種算術操作符可以分為求和操作符、求積操作符、符號操作符、混合操作符、移位操作符等五類操作符。求和操作符包括加減操作符和并置操作符。求積操作符包括*(乘)、/(除)、MOD(取模)和REM(取余)四種操作符。符號操作符“+”和“-”的操作數(shù)只有一個,操作數(shù)的數(shù)據(jù)類型是整數(shù)?;旌喜僮鞣?*(乘方)操作符和取ABS(絕對值)操作符兩種。六種移位操作符號SLL、SRL、SLA、SRA、ROL和ROR都是VHDL'93標準新增的運算符,在1987標準中沒有。例如:將“1101”執(zhí)行各種1位移位操作,其移位操作后的結果如圖3.5所示。例如:
VARIABLEV1:STD_LOGIC_VECTOR(3DOWNTO0):=('1','1','0','1');V1SL1;--('1','0','1','0');
圖3.5“1101”執(zhí)行各種移位操作后的結果示意圖移位操作符的語句格式是:標識符號移位操作符號移位位數(shù);操作符可以用以產(chǎn)生電路。就提高綜合效率而言,使用常量值或簡單的一位數(shù)據(jù)類型能夠生成較緊湊的電路,而表達式復雜的數(shù)據(jù)類型(如數(shù)組)將相應地生成更多的電路。3.重載操作符為了方便各種不同數(shù)據(jù)類型間的運算,VHDL允許用戶對原有的基本操作符重新定義,賦予新的含義和功能,從而建立一種新的操作符,這就是重載操作符,定義這種操作符的函數(shù)稱為重載函數(shù)。事實上,在程序包STD_LOGIC_UNSIGNED中已定義了多種可供不同數(shù)據(jù)類型間操作的算符重載函數(shù)。
Synopsys的程序包STD_LOGIC_ARITH、STD_LOGIC_UNSIGNED和STD_LOGIC_SIGNED中已經(jīng)為許多類型的運算重載了算術運算符和關系運算符,因此只要引用這些程序包,SINGEND、UNSIGEND、STD_LOGIC和INTEGER之間即可混合運算,INTEGER、STD_LOGIC和STD_LOGIC_VECTOR之間也可以混合運算。3.4VHDL順序語句順序語句(SequentiaStatements)和并行語句(ConcurrentStatements)是VHDL程序設計中兩大基本描述語句系列。在邏輯系統(tǒng)的設計中,這些語句從多側面完整地描述數(shù)字系統(tǒng)的硬件結構和基本邏輯功能,其中包括通信的方式、信號的賦值、多層次的元件例化以及系統(tǒng)行為等。順序語句是相對于并行語句而言的,其特點是每一條順序語句的執(zhí)行(指仿真執(zhí)行)順序是與它們的書寫順序基本一致的,但其相應的硬件邏輯工作方式未必如此,希望讀者在理解過程中要注意區(qū)分VHDL語言的軟件行為及描述綜合后的硬件行為間的差異。順序語句只能出現(xiàn)在進程(Process)和子程序中。在VHDL中,一個進程是由一系列順序語句構成的,而進程本身屬并行語句,這就是說,在同一設計實體中,所有的進程是并行執(zhí)行的。然而任一給定的時刻內(nèi),在每一個進程內(nèi),只能執(zhí)行一條順序語句。一個進程與其設計實體的其他部分進行數(shù)據(jù)交換的方式只能通過信號或端口。如果要在進程中完成某些特定的算法和邏輯操作,也可以通過依次調用子程序來實現(xiàn),但子程序本身并無順序和并行語句之分。利用順序語句可以描述邏輯系統(tǒng)中的組合邏輯、時序邏輯或它們的綜合體。
VHDL有如下六類基本順序語句:賦值語句、轉向控制語句、等待語句、子程序調用語句、返回語句和空操作語句。3.4.1賦值語句賦值語句的功能就是將一個值或一個表達式的運算結果傳遞給某一數(shù)據(jù)對象,如信號或變量,或由此組成的數(shù)組。VHDL設計實體內(nèi)的數(shù)據(jù)傳遞以及對端口界面外部數(shù)據(jù)的讀/寫都必須通過賦值語句的運行來實現(xiàn)。1.信號和變量賦值賦值語句有兩種,即信號賦值語句和變量賦值語句。變量賦值與信號賦值的區(qū)別在于,變量具有局部特征,它的有效只局限于所定義的一個進程中,或一個子程序中,它是一個局部的、暫時性數(shù)據(jù)對象(在某些情況下)。變量賦值語句和信號賦值語句的語法格式如下:變量賦值目標:=賦值源;信號賦值目標:<=賦值源;在信號賦值中,需要注意的是,當在同一進程中,同一信號賦值目標有多個賦值源時,信號賦值目標獲得的是最后一個賦值源的賦值,其前面相同的賦值目標則不作任何變化?!纠?.4.1】SIGNAS1,S2:STD_LOGIC;SIGNASVEC:STD_LOGIC_VECTOR(0TO7);...PROCESS(S1,S2)ISVARIABLEV1,V2:STD_LOGIC;BEGINV1:=‘1’; --立即將V1置位為1
V2:=‘1’; --立即將V2置位為1
S1<=‘1’; --S1被賦值為1
S2<=‘1’; --由于在本進程中,這里的S2不是最后一個賦值語句故 --不作任何賦值操作
SVEC(0)<=V1; --將V1在上面的賦值1,賦給SVEC(0)SVEC(1)<=V2;--將V2在上面的賦值1,賦給SVEC(1)SVEC(2)<=S1;--將S1在上面的賦值1,賦給SVEC(2)SVEC(3)<=S2;--將最下面的賦予S2的值‘0’,賦給SVEC(3)V1:=‘0’; --將V1置入新值0
V2:=‘0’; --將V2置入新值0
S2:=‘0’; --由于這是S2最后一次賦值,賦值有效,此‘0’將上面準 --備賦入的‘1’覆蓋掉
SVEC(4)<=V1;--將V1在上面的賦值0,賦給SVEC(4)SVEC(5)<=V2;--將V2在上面的賦值0,賦給SVEC(5)SVEC(6)<=S1;--將S1在上面的賦值1,賦給SVEC(6)SVEC(7)<=S2;--將S2在上面的賦值0,賦給SVEC(7)ENDPROCESS;2.賦值目標賦值語句中的賦值目標有四種類型。1)標識符賦值目標及數(shù)組單元素賦值目標標識符賦值目標是以簡單的標識符作為被賦值的信號或變量名。數(shù)組單元素賦值目標的表達形式為數(shù)組類信號或變量名(下標名)
其中,下標名可以是一個具體的數(shù)字,也可以是一個文字表示的數(shù)字名,它的取值范圍在該數(shù)組元素個數(shù)范圍內(nèi)。下標名若是未明確表示取值的文字(不可計算值),則在綜合時,將耗用較多的硬件資源,且一般情況下不能被綜合。標識符賦值目標及數(shù)組單元素賦值目標的使用實例見例3.4.1?!纠?.4.2】VARIABLEA,B:STD_LOGIC_VECTOR(1TO4);A(1TO2):="10";--等效于A(1):=‘1’,A(2):=‘0’A(4DOWNTO1):="1011";--等效于A(4):=‘1’,A(3):=‘0’,A(2):=‘1’,A(1):=‘1’【例3.4.3】SIGNAA,B,C,D:STD_LOGIC;SIGNAS:STD_LOGIC_VECTOR(1TO4);...VARIABLEE,F(xiàn):STD_LOGIC;VARIABLEG:STD_LOGIC_VECTOR(1TO2);VARIABLEH:STD_LOGIC_VECTOR(1TO4);S<=(‘0’,‘1’,‘0’,‘0’);(A,B,C,D)<=S;--位置關聯(lián)方式賦值...--其他語句(3=>E,4=>F,2=>G(1),1=>G(2)):=H;--名字關聯(lián)方式賦值示例中的信號賦值語句屬位置關聯(lián)賦值方式,其賦值結果等效于:
A<=‘0’;B<=‘1’;C
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑導向標識系統(tǒng)施工合同工裝
- 塑膠文物保護合同
- XX中學聘請數(shù)學教師合同
- 眼鏡零售合作社股東合同
- 安全生產(chǎn)國網(wǎng)工作票管理辦法
- 臨時替代用車:汽車租賃合同
- 科研特種車輛數(shù)據(jù)傳輸加密
- 城市管理執(zhí)法辦法城市人才篇
- 美容院安全員聘任合同樣本
- 《保險案例分析》課件
- 《萬維網(wǎng)服務大揭秘》課件 2024-2025學年人教版新教材初中信息技術七年級全一冊
- 2024年新華社招聘應屆畢業(yè)生及留學回國人員129人歷年高頻難、易錯點500題模擬試題附帶答案詳解
- 人教版(2024新版)七年級上冊英語Unit 5單元測試卷(含答案)
- (完整版)新概念英語第一冊單詞表(打印版)
- 美食行業(yè)外賣平臺配送效率提升方案
- 中國民用航空局信息中心招聘筆試題庫2024
- 芯片設計基礎知識題庫100道及答案(完整版)
- 2025屆高考語文一輪復習:文言文概括和分析 課件
- 年產(chǎn)10萬套新能源車電池托盤項目可行性研究報告寫作模板-申批備案
- 《大學美育》 課件 4.模塊五 第二十四章 時空綜合的影視藝術之美
- 2022-2023學年廣東省廣州市天河區(qū)六年級(上)期末數(shù)學試卷(含答案)
評論
0/150
提交評論