康芯科技 【例8-10】 LIBRARY IEEE; USE IEEE.STD LOGIC 1164.ALL; PACKAGE axamp IS -过程首定义 PROCEDURE nand4a (SIGNAL a,b,c,d IN STD LOGIC SIGNAL y:OUT STD LOGIC ) END axamp; PACKAGE BODY axamp IS -过程体定义 PROCEDURE nand4a (SIGNAL a,b,c,d IN STD_LOGIC SIGNAL y:OUT STD LOGIC IS BEGIN y<=NOT (a AND b AND c AND d); RETURN; END nand4a; END axamp; LIBRARY IEEE; -主程序 USE IEEE.STD LOGIC 1164.ALL; USE WORK.axamp.ALL; ENTITY EX IS PORT(e,f,g,h IN STD LOGIC x:OUT STD LOGIC ) END; ARCHITECTURE bhv OF EX IS BEGIN nand4a(e,f,g,h,x); 并行调用过程 END;
KX 康芯科技 【例8-10】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; PACKAGE axamp IS -过程首定义 PROCEDURE nand4a (SIGNAL a,b,c,d : IN STD_LOGIC ; SIGNAL y : OUT STD_LOGIC ); END axamp; PACKAGE BODY axamp IS -过程体定义 PROCEDURE nand4a (SIGNAL a,b,c,d : IN STD_LOGIC ; SIGNAL y : OUT STD_LOGIC ) IS BEGIN y<= NOT(a AND b AND c AND d); RETURN; END nand4a; END axamp; LIBRARY IEEE; -主程序 USE IEEE.STD_LOGIC_1164.ALL; USE WORK.axamp.ALL; ENTITY EX IS PORT( e,f,g,h : IN STD_LOGIC ; x : OUT STD_LOGIC ); END; ARCHITECTURE bhv OF EX IS BEGIN nand4a(e,f,g,h,x) ; 并行调用过程 END;
K康还科技 8.3VHDL子程序 8.3.6VHDL重载过程 【例8-11】 PROCEDURE calcu(v1,v2:IN REAL: SIGNAL out1 INOUT INTEGER); PROCEDURE calcu v1,v2:IN INTEGER SIGNAL out1 INOUT REAL); ·· ca1cu(20.15,1.42,sign1): -调用第一个重载过程calcu ca1cu(23,320,sign2); -调用第二个重载过程calcu
KX 康芯科技 8.3 VHDL子程序 8.3.6 VHDL重载过程 【例8-11】 PROCEDURE calcu ( v1, v2 : IN REAL ; SIGNAL out1 : INOUT INTEGER) ; PROCEDURE calcu ( v1, v2 : IN INTEGER ; SIGNAL out1 : INOUT REAL) ; . calcu (20.15, 1.42, signl) ; - 调用第一个重载过程calcu calcu (23, 320,sign2 ) ; - 调用第二个重载过程 calcu
K花芯科技 8.3VHDL子程序 8.3.7子程序调用语句 1.过程调用 过程名[([形参名=>]实参表达式 {,[形参名=>]实参表达式)小: ()将N和NOUT模式的实参值赋给欲调用的过程中与它们对应的形参; (2)执行这个过程: (3)将过程中N和NOUT模式的形参值返回给对应的实参
KX 康芯科技 8.3 VHDL子程序 8.3.7 子程序调用语句 1. 过程调用 过程名[([形参名=> ]实参表达式 { ,[形参名=> ]实参表达式}) ]; (1) 将IN和INOUT模式的实参值赋给欲调用的过程中与它们对应的形参; (2) 执行这个过程; (3) 将过程中IN和INOUT模式的形参值返回给对应的实参
康芯科技 【例8-12】 PACKAGE data_types Is -定义程序包 SUBTYPE data_element IS INTEGER RANGE0To3;-定义数据类型 TYPE data array IS ARRAY (1 TO 3)OF data element; END data types; USE WORK.data_types,ALL;-打开以上建立在当前工作库的程序包data_types ENTITY sort IS PORT in array IN data array out array OUT data array); END sort; ARCHITECTURE exmp OF sort IS BEGIN PROCESS (in array) -进程开始,设data_typesi为敏感信号 PROCEDURE swap(data INOUT data array; -swap的形参名为data、low、high low,high IN INTEGER IS VARIABLE te吧:data_element; BEGIN -一开始描述本过程的逻辑功能 IF (data(low)>data(high))THEN - 检测数据 temp :=data(low); data(low):data(high); data(high):=temp END IF END swap i 一-过程swaP定义结束 VARIABLE my_array data_array i - 在本进程中定义变量my_array BEGIN -进程开始 my array :in array -} 将输入值读入变量 swap(my_array,1,2); -my_array、1、2是对应于data、1ow、high的实 swap(my array,2,3); 位置关联法调用,第2、第3元素交换 swap(my_array,1,2); 位置关联法调用,第1、第2元素再次交换 out_array <=my_array i END Process i END exmp
KX 康芯科技 8.3 VHDL子程序 8.3.7 子程序调用语句 1. 过程调用 【例8-12】 PACKAGE data_types IS - 定义程序包 SUBTYPE data_element IS INTEGER RANGE 0 TO 3 ;- 定义数据类型 TYPE data_array IS ARRAY (1 TO 3) OF data_element; END data_types; USE WORK.data_types.ALL; -打开以上建立在当前工作库的程序包data_types ENTITY sort IS PORT ( in_array : IN data_array ; out_array : OUT data_array); END sort; ARCHITECTURE exmp OF sort IS BEGIN PROCESS (in_array) - 进程开始,设data_types为敏感信号 PROCEDURE swap(data : INOUT data_array; - swap的形参名为data、low、high low, high : IN INTEGER ) IS VARIABLE temp : data_element ; BEGIN - 开始描述本过程的逻辑功能 IF (data(low) > data(high)) THEN - 检测数据 temp := data(low) ; data(low) := data(high); data(high) := temp ; END IF ; END swap ; - 过程swap定义结束 VARIABLE my_array : data_array ; - 在本进程中定义变量my_array BEGIN - 进程开始 my_array := in_array ; - 将输入值读入变量 swap(my_array, 1, 2); - my_array、1、2是对应于data、low、high的实参 swap(my_array, 2, 3); - 位置关联法调用, 第2、第3元素交换 swap(my_array, 1, 2); - 位置关联法调用, 第1、第2元素再次交换 out_array <= my_array ; END Process ; END exmp ;
康芯科技 【例8-13】 ENTITY sort4 is GENERIC (top INTEGER =3); PORT (a,b,c,d IN BIT VECTOR (0 TO top); ra,rb,rc,rd OUT BIT VECTOR (0 To top)); END sort4; ARCHITECTURE muxes OF sort4 IS PROCEDURE sort2(x,y INOUT BIT VECTOR (0 TO top))is VARIABLE tmp BIT VECTOR (0 TO top); BEGIN IF x y THEN tmp :x;x :y; y :tmp; END IF; END sort2; BEGIN PROCESS (a,b,c,d) VARIABLE va,vb,ve,vd BIT VECTOR(0 To top); BEGIN va :a;vb :=b;vc :c;vd :d; sort2(va,vc)i sort2(vb,vd); sort2(va,vb); sort2(ve,vd); sort2(vb,vc); ra <=vai rb <vbi rc <vc;rd <vd; END PROCESS; END muxes;
KX 康芯科技 8.3 VHDL子程序 8.3.7 子程序调用语句 1. 过程调用 【例8-13】 ENTITY sort4 is GENERIC (top : INTEGER :=3); PORT (a, b, c, d : IN BIT_VECTOR (0 TO top); ra, rb, rc, rd : OUT BIT_VECTOR (0 TO top)); END sort4; ARCHITECTURE muxes OF sort4 IS PROCEDURE sort2(x, y : INOUT BIT_VECTOR (0 TO top)) is VARIABLE tmp : BIT_VECTOR (0 TO top); BEGIN IF x > y THEN tmp := x; x := y; y := tmp; END IF; END sort2; BEGIN PROCESS (a, b, c, d) VARIABLE va, vb, vc, vd : BIT_VECTOR(0 TO top); BEGIN va := a; vb := b; vc := c; vd := d; sort2(va, vc); sort2(vb, vd); sort2(va, vb); sort2(vc, vd); sort2(vb, vc); ra <= va; rb <= vb; rc <= vc; rd <= vd; END PROCESS; END muxes;