VHDL語言的基本結(jié)構(gòu) 一、實體:說明主要描述的是一個設(shè)計單元的外部特征,即對外的輸入/輸出接口及一些用于結(jié)構(gòu)體的參數(shù)定義。 規(guī)則一:建議將VHDL的標(biāo)識符或基本語句關(guān)鍵詞,以大寫方式表示;而又設(shè)計者添加的內(nèi)容有小寫字母表示。 1、GENERIC類屬說明語句 作用:是操作者很容易的改變一個設(shè)計實體或一個元件的內(nèi)部電路的結(jié)構(gòu)和規(guī)模。 結(jié)構(gòu):引到一個類屬參量表,在表中提供時間參數(shù)及總線寬度等內(nèi)部信息。 2、PORT端口說明 常用的端口類別: IN(輸入): 僅允許數(shù)據(jù)流進入端口 用于 時鐘輸入、控制輸入、單項數(shù)據(jù)輸入。 OUT(輸出): 僅允許數(shù)據(jù)流流出端口 用于終端計數(shù)一類的輸出,不能用于反饋。 BUFFER(緩沖):主要用于內(nèi)部的反饋 INOUT(雙向): 也可以用于內(nèi)部的反饋 二、結(jié)構(gòu)體 用來描述設(shè)計的內(nèi)部結(jié)構(gòu)和邏輯功能。 基本結(jié)構(gòu) ARCHITECTURE結(jié)構(gòu)體名>OF實體名> IS [結(jié)構(gòu)體說明部分] BEGIN 并行處理語句> END [ARCHTECTURE結(jié)構(gòu)體名>]; 其中ARCHITECTURE、BEGIN、END 等稱為保留字 結(jié)構(gòu)體說明部分:用于對結(jié)構(gòu)體需要使用的信號、常數(shù)、變量和函數(shù)、過程、元件,進行定義和說明。 功能描述語句: 描述了結(jié)構(gòu)體的主要功能。 三、配置 功能:把特定的結(jié)構(gòu)體關(guān)聯(lián)到一個確定的實體,是為較大的系統(tǒng)設(shè)計提供管理和工程組織服務(wù)的。在仿真一個實體時可以利用配置進行不同結(jié)構(gòu)體的對比試驗。 多結(jié)構(gòu)體的實體 基本結(jié)構(gòu): CONFIGURATION 配置名 OF 實體名 IS FOR 選配結(jié)構(gòu)體名 END FOR; END:配置名; 四、庫 定義:用于存放定義好的數(shù)據(jù)單元、子程序等設(shè)計單元的集合。 1、VHDL的5種庫 IEEE庫: STD庫: ASIC庫: WORK庫:用于存放設(shè)計者描述的VHDL語句。 用戶定義庫:將自己使用的包集合和實體等匯集在一起,定義成的一個庫。 上述5種庫中,除了STD庫和WORK庫外,其他庫均屬于資源庫使用的時候都需要進行說明。 說明的方法: LIBRARY 庫名; --說明使用什么庫 USE 包集合名; --說明使用庫中哪一個包集合及包集合中的項目等。 2、VHDL程序包 功能:主要用來存放各個設(shè)計實體能共享的數(shù)據(jù)類型、子程序說明、屬性說明和元件說明等部分。 程序包有兩個部分構(gòu)成: 程序包首:對數(shù)據(jù)類型、子程序、常量、元件、屬性和屬性指定等進行說明。 程序包體:由包首指定的過程和函數(shù)的程序體組成,用來規(guī)定程序包的實際功能。 使用這個程序包的所有定義,可用USE語句訪問此程序包 LIBRARY WORK; USE WORK.PAC1.ALL ---訪問程序包 3、常用的預(yù)定義的程序包 VHDL語言要素 即編程語句的基本單元 一、VHDL語法規(guī)則 這里主要介紹其特有的語法規(guī)則 1、數(shù)學(xué)表示 整數(shù):都是十進制的數(shù) 5,678,0,156E2(=15600),45_234_287(=45234287) 下劃線只是為了提高數(shù)字的可讀性,并沒有其他影響。 實數(shù):都是十進制的數(shù) ,但是必須有小數(shù)點。 以數(shù)值基數(shù)表示的數(shù)字: 10#170# --(十進制數(shù)表示,等于170) 2#1111_1110# --(二進制數(shù)表示,等于254) 注:上面省略了最后一位,用于表示十進制數(shù)表示的指數(shù)部分當(dāng)為0時,可以進行省略 注:實數(shù)一般不可綜合實現(xiàn),物理量(帶有單位的)一般不可綜合實現(xiàn) 2、字符串型文字 字符放在單引號中 字符串放在雙引號中。 3、數(shù)位字符串 B“1_1101_1110” O”34” X”1AB” 4、標(biāo)識符 用來定義常數(shù)、端口、變量、信號、子程序、或參數(shù)的名字。規(guī)則通C語言。 5、下標(biāo)名 即表示數(shù)組中的某一個數(shù)。 二、VHDL數(shù)據(jù)對象 有三種:常量(constant)、變量(VARIBLE)和信號(SIGNAL) 前兩者對應(yīng)傳統(tǒng)的機器語言,信號具有更多的硬件特征 1、常量(CONSTANT) 一般用來代表數(shù)字電路中的電源、地、恒等邏輯值等常數(shù)。 常量的使用范圍取決于它被定義的位置。即在程序包中定義可在整個程序包中使用,在實體中定義,有效范圍為這個實體定義的所有結(jié)構(gòu)體;定義在結(jié)構(gòu)體中只能用于該結(jié)構(gòu)體;定義在結(jié)構(gòu)體中某一單元如一個進程則只能用在這個進程當(dāng)中。 2、變量 常用在實現(xiàn)某些算法的賦值語句當(dāng)中,只是個局部變量,只能在進程和子程序中使用。(是一種理想化的數(shù)據(jù)傳輸,不存在任何的延時行為) 3、信號 表示一條硬件連接線:如輸入輸出端口,描述硬件系統(tǒng)的基本數(shù)據(jù)對象。 4、三者的比較 三、數(shù)據(jù)類型 1、標(biāo)注數(shù)據(jù)類型 (1)、Integer(整形),取值范圍-(2^31-1)~(2^31-1) ?。?)、Real,取值范圍-1.0E+38~+1.0E+38,綜合工具常常不支持 ?。?)、Bit(位),只取0或1,描述信號取值 ?。?)、Bit_Vector(位矢量),每位只取兩個值 (5)、Boolean(布爾量),TRUE和FALSE (6)、Character(字符) (7)、String ?。?)、Time ?。?)、Natural(自然數(shù))和Positive(正整數(shù)) 0~(2^31-1) ?。?0)、Severity Level(錯誤等級):Note,Warning,Error,F(xiàn)ailure。 2、標(biāo)準(zhǔn)邏輯類型 ?。?)STD_LOGIC類型 'U’——初始值 'X’——不定態(tài) '0’——強制0 '1’——強制1 'Z’——高阻態(tài) 'W’——弱信號不定態(tài) 'L’——弱信號0 'H’——弱信號1 '_’——不可能情況(可忽略值) ?。?)STD_LOGIC_VECTOR 3、用戶自定義數(shù)據(jù)類型 ?。?)、枚舉(Enumerated) TYPE STD_LOGIC IS ('U’,’X’,’0’,’1’,’Z’,’W’,’L’,’H’,’_’); ?。?)數(shù)組(ARRAY) TYPE 數(shù)據(jù)類型名IS ARRAY (范圍) OF 元素類型名; ?。?)子類型(SYBTYPE) 用來定義含有限制條件的數(shù)據(jù)類型 SYBTYPE 類型名 IS 數(shù)據(jù)類型名【約束范圍】 4、數(shù)據(jù)類型的轉(zhuǎn)換 三、操作符 注意點 : (1)、&并置操作符 前后的數(shù)組長度應(yīng)該一致 (2)、**乘方 左邊可以是整數(shù)或浮點數(shù) 但右邊一定是整數(shù) ?。?)、操作符能夠產(chǎn)生邏輯電路,但就效率而言使用常數(shù)或簡單的一位數(shù)據(jù)類型能夠產(chǎn)生較為緊湊的電路。 順序語句 一、賦值語句 變量賦值 變量名:=表達式 信號賦值 信號名信號變量表達式 二、IF語句 三、CASE語句 四、LOOP語句 1、FOR LOOP循環(huán) 用于規(guī)定重復(fù)次數(shù)的情況 [標(biāo)號]: FOR 循環(huán)變量 IN 離散范圍 LOOP 順序處理語句; END LOOP [標(biāo)號]; 2、WHILE LOOP循環(huán) [標(biāo)號]:WHILE 循環(huán)條件 LOOP 順序處理語句; END LOOP [標(biāo)號] ; 五、跳出循環(huán)語句 NEXT [循環(huán)標(biāo)號] [WHEN 條件]; 有條件或者無條件的結(jié)束當(dāng)前循環(huán)開始下一次循環(huán) EXIT [標(biāo)號] [WHEN 條件]; 當(dāng)條件為真時跳出LOOP至程序標(biāo)號處。如果后面什么都沒有,則無條件的跳出,繼續(xù)執(zhí)行后繼語句。 六、RETRUN語句 只能用在函數(shù)和過程當(dāng)中,用來結(jié)束當(dāng)前最內(nèi)層的函數(shù)或過程體的執(zhí)行。 RETURN 表達式; --只能用在函數(shù)體中,必須返回一個值 RETURN ; ---只能用在過程體中。 七、NULL語句 常用在CASE語句中 OTHERS的后面,即其他的情況什么都不做。 并行語句 特點:在結(jié)構(gòu)體中的執(zhí)行時同步執(zhí)行的。并發(fā)語句之間可以可以有信息往來,也可以是相互獨立、互不相關(guān)、異步執(zhí)行的(如多時鐘情況)。 一、并行信號賦值語句 1、并發(fā)信號賦值語句 實際上是一個進程的縮寫,當(dāng)信號賦值符號“”右邊的信號發(fā)生任何變化時,該信號賦值語句就執(zhí)行一次。 q 這里tmp3就相當(dāng)于進程括號中的敏感信號。當(dāng)期發(fā)生變化時就開始執(zhí)行該語句。 2、條件信號賦值 根據(jù)不同的條件,將不同的值賦給信號 信號名表達式1 WHEN 條件 ELSE 表達式2 WHEN 條件 ELSE 表達式3 WHEN 條件 ELSE 表達式4 WHEN 條件 ELSE 。。。。。。。。。 3、選擇信號賦值 WITH 條件表達式 SELECT 目標(biāo)信號表達式1 WHEN 選擇條件1, 表達式2 WHEN 選擇條件2, 表達式3 WHEN 選擇條件3, 表達式4 WHEN 選擇條件4, 。。。。。。。。。。。; 二、進程(PROCESS)語句 特點:(1)一個結(jié)構(gòu)體中的多個進程可以并發(fā)的執(zhí)行,并可存取結(jié)構(gòu)體或?qū)嶓w所定義的信號。 (2)進程中所有語句都是順序執(zhí)行的 ?。?)必須包含一個顯示的敏感信號表或者一個WAIT語句。 ?。?)進程之間的通信是通過信號量傳遞實現(xiàn)。 [進程標(biāo)號:] PROCESS [(敏感信號參數(shù)表)] [進程說明部分] BEGIN 順序描述語句 END PROCESS [進程標(biāo)號]; 進程說明部分用于定義該進程所需要的變量、數(shù)據(jù)類型、屬性、子程序等,但不能定義信號及共享變量 進程的激活必須有敏感信號的變化或者相應(yīng)的WAIT語句 WAIT: WAIT; ——永遠掛起,無限等待 WAIT ON 敏感信號表; ——一旦變化,進程啟動 WAIT UNTIL 條件表達式; ——條件等待 WAIT FOR 時間表達式; —— 子程序 與進程的區(qū)別:進程可以從本結(jié)構(gòu)體的其他模塊或進程結(jié)構(gòu)體中,直接讀取信號或者向信號賦值而子程序不行。 特點:1、一般在程序包中調(diào)用,這樣可以在幾個不同的設(shè)計來調(diào)用(可在結(jié)構(gòu)體、進程、及程序包中調(diào)用) 2、可重載,幾個同名,但返回值類型不同 3、過程可返回多個值,而函數(shù)只能返回一個值。 4、函數(shù)所有參數(shù)為輸入?yún)?shù),過程有輸入?yún)?shù)、輸出參數(shù)、還有雙向參數(shù)。 一、過程 包括過程首和過程體兩部分: 首定義過程接口,體描述具體算法。 PROCEDURE 過程名> ?。▍?shù)名[,參數(shù)名。。。]:[端口模式]數(shù)據(jù)類型; 參數(shù)名[,參數(shù)名。。。]:[端口模式]數(shù)據(jù)類型; 。。。。。。。。。) ——定義過程首 PROCEDURE過程名> (參數(shù)名[,參數(shù)名。。。]:[端口模式]數(shù)據(jù)類型; 參數(shù)名[,參數(shù)名。。。]:[端口模式]數(shù)據(jù)類型; 。。。。。。。。。) IS [過程說明部分;] BEGIN 過程語句部分>; END [PROCEDURE] 過程名>; ——定義過程體 二、函數(shù) 在程序包中定義一定要有函數(shù)首,在進程或結(jié)構(gòu)體中定義不必定義函數(shù)首 FUCTION 函數(shù)名 輸入?yún)?shù)表 RETURN 數(shù)據(jù)類型; ——函數(shù)首 FUCTION 函數(shù)名 輸入?yún)?shù)表 RETURN 數(shù)據(jù)類型 IS ——函數(shù)體 [說明語句]; BEGIN 順序語句; RETURN [返回變量名]; ——函數(shù)返回值 END FUCTION 函數(shù)名; 注:函數(shù)參數(shù)的數(shù)據(jù)類型只能包。括常量和信號,參數(shù)端口模式只能是IN ,因此參數(shù)的端口模式可以省略。 VHDL語言描述風(fēng)格 VHDL的結(jié)構(gòu)體具有描述整個設(shè)計實體的邏輯功能 對于所想要實現(xiàn)的電路可以有不同的語句表達式,這種不同的描述方式或者說建模方法,成為描述風(fēng)格 一、行為描述 只描述了所希望的硬件電路的功能,沒有直接指明或者描述這些行為的電路結(jié)構(gòu)。 這種方法是VHDL語言的核心是區(qū)別于RTL級硬件語言的Verilog 的根本區(qū)別。 特點:大量使用算術(shù)運算、關(guān)系運算、慣性延時、傳輸延時等VHDL語句。 二、數(shù)據(jù)流描述 也稱為寄存器傳輸(RTL)描述方式。 特點:主要使用AND OR等。 三、結(jié)構(gòu)化描述 描述建模步驟: (1)原件說明,用于說明原件的調(diào)用,并描述該元件的接口 ?。?)原件例化,指定原件的安放位置,并確定與其他元件放置的連線關(guān)系 (3)原件配置,指定原件所用的設(shè)計實體 1、原件描述語句: COMPONENT GENERIC 用于該元件的可變參數(shù)的代入或賦值。 2、結(jié)構(gòu)例化語句 該語句將現(xiàn)成的元件端口號映射成高層次設(shè)計電路中的信號。 Instance_name : component_name PORT MAP ( Component_port=> connect_port, _component_port=>connect_port ); 3、編寫結(jié)構(gòu)描述程序的主要步驟 (1)繪制框圖 ?。?)原件說明 (3)信號說明 ?。?)元件例化 (5)添加必要的框架。 有限狀態(tài)機電路設(shè)計 狀態(tài)機是按照預(yù)先設(shè)定的狀態(tài)順序一次運行的,是純硬件的順序控制電路 一、有限狀態(tài)機概述組合 有限狀態(tài)機是指輸出取決于輸入信號和當(dāng)前所處狀態(tài)的時序邏輯電路 有限狀態(tài)機可以認為是組合邏輯和寄存器邏輯的一種組合。其中,寄存器邏輯的功能是存儲有限狀態(tài)機的的內(nèi)部狀態(tài);而組很邏輯又可分為次態(tài)邏輯和輸出邏輯兩部分,次態(tài)邏輯的功能是確定有限狀態(tài)機的下一個狀態(tài),輸出邏輯的功能是確定有限狀態(tài)機的輸出。 Moore型:輸出僅與當(dāng)前狀態(tài)有關(guān) Mealy型:輸出與當(dāng)前狀態(tài)和輸入信號均有關(guān)系。 二、VHDL描述模式 1、實體部分 輸入、輸出端口 2、說明部分 就是兩句話 3、狀態(tài)轉(zhuǎn)換進程 根據(jù)外部輸入的控制信號和當(dāng)前狀態(tài)的狀態(tài)值確定下一狀態(tài)的去向 4、時序控制進程 說明狀態(tài)何時轉(zhuǎn)換的進程 5、輔助進程 |
|