概述
一、标量
1、整型
整型类型定义了一种在特定整数范围内取值的类型,包括正整数、负整数和零。VHDL标准库提供了一个预定义整型数据类型-integer。integer取值范围是-214748647~214748647,也就是32位的二进制数。在实际设计中,综合工具会将没有越苏的整型看成32位无符号数处理,仿真中可使用符号数。
整型数字的表示:
十进制数:
1000012
0
-12
12_102_125--------下划线不影响值得大小,只增加数值的可能性。
其他进制的数:
16#D12-------相当于10进制的16x16x14+16x1+12=3346
8#23 -------相当于10进制的8x2+3=19
自然数和正整数
正整数是大于0的整数;自然数是非负的整数,包括0和正整数。
自然数和正整数都是整数的子类型
整数数据对象可以进行操作有加减乘除等算术运算,定义一个整型的信号需要32位,但实际上不需要这么大的数,在定义整型信号时要加上一个范围约束。整型数据对象声明举例如下:
constant data_bus:integer:=16;
signal temp:integer;
variable sum:integer range 0 to 15;
2、实型
实型数据是数学上实数的仿真建模,分为整数值和分数值,分数值即浮点数。实数的取值范围是-1.0E38~1.0E38,通常情况下VHDL综合实型数只能在VHDL仿真中使用,现在大部分综合工具不支持对实型数据的综合。声明实型的VHDL保留字为real,实型数据对象声明举例如下:
constant data_bus:real:=16;
signal temp:real:=6.5;
variable sum:real;
3、物理型
物理型的值是物理量的度量单位,比如长度、质量、电流、时间等。物理型数据类型一般不可综合,只应用于在仿真中。声明是基本单元和二级单元的组合,在默认standant程序包中预定义的物理型时间time数据类型。time数据类型在standant程序包定义如下:
TYPE time is RANGE 0 TO 2147483647
units
fs;//飞秒,VHDL中最小的时间单位
ps=1000fs;
ns=1000ps;
us=1000ns;
ms=1000us;
sec=1000ms;
min=60sec;
hr=60min;
end units;
4、枚举型
枚举型定义了一种用于用户定义数值的类型,把属于该类型的所有元素都列出来。用户定义的数值包括标识符和字符,声明如下:
//定义了traclight枚举型,只有3个元素
Type traclight is(green.yellow,red);
//定义了op枚举型,有5个元素
Type op is(add,sub,mul,div,mod);
//定义logic枚举型,有4个元素
Type logic is(‘0’,‘1’,‘z’,‘x’);
5、标量类型的属性
VHDL中标量类除了相应的数值,还有一组相应的属性,这些属性丰富了标量类型的功能。VHDL支持的预定义属性如下(t代表标量类型、x代表类型的一个值,s代表一个字符串,n代表位置号):
t’left --t类型的第一个值或是最左边的值
t’right–t类型的最后一个或是最右边的值
t’low–t类型的最小值
t’high–t类型的最大值
t’ascending–如果t类型的值是递增,则为true,否则false;
t’image(x)–返回表示x值的字符串;
t’value(s)–返回字符串表示的值
t’pos(x)–t类型中x的位置号,0为第一个;
t’val(n)–t类型中位置为n的值
t’succ(x)–t类型中位置号比x的位置号大1处的值
t’pred(x)—t类型中位置号比x的位置号小1处的值
t’leftof(x)–t类型中在x的左边的值
t’leftof(x)–t类型中在x的右边值
二、复合类型
1、数组类型
数组类型属于复合类型一种,将一组具有相同数据类型的元素集合到一起组成一个数据对象的数据类型。VHDL支持一维数组和二维数组。一维数组拥有一个索引下标,二维数组拥有两个索引下标。VHDL支持的数组根据索引的确定性分为约束性数组和非约束性数组。
2、约束性数组的定义和使用
格式:
type 数组名 is array(数组范围)of 数据类型;
type data is array (7 downto 0) of bit;
type bus is array (0 to 7) of bit;
约束性数组使用举例如下:
//声明一个data数据类型的信号datain 包含8位bit
signal datain:data;
//声明一个bus数据类型的信号addr_bus,包含8位bit
3、非约束性数组的定义与使用
非约束性数组在定义时没有指定数组索引下标的范围,而是用<>来代替,定义如下:
type 数组名 is array(下标名 range<>)of 数据类型;
type data is array (integer<>) of bit;
type bus is array (integer<>) of bit;
约束性数组使用举例如下:
signal datain:data(7downto 0);
signal addr_bus :bus(0 to 7);
常用的非约束数组类型有:string是字符元素的集合;bit_vector是bit的集合;std_logic_vector是std_logic的集合。声明如下:
Type string is array (positive range<>) of character;
Type bit_vector
is array (natural range<>) of bit;
Type std_logic_vector
is array (natural range<>) of std_logic;
以上索引范围没有确定的数组是非约束型的数组类型
声明信号格式如下:
signal str: string(1 to 12):="I";
signal data:bit_vector(7 downto 0);
signal address:bit_vector(7 downto 0);
4、二维数组定义和使用
二维数组在硬件中一般对应一块存储块,定义举例如下:
非约束:
type readdata is array (natural range<>),natural<>) of bit;
约束:
type writedata is array(7 downto 0) of bit_vector(7 downto 0);
指定约束范围:
signal rdata:readdata(7 downto 0,7 downto 0);
不指定约束范围:
signal wdata : writedata;
5、记录类型
记录类型元素可以包含不同的数据类型,是不同数据类型的集合;这些数据类型集合组成一个新的数据类型,即记录数据类型。记录数据类型定义格式如下:
type 记录名 is record
元素名1:元素数据类型;
元素名2:元素数据类型;
元素名3:元素数据类型;
…
end record;
举例如下:
type grade is record
math:integer range 0 to 100;
english:integer range 0 to 100;
pass:bealoon;
end garde;
三、access存取类型
access存取类型是指向某一数据对象的指针。声明如下:
type 存取类型名 is access 其他数据类型
举例如下:
type ptr is access integer;//定义一个存取类型的数据类型
variable pone:ptr;
pone :=new integer(10);//pone指向一个值为10的对象
四、file文件类型
在进行文件操作时需要声明一个文件对象,格式如下:
type 文件类型名 is file of 文件数据类型;
定义一个整型的文件类型,如下:
type infile is file of integer;
最后
以上就是阳光裙子为你收集整理的VHDL的数据类型的全部内容,希望文章能够帮你解决VHDL的数据类型所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复