《自定义数据类型及转换.ppt》由会员分享,可在线阅读,更多相关《自定义数据类型及转换.ppt(20页珍藏版)》请在三一办公上搜索。
1、第九讲 VHDL自定义数据类型及类型转换,本讲知识点:自定义数据类型 数据类型转换,(1)TYPE语句用法:TYPE 数据类型名 IS 数据类型定义 OF 基本数据类型;,用户自定义数据类型,用户定义的数据类型可以有多种,如枚举类型、整数类型、实数类型、数组类型、记录类型和时间类型等。,上述格式中的数据类型名由设计者自定;数据类型定义部分用来描述所定义元素的表达方式和表达内容;基本数据类型是指数据类型定义中所定义的基本数据类型,一般都是取已有的预定义数据类型。,例:type st1 is array(0 to 15)of std_logic;type week is(sun,mon,tue,w
2、ed,thu,fri,sat);,常用的自定义数据类型,枚举数据类型:,type week is(sun,mon,tue,wed,thu,fri,sat);,在逻辑电路中,所有的数据都是用“1”或“0”来表示的,但是人们在考虑逻辑关系时,只有数字往往是不方便的。在VHDL语言中,可以用文字符号来表示一组实际的二进制数。,“000”“001”“010”“011”“100”“101”“110”,例如:type m_state is(state1,state2,state3,state4,state5);signal p_state,n_state:m_state;,在综合过程中,枚举类型文字元素的
3、编码通常是自动的,编码顺序是默认的,一般将第一个枚举量(最左边的量)编码为0,以后的依次加1。默认编码值如下:state1 000;state2 001;state3 010;state4 011;state5 100;,思考:如何表示STD_LOGIC类型?,数组类型:,语句格式如下:(1)TYPE 数组名 IS ARRAY(数组范围)OF 数据类型;(2)TYPE 数组名 IS ARRAY(数组下标名 RANGE)OF 数据类型,数组类型属复合类型,是将一组具有相同数据类型的元素集合在一起,作为一个数据对象来处理的数据类型。数组可以是一维数组或多维数组。,例:type stb is arr
4、ay(7 downto 0)of std_logic;该数组有8个元素,其下标排列是7、6、1、0。type data_bus is array(0 to 7)of bit;该数组有8个元素,其下标排列是0、1、6、7。TYPE bit_number IS ARRAY(natural RANGE)OF BIT;VARIABLE bb:bit_number(1 to 6);,对数组赋值有两种方法:一是对整个数组进行一次赋值;二是按下标对每一个数组元素进行赋值。例:type data_bus is array(0 to 7)of bit;signal a:data_bus;整体赋值:a=“0100
5、0111”;分别赋值:a(0)=0;a(1)=1;a(2)=0;a(3)=0;a(4)=0;a(5)=1;a(6)=1;a(7)=1;,物理类型:,语句格式如下:(1)TYPE 数据类型名 IS 范围;UNITS 基本单位;单位;END UNITS例:P89 例4-8,用来表示时间、电压、容量和阻抗等物理量。,记录类型:将不同类型的数据和数据名组织在一起,而形成新的对象。语句格式如下:,TYPE 记录类型名 IS RECORD 记录元素名1:数据类型名;记录元素名2:数据类型名;END RECORD;,下面是记录类型定义的一个例子:type c_time is record year:inte
6、ger range 0 to 3000;month:integer range 1 to 12;date:integer range 1 to 31;enable:bit;data:std_logic_vector(15 downto 0);end record;记录类型的对象的说明:signal number:c_time;,一个记录的每一个元素要由它的记录元素名来进行访问。对于记录类型的对象的赋值和数组类似,可以对其进行整体赋值,也可分别赋值,从记录类型的对象中提取记录元素时应使用“.”。对记录元素分别赋值:number.year=2005;number.mouth=9;number.da
7、te=22;number.enable=1;number.data=data_in;对记录元素整体赋值:number=(2005,9,22,1,data_in);例2:P90 例4-9,用户定义的子类型 SUBTYPE是TYPE所定义的数据类型的一个子集,它满足原数据类型的所有约束条件,原数据类型称为基本数据类型,SUBTYPE 格式如下:SUBTYPE 子类型名 IS 基本数据类型 约束范围;,上述格式中的子类型名由设计者自定;基本数据类型必须是前面已有过type定义的类型。例:subtype dig is integer range 0 to 9;其中,integer是标准程序包中已定义过
8、的数据类型,子类型只是把integer约束到只含10个值的数据类型。P90 例4-10,5、数据类型的转换,在VHDL语言中,数据类型的定义是相当严格的,不同的数据类型之间不能进行运算和直接代入。为了实现正确的赋值操作,必须要将带入的数据进行类型转换。转换的方式:(1)转换函数 数据类型转换函数通常有程序包来提供。(P91)(2)数据类型限定,【程序】LIBRARY IEEE;USE IEEE std_logic_1164.ALL;USE IEEE std_logic_UNSIGNED.ALL;ENTITY add5 IS PORT(num:IN std_logic_vector(2 DOWN
9、to 0);.);END add5;ARCHITECTURE rt1 of add5 issignal in_num:integer range 0 to 5;.BEGIN in_num=CONV_INTEGER(num);变换式.END rtl;,例2:Signal b:std_logic;Signal u1:unsigned(3 downto 0);Signal s1:signed(3 downto 0);Signal i1,i2:integer;U1=“1001”;S1=“1001”;B=x;Wait for 10 ns;I1=conv_integer(u1);I2=conv_integer(s1);,(2)数据类型限定的方式 在数据之前加上类型名完成转换功能。例:设有整型变量I,j和实型变量r,s,则S:=REAL(I);J:=INTEGER(r);能正常执行,