K述列 83子程序( SUBPROGRAM) 831函数( FUNCTION) 函数的语言表达格式如下: FUNCTION函数名(参数表) RETURN数据类型数首 FUNCTION函数名(参数表) RETURN数据类型Is-函数体 说明部分 BEGIN 顺序语句; END FUNCTION函数名;
KX 康芯科技 8.3 子程序(SUBPROGRAM) 8.3.1 函数(FUNCTION) 函数的语言表达格式如下: FUNCTION 函数名(参数表)RETURN 数据类型 --函数首 FUNCTION 函数名(参数表)RETURN 数据类型 IS -- 函数体 [ 说明部分] BEGIN 顺序语句 ; END FUNCTION 函数名;
康芯科技 【例8-4】 工工 BRARY工EEE; USE IEEE STD LOGIC 1164.ALL; PACKAGE packexp工s 定义程序包 FUNCTIoN max(a,b: IN STD LOGIC VECTOR) 定义函数首 RETURN STD LOG工 C VECTOR; EUNc工o至unc1(a,b,c:RA) 定义函数首 RETURN REAL i EUNCI工ON b: INTEGER 定义函数首 RETURN工 NTEGER; FuNCIoN as2( SIGNAL in1,in2:REA)-定义函数首 RETURN REAL END PACKAGE BODY packexp Is FUNCTIoN max( a,b: IN STD LOGIC VECTOR) 定义函数体 RETURN STD LOGIC VECTOR IS BEG工N IF a>b The retuRn a ELSE return b END工F; ND FUNC工 on may; --结束 FUNCTION语句 END -结束 PACKAGE BODY语句 接下页
KX 康芯科技 【例8-4】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; PACKAGE packexp IS --定义程序包 FUNCTION max( a,b : IN STD_LOGIC_VECTOR) --定义函数首 RETURN STD_LOGIC_VECTOR ; FUNCTION func1 ( a,b,c : REAL ) --定义函数首 RETURN REAL ; FUNCTION "*" ( a ,b : INTEGER ) --定义函数首 RETURN INTEGER ; FUNCTION as2 (SIGNAL in1 ,in2 : REAL ) --定义函数首 RETURN REAL ; 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语句 END; --结束PACKAGE BODY语句 接下页
K述列 接上页 工工 BRARY IEEE; 函数应用实例 USE IEEE. STD LOGIC 1164.ALL USE WORK. packexp ALL i NTITY axam工S Port (datl dat2: IN STD LOGIC VECTOR(3 DOWNTO 0)i dat3, dat4 IN STD LOGIC VECTOR (3 DOWNTo 0); outl, out2 OUT STD LOGIC VECTOR(3 DOWNTO 0)) END ARcH工 TECTuRE bhv OF axam工s BEG工N out1<=max(dat1,dat2);--用在赋值语句中的并行函数调用语句 PRoCESS (dat3, data BEG工N out2 < max(dat3, data)i 顺序函数调用语句 END PROCESS END
KX 康芯科技 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; 接上页
K述列 831函数( FUNCTION data[ 3 B30]B3 dat 3: 0B01 B:o1 max out2 ][:010ut2 30 ou2[3:0] dat2(3:0 r 5. dat1 (3: 0]B:o p: 01 max out 1 out1[3: 0]- out1[3: 0] 图8-2例8-4的逻辑电路图
KX 康芯科技 图8-2 例8-4的逻辑电路图 · · · · 8.3.1 函数(FUNCTION)
K述列 【例85】 工工 BRARY工E; USE IEEE STD LOGIC 1164.ALL ENT工 ry func Is PORT (a IN STD工oGIcⅤ ECTOR(0to2 m: OUT sTD LOGIC vECToR o to 2 )) END EN工 ry func; ARChITECTURE demo oF func IS FUNCTIoN sam(x,y,z:STD工oGrC) RETURN STD LOG工c工s BEG工N RETURn x AND y )ORz END FUNC工 oN sam; BEG工N PROCESSa BEG工N 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 ARCHI TECTURE demo i
KX 康芯科技 【例8-5】 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 ;