VHDL基礎 學習筆記

最近一直忙着學校裏的活動,因此沒怎麼更新,上週活動忙完了,正好也藉着數電實驗的機會,從新學習一下VHDL的編程。如下是轉自360doc的教程:算法

——————————————————————————————————————————————————————————————————————————編程

 

(本學習以MAXPLUS10爲工具軟件)數組

第一章、 VHDL程序的組成 一個完整的VHDL程序是如下五部分組成的: 庫(LIBRARY):儲存預先已經寫好的程序和數據的集合 程序包(PACKAGE):聲明在設計中將用到的常數、數據類型、元件及子程序 實體(ENTITY):聲明到其餘實體或其餘設計的接口,即定義本定義的輸入輸出端口 構造體(ARCHITECTUR):定義實體的實現,電路的具體描述 配置(CONFIGURATION):一個實體能夠有多個構造體,能夠經過配置來爲實體選擇其中一個構造體 1.1庫 庫用於存放預先編譯好的程序包(PACKAGE)和數據集合體,能夠用USE語句調用庫中不一樣的程序包,以便不一樣的VHDL設計使用。併發

庫調用的格式: LIRARY 庫名 USE 庫名.所要調用的程序包名.ALL編程語言

能夠這樣理解,庫在硬盤上的存在形式是一個文件夾,好比庫IEEE,就是一個IEEE的文件夾,能夠打開MAX PLUSR安裝源文件夾,進入VHDL93的文件夾,就能夠看到一個IEEE的文件夾,這就是IEEE庫,而裏面的文件就是一個個對程序包或是數據的描述文件,能夠用文本打開來查看文件的內容。函數

例如在VHDL程序裏面常常能夠看到「USE IEEE.STD_LOGIC_1164」,能夠這樣解釋這句話,本序裏要用到IEEE文件夾下程序包STD_LOGIC_1164,而STD_LOGIC_1164是能夠在IEEE文件夾的STD1164.vhd文件裏面看到的,用文本打開STD1164.vhd,能夠看到有一名爲「IEEE.STD_LOGIC_1164」PAKAGE定義。工具

簡單的來講,庫至關於文件夾,而程序包和數據就至關於文件夾裏面的文件的內容(注意:不是至關於文件,由於程序包和數據都是在文件裏面定義的,而文件名是和實體名相同的,能夠說實體至關於文件)。性能

到了這裏就能夠考慮一個問題,「在安裝MAX PLUS時有多少個庫已經存在的呢」,要獲得這個問題的答案,能夠打開安裝目錄下的「VHDL93」文件夾,就能夠看到裏面有五個文件夾,分別是ATERA、IEEE、LPM、STD、VITAL,也就是說你看到了五個庫,分別是 ATERA功能庫:加強型功能部件,即IP核,包括數字信號處理、通訊、PCI和其餘總線接口、處理器和外設及外設的功能。 IEEE庫:由IEEE(美國電子電機工程師學會)制定的標準庫 LPM庫:參數可調模塊庫 STD庫:符合VHDL標準的庫 VITAL庫:vhdl上對asic提供高精確度及高效率的仿真模型庫學習

調用庫的表達有兩種,一是顯式表式,就是用LIBRARY和USE來調用庫裏面的程序包或數據,適用於那些不符合VHDL標準的庫調用,好比IEEE庫;另外一種是隱式表式,就是不用說明就自動調用的,適合於符合VHDL標準的庫調用,好比STD庫,不用寫明調用就已經自動調用出來了。設計

除了上面所介紹的庫外,還有用戶自定義庫及WORK庫,WORK庫是用戶的VHDL現行工做庫,從上面的理解可知,WORK庫就是用戶當前編輯文件所在的文件夾,文件夾裏面的其餘文件裏面所描述包或數據的集合就是WORK庫裏面的包和數據的集合。因爲WORK庫自動知足VHDL標準,所以在就應用中沒必要以顯式預先說明(好比 LIBRARY WORK這樣的定義是多餘的)。

1.2程序包 在VHDL中,常量、數據類型與子程序能夠在實體說明部分和結構體部分加以說明,且實體說明部分所定義的常量、數據類型與子程序在相應的結構體中是可見的(能夠被使用的),但在一個實體的說明部分與結構體的部分對於其餘實體的說明部分與結構部分是不可見的(注:實體至關於一個文件),程序包(PACKAGE)就是爲了使一組常量說明、數聽說明、子程序說明和元件說明等內容對於多個設計實體都成爲可見的而提供的一種結構,能夠這樣理解一個實體(文件)裏的PACKAGE對常量等的定義在其於的實體(文件)裏是能夠被使用的。

