【正文】
PORT( a, b: IN STD_LOGIC。 END ENTITY or2; 注意:實體應(yīng)以語句“ ENTITY 實體名 IS”開始,語句“ END ENTITY 實體名; ”結(jié)束。 端口說明( PORT) 端口為設(shè)計實體和其外部環(huán)境提供動態(tài)通信的通道 , 是對基本設(shè)計單元與外部接口的描述 ,其功能相當電路圖符號的外部引腳 。 其一般書寫格式為: PORT ( 端口名 :端口模式 數(shù)據(jù)類型; 端口名 :端口模式 數(shù)據(jù)類型; … … ); 其中端口名是設(shè)計者為實體的每一個對外通道所取的名字,通常為英文字母加數(shù)字,名字的定義有一定的慣例,如 clk 表示時鐘, D開頭的端口名表示數(shù)據(jù),A開頭的端口名表示地址。 端口模式有以下幾種類型: ( 1 )輸入( IN) 允許信號進入實體,主要用于時鐘輸入、控制輸入(如 load、 reset、 enable、 clk)和單向的數(shù)據(jù)輸入(如地址數(shù)據(jù)信號 address)等。注意:輸出模式不能用于被設(shè)計實體的內(nèi)部反饋,因為輸出端口在實體內(nèi)不能看做是可讀的。 ( 4) 緩沖 ( BUFFER) 緩沖模式允許信號輸出到實體外部 , 但同時也可以在實體內(nèi)部引用該端口的信號 。 緩沖模式用于在實體內(nèi)部建立一個可讀的輸出端口 , 例如計數(shù)器輸出 、 計數(shù)器的現(xiàn)態(tài)用來決定計數(shù)器的次態(tài) 。 IN O U T I N O U T B U F F E R 在 VHDL設(shè)計中,通常將輸入信號端口指定為輸入模式,輸出信號端口指定為輸出模式,而雙向數(shù)據(jù)通信信號,如計算機 PCI總線的地址 /數(shù)據(jù)復(fù)用總線, DMA控制器數(shù)據(jù)總線等純雙向的信號采用雙向端口模式。 2 結(jié)構(gòu)體 結(jié)構(gòu)體也叫構(gòu)造體,結(jié)構(gòu)體描述了基本設(shè)計單元(實體)的結(jié)構(gòu)、行為、元件及內(nèi)部連接關(guān)系,也就是說它定義了設(shè)計實體的功能,規(guī)定了設(shè)計實體的數(shù)據(jù)流程,制定了實體內(nèi)部元件的連接關(guān)系 。 結(jié)構(gòu)體是對實體功能的具體描述,因此它一定要跟在實體的后面 。 結(jié)構(gòu)體的語句格式為: ARCHITECTURE 結(jié)構(gòu)體名 OF 實體名 IS [定義語句 ] BEGIN [功能描述語句 ] END 結(jié)構(gòu)體名; ( 1)結(jié)構(gòu)體名 結(jié)構(gòu)體名由設(shè)計者自行定義, OF后面的實體名指明了該結(jié)構(gòu)體所對應(yīng)的是哪個實體。這 3個名稱體現(xiàn)了 3種不同結(jié)構(gòu)體的描述方式,使得閱讀 VHDL語言程序時,能直接了解設(shè)計者采用的描述方式。需要注意的是實體說明中定義的信號是外部信號,而結(jié)構(gòu)體定義的信號為該結(jié)構(gòu)體的內(nèi)部信號,它只能用于這個結(jié)構(gòu)體中。因為它是內(nèi)部連接用的信號,因此不需要方向說明。 ARCHITECTURE rtl OF muj IS SIGNAL s1: BIT SIGNAL s2, s3: STD_LOGIC_VECTOR (0 TO 3)。結(jié)構(gòu)體的功能描述語句可以含有 5種不同類型的并行語句,如圖所示。 結(jié)構(gòu)體( A RCH IT E CT U RE )說明語句功能描述語句塊語句(BLO CK)進程語句(P ROC ESS )信號賦值語句子程序調(diào)用語句元件例化語句結(jié)構(gòu)體構(gòu)造圖 : 圖中 5種功能描述語句的基本組成和功能分別是: 塊語句 是由一系列并行語句構(gòu)成的組合體 , 它的功能是將結(jié)構(gòu)體中的并行語句組成一個或多個子模塊 。 信號賦值語句 將設(shè)計實體內(nèi)的處理結(jié)果向定義的信號或界面端口進行賦值 。 元件例化語句 對其他的設(shè)計實體做元件調(diào)用說明,并將此元件的端口與其他元件、信號或高層實體的界面端口進行連接。在 VHDL程序設(shè)計中,結(jié)構(gòu)體是由多個BLOCK塊構(gòu)成的,如果將結(jié)構(gòu)體比做總電路原理圖,那么,每個 BLOCK塊則相當于一張子原理圖。 B2: BLOCK SIGNAL s2: BIT; BEGIN s2= c AND d。 END BLOCK B3。 y= s1。 ( 2)進程( PROCESS) PROCESS結(jié)構(gòu)是最能體現(xiàn) VHDL語言特色的語句。與 BLOCK語句不同之處是,在系統(tǒng)仿真時, PROCESS結(jié)構(gòu)中的語句是按順序逐條向下執(zhí)行的,而不像 BLOCK語句那樣并發(fā)執(zhí)行。 PROCESS語句的結(jié)構(gòu) [進程標號 ] PROCESS [( 敏感信號表 ) ] [IS] [進程說明語句 ] BEGIN 順序描述語句 END PROCESS [進程標號 ]; 注意:在多個進程的結(jié)構(gòu)體描述中,進程標號是區(qū)分各個進程的標志。單進程以 PROCESS開始,以 END PROCESS結(jié)束。 USE 。 y: OUT STD_LOGIC)。 ARCHITECTURE behave OF nor2_v2 IS BEGIN PROCESS (a,b) VARIABLE b : STD_LOGIC_VECTOR(1 DOWNTO 0)。 b。139。039。039。039。X39。 END PROCESS。 ‘X’: 不定 ( 3)子程序( SUBPROGRAM) VHDL程序與其他軟件語言程序中應(yīng)用子程序的目的是相似的 , 即能夠更有效地完成重復(fù)性的工作 。 子程序被調(diào)用時,首先要初始化,執(zhí)行處理功能后,將處理結(jié)果傳遞給主程序。 子程序有兩種類型:過程( PROCEDURE)和函數(shù)( FUNCTION)。 x_flag: OUT BOOLEAN。 x_flag := FALSE。 *: 乘 , **:乘方 IF (a (i) =1) THEN q := q+1。 END IF。 END vector_to_int。 函數(shù)的語言書寫格式為: FUNCTION 函數(shù)名 ( 參數(shù)表 ) RETURN 數(shù)據(jù)類型 IS [說明部分 ]; BEGIN 順序語句; RETURN [返回變量名 ]; END RETURN 函數(shù)名; 例 : 用 VHDL構(gòu)造的選擇最大值的函數(shù)程序 。 USE 。 b: STD_LOGIC_VECTOR) RETURN STD_LOGIC_VECTOR。 PACKAGE BODY bpac IS FUNCTION max (a: STD_LOGIC_VECTOR。 BEGIN IF (ab) THEN tmp := a。 END IF。 END。 4 庫和程序包 庫和程序包用來描述和保留元件、類型說明函數(shù)、子程序等,以便在其它設(shè)計中可以隨時引用這些信息,提高設(shè)計效率。 庫語句的格式為: LIBRARY 庫名; USE語句指明庫中的程序包。 USE語句的使用將使所說明的程序包對本設(shè)計實體部分或全部開放。 USE 庫名 .程序包名 .ALL。 第二種語句格式的作用是向本設(shè)計實體開放指定庫中的特定程序包內(nèi)的所有內(nèi)容。 USE 。第二個 USE語句開放了程序包 STD_LOGIC_1164中的 STD_ULOGIC數(shù)據(jù)類型。 例: LIBRARY IEEE; 庫使用說明 USE 。 CONFIGURATION c1 OF and IS ( 配置 ) ┇ AND c1。 ENTITY or IS CONFIGURATION c2 OF and IS ┇ AND c2。設(shè)計者使用時只要用 USE子句進行說明即可。 程序包的一般書寫格式如下: PACKAGE 程序包名 IS END [PACKAGE] 程序包名; 程序包首 PACKAGE BODY 程序包名 IS ┇ 程序包體 END [PACKAGE BODY] [程序包名 ]; 例 : USE ; PACKAGE math IS TYPE tw16 IS ARRAY( 0 TO 15) OF T_WLOGIC; FUNCTION add ( a, b: IN tw16) RETURN tw16; FUNCTION sub ( a, b: IN tw16) RETURN tw16; END math; PACKAGE BODY math IS FUNCTION vect_to_int( s: tw16) ; RETURN INTEGER IS