接上页LIBRARYIEEE;-函数应用实例USEIEEE.STDLOGIC1164.ALL:USEWORK.packexp.ALL;ENTITYaxampISPORT(dat1,dat2:IN STD LOGIC_VECTOR(3DOWNTO0);dat3,dat4:INSTDLOGICVECTOR(3DOWNTO0);outl,out2:OUTSTD_LOGIC_VECTOR(3DOWNTO0));END;ARCHITECTUREbhvOFaxampISBEGINoutl<=max(datl,dat2);--用在赋值语句中的并行函数调用语句PROCESS(dat3,dat4)BEGIN顺序函数调用语句out2<=max(dat3,dat4);ENDPROCESS;END;
LIBRARY IEEE; - 函数应用实例 USE IEEE.STD_LOGIC_1164.ALL; USE WORK.packexp.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 IS BEGIN out1 <= max(dat1,dat2); -用在赋值语句中的并行函数调用语句 PROCESS(dat3,dat4) BEGIN out2 <= max(dat3,dat4); -顺序函数调用语句 END PROCESS; END; 接上页
[3:0][3:0]dat4[3:0][3:0][3:0]dat3[3:0][3:0]max.out2[3:0][3:0]out2[3:0][3:0]out2[3:0][3:0] [3:0]dat2[3:0][3:0][3:0]dat1[3:0]3:0]max.out1[3:0][3:0]out1[3:0][3:0]out1[3:0]图8-1例8-1的逻辑电路图
图8-1 例8-1的逻辑电路图
【例8-2】LIBRARYIEEE:USEIEEE.STDLOGIC1164.ALL;ENTITY func ISPORT (a:IN STD LOGIC VECTOR (O to2);m:OUTSTDLOGICVECTOR(Oto2))END ENTITY func ;ARCHITECTUREdemoOFfuncISBECTIONSPOGIRIRNSIPMASLSISBEGIN数,该函数没有函数首。RETURN(XANDY)ORZ:END FUNCTION sam ;BEGINPROCESS(a)BEGINm(0) <= sam(a(0), a(1), a(2)) ;m(1) <= sam(a(2), a(0), a(1) ) ;m(2) <= sam(a(1), a(2), a(0) ) ;ENDPROCESS;ENDARCHITECTUREdemo;
【例8-2】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY func IS PORT ( a : IN STD_LOGIC_VECTOR (0 to 2 ) ; m : OUT STD_LOGIC_VECTOR (0 to 2 ) ); END ENTITY func ; ARCHITECTURE demo OF func IS FUNCTION sam(x ,y ,z : STD_LOGIC) RETURN STD_LOGIC IS BEGIN RETURN ( x AND y ) OR z ; END FUNCTION sam ; BEGIN PROCESS ( a ) BEGIN m(0) = sam( a(0), a(1), a(2) ) ; m(1) = sam( a(2), a(0), a(1) ) ; m(2) = sam( a(1), a(2), a(0) ) ; END PROCESS ; END ARCHITECTURE demo ; ;结构体内定义了完成某种算法的函数,进程中调用了此函 数,该函数没有函数首
允许以相同的函数名定义函数,但要求函数中定义的操作数具有不同的数据类型,以便调用时用以分辨不同功能的同名函数,即同样名称的函数可以用不同的数据类型作为此函数的参数定义多次,以此定义的函数称为重载函教832重载函数(OVERLOADEDFIINCTION)【例8-3】LIBRARYIEEE;USEIEEE.STDLOGIC1164.ALL:-定义程序包PACKAGE packexpIS-定义函数首FUNCTION max(a,b :INSTD LOGIC VECTOR)RETURNSTD LOGICVECTOR;FUNCTIONmax(a,b:INBITVECTOR)--定义函数首RETURNBITVECTOR定义函数首FUNCTION max(a.b:ININTEGER)RETURNINTEGER;END;PACKAGEBODYpackexpISFUNCTIONmax(a,b:INSTD LOGICVECTOR)--定义函数体RETURNSTDLOGICVECTORISBEGINIFa>bTHENRETURN a:ELSERETURN b:END IF:-结束FUNCTION语句END FUNCTION max;FUNCTIONmax(a,b:ININTEGER)--定义函数体RETURNINTEGERIS接下页
8.3.2 重载函数(OVERLOADED FUNCTION) 【例8-3】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; PACKAGE packexp IS -定义程序包 FUNCTION max( a,b :IN STD_LOGIC_VECTOR) -定义函数首 RETURN STD_LOGIC_VECTOR ; FUNCTION max( a,b :IN BIT_VECTOR) -定义函数首 RETURN BIT_VECTOR ; FUNCTION max( a,b :IN INTEGER ) -定义函数首 RETURN INTEGER ; END; PACKAGE BODY packexp IS FUNCTION max( a,b :IN STD_LOGIC_VECTOR) -定义函数体 RETURN STD_LOGIC_VECTOR IS BEGIN IF a > b THEN RETURN a; ELSE RETURN b; END IF; END FUNCTION max; -结束FUNCTION语句 FUNCTION max( a,b :IN INTEGER) -定义函数体 RETURN INTEGER IS 接下页 允许以相同的函数名定义函数,但要求函数中定义的操作数具有不同的数据类型,以便调用时用以分辨不同功能 的同名函数,即同样名称的函数可以用不同的数据类型作为此函数的参数定义多次,以此定义的函数称为重载函 数
BEGIN接上页IFa>bTHENRETURN a;ELSERETURN b;ENDIF:结束FUNCTION语句END FUNCTION max;FUNCTIONmax(a,b:INBITVECTOR)--定义函数体RETURNBITVECTORISBEGINIFa>bTHENRETURN a:ELSEENDIF:RETURN b;END FUNCTION maX;--结束FUNCTION语句END:-结束PACKAGEBODY语句以下是调用重载函数max的程序:LIBRARYIEEE:USEIEEE.STD LOGIC 1164.ALL;USEWORK.packexp.ALL;ENTITY axampISPORT(a1,b1:IN STD LOGIC VECTOR(3 DOWNTO0);a2,b2:INBIT_VECTOR(4DOWNTO0);a3,b3:ININTEGERRANGE0TO15;c1:OUTSTD LOGIC VECTOR(3DOWNTO0);C2:OUTBIT VECTOR(4DOWNTO0);c3:OUTINTEGERRANGE0TO15);END;
BEGIN IF a > b THEN RETURN a; ELSE RETURN b; END IF; END FUNCTION max; -结束FUNCTION语句 FUNCTION max( a,b :IN BIT_VECTOR) -定义函数体 RETURN BIT_VECTOR IS BEGIN IF a > b THEN RETURN a; ELSE RETURN b; END IF; END FUNCTION max; -结束FUNCTION语句 END; -结束PACKAGE BODY语句 - 以下是调用重载函数max的程序: LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; USE WORK.packexp.ALL; ENTITY axamp IS PORT(a1,b1 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); a2,b2 : IN BIT_VECTOR(4 DOWNTO 0); a3,b3 : IN INTEGER RANGE 0 TO 15; c1 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); c2 : OUT BIT_VECTOR(4 DOWNTO 0); c3 : OUT INTEGER RANGE 0 TO 15); END; 接上页