程序包由包頭和包體構成,包頭格式: PACKAGE 程序包名 IS    說明語句; END 程序包名;

說明語句部分可爲:USE語句、類型定義、子程序聲明(定義在包體)、常量定義、信號聲明、元件聲明等。

包體格式: PACKAGE BODY 程序包名 IS 說明語句; END 程序包名

說明部分用於子程序的定義,注:在包中對子程序的說明分爲兩部分,子程序聲明放在包頭,子程序的定義在包體。

實體對於程序包不是自動可見(即不是自動就設爲使用)的,爲了使用程序包說明的內容就必須在實體的開始加上USE語句(便是要用USE來調用程序包裏面所說明的東西),即便實體和程序包是在同一個文件裏也要這樣調用。

1.3實體 實體(ENTITY)是VHDL設計中最其本的組成部分之一(另外一個是結構體),VHDL表達的全部設計均與實體有關。 實體相似於原理圖中的一個部件符號,它並不描述設計的具體功能,只是定義所需的所有輸入/輸出信號。 實體格式以下: ENTITY 實體名 IS [GENERIC(常數名:數據類型[:設定值])]         類屬說明    PORT                                       端口說明    (端口信號名1: 模式 類型; 端口信號名2: 模式 類型; 端口信號名3: 模式 類型; 端口信號名4: 模式 類型); TYPE語句或常量定義                       實體申明 並行語句                                   實體語句 END 實體名;

實體名:MAXPLUSII要求實體名必須與VHDL文件名相同,不然編譯會出錯。

類屬參量:用於爲設計實體和其外部環境通訊的靜態信息提供通道,能夠定義端口的大小、實體中元件數目及實體的定時特性等等;帶有GENERIC的實體所定義的元件叫作參數化元件,即元件的規模或特性由GENERIC的常數決定,在GENERIC所定義的常數是能夠在引用過程當中修改的,所以利用GENERIC能夠設計更加通用的元件,彈性地適應不一樣的應用。

端口信號名:端口信號名在實體之中必須是惟一的,信號名應是合法的標識符 端口模式:分別有IN、OUT、INOUT、BUFFER和LINKAGE,這五種類型在後面的章節將介紹到。 端口類型:經常使用的有INTEGER、STD_LOGIC、STD_LOGIC_VECTOR,有待後面章節介紹。

實體申明:實體申明部分應放在端口說明的下面,實體申明部分用於定義實體接口中的公共信息,例如能夠用來定義新的數據類型和常量定義等。

實體語句:是每一設計實體接口的公共部分,實體語句只能由並行斷言語句、並行過程調用語句和被動進程語句,注意,這些實體語句部分應該是被動語句,即在語句中不含有信號賦值語句。

1.4結構體 全部能被仿真的實體都由結構體(ARCHITECTURE)描述,即結構體描述實體的結構或行爲,一個實體能夠有多個結構體,每一個結構體分別表明該實體功能的不一樣實現方案。

結構體格式: ARCHITECTURE 結構體名 OF 實體名 IS [定義語句(元件例化);] BEGIN 並行處理語句; END 結構體名;

結構體名是對本結構體的命名,它是該結構體的唯一名稱,雖然能夠由設計人員自由命名,但通常都將命名和對實體的描述結合起來,結構體對實體描述有三種方式(括號中爲命名): 1) 行爲描述(BEHAVE):反映一個設計的功能和算法,通常使用進程PROCESS,用順序語句表達; 2) 結構描述(STRUCT):反映一個設計硬件方面的特徵,表達了內部元件間鏈接關係,使用元件例化來描述; 3) 數據流描述(DATAFLOW):反映一個設計中數據從輸入到輸出的流向,使用並行語句描述。

1.5配置 一個實體能夠用多個結構體描述,具體綜合時,選擇哪個結構體來綜合,由配置來肯定,仿真時用配置語句進行配置能節省大量時間。 配置格式: CONFIGURATION 配置名 OF 實體名IS FOR 選配結構體名; END FOR;      END CONFIGURATION;

第二章、 數據類型、算符、數據對象、屬性 2.1 標識符 VHDL標識符由大小寫字母、數字和下劃線構成,不區分大小寫

2.2 數據對象 在邏輯綜合中,VHDL經常使用的數據對象有信號、變量及常量。 1) 信號SIGNAL,爲全局變量,在程序包說明、實體說明、結構體描述中使用,用於聲明內部信號,而非外部信號(外部信號爲IN、OUT、INOUT、BUFFER),其在元件之間起互聯做用,能夠賦值給外部信號。 定義格式: SIGNAL 信號名: 數據類型[:=初始值]; 賦值格式: 目標信號名<=表達式 常在結構體中用賦值語句完成對信號賦初值的任務,由於綜合器每每忽略信號聲名時所賦的值。

2) 變量(VARIABLE),只在給定的進程中用於聲明局部值或用於子程序中,變量的賦值符號爲「:=」,和信號不一樣,信號是實際的,是內部的一個存儲元件(SIGNAL)或者是外部輸入(IN、OUT、INOUT、BUFFER),而變量是虛的,僅是爲了書寫方便而引入的一個名稱,經常使用在實現某種算法的賦值語句當中。 定義格式: VARIABLE 變量名: 數據類型[:=初始值]

3) 常量,全局變量,在結構體描述、程序包說明、實體說明、過程說明、函數調用說明和進程說明中使用,在設計中描述某一規定類型的特定值不變,如利用它可設計不一樣模值的計數器,模值存於一常量中,對不一樣的設計,改變模值僅需改變此常量便可,就如上一章所說的參數化元件。 定義格式: CONSTANT 常數名:數據類型:=表達式;

4) 信號和變量最大的不一樣在於,若是在一個進程中屢次爲一個信號賦值,只有最後一個值會起做用,而當爲變量賦值時,變量的值改變是當即發生的。

2.3 數據類型 VHDL是一種強類型語言,對於每個常數、變量、信號、函數及設定的各類參量的數據類型(DATA TYPES)都有嚴格要求,相同數據類型的變量才能互相傳遞和做用,標準定義的數據類型都在VHDL標準程序表STD中定義,實際使用中,不須要用USE語句以顯式調用。    VHDL經常使用的數據類型有三種:標準定義的數據類型、IEEE預約義標準邏輯位與矢量及用戶自定義的數據類型。 1) 標準定義的數據類型 Boolean布爾量:取值爲FALSE和TRUE CHARACTER字符:字符在編程時用單引號括起來,如‘A’ STRING字符串:雙引號括起來,如「ADFBD」 INTEGER整數:整數範圍從-(231-1)到(231-1); REAL實數:實數類型僅能在VHDL仿真器中使用,綜合器不支持 BIT位:取值爲0或1; TIME時間:範圍從-(231-1)到(231-1),表達方法包含數字、(空格)單位兩部分,如(10 PS); BIT_VECTOR位矢量:其於BIT數據的數組,使用矢量必須註明寬度,即數組中的元素個數和排列,如SIGNAL A: BIT_VECTOR(7 DOWNTO 0) NATUREAL天然數:整數的一個 POSITIVE正整數: SEVRITY LEVEL錯誤等級:在VHDL仿真器中,錯誤等級用來設計系統的工做狀態,共有四種可能的狀態值:NOTE,WARNING,ERROR和FAILURE 2) IEEE預約義的標準邏輯位與矢量 STD_LOGIC::工業標準的邏輯類型,取值爲‘0’、‘1’、‘Z’、‘X’(強未知)、‘W’(弱未知)、‘L’(弱0)、‘H’(弱1)、‘—’(忽略)、‘U’(未初始化),只有前四種具備實際物理意義,其餘的是爲了與模擬環境相容才保留的。 STD_LOGIC_VECTOR:工業標準的邏輯類型集,STD_LOGIC的組合。

3) 用戶自定義的數據類型 有四種,分別是枚舉類型、整數類型和實數類型、數組類型、記錄類型 枚舉類型: TYPE 數據類型名 IS (枚舉文字,枚舉文字,. . . .) 整數類型與實數類型是標準包中預約義的整數類型的子集,因爲綜合器沒法綜合未限定範圍的整數類型的信號或變量,故必定要用RANGE子句爲所定義整數範圍限定範圍以使綜合器能決定信號或變量的二進制的位數。 格式:   TYPE 數據類型名 IS RANGE 約束範圍;     (如-10到+10)

數組類型: TYPE 數據類型名 IS ARRAY(下限 TO 上限) OF 類型名稱

