K述列 8.32重载函数( OVERLOADED FUNCTION) 【例8-6】(本例 Maxplus不支持) LIBRARY IEEE USE IEEESTD LOGIC 1164.ALL PACKAGE packexp Is 定义程序包 functIoN max(a,b: IN STD LOGICⅤ ECTOR)-定义函数首 RETURN STD LOGIC VECTOR function max(a,b:INBIⅤ ECTOR)-定义函数首 RETURN BIT VECTOR FUNCTION max( a, b: IN INTEGER 定义函数首 RETURN INTEGER ENDE PACKAGE BODY packexp Is FUNCTIoN max(a,b: IN STD LOGICⅤ ECTOR)-定义函数体 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 接下页
KX 康芯科技 8.3.2 重载函数(OVERLOADED FUNCTION) 【例8-6】(本例MaxplusII不支持) 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 接下页
接上页 K述列 工Ea b THEN RETURN ai ELSE return b END IE END FUNCT工 on may; 结束 UNCTION语句 FUNCTIoN max a,b IN BIT VECTOR) 定义函数体 RETURN BIT VECTOR工s BEG工N 工Fa> b THEN RETURN a ELSE return b END工F; END FUNCI工 on may; 结束 FUNCTION语句 结束 PACKAGE BODY语句 以下是调用重载函数max的程序: 工工 BRARY工EEE; UsE工EEE. STD LOG工c1164.AT工 USE WORK. packexpALL; ENT乎 Y axam工s PORT (al, b1 IN STD LOGIC VECTOR (3 DOWNTo 0)i a2, b2 IN BIT VECTOR (4 DOWNTo 0)i a3,b3: IN INTEGER RANGE 0 TO 15 Cl OUT STD LOGIC VECTOR (3 DOWNTO 0)i OUT BIT VECTOR(4 DOWNTO 0) C3 OUT INTEGER RANGE 0 TO 15) END i
KX 康芯科技 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; 接上页
接上页 K述列 ARCHITECTURE bhv OF axam Is BEGIN c1<=max(a1,b1);-对函数max(a,b: IN STD LOGIC VECTOR)的调用 c2<=max(a2,b2);-对函数max(a,b: IN BITⅤ ECTOR)的调用 c3<=max(a3b3);-对函数max(a,b: IN INTEGER)的调用 END 【例8-7】 LIBRARY EEE 程序包首 USE IEEE std logic 1164. all USE IEEE Std logic arith. all PACKAGE STD LOGIC UNSIGNED is function"+"(L: STD LOGIC VECTOR R: INTEGER) return STd LOGIC VEctor function+(L: INTEGER; R: STD LOGIC VECTOR) return STD LOGIC VECTOR function"+(L: STD LOGIC VECTOR ;R: STD LOGIC return STD LOGIC VECTOR; 接下页 function SHR (ARG: STD LOGIC VECTOR i COUNT STD LOGIC VECTOR )return STD LOGIC VECTOR
KX 康芯科技 ARCHITECTURE bhv OF axamp IS BEGIN c1 <= max(a1,b1); --对函数max( a,b :IN STD_LOGIC_VECTOR)的调用 c2 <= max(a2,b2); --对函数max( a,b :IN BIT_VECTOR) 的调用 c3 <= max(a3,b3); --对函数max( a,b :IN INTEGER) 的调用 END; 接上页 【例8-7】 LIBRARY IEEE ; -- 程序包首 USE IEEE.std_logic_1164.all ; USE IEEE.std_logic_arith.all ; PACKAGE STD_LOGIC_UNSIGNED is function "+" (L : STD_LOGIC_VECTOR ; R : INTEGER) return STD_LOGIC_VECTOR ; function "+" (L : INTEGER; R : STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR ; function "+" (L : STD_LOGIC_VECTOR ; R : STD_LOGIC ) return STD_LOGIC_VECTOR ; function SHR (ARG : STD_LOGIC_VECTOR ; COUNT : STD_LOGIC_VECTOR ) return STD_LOGIC_VECTOR ; 接下页
K述列 接上页 end STD LOG IC UNSIGNED T工 BRARY工EEE 程序包体 use IEEE std logic 1164.all i use IEEE std logic arith.all; package body sTD LOGIC UNS IGNED is function maximum (L, R INTEGER) return INTEGER is begin if工> r then return I; return R end if end; function"+"江: STD LOGIC VECTOR;R:工 NTEGER) return STD LOGIC VECTOR is Variable result STD LOGIC VECTOR (I'range)i Begin resu1七: UNSIGNED(L)+ R return std logic vector(result)i end end STD LOGIC UNSIGNED
KX 康芯科技 ... end STD_LOGIC_UNSIGNED ; LIBRARY IEEE ; -- 程序包体 use IEEE.std_logic_1164.all ; use IEEE.std_logic_arith.all ; package body STD_LOGIC_UNSIGNED is function maximum (L, R : INTEGER) return INTEGER is begin if L R then return L; else return R; end if; end; function "+" (L : STD_LOGIC_VECTOR ; R : INTEGER) return STD_LOGIC_VECTOR is Variable result : STD_LOGIC_VECTOR (L’range) ; Begin result := UNSIGNED(L) + R ; return std_logic_vector(result) ; end ; ... end STD_LOGIC_UNSIGNED ; 接上页
K述列 83子程序( SUBPROGRAM) 8.3.3过程( PROCEDURE) PROCEDURE过程名(参数表) 过程首 PROCEDURE过程名(参数表)工S [说明部分] BTG工N 过程体 顺序语句; END PROCEDURE过程名; PROCEDURE prol (VARIABLE a, b: INOUT REAL)i PROCEDURE pro2( CONSTANT a1:工N工 NTEGER; VARIABLE b1: OUT INTEGER ) PROCEDURE pro3 (SIGNAL sig INOUT BIT)
KX 康芯科技 8.3.3 过程(PROCEDURE) PROCEDURE 过程名(参数表) -- 过程首 PROCEDURE 过程名(参数表) IS [说明部分] BIGIN -- 过程体 顺序语句; END PROCEDURE 过程名; PROCEDURE pro1 (VARIABLE a, b : INOUT REAL) ; PROCEDURE pro2 (CONSTANT a1 : IN INTEGER ; VARIABLE b1 : OUT INTEGER ) ; PROCEDURE pro3 (SIGNAL sig : INOUT BIT) ; 8.3 子程序(SUBPROGRAM)