【例8-1】 LIBRARY IEEE; K顾还科技 USE IEEE.STD LOGIC 1164.ALL; PACKAGE packexp IS -一定义程序包 FUNCTION max(a,b:IN STD_LOGIC_VECTOR) -定义函数首 RETURN STD LOGIC VECTOR; FUNCTION funcl 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; -结束UNCTION语句 END; -结束PACKAGE BODY语句 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;
KX 【例8-1】 康芯科技 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语句 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; KX 康芯科技
K策科技 8.3VHDL子程序 8.3.1VHDL函数 dat4[3:0] 3:0301 dat33:0] 3:0] 3:01 3:01 max.out2 B01Bout2[3:0] out23:0] dat2[3:0] 30] 301 dat1[3:可 30 301 30 max.out1 3:0]3:0] out1[3:0) out1[3:0] 图8-110-2例8-1的逻辑电路图
KX 康芯科技 8.3 VHDL子程序 8.3.1 VHDL函数 · · · · 图8-1 10-2 例8-1的逻辑电路图
K康还科技 8.3VHDL子程序 【例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;
KX 康芯科技 8.3 VHDL子程序 【例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 ;
8.3VHDL子程序 K能芯科技 8.3.2VHDL重载函数 【例8-3】(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; -结束NCTION语句 FUNCTION max(a,b IN INTEGER) -定义函数体 RETURN INTEGER IS BEGIN IF a b THEN RETURN a; 接下页 ELSE RETURN b; END IF; END FUNCTION max; -结束FUNCTION语句
KX 康芯科技 8.3 VHDL子程序 8.3.2 VHDL重载函数 【例8-3】(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 IF a > b THEN RETURN a; ELSE RETURN b; END IF; END FUNCTION max; -结束FUNCTION语句 接下页
FUNCTION max a,b IN BIT VECTOR) -一定义函数体 K康还科技 RETURN BIT VECTOR IS BEGIN IF a b THEN RETURN a; ELSE RETURN b; END IF; END FUNCTION max; -结束UNCTION语句 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 ARCHITECTURE bhv OF axamp IS BEGIN c1<= max(al,b1);-对函数max(a,b:IN STD_LOGIC_VECTOR)的调用 c2<= max(a2,b2);-对函数max(a,b:IN BIT_VECTO)的调用 c3<= max(a3,b3);-对函数max(a,b:IN INTEGER)的调用 END;
KX 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; 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; KX 康芯科技