記錄類型: TYPE 記錄類型名 IS RECODE 元素名: 數據類型名; 元素名: 數據類型名; 。。。。。。。。。。。。。 END RECODE

2.4 運算符 VHDL爲構造計算數值的表達式提供了許多預約義運算符,可分爲四種類型:算術運算符,關係運算符,邏輯運算符與鏈接運算符。 算術運算符:+、-、*、/、**、MOD、REM、ABS 關係運算符:=、/=、<、<=、>、>= 邏輯運算符:AND、OR、NOT、NAND、NOR、XOR、NOR 鏈接運算符:&,將多個對象或矢量鏈接成維數更大的矢量

2.5 VHDL屬性 屬性是關於實體、結構體、類型及信號的一些特徵,有些屬性對於綜合很是有用,其通常形式均爲: 對象’屬性。 1) 數值類屬性 用於返回數組、塊或通常數據的有關值 通常數據的數值屬性:LEFT,RIGHT,LOW,HIGH 數組的數值屬性:LENGH 塊的數值屬性:BEHAVIOR,不含有元件COMPONENT例化信息時返回TRUE;STRUCTURE含有元件實例化或有被動進程時,則返回TURE。(注:被動進程定義是在進程定義中沒有代入語句)

2) 函數類屬性 以函數的形式,使設計人員獲得有關數據類型、數組、信號的某些信息。 數據類型屬性函數:POS(X)獲得輸入X值的位置序號、VAL(x)獲得輸入位置序號的X值,SUSS(x),PRED(x),LEFTOF(x),RIGHTOF(x) 數組屬性函數:LEFT(n),RIGHT(n),HIGH(n),LOW(n)

3) 數據類型屬性,這類屬性類函數僅一個,即BASE

4) 數據區間類的屬性,RANGE[(N)]和REVERS_RANGE[(N)]

用戶自定義的屬性,格式   ATTRIBUTE 屬性名 OF 目標名:目標集合 IS 表達式以函數的形式,使設計人員獲得有關數據類型、 第三章、 順序語句與並行語句 順序語句和並行語句是VHDL程序設計中兩大基本描述語句系列。 3.1順序語句 順序語句的特色從仿真的角度來看是每一條語句的執行按書寫順序進行,順序語句只能出如今塊語句、進程和子程序內部,順序控制方式有兩種,一是條件控制(IF和CASE語句),一是迭代控制(LOOP語句和ASSERT語句),有10種基本類型 1) 賦值語句 賦值語句分爲變量賦值和信號賦值,它們的賦值是有區別的。 首先在格式上,變量賦值格式爲「變量名:=表達式」,而信號的賦值格式爲「信號名<=表達式」; 其次體如今所用的地方,變量說明和使用都只能在順序語句中(進程、函數、過程和塊模塊),而信號的說明只能在同步語句中,但能夠在順序語句和同步語句中使用; 再次體如今賦值過程,變量的賦值是當即的,而信號的賦值的執行和信號值的更新至少要延時DELTA延時,只有延時後信號才能獲得新值,不然將保持原值,在進程中,信號賦值在結束時起做用。

2) WAIT語句 WAIT語句屬於敏感信號激勵信號,一個進程語句含有敏感信號時,進程中不能出現WAIT等待語句;當進程語句不含有敏感信號時,進程語句必須含有其餘形態的敏感信號激勵。WAIT語句有五種形式: WAIT   ——無限等待; WAIT ON (敏感信號1,敏感信號2,敏感信號N) ——敏感信號變化,表中的信號產生變化時才往下運行; WAIT UNTIL 布爾表達式 ——爲TRUE時,進程啓動,爲FARLSE是等待 WAIT FOR 時間表達式 ——到時進程纔會啓動 WAIT UNTIL 布爾表達式 ON (敏感信號1,敏感信號2,敏感信號N) FOR 時間表達式 ——多條件等待語句,注意在多條件等待語句的表達式中,至少應有一個信號量,由於處於等待進程中的變量是不可改變的。

3) IF語句 這種語句在其餘編程語言也有,不用多講,其完整的書寫格式 [IF標號:] IF <條件> THEN <順序處理語句>; [ELSIF <條件> THEN <順序處理語句>;] ……. [ELSE <順序處理語句>;] END IF [IF標號]

4) CASE語句 CASE語句是另外一種形式的流程控制語句,可讀性比IF的強,格式以下 CASE 〈條件表達式〉 IS WHEN 〈條件取值〉 =>順序處理語句; WHEN 〈條件取值〉 =>順序處理語句; WHEN 〈條件取值〉 =>順序處理語句; WHEN   OTHERS =>順序處理語句; END CASE; 上面的〈條件取值〉有三種格式可選 條件表達式取值 條件表達式取值|條件表達式取值|條件表達式取值| 條件表達式取值 TO 條件表達式取值

5) LOOP循環語句 LOOP語句與其餘高級編程語言中的循環語句同樣,可使程序進行有規律的循環,循環的次數受迭代算法的控制,一個LOOP語句可包含要重複執行的一組順序語句,它能夠執行屢次或是零次。 LOOP格式 [LOOP 標號:] [重複模式]LOOP 〈順序處理語句〉; END LOOP [LOOP標號]; 重複模式有兩種,FOR模式和WHILE模式。

FOR模式的LOOP語句格式: [LOOP標號:] FOR 循環變量 IN 離散範圍 LOOP 〈順序處理語句〉; END LOOP [LOOP標號];

WHILE模式的LOOP語句格式: [LOOP標號:] WHILE〈條件〉LOOP 〈順序處理語句〉; END LOOP[LOOP標號];

6) NEXT和EXIT語句 這兩種語句都是用於跳出LOOP循環的,NEXT語句是用來跳出本次循環的,而EXIT語句是用於跳出所有循環的。 格式 NEXT或EXIT [LOOP標號] [WHEN條件]

7) NULL空操做語句,書寫格式爲「NULL;」,惟一的做用是使程序流程運行到下一個語句,經常使用於CASE語句當中 8) RETURN語句 用在一段子程序結束後,用來返回到主程序的控制語句,通常狀況之下,有兩種書寫格式,分別是 RETURN;   —只能用於進程返回 RETURN 表達式;——只能用於函數返回

在實際的應用中,通常的VHDL綜合工具要求函數中只能包含一個RETURN,並規定這條RETURN語句只能寫在函數末尾,但一些VHDL綜合工具容許函數中出現多個RETURN語句。

9) ASSERT斷言語句 主要用於程序仿真、調試中的人機對話,它能夠給出一個文字串做爲警告和錯誤信息,基本書寫格式以下: ASSERT〈條件〉 REPORT〈輸出信號〉   ——字符串 SEVERITY〈錯誤級別〉;——有四種NOTE、WARNING、ERROR和FAILURE

若是程序在仿真或調試過程當中出現問題,斷方語句就會給出一個文字串做爲提示信息,當程序執行到斷言語句時,就會對ASSERT條件表達式進行判斷,若是返回值爲TRUE則斷言語句不作任何操做,程序向下執行,若是返回值爲FALSE,則輸出指定的提示信息和出錯級別。

斷言語句能夠分爲順序斷言語句和並行斷言語句。

10) REPORT語句 報告語句是93版VHDL標準提供的一種新的順序語句,該語句沒有增長任何功能,只是提供了某些形式的順序斷言語句的短格式,也算是ASSERT語句的一個精簡,格式以下: REPORT 〈輸出信息〉[SEVERITY〈出錯級別〉]

3.2並行語句 並行語句在結構體中的執行都是同時進行的,即它們的執行順序與語句的書寫無關,這種並行性是由硬件自己並行性決定的,即一旦電路接通電路,它的各部分就會按照事先設計好的方案同時工做,VHDL有六種並行語句 1) 並行信號賦值語句 信號賦值語句至關於一個進程(用於單個信號賦值)的簡化形式,用在結構體中並行執行,信號賦值語句提供了三種賦值方式,用來代替進程可令程序代碼大大簡化。 [注:這裏要注意,信號賦值語句在順序語句裏面也有,順序語句裏能夠給信號賦值也能夠給變量賦值,而順序語句裏只能對變量說明,不能對信號說明;並行語句恰好相反。] [思考:什麼變量不能在並行語句裏面說明呢?爲何信號不能在順序語句裏面說明呢?由於信號是全局的,變量是局部的,用來保存中間變量的]

賦值方式一 併發信號賦值語句,格式「信號名<=表達式」,等效於進程語句,表達式中的信號就是進程語句中的敏感激勵信號(注:進程必須含有敏感激勵信號,請看下面章節介紹)

賦值方式二 條件信號賦值語句,格式以下 目標信號<=表達式1   WHEN 條件1 ELSE 表達式2   WHEN 條件2 ELSE 表達式3   WHEN 條件3 ELSE 表達式4 

