第9講 VHDL語言子程序_第1頁
第9講 VHDL語言子程序_第2頁
第9講 VHDL語言子程序_第3頁
第9講 VHDL語言子程序_第4頁
第9講 VHDL語言子程序_第5頁
已閱讀5頁,還剩26頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、電子設計自動化技術第第 9 講講 VHDL語言子程序語言子程序子程序子程序 子程序子程序是在主程序調用它以后能將結果返回主程序的程序模是在主程序調用它以后能將結果返回主程序的程序模塊,它可以反復調用,方便程序設計。塊,它可以反復調用,方便程序設計。 VHDL VHDL子程序模塊,由順序語句構成。子程序模塊,由順序語句構成。每調用一次子程序都意每調用一次子程序都意味著增加了一個硬件電路模塊味著增加了一個硬件電路模塊,因此,在實際使用時,要密切關,因此,在實際使用時,要密切關注和嚴格控制子程序的調用次數。注和嚴格控制子程序的調用次數。 子程序通常放在程序包中子程序通常放在程序包中, ,也可放在結構

2、體和進程中。也可放在結構體和進程中。 子程序子程序函數(函數(Function)過程(過程(Procedure)程序包程序包 程序包程序包也叫包集合,主要用來存放各個設也叫包集合,主要用來存放各個設計都能計都能共享共享的數據類型定義、常量定義、子程的數據類型定義、常量定義、子程序定義、信號定義及元件定義等部分。序定義、信號定義及元件定義等部分。 設計者使用時要用設計者使用時要用USE語句進行說明。語句進行說明。程序包程序包程序包的格式:程序包的格式:PACKAGE 包集合名包集合名 IS說明語句說明語句END 包集合名包集合名;PACKAGE BODY 包集合名包集合名 IS說明語句說明語句E

3、ND 包集合名;包集合名;定義子程序定義子程序實現子程序實現子程序程序包首程序包首程序包體程序包體程序包程序包PACKAGE STD_LOGIC_1164 ISTYPE std_logic_vector IS ARRAY ( NATURAL RANGE ) OF std_logic;FUNCTION and ( l, r : std_logic_vector ) RETURN std_logic_vector;FUNCTION or ( l, r : std_logic_vector ) RETURN std_logic_vector;END STD_LOGIC_1164;PACKAGE BO

4、DY STD_LOGIC_1164 ISFUNCTION and ( l,r : std_logic_vector ) RETURN std_logic_vector ISBeginEnd and“;END STD_LOGIC_1164; 函數函數(Function) 函數語句的作用是輸入若干參數,通過函數運算,最函數語句的作用是輸入若干參數,通過函數運算,最后返回后返回一個值。一個值。 函數可以重復使用,相當于其他高級語言的函數;函數可以重復使用,相當于其他高級語言的函數; 函數僅返回一個值,函數中至少有一條返回語句;函數僅返回一個值,函數中至少有一條返回語句;函數首函數首函數體函數體函數函

5、數 函數函數(Function)Function 函數名函數名 (參數表)(參數表) Return 數據類型數據類型Function 函數名函數名 (參數表)(參數表) Return 數據類型數據類型 IS 說明部分說明部分Begin 順序語句順序語句END Function 函數名;函數名;函數首函數首在程序包首中在程序包首中定義定義函數體函數體在程序包體中在程序包體中定義定義l函數通常定義在程序包中函數通常定義在程序包中,也可放在結構體和進程中。也可放在結構體和進程中。l在結構體和進程中定義時,僅需定義函數體。在結構體和進程中定義時,僅需定義函數體。l定義的位置不同,其使用的范圍也不同。定

6、義的位置不同,其使用的范圍也不同。 函數函數(Function)Function 函數名函數名 (參數表)(參數表) Return 數據類型數據類型l參數只能是參數只能是IN模式,用來定義輸入值;模式,用來定義輸入值;l參數只能是信號(參數只能是信號(signal)或常數)或常數(constant);l若無特殊說明,參數被默認為常數;若無特殊說明,參數被默認為常數;l數據類型只能是非限制形式;數據類型只能是非限制形式; 不能使用不能使用STD_LOGIC_VECTOR( 0TO 7) INTEGER RANGE 20 DOWNTO 1例:例:FUNCTION max (a,b:integer)

7、 RETURN integer;FUNCTION max (a,b:integer) RETURN integer;FUNCTION “xor” (l,r :std_logic_vector) RETURN FUNCTION “xor” (l,r :std_logic_vector) RETURN std_logic_vector;std_logic_vector;FUNCTION d2 (signal a,b:std_logic) RETURN std_logic;FUNCTION d2 (signal a,b:std_logic) RETURN std_logic;LIBRARY IEEE

8、;USE IEEE.STD_LOGIC_1164.ALL;PACKAGE hanshu IS -定義程序包定義程序包 FUNCTION max( a,b : IN STD_LOGIC_VECTOR) -定義函數首定義函數首 RETURN STD_LOGIC_VECTOR ;END ;PACKAGE BODY hanshu IS FUNCTION max( a,b : IN STD_LOGIC_VECTOR) -定義函數體定義函數體 RETURN STD_LOGIC_VECTOR IS BEGIN IF a b THEN RETURN a; -RETURN 返回語句返回語句 ELSE RETUR

9、N b; END IF; END FUNCTION max; -結束結束FUNCTION語句語句END; -結束結束PACKAGE BODY語句語句 函數定義實例函數定義實例(程序包中程序包中)LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;USE WORK.hanshu.ALL ;ENTITY axamp IS PORT(dat1,dat2 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); dat3,dat4 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); out1,out2 : OUT STD_LOGIC_VEC

10、TOR(3 DOWNTO 0) );END axamp; ARCHITECTURE bhv OF axamp ISBEGIN out1 = max(dat1,dat2); PROCESS(dat3,dat4) BEGIN out2 = max(dat3,dat4); END PROCESS;END; 函數應用實例函數應用實例聲明程序包聲明程序包并行函數調用并行函數調用順序函數調用順序函數調用LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;USE WORK.hanshu.ALL ;ENTITY axamp IS PORT(dat1,dat2 : IN STD_

11、LOGIC_VECTOR(3 DOWNTO 0); dat3,dat4 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); out1,out2 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );END axamp; ARCHITECTURE bhv OF axamp ISBEGIN out1 = max(dat1,dat2); PROCESS(dat3,dat4) BEGIN out2 dat3,b=dat4); END PROCESS;END; 函數應用實例函數應用實例位置映射位置映射名稱映射名稱映射LIBRARY IEEE; USE IEEE.ST

