【文章內容簡介】
種功能描述語句的基本組成和功能分別是: 塊語句 是由一系列并行語句構成的組合體 , 它的功能是將結構體中的并行語句組成一個或多個子模塊 。 進程語句 定義順序語句模塊 , 用以將從外部獲得的信號值或內部運算數據向其他的信號進行賦值 。 信號賦值語句 將設計實體內的處理結果向定義的信號或界面端口進行賦值 。 子程序調用語句 可以調用進程或參數 , 并將獲得的結果賦值于信號 。 元件例化語句 對其他的設計實體做元件調用說明,并將此元件的端口與其他元件、信號或高層實體的界面端口進行連接。 例 : 2選 1數據選擇器 ENTITY mux2 IS PORT ( d0, d1: IN BIT; sel: IN BIT; s: OUT BIT) ; END mux2; ARCHITECTURE dataflow OF mux2 IS SIGNAL sig: BIT; BEGIN Sig = (d0 AND sel) OR (NOT sel AND d1); S=sig; END dataflow; 功能描述語句 信號定義語句(內部信號,無方向) 3 塊、子程序和進程 ( 1)塊語句( BLOCK) 在較大規(guī)模的電子系統(tǒng)設計中,傳統(tǒng)的硬件電路設計通常包括一張系統(tǒng)總電路原理圖和若干張子原理圖。在 VHDL程序設計中,結構體是由多個BLOCK塊構成的,如果將結構體比做總電路原理圖,那么,每個 BLOCK塊則相當于一張子原理圖。 BLOCK塊語句的結構: 塊標號: BLOCK 接口說明 類屬說明 BEGIN 并行塊語句 END BLOCK(塊標號); 例: B1: BLOCK SIGNAL s1: BIT; BEGIN s1 = a AND b。 B2: BLOCK SIGNAL s2: BIT; BEGIN s2= c AND d。 B3: BLOCK BEGIN Z = s2。 END BLOCK B3。 END BLOCK B2。 y= s1。 END BLOCK B1。 ( 2)進程( PROCESS) PROCESS結構是最能體現 VHDL語言特色的語句。與 BLOCK語句一樣,利用 PROCESS語句結構可以描述一個功能獨立的電路。與 BLOCK語句不同之處是,在系統(tǒng)仿真時, PROCESS結構中的語句是按順序逐條向下執(zhí)行的,而不像 BLOCK語句那樣并發(fā)執(zhí)行。一個結構體中可以有多個并行運行的進程結構,每一個進程內部是由一系列順序語句來構成的。 PROCESS語句的結構 [進程標號 ] PROCESS [( 敏感信號表 ) ] [IS] [進程說明語句 ] BEGIN 順序描述語句 END PROCESS [進程標號 ]; 注意:在多個進程的結構體描述中,進程標號是區(qū)分各個進程的標志。但是進程標號并不是必需的。單進程以 PROCESS開始,以 END PROCESS結束。 例:兩輸入或非門 LIBRARY IEEE。 USE 。 ENTITY nor2_v2 IS PORT(a,b: IN STD_LOGIC。 y: OUT STD_LOGIC)。 END nor2_v2。 ARCHITECTURE behave OF nor2_v2 IS BEGIN PROCESS (a,b) VARIABLE b : STD_LOGIC_VECTOR(1 DOWNTO 0)。 y = NOT( a OR b); BEGIN b := a amp。 b。 CASE b IS WHEN 00= y =39。139。 WHEN 01= y =39。039。 WHEN 10= y =39。039。 WHEN 11= y =39。039。 WHEN OTHERS = y =39。X39。 END CASE。 END PROCESS。 END behave。 ‘X’: 不定 ( 3)子程序( SUBPROGRAM) VHDL程序與其他軟件語言程序中應用子程序的目的是相似的 , 即能夠更有效地完成重復性的工作 。 子程序模塊是利用順序語句定義和完成算法的 , 但子程序不能像進程那樣可以從本結構體的其他塊或進程結構中讀取信號值或向信號賦值 , 只能通過子程序調用與子程序的界面端口進行通信 。 子程序被調用時,首先要初始化,執(zhí)行處理功能后,將處理結果傳遞給主程序。子程序內部的值不能保持,子程序返回后才能被再次調用并初始化。 子程序有兩種類型:過程( PROCEDURE)和函數( FUNCTION)。 I. 過程 ( PROCEDURE) 過程語句的書寫格式為: PROCEDURE 過程名 ( 參數表 ) IS [說明部分 ] BEGIN 過程語句部分 END PROCEDURE 過程名; 例:用過程語句設計的子程序 PROCEDURE vector_to_int (a: IN STD_LOGIC_VECTOR。 x_flag: OUT BOOLEAN。 q: INOUT INTEGER) IS BEGIN q := 0。 x_flag := FALSE。 FOR i IN a’RANGE LOOP q := q*2。 *: 乘 , **:乘方 IF (a (i) =1) THEN q := q+1。 矢量轉換成整數 ELSE (a (i) /=1) THEN /=:不等 x_flag := TRUE。 END IF。 END LOOP。 END vector_to_int。 這個過程名為 vector_to_int實現將位矢量轉換成整數的功能,在過程語句執(zhí)行結束后,將輸入值拷貝到調用者的 OUT和 INOUT所定義的變量中,完成子程序和主程序之間的數據傳遞。 函數的語言書寫格式為: FUNCTION 函數名 ( 參數表 ) RETURN 數據類型 IS [說明部分 ]; BEGIN 順序語句; RETURN [返回變量名 ]; END RETURN 函數名; 例 : 用 VHDL構造的選擇最大值的函數程序 。 LIBRARY IEEE。 USE 。 PACKAGE bpac IS FUNCTION max (a: STD_LOGIC_VECTOR。 b: STD_LOGIC_VECTOR) RETURN STD_LOGIC_VECTOR。 END bpac。 PACKAGE BODY bpac IS FUNCTION max (a: STD_LOGIC_VECTOR。 b: STD_LOGIC_VECTOR) RETURN STD_LOGIC_VECTOR IS VARIABLE tmp: STD_LOGIC_VECTOR (a’RANGE)。 BEGIN IF (ab) THEN tmp := a。 ELSE tmp := b。 END IF。 RETURN tmp。 END。 END bpac。 4 庫和程序包 庫和程序包用來描述和保留元件、類型說明函數、子程序等,以便在其它設計中可以隨時引用這些信息,提高設計效率。 (1)庫( LIBRARY) 庫是經編譯后的數據的集合,它存放包集合定義、實體定義、結構定義和配置定義。 庫語句的格式為: LIBRARY 庫名; USE語句指明庫中的程序包。一旦說明了庫和程序包,整個設計實體都可以進入訪問或調用,但其作用范圍僅限于所說明的設計實體。 USE語句的使用將使所說明的程序包對本設計實體部分或全部開放。 USE語句有以下兩種常用的格式: