EDA技术与VHDL第10章 VHDL结构.ppt
《EDA技术与VHDL第10章 VHDL结构.ppt》由会员分享,可在线阅读,更多相关《EDA技术与VHDL第10章 VHDL结构.ppt(88页珍藏版)》请在三一办公上搜索。
1、EDA技术与VHDL,第10章VHDL结构,8.1 VHDL实体,VHDL实体作为一个设计实体(独立的电路功能结构)的组成部分,其功能是对这个设计实体与外部电路进行接口描述。实体是设计实体的表层设计单元,实体说明部分规定了设计单元的输入输出接口信号或引脚,它是设计实体对外的一个通信界面。实体的具体表述和用法已在前面有过详细例解,这里不再重复。,KX康芯科技,8.2 VHDL结构体,1.结构体的一般语言格式,ARCHITECTURE 结构体名 OF 实体名 IS 说明语句BEGIN 功能描述语句END ARCHITECTURE 结构体名;,8.2 VHDL结构体,2.结构体说明语句,3.功能描述
2、语句结构,进程语句,信号赋值语句,子程序调用语句,元件例化语句,8.3 VHDL子程序,8.3.1 VHDL函数,FUNCTION 函数名(参数表)RETURN 数据类型-函数首FUNCTION 函数名(参数表)RETURN 数据类型 IS-函数体 说明部分 BEGIN 顺序语句;END FUNCTION 函数名;,【例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;F
3、UNCTION 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
4、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 out
5、1=max(dat1,dat2);-用在赋值语句中的并行函数调用语句 PROCESS(dat3,dat4)BEGIN out2=max(dat3,dat4);-顺序函数调用语句 END PROCESS;END;,KX康芯科技,8.3 VHDL子程序,8.3.1 VHDL函数,图8-1 10-2 例8-1的逻辑电路图,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);E
6、ND 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.3 VHDL子程序,8.3.2 VHDL重载函数,【例8-3】(M
7、axplusII不支持本例)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:I
8、N 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)-
9、定义函数体 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
10、,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)的调用 E
11、ND;,【例8-4】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_
12、VECTOR;function SHR(ARG:STD_LOGIC_VECTOR;COUNT:STD_LOGIC_VECTOR)return STD_LOGIC_VECTOR;.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;els
13、e return R;end if;end;function+(L:STD_LOGIC_VECTOR;R:INTEGER)return STD_LOGIC_VECTOR is Variable result:STD_LOGIC_VECTOR(Lrange);Begin result:=UNSIGNED(L)+R;return std_logic_vector(result);end;.end STD_LOGIC_UNSIGNED;,8.3 VHDL子程序,8.3.3 VHDL转换函数,表8-1 IEEE库类型转换函数表,8.3 VHDL子程序,8.3.3 VHDL转换函数,【例8-5】LIBR
14、ARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY exg IS PORT(a,b:in bit_vector(3 downto 0);q:out std_logic_vector(3 downto 0);end;architecture rtl of exg is begin q=to_stdlogicvector(a and b);-将位矢量数据类型转换成标准逻辑位矢量数据end;,8.3 VHDL子程序,8.3.3 VHDL转换函数,【例8-6】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_
15、LOGIC_ARITH.ALL;-注意使用了此程序包ENTITY axamp IS PORT(a,b,c:IN integer range 0 to 15;q:OUT std_logic_vector(3 downto 0);END;ARCHITECTURE bhv OF axamp IS BEGIN q=conv_std_logic_vector(a,4)when conv_integer(c)=8 else conv_std_logic_vector(b,4);END;,【例8-7】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;PACKAGE n_pac
16、k IS SUBTYPE nat IS Integer range 0 to 255;-定义一个Integer的子类型 TYPE Bit8 IS array(7 downto 0)OF std_logic;-定义一个数据类型 FUNCTION nat_to_Bit8(s:nat)RETURN Bit8;End n_pack;PACKAGE BODY n_pack IS FUNCTION nat_to_Bit8(s:nat)RETURN Bit8 IS VARIABLE Din:Integer range 255 downto 0;VARIABLE Rut:Bit8;VARIABLE Rig:I
17、nteger:=2*7;BEGIN Din:=s;FOR I in 7 downto 0 LOOP IF Din/Rig 1 THEN Rut(i):=1;Din:=Din-Rig;ELSE Rut(i):=0;END IF;Rig:=Rig/2;END LOOP;RETURN Rut;END nat_to_Bit8;END n_pack;LIBRARY IEEE;-用户定义转换函数应用实例USE IEEE.STD_LOGIC_1164.ALL;USE WORK.n_pack.ALL;ENTITY axamp IS PORT(dat:IN nat;-注意数据类型的定义 ou:OUT Bit8)
18、;-注意数据类型的定义 END;ARCHITECTURE bhv OF axamp IS BEGIN ou=nat_to_Bit8(dat);END;,8.3 VHDL子程序,8.3.4 VHDL决断函数,决断函数输入一般是单一变量,多个驱动源的信号值组成非限定数组,如2个信号驱动源,其信号值组成的数组是2个元素长度;3个信号驱动源信号值组成的数组是3个元素长度,多个信号驱动源信号值组成的未限定数组可依次类推。但决断函数调用后返回的是单一信号值,称断信号值。,8.3 VHDL子程序,8.3.5 VHDL过程,PROCEDURE 过程名(参数表)-过程首PROCEDURE 过程名(参数表)IS
19、说明部分 BIGIN-过程体 顺序语句;END PROCEDURE 过程名,8.3 VHDL子程序,8.3.5 VHDL过程,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 VHDL子程序,8.3.5 VHDL过程,【例8-8】PROCEDURE prg1(VARIABLE value:INOUT BIT_VECTOR(0 TO 7)ISBEGIN CAS
20、E value IS WHEN 0000=value:0101;WHEN 0101=value:0000;WHEN OTHERS=value:1111;END CASE;END PROCEDURE prg1;,8.3 VHDL子程序,8.3.5 VHDL过程,【例8-9】PROCEDURE comp(a,r:IN REAL;m:IN INTEGER;v1,v2:OUT REAL)IS VARIABLE cnt:INTEGER;BEGIN v1:=1.6*a;-赋初始值 v2:=1.0;-赋初始值 Q1:FOR cnt IN 1 TO m LOOP v2:=v2*v1;EXIT Q1 WHEN
21、v2 v1;-当v2 v1,跳出循环LOOP END LOOP Q1 ASSERT(v2 v1)REPORT OUT OF RANGE-输出错误报告 SEVERITY ERROR;END PROCEDURE comp;,【例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 na
22、nd4a(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);并行调用过程
23、END;,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.,8.3 VHDL子程序,8.3.7 子程序调用语句,1.过程调用,过程名(形参名=实参表达式,形参名=实参表达式);,(1)将IN和IN
24、OUT模式的实参值赋给欲调用的过程中与它们对应的形参;(2)执行这个过程;(3)将过程中IN和INOUT模式的形参值返回给对应的实参。,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_type
25、sENTITY 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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA技术与VHDL第10章 VHDL结构 EDA 技术 VHDL 10 结构
链接地址:https://www.31ppt.com/p-2403040.html