12、D_LOGIC_1164.ALL;ENTITY axamp IS PORT(dat1,dat2 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); dat3,dat4 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); out1,out2 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );END axamp; ARCHITECTURE bhv OF axamp ISFUNCTION max( a,b : IN STD_LOGIC_VECTOR) -定義函數體定義函數體 RETURN STD_LOGIC_VECTOR IS BEGIN

13、IF a b THEN RETURN a; -RETURN 返回語句返回語句ELSE RETURN b;END IF;END FUNCTION max; -結束結束FUNCTION語句語句BEGIN out1 = max(dat1,dat2); out2 b THEN RETURN a; -RETURN 返回語句返回語句 ELSE RETURN b; END IF; END FUNCTION max; -結束結束FUNCTION語句語句END; -結束結束PACKAGE BODY語句語句 練習練習請大家設計函數請大家設計函數“數據比較數據比較”,相等為,相等為1,不等為,不等為0 過程語句的作

14、用和函數類似,但過程參數有輸入、輸過程語句的作用和函數類似,但過程參數有輸入、輸出,比函數更為靈活出,比函數更為靈活。 過程也以重復使用,相當于其他高級語言的子程序;過程也以重復使用,相當于其他高級語言的子程序; 過程可以返回多個值,也可以不返回值;過程可以返回多個值,也可以不返回值;過程首過程首過程體過程體過程過程過程(過程(Procedure)過程(過程(Procedure)Procedure 過程名過程名 (參數表)(參數表)Procedure 過程名過程名 (參數表)(參數表) IS 說明部分說明部分 Begin 順序語句順序語句END Procedure 過程名;過程名;過程首過程首

15、在程序包首中在程序包首中定義定義過程體過程體在程序包體中在程序包體中定義定義l過程通常定義在程序包中過程通常定義在程序包中,也可放在結構體和進程中。也可放在結構體和進程中。l在結構體和進程中定義時,僅需定義過程體。在結構體和進程中定義時,僅需定義過程體。l定義的位置不同,其使用的范圍也不同。定義的位置不同,其使用的范圍也不同。l參數有常數、變量、信號,需明確說明;參數有常數、變量、信號,需明確說明;l用關鍵字用關鍵字IN、OUT、INOUT定義參數信息流向;定義參數信息流向;l參數無特別說明,參數無特別說明,IN作為常數對待;作為常數對待;l只說明只說明OUT、INOUT,作為變量對待;,作為

16、變量對待;l信號必須明確用關鍵字信號必須明確用關鍵字SIGNAL聲明聲明;l數據類型只能是非限制形式;數據類型只能是非限制形式; 不能使用不能使用STD_LOGIC_VECTOR( 0TO 7) INTEGER RANGE 20 DOWNTO 1例:例:PROCEDURE PROG1 (SIGNAL a,b,c:INOUT STD_LOGIC_VECTOR);PROCEDURE PROG1 (SIGNAL a,b,c:INOUT STD_LOGIC_VECTOR);PROCEDURE PROG2 (CONSTANT a:IN BIT; VARIABLE b:INOUT BIT; SIGNAL

17、c:OUT BIT);PROCEDURE PROG2 (CONSTANT a:IN BIT; VARIABLE b:INOUT BIT; SIGNAL c:OUT BIT);PROCEDURE PROG3 (PROCEDURE PROG3 (a:IN BIT; b:INOUT BIT; c:OUT BITa:IN BIT; b:INOUT BIT; c:OUT BIT);); 過程(過程(Procedure)Procedure 過程名過程名 (參數表)(參數表)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;PACKAGE hanshu IS -定義程序包定義

18、程序包 procedure max( signal a,b: IN STD_LOGIC_VECTOR; signal c: out std_logic_vector);-定義過程首定義過程首END ;PACKAGE BODY hanshu IS procedure max( signal a,b: IN STD_LOGIC_VECTOR)-定義過程體定義過程體 signal c: out std_logic_vector) is BEGINc=a;if(a=b) then c=b;end if;END procedure max; END hanshu; -結束結束PACKAGE BODY語句

19、語句 過程定義(程序包中)實例過程定義(程序包中)實例LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE WORK.hanshu.ALL ; ENTITY axamp IS PORT(dat1,dat2 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); dat3,dat4 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); out1,out2 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END;ARCHITECTURE bhv OF axamp ISBEGINmax(dat1,dat

20、2,out1);PROCESS(dat3,dat4) BEGIN max(dat3,dat4,out2); END PROCESS;END; 過程應用實例過程應用實例聲明程序包聲明程序包并行過程調用并行過程調用順序過程調用順序過程調用LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY axamp IS PORT(dat1,dat2 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); dat3,dat4 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); out1,out2 : OUT STD_LOGIC_VECT

21、OR(3 DOWNTO 0) ); END;ARCHITECTURE bhv OF axamp ISprocedure max( signal a,b: IN STD_LOGIC_VECTOR)-定義過程體定義過程體 signal c: out std_logic_vector) is BEGINc=a;if(a=b) then c=b;end if;END procedure max;BEGINmax(dat1,dat2,out1); max(dat3,dat4,out2); END; 過程應用實例過程應用實例結構體中定義結構體中定義僅能被該結構僅能被該結構體使用體使用LIBRARY IEE

22、E;USE IEEE.STD_LOGIC_1164.ALL;PACKAGE hanshu IS -定義程序包定義程序包 procedure max( signal a,b: IN STD_LOGIC_VECTOR; signal c: out std_logic_vector);-定義過程首定義過程首END ;PACKAGE BODY hanshu IS procedure max( signal a,b: IN STD_LOGIC_VECTOR)-定義過程體定義過程體 signal c: out std_logic_vector) is BEGINc=a;if(a=b) then c=b;end if;END procedure max; END; -結束結束PACKAGE BODY語句語句 練習練習請大家設計過程請大家設計過程“數據比較數據比較” ,相等為,相等為1,不等為,不等為0函數與過程對比函數與過程對比 過程可以返回多值,函數只能返回一個值。過程可以返回多值,函數只能返回一個值。 過程的參數有常量(過程的參數有常量(ININ), ,變量、信號變量、信號(IN(IN、OUTOUT、INOUT)INOUT) 函數的參數只有常量、信號,為函數的參數只有常量、信號,為IN(IN(默認默認) )。 函數和過程均能重復產生新的電路模塊。函數和過程均能重復產生新的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論