VHDL数据类型

本文详细介绍了VHDL语言中的各种数据类型,包括预定义数据类型和用户自定义数据类型,并阐述了类型转换的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

VHDL数据类型

      VHDL是一种强数据类型语言。

     要求设计实体中的每一个常数、信号、变量、

函数以及设定的各种参量都必须具有确定的数据类

型,并且相同数据类型的量才能互相传递和作用。

     VHDL数据类型分为四大类:

        1标量类型(SCALAR TYPE);

        2复合类型(COMPOSITE TYPE);

        3存取类型(ACCESS TYPE);

        4文件类型(FILES TYPE)

又分为:

   1预定义数据类型、

   2用户自定义数据类型

1、VHDL的预定义数据类型

   1)布尔量(boolean)

      布尔量具有两种状态:false 和 true

   常用于逻辑函数,如相等(=)、比较(<)

   等中作逻辑比较。

   如,bit 值转化成boolean 值:

       boolean_var := (bit_var = ‘1’);

2)位(bit)

    bit 表示一位的信号值。

    放在单引号中,如 ‘0’ 或 ‘1’。

3)位矢量 (bit_vector)

   bit_vector 是用双引号括起来的一组位数据。

   如: “001100”       X“00B10B”

4)字符(character)

   用单引号将字符括起来。

    variable character_var : character;

     ... ...

    Character_var : = ‘A’;

5)整数(integer)

   integer 表示所有正的和负的整数。硬件实现时,

利用32位的位矢量来表示。可实现的整数范围为:

       -(231-1) to (231-1)

    VHDL综合器要求对具体的整数作出范围限定,

否则无法综合成硬件电路。

   如:signal s : integer range 0 to 15;

   信号 s 的取值范围是0-15,可用4位二进制数表

示,因此 s 将被综合成由四条信号线构成的信号。

6)自然数(natural)和正整数(positive)

   natural是integer的子类型,表示非负整数。

   positive是integer的子类型,表示正整数。

   定义如下:

   subtype natural is integer range 0 to

      integer’high;

   subtype positive is integer range 1 to

      integer’high;

7)实数(REAL)

      或称浮点数

      取值范围:-1.0E38 - +1.0E38

      实数类型仅能用于VHDL仿真器,一般综合器

   不支持。

8)字符串(string)

       string 是 character 类型的一个非限定

   数组。用双引号将一串字符括起来。如:

      variable string_var : string(1 to 7);

        ……

     string_var := “Rosebud”;

9)时间(TIME)

     由整数和物理单位组成

     如:55 ms,20 ns

10)错误等级(SEVERITY_LEVEL)

    仿真中用来指示系统的工作状态,共有四种:

        NOTE(注意)、

        WARNING(警告)、

        ERROR(出错)、

        FAILURE(失败)

2、IEEE预定义标准逻辑位与矢量

   1)std_logic 类型

       由 ieee 库中的std_logic_1164 程序

   包定义,为九值逻辑系统,如下:

    (‘U’,‘X’,‘0’,‘1’,‘Z’,‘W’,‘L’,‘H’,‘-’)

      ‘U’:未初始化的, ‘X’:强未知的,

      ‘0’:强0,        ‘1’:强1,

      ‘Z’:高阻态,     ‘W’:弱未知的,

      ‘L’:弱0,        ‘H’:弱1,

      ‘-’:忽略

     由 std_logic 类型代替 bit 类型可以完成电

子系统的精确模拟,并可实现常见的三态总线电路。

2)std_logic_vector 类型

   由 std_logic 构成的数组。定义如下:

      type std_logic_vector is array(natural  

           range<>) of std_logic;

   赋值的原则:相同位宽,相同数据类型。

3、用户自定义类型

   用户自定义类型是VHDL语言的一大特色。

   可由用户定义的数据类型有:

      1)枚举类型、

      2)整数和实数类型、

      3)数组类型、

      4)记录类型、

      5)子类型

用类型定义语句TYPE和子类型定义语句

SUBTYPE实现用户自定义数据类型。

    TYPE语句格式:


例:type byte is array(7 downto 0) of bit;

    variable addend : byte;

    type week is (sun, mon, tue, wed, thu,

         fri, sat);

type 数据类型名   is 数据类型定义   [of   基本数据类型];

SUBTYPE语句格式:

例:

    subtype digits is integer range 0 to 9;

    由subtype 语句定义的数据类型称为子类型。

subtype 子类型名 is 基本数据类型   约束范围;

1)枚举类型

    枚举该类型的所有可能的值。格式:

如:type std_logic is(‘U’,‘X’,‘0’,‘1’,

          ‘Z’,‘W’,‘L’,‘H’,‘-’)

如:type color is(blue,green,yellow, red);

    type my_logic is (‘0’, ‘1’, ‘U’, ‘Z’);

    variable hue : color;

    signal sig : my_logic;

    hue := blue;       sig <= ‘Z’;

type 类型名称 is (枚举文字{,枚举文字});

枚举类型的编码:

     综合器自动实现枚举类型元素的编码,一

般将第一个枚举量(最左边)编码为0,以后的

依次加1。编码用位矢量表示 ,位矢量的长度

将取所需表达的所有枚举元素的最小值。

如:type color is(blue,green,yellow,red);

    编码为: blue=“00”;              

             green=“01”;

             yellow=“10”;       

             red=“11”;

2)整数类型

      用户定义的整数类型是标准包中整数类型的子范围。格式:

例:type my_integer is integer range 0 to 9;

3)数组类型

   数组:同类型元素的集合。VHDL支持多维数组。

   多维数组的声明:

   type byte is array(7 downto 0) of bit;

   type vector is array(3 downto 0) of byte;

   限定数组、非限定数组、属性:

type 类型名称 is range 整数范围;

限定数组:

    其索引范围有一定的限制。

格式:    

非限定数组:数组索引范围被定义成一个类型范围。

格式:

例:type bit_vector is array(integer range <>)

          of bit;

    variable my_vector:bit_vector (5 downto -5);

type 数组名 is array(数组范围) of 数据类型;

type 数组名 is array(类型名称 range <>) of 数据类型;

属性:

      VHDL为多种类型定义了属性。

     语法如下:

         对象’属性

     VHDL为数组预先定义的属性:

         left      right

         high      low

         length    range

         reverse_range

对应变量:

        variable my_vector : bit_vector (5 downto -5);

各属性如下:

        my_vector’left                             5

        my_vector’right                         -5

        my_vector’high                           5

        my_vector’low                          -5

        my_vector’length                       11

        my_vector’range                  (5 downto -5)

        my_vector’reverse_range        (-5 to 5)

4)记录类型

      记录是不同类型的名称域的集合。

   格式如下:  

   访问记录体元素的方式:记录体名.元素名

type 记录类型名 is record

                    元素名:数据类型名;

                    元素名:数据类型名;

                         ┇  

end   record;

例:

    constant len:integer:= 8 ;

subtype byte_vec is bit_vector(len-1 downto 0);

type byte_and_ix is record

       byte : byte_vec;

         ix : integer range 0 to len;

end record ;

signal x, y, z : byte_and_ix ;

signal data : byte_vec ;

signal num : integer ;

               …….

x.byte <= “11110000” ;

x.ix <= 2 ;

data <= y.byte ;

num <= y.ix ;

z <= x ;

5)子类型

      子类型是已定义的类型或子类型的一个子集。

格式:             

例:

   bit_vector 类型定义如下:

   type bit_vector is array (natural range <>)

        of bit;

   如设计中只用16bit;可定义子类型如下:

   subtype my_vector is bit_vector(0 to 15);

注:子类型与基(父)类型具有相同的操作符和子

    程序。可以直接进行赋值操作。

subtype 子类型名 is 数据类型名[范围];

4、数据类型转换

    VHDL是一种强类型语言,不同类型的数据

对象必须经过类型转换,才能相互操作。

1)类型转换函数方式

   通过调用类型转换函数,使相互操作的数据对

象的类型一致,从而完成相互操作。

library ieee;

library dataio;

use ieee.std_logic_1164.all;

use dataio.std_logic_ops.all;

entity cnt4 is

    port(clk: in std_logic;

           p: inout std_logic_vector(3 downto 0);

end cnt4;

architecture behv of cnt4 is

begin

   process(clk)

   begin

      if clk’event and clk=‘1’ then

         p<=to_vector(2, to_integer(p)+1);

      end if;

   end process;

end behv;

2)直接类型转换方式

    对相互间非常关联的数据类型(如整型、浮

点型),可进行直接类型转换。格式:

    数据类型标识符(表达式)

如:variable a, b : real;

    variable c, d : integer;

        ……

    a:= real(c);

    d:= integer(b);

原文出处: http://blog.sina.com.cn/s/blog_617cb0fb0100f0n8.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值