【文章內(nèi)容簡(jiǎn)介】
種功能描述語(yǔ)句的基本組成和功能分別是: 塊語(yǔ)句 是由一系列并行語(yǔ)句構(gòu)成的組合體 , 它的功能是將結(jié)構(gòu)體中的并行語(yǔ)句組成一個(gè)或多個(gè)子模塊 。 進(jìn)程語(yǔ)句 定義順序語(yǔ)句模塊 , 用以將從外部獲得的信號(hào)值或內(nèi)部運(yùn)算數(shù)據(jù)向其他的信號(hào)進(jìn)行賦值 。 信號(hào)賦值語(yǔ)句 將設(shè)計(jì)實(shí)體內(nèi)的處理結(jié)果向定義的信號(hào)或界面端口進(jìn)行賦值 。 子程序調(diào)用語(yǔ)句 可以調(diào)用進(jìn)程或參數(shù) , 并將獲得的結(jié)果賦值于信號(hào) 。 元件例化語(yǔ)句 對(duì)其他的設(shè)計(jì)實(shí)體做元件調(diào)用說(shuō)明,并將此元件的端口與其他元件、信號(hào)或高層實(shí)體的界面端口進(jìn)行連接。 例 : 2選 1數(shù)據(jù)選擇器 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; 功能描述語(yǔ)句 信號(hào)定義語(yǔ)句(內(nèi)部信號(hào),無(wú)方向) 3 塊、子程序和進(jìn)程 ( 1)塊語(yǔ)句( BLOCK) 在較大規(guī)模的電子系統(tǒng)設(shè)計(jì)中,傳統(tǒng)的硬件電路設(shè)計(jì)通常包括一張系統(tǒng)總電路原理圖和若干張子原理圖。在 VHDL程序設(shè)計(jì)中,結(jié)構(gòu)體是由多個(gè)BLOCK塊構(gòu)成的,如果將結(jié)構(gòu)體比做總電路原理圖,那么,每個(gè) BLOCK塊則相當(dāng)于一張子原理圖。 BLOCK塊語(yǔ)句的結(jié)構(gòu): 塊標(biāo)號(hào): BLOCK 接口說(shuō)明 類屬說(shuō)明 BEGIN 并行塊語(yǔ)句 END BLOCK(塊標(biāo)號(hào)); 例: 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)進(jìn)程( PROCESS) PROCESS結(jié)構(gòu)是最能體現(xiàn) VHDL語(yǔ)言特色的語(yǔ)句。與 BLOCK語(yǔ)句一樣,利用 PROCESS語(yǔ)句結(jié)構(gòu)可以描述一個(gè)功能獨(dú)立的電路。與 BLOCK語(yǔ)句不同之處是,在系統(tǒng)仿真時(shí), PROCESS結(jié)構(gòu)中的語(yǔ)句是按順序逐條向下執(zhí)行的,而不像 BLOCK語(yǔ)句那樣并發(fā)執(zhí)行。一個(gè)結(jié)構(gòu)體中可以有多個(gè)并行運(yùn)行的進(jìn)程結(jié)構(gòu),每一個(gè)進(jìn)程內(nèi)部是由一系列順序語(yǔ)句來(lái)構(gòu)成的。 PROCESS語(yǔ)句的結(jié)構(gòu) [進(jìn)程標(biāo)號(hào) ] PROCESS [( 敏感信號(hào)表 ) ] [IS] [進(jìn)程說(shuō)明語(yǔ)句 ] BEGIN 順序描述語(yǔ)句 END PROCESS [進(jìn)程標(biāo)號(hào) ]; 注意:在多個(gè)進(jìn)程的結(jié)構(gòu)體描述中,進(jìn)程標(biāo)號(hào)是區(qū)分各個(gè)進(jìn)程的標(biāo)志。但是進(jìn)程標(biāo)號(hào)并不是必需的。單進(jìn)程以 PROCESS開(kāi)始,以 END PROCESS結(jié)束。 例:兩輸入或非門(mén) 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程序與其他軟件語(yǔ)言程序中應(yīng)用子程序的目的是相似的 , 即能夠更有效地完成重復(fù)性的工作 。 子程序模塊是利用順序語(yǔ)句定義和完成算法的 , 但子程序不能像進(jìn)程那樣可以從本結(jié)構(gòu)體的其他塊或進(jìn)程結(jié)構(gòu)中讀取信號(hào)值或向信號(hào)賦值 , 只能通過(guò)子程序調(diào)用與子程序的界面端口進(jìn)行通信 。 子程序被調(diào)用時(shí),首先要初始化,執(zhí)行處理功能后,將處理結(jié)果傳遞給主程序。子程序內(nèi)部的值不能保持,子程序返回后才能被再次調(diào)用并初始化。 子程序有兩種類型:過(guò)程( PROCEDURE)和函數(shù)( FUNCTION)。 I. 過(guò)程 ( PROCEDURE) 過(guò)程語(yǔ)句的書(shū)寫(xiě)格式為: PROCEDURE 過(guò)程名 ( 參數(shù)表 ) IS [說(shuō)明部分 ] BEGIN 過(guò)程語(yǔ)句部分 END PROCEDURE 過(guò)程名; 例:用過(guò)程語(yǔ)句設(shè)計(jì)的子程序 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。 矢量轉(zhuǎn)換成整數(shù) ELSE (a (i) /=1) THEN /=:不等 x_flag := TRUE。 END IF。 END LOOP。 END vector_to_int。 這個(gè)過(guò)程名為 vector_to_int實(shí)現(xiàn)將位矢量轉(zhuǎn)換成整數(shù)的功能,在過(guò)程語(yǔ)句執(zhí)行結(jié)束后,將輸入值拷貝到調(diào)用者的 OUT和 INOUT所定義的變量中,完成子程序和主程序之間的數(shù)據(jù)傳遞。 函數(shù)的語(yǔ)言書(shū)寫(xiě)格式為: FUNCTION 函數(shù)名 ( 參數(shù)表 ) RETURN 數(shù)據(jù)類型 IS [說(shuō)明部分 ]; BEGIN 順序語(yǔ)句; RETURN [返回變量名 ]; END RETURN 函數(shù)名; 例 : 用 VHDL構(gòu)造的選擇最大值的函數(shù)程序 。 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 庫(kù)和程序包 庫(kù)和程序包用來(lái)描述和保留元件、類型說(shuō)明函數(shù)、子程序等,以便在其它設(shè)計(jì)中可以隨時(shí)引用這些信息,提高設(shè)計(jì)效率。 (1)庫(kù)( LIBRARY) 庫(kù)是經(jīng)編譯后的數(shù)據(jù)的集合,它存放包集合定義、實(shí)體定義、結(jié)構(gòu)定義和配置定義。 庫(kù)語(yǔ)句的格式為: LIBRARY 庫(kù)名; USE語(yǔ)句指明庫(kù)中的程序包。一旦說(shuō)明了庫(kù)和程序包,整個(gè)設(shè)計(jì)實(shí)體都可以進(jìn)入訪問(wèn)或調(diào)用,但其作用范圍僅限于所說(shuō)明的設(shè)計(jì)實(shí)體。 USE語(yǔ)句的使用將使所說(shuō)明的程序包對(duì)本設(shè)計(jì)實(shí)體部分或全部開(kāi)放。 USE語(yǔ)句有以下兩種常用的格式: