目錄
一.子程序概述
1.子程序的功能
子程序,是爲了更有效地完成重複性的算法設計工作,利用順序語句來定義和完成算法的的一種VHDL程序模塊。
子程序不能直接讀取信號值或者向信號賦值,而只能通過子程序調用與子程序的界面端口進行通信。
2.子程序的種類
子程序有過程(PROCEDURE)和函數(FUNCTlON)兩種類型。
二者的區別有:
(1)過程的調用可通過其界面獲得多個返回值,而函數只能返回一個值;
(2)在函數入口中,所有參數都是輸入參數,而過程有輸入參數、輸出參數和雙向參數;
(3)過程一般被看做是一種語句結構,而函數通常是表達式的一部分;
(4)過程可以單獨存在,而函數通常作爲語句的一部分調用。
3.子程序的組成
子程序的結構包括子程序首和子程序體。
子程序分成子程序首和子程序體的好處是,在一個大系統的開發過程中,子程序的界面,即子程序首是在公共程序包中定義的。
這樣一來,一部分開發者可以開發子程序體,另一部分開發者可以使用對應的公共子程序。
這是因爲,對於子程序體的修改,並不會改變子程序首的界面參數和出/入口方式的定義,從而對子程序體的改變不會改變調用子程序的源程序的結構。
4.可重載子程序
VHDL子程序具有可重載性的特點,即允許有許多重名的子程序,但這些子程序的參數類型及返回值數據類型是不同的。
5.子程序的調用
1.綜合後的子程序將映射於目標芯片中的一個相應的電路模塊,且每一次子程序的調用,都將在硬件結構中產生具有相同結構的不同電路模塊。而普通軟件中的N次子程序調用,將是子程序的N次重複執行。
爲什麼VHDL中的子程序調用和普通軟件中的子程序調用的執行不一樣呢?
普通軟件中的N次子程序調用,由於其執行是順序執行的,因此根據子程序的調用順序,每調用1次,則對應的子程序將執行一次。
VHDL中的N次子程序調用,N個子程序的調用執行是同時執行的,因此需要N個對應子程序的硬件電路才能完成其功能。
2.在進程中允許對子程序進行調用。也可以在VHDL的結構體或程序包中的任何位置對子程序進行調用。
3.從硬件角度講,一個子程序的調用類似於一個元件模塊的例化,也就是說,VHDL綜合器爲子程序的每一次調用都生成一個電路邏輯模塊。所不同的是,元件的例化將產生一個新的設計層次,而子程序調用只對應於當前層次的一部分。
二.函數的定義及使用
1.函數定義
2.函數首
3.函數體
函數體包括對數據類型、常數、變量等的局部說明以及用以完成規定算法或轉換的順序語句,並以關鍵詞END FUNCTION 以及函數名結尾。
一旦函數被調用,就將執行這部分語句。
4.使用說明
如果要將一個已編制好的函數併入程序包,函數首必須放在程序包的說明部分,而函數體需放在程序包的包體內。
如果只是在一個結構體中定義並調用函數,則僅需函數體即可。函數首的作用只是作爲程序包的有關此函數的一個接口界面。
三.重載函數
1.VHDL允許以相同的函數名定義函數,即重載函數(OVERLOADED FUNCTION)。
重載函數,要求函數中定義的操作數具有不同的數據類型,以便調用時用以分辨不同功能的同名函數。
2.VHDL中預定義的操作符,如“+”、“AND”、“MOD”、“>”等均可以被重載,以賦予新的數據類型操作功能。
也就是說,通過重新定義運算符的方式,允許被重載的運算符能夠對新的數據類型進行操作,或者允許不同的數據類型之間用此運算符進行運算。
四.函數調用
1.函數調用就是執行一個給定名字和參數的函數,並返還一個指定數據類型的值給函數名。函數調用的語句格式如下:
(1)括號中的實參表達式稱爲實參,它可以是一個具體的數值,也可以是一個標識符,是當前調用程序中函數形參的接受體。
在此調用格式中,形參名即爲當前欲調用的過程中已說明的參數名,即與實參表達式相聯繫的形參名。
(2)被調用中的形參名與調用語句中的實參表達式的對應關係有位置關聯法和名字關聯法兩種,位置關聯可以省去形參名。
2.一個函數的調用有三個步驟:
首先將IN模式的實參值賦給欲調用的函數中與它們對應的形參;
然後執行這個函數;
最後將函數lN模式的形參值賦還給對應的函數名。
五.過程的定義及使用
1.過程的定義
過程由過程首和過程體兩部分組成,過程首不是必須的,過程體可以獨立存在和使用。過程(PROCEDURE)的定義格式如下:
2.過程首
過程首由過程名和參數表組成。參數表用於對常數、變量和信號三類數據對象目標作出說明,並用關鍵詞IN、OUT和INOUT定義這些參數的工作模式,即信息的流向。
注意:
一般地,可在參量表中定義三種流向模式,即IN、OUT和INOUT。若只定義了lN模式而未定義目標參量類型,則默認爲常量;若只定義了INOUT或OUT,則默認目標參量類型是變量。
3.過程體
過程體是由順序語句組成的,過程的調用即啓動了對過程體的順序語句的執行。
過程體中的說明部分只是局部的,其中的各種定義只能適用於過程體內部。
過程體的順序語句部分可以包含任何順序執行的語句,包括WAIT語句。但如果一個過程是在進程中調用的,且這個進程已列出了敏感參量表,則不能在此過程中使用WAIT語句。
4.過程的調用
過程與函數一樣可以重複調用或嵌套式調用。綜合器一般不支持含有WAIT語句的過程。
六.重載過程
兩個或兩個以上有相同的過程名和互不相同的參數數量及數據類型的過程稱爲重載過程(OVERLOADED PROCEDURE)。對於重載過程,也是靠參量類型來辨別究競調用哪一個過程的。
七.過程的調用
1.順序過程調用
順序過程調用就是在順序語句的環境中執行一個給定名字和參數的過程。
調用過程的語句格式如下:
括號中的實參表達式稱爲實參,它可以是一個具體的數值,也可以是一個標識符,是當前調用程序中過程形參的接受體。
在此調用格式中,形參名即爲當前欲調用的過程中已說明的參數名,即與實參表達式相聯繫的形參名。
被調用中的形參名與調用語句中的實參表達式的對應關係有位置關聯法和名字關聯法兩種,位置關聯可以省去形參名。
2.並行過程調用
並行過程調用語句可以作爲一個並行語句直接出現在結構體或塊語句中。並行過程調用語句的功能等效於包含了同一個過程調用語句的進程。並行過程調用語句的語句調用格式與前面講的順序過程調用語句的是相同的,即過程名(關聯參量名)。
3.過程調用的步驟
首先將IN和INOUT模式的實參值賦給欲調用的過程中與它們對應的形參;
然後執行這個過程;
最後將過程中IN和INOUT模式的形參值賦還給對應的實參。
八.程序包的定義和使用
1.程序包的內容
程序包常用來封裝屬於多個設計單元分享的信息,一個程序包至少應包含如下四種內容中的一種。
2.程序包的定義
3.程序包結構中,程序包體並非是必須的,對於沒有子程序說明的程序包體可以省去。因此程序包首可以獨立定義和使用。