注:條件賦值語句與IF語句不一樣之處 一、 以上條件賦值語句不能進行嵌套,而IF是能夠的 二、 因爲條件信號賦值語句是並行語句,必須用在結構體中的進程以外(進程是用順序語句來編寫的),而IF是順序語句 三、 條件信號賦值語句ELSE是必須有的,而IF可沒有 四、 條件信號賦值語句與實際的硬件電路十分接近,所以使用該語句要求設計人員具備硬件電路知識,而IF通常用來進行硬件電路的高級描述,它不要求太多的硬件電路知識。 五、 通常狀況下不多用條件賦值語句,只有當用進程語句、IF語句和CASE語句難以對路進行描述時才用

賦值方式三 選擇信號賦值語句,格式以下 WITH 選擇條件表達式 SELECT 目標信號<=信號表達式1   WITH 選擇條件1 信號表達式2   WITH 選擇條件2 信號表達式3 WITH 選擇條件3 信號表達式4   WITH OTHERS

注:選擇信號賦值語句是一種並行語句,不能在結構體中的進程內部使用

2) 塊語句 在VHDL語言設計中,塊語句經常用來對比較複雜的結構體做結構化描述,格式以下 [塊標號:] BLOCK [衛式表達式] [類屬子句;] [端口子句;] [塊說明部分;] BEGIN <塊語句說明部分;> END BLOCK[塊標號];

衛式表達式:是一個布爾條件表達式,只有當這個表達式爲TURE時,BLOCK語句才被執行; 類屬子句:塊的屬性說明 塊說明部分:用於定義USE、子程序、數據類型、子類型、常量、信號和元件 塊語句說明部分:用於描述塊的具體功能,能夠包含結構塊中的任何並行語句結構。

注:塊語句的做用就是將一個大的結構劃成一塊一塊小的結構。

 

3) 進程語句 進程語句是一種應用普遍的並行語句,一個結構體中能夠包括一個或者多個進程語句,結構體中的進程語句是併發關係,即各個進程是同時處理的、並行執行的;但在第一個進程語句結構中,組成進程的各個語句都是順序執行,在進程語句中是不能用並行語句的。 格式 [進程標號:]PROCESS [敏感信號表] [IS] [進程語句說明部分;] BEGIN <順序語句部分> END PROCESS[進程標號];

注: 一、 敏感信號表列出了進程語句敏感的全部信號,每當其中的一個信號發生變化時,就會引發其餘語句的執行,若是敏感信號表不寫,那麼在PROCESS裏面必須有WAIT語句,由WAIT語句來產生對信號的敏感;而當敏感信號表存在時,就不能在PROCESS裏再有WAIT語句; 二、 IS無關緊要,是由93版規定的 三、 進程語句說明部分是進程語句的一個說明區,它主要用來定義進程語句所須要的局部數據環境,包括數據類型說明、子程序說明和變量說明。 四、 進程語句有兩種存在狀態,一是等待,當敏感信號沒有發生變化時;一是執行,當敏感信號變化時。

4) 子程序調用語句 子程序分爲函數和過程,它們的定義屬於說明語句,都可在順序語句和並行語句裏面使用,它們的調用方法不同。 函數只有一個返回值,用於賦值,能夠說在信號賦值的時候就是對函數的調用; 過程有不少個返回值,用於進行處理,準確的來講子程序調用語句就是過程調用語句。

5) 參數傳遞語句 參數傳遞語句即在實體中定義的GENERIC,能夠描述不禁材料和不一樣工藝構成的相同元件或模塊的性能參數(如延時),在定義了GENERIC的實體叫參數化實體,由參數化實體造成的元件在例化時具備很大的適應性,在不一樣的環境下,只須用GENERIC MAP來修改參數就能夠了,使用時,在對元件例化時加在裏面就可,好比已經定義了一個AND2的實體,要在EXAMPLE裏面使用AND2,要先對AND2進行元件聲明,再將AND2例化,以下: u0: AND2 GENERIC MAP(參數值1,參數值2)            PORT MAP(參數表)

