用户定义数据类型 VHDL允许用户自行定义类型; 自定义类型的元素实际上全部来自预定义类型 用户定义类型必须在使用以前进行类型说明 用户定义类型可以分为子类型、枚举类型和数 组3类
用户定义数据类型 VHDL允许用户自行定义类型; 自定义类型的元素实际上全部来自预定义类型; 用户定义类型必须在使用以前进行类型说明; 用户定义类型可以分为子类型、枚举类型和数 组3类;
子类型 从已有类型中取连续子集合加以定义 subtype twoval logic is std logic range o to I subtype bitnum is integer range 31 downto 0; 子类型的数据可以和原有类型的数据进行直接运 算
子类型 从已有类型中取连续子集合加以定义 例: subtype twoval_logic is std_logic range `0` to `1` ; subtype bitnum is integer range 31 downto 0 ; 子类型的数据可以和原有类型的数据进行直接运 算;
子类型 当原有类型为 Integer时,也可以采用下列简化 定义: type子类型名称 Is range起点to终点; 例 type a is range32to212;整数升序定义 type b is range31 downto0整数降序定义
子类型 当原有类型为integer时,也可以采用下列简化 定义: type 子类型名称 is range 起点 to 终点; 例: type a is range 32 to 212; 整数升序定义 type b is range 31 downto 0; 整数降序定义
枚举类型 从已有类型中取离散子集合加以定义 type type-name is( value list); 例 type move is(1,0,A,a); type tra_light is(reset, stop, wait, go): type color is(red, green, blue, white, black)
枚举类型 从已有类型中取离散子集合加以定义 type type-name is ( value list) ; 例: type move is ('1','0','A','a'); type tra_light is (reset, stop, wait, go); type color is (red,green,blue,white,black)
枚举类型 在括号中按顺序列举该类型中的全部元素; 各元素间以逗号分隔; 在枚举类型中,数据大小关系根据顺序进 行排列,并根据数据元素的数量,采用最 短的二进制自然码表达;
枚举类型 在括号中按顺序列举该类型中的全部元素; 各元素间以逗号分隔; 在枚举类型中,数据大小关系根据顺序进 行排列,并根据数据元素的数量,采用最 短的二进制自然码表达;
数组 数组为同类型元素的有序排布(从左向 右),每一元素与一个数组指标对应; 数组指标通常为整数;也可以采用枚举类 型的元素来表达。 只有一维和二维数组可以综合,高维数组 不可综合;
数组 数组为同类型元素的有序排布(从左向 右),每一元素与一个数组指标对应; 数组指标通常为整数;也可以采用枚举类 型的元素来表达。 只有一维和二维数组可以综合,高维数组 不可综合;
数组示例 type byte is array (7 downto 0)of std logic; type monthly count is array(l to 12)ofinteger type length is array (natural range <>)of bit;
数组示例 type byte is array (7 downto 0) of std_logic; type monthly_count is array (1 to 12) of integer; type length is array (natural range <>) of bit;
数组示例 constant word len: integer: =32 type word is array (word len-l downto O)of std logic; constant num regs: integer: =8 type reg file is array (1 to num regs)of word;
数组示例 constant word_len: integer := 32; type word is array (word_len-1 downto 0)of std_logic; constant num_regs: integer := 8; type reg_file is array (1 to num_regs) of word;
多维数组定义的示例 type row is array (7 downto 0)of std logic 先定义一维数组; type matrix is array(0 to 3)of row; 再定义1x1数组; type matrix is array(0 to 3 )of std logic vector (7 downto0);-直接定义1x1数组; type matrix is array (0 to 3, 7 downto o)of std logic;-直接定义2维数组;
多维数组定义的示例 type row is array (7 downto 0) of std_logic; --先定义一维数组; type matrix is array (0 to 3) of row; --再定义1x1数组; type matrix is array (0 to 3) of std_logic_vector (7 downto 0); --直接定义1x1数组; type matrix is array (0 to 3,7 downto 0) of std_logic;--直接定义2维数组;
数据类型的转换 当数据需要交替进行算术和逻辑运算时,就需 要进行数据转换; 一般的类型转换通常由专门的函数进行,这些 函数存放在特定的包集合中 子类型与基本类型之间可以直接赋值,不需要 进行类型转换;个别非常关联的类型可以通过 赋值进行直接转换;
数据类型的转换 当数据需要交替进行算术和逻辑运算时,就需 要进行数据转换; 一般的类型转换通常由专门的函数进行,这些 函数存放在特定的包集合中; 子类型与基本类型之间可以直接赋值,不需要 进行类型转换;个别非常关联的类型可以通过 赋值进行直接转换;