6) 元件例化語句 一個實體就至關於元件,元件名就至關於實體名,元件要實現的功能在實體裏面就已經描述好,好比,同一個文件夾下已經有一個名爲A.VHD的文件,若是要在另外一個文件B.VHD裏面用到A.VHD裏面定義的功能,那麼能夠在B.VHD文件裏面經過元件聲明和元件例化來調用A這個元件,總的來講調用元件過程就是「創建元件----元件聲明------元件例化」,元件調用時不用USE語句的,這和調用程序或類據不一樣。 [注:元件聲明語句屬說明語句,不是同步語句,如下對元聲的說明是爲了更好地瞭解元件的調用,元件的實例化以前必需要有元件聲明]

元件聲明語句格式 COMPONENT <元件名>         ——元件名就是文件名,便是實體名 [GENERIC <參數說明>;]       ——這就是所產的元件參數 PORT<端口說明>; END COMPONENT;

元件例化格式: 元件符:元件名 GENERIC MAP (參數表)                PORT MAP(端口表) 7) 生成語句 生成語句一般又稱爲GENERATE語句,它是一種能夠創建重複結構或者是在多個模塊的表示形式之間進行選擇的語句,格式以下: [生成語句標號:] < 模式選擇>GENERATE < 並行處理語句>; END GENERATE [生成語句標號];

模式選擇有兩種,一是FOR模式,一是IF模式。

FOR模式生成語句 [生成語句標號:] FOR 循環變量 IN 離散範圍 GENERATE <並行處理語句>; END GENERATE[生成語句標號];

IF模式生成語句 [生成語句標號:] IF <條件>GENERATE <並行處理語句>; END GENERATE[生成語句標號];

8) 並行斷言語句 前面已經說過順序斷言語句,這裏的斷言語句是並行的,能夠放在實體說明、結構體和塊語句中使用,能夠放在任何要觀察和調試的點上,而順序斷言語句只能在進程、函數和過程當中使用。其實斷言語句的順序使用格式和並行使用格式是同樣的,所以斷言語句是能夠應用在任何場所的,格式請看順序的說明。

思考: 一、是否是全部的VHDL語句均可以歸結爲順序語句和並行語句呢?那麼子程序定義是順序的仍是並行的呢?由上面的學習能夠知道,子程序能夠在三個地方(程序包、結構體、進程)中進行定義,而子程序在沒有調用以前是不參與執行的,由此可知子程序的定義是屬於說明語句,還有元件的說明也屬於說明語句,這個不用多說。所以,能夠這樣對VHDL語句進行歸類,三大類順序語句、並行語句和說明語句,這三類語句的關係是順語句能夠用在並行語句和說明語句當中,說明語句能夠用在並行語句當中,而並行語句是不能用在其餘語句當中,能夠說並行語句屬於一種高級形態,是語句的最終形態。

二、子程序分爲函數和過程,子程序的調用便可以用在順序語句中,也能夠用並行語句中,用在順序語句(進程或者子程序)中就叫順序調用語句;在並行語句(位於進程或子程序的外部)中就叫作並行調用語句,並行調用語句在結構體中是並行執行的。

三、區分信號與變量,信號是全局的,要在並行語句裏面說明;變量是局部的;要在順序語句裏面說明;賦值格式不同;賦值方式不同,變量是即時賦值的,信號的賦值要到最後才生效的;使用地方不同,信號能夠在並行語句裏使用也可在順序語句裏使用,而變量只能在順序語句裏使用

四、區分過程和函數,過程能夠具備多個返回值(準確來講不是返回值,而是這些信號在過程之中被改變),函數只有一個返回值;過程一般用來定義一個算法,而函數用來產生一個具備特定意義的值;過程當中的形式參數能夠有三種通訊模式(輸入、輸出、雙向),而函數中的形參只能是輸入通訊模式(由於函數是用來產生一個值的);過程當中可使用賦值語句或WAIT語句,而函數不可(由於過程是用來處理的)

五、爲何信號不能夠在順序語句裏面進行說明呢?是由於信號是全局變量。爲何變量不能夠在並行語句裏面進行說明呢?是由於變量只是對暫時數據進行局部的存儲,只是一個局部的變量。

六、信號分爲兩種:一是外部信號(輸出輸入信號),即在實體中定義的IN、OUT、INOUT、BUFFER和LINKAGE;一是內部信號(連線信號),即在程序包、實體、結構體中說明的SIGNAL,用於元件與元件鏈接起來。

七、CASE語句、條件信號賦值語句和選擇賦值語句的結構有點類似,要注意它們的書寫格式。

————————————————————————————————————————————————————————————————————————————

相關文章
相關標籤/搜索