VHDL语言数据类型及相互转换
- 格式:docx
- 大小:13.36 KB
- 文档页数:9
标准数据类型
1, 整数(INTEGER)
范围:-46
2, 实数(REAL)
范围:(综合器不支持)
书写时一定要有小数•
3, 位(BIT)
在数字系统中,信号经常用位值表示,位值用带单引号 的'1'和'0'来表示
标准数据类型
4, 位矢量(BIT_VECTOR)
位矢量是用双引号括起来的一组位数据
"010101"
5, 布尔量(BOOLEAN)
只有"真”和"假”两个状态,可以进行关系运算
6, 字符(CHARACTER)
字符量通常用单引号括起来,对大小写敏感
明确说明1是字符时:CHARACTER'('1')
标准数据类型
7, 字符串(STRING)
字符串是双引号括起来 的由字母,数字或@,%,$组成的一串字符.区分大小写
"laksdklakld" "10"
8, 时间(TIME)
时间的单位:fs,ps,ns,ms,sec,min,hr
例:10 ns
整数数值和单位之间应有空格 标准数据类型
9, 错误等级(SEVERITY LEVEL) 在VHDL仿真器中,错误等级用来表示系统 的状态,它共有4种:
NOTE注意)
WARNING警告)
ERROR错误)
FAILURE(失败)
标准数据类型
10, 自然数(NATURAL)正整数(POSITIVE)
自然数是整数 的一个子类型,包括0和正整数;正整数也是整数 的一个子类型
只能是正整数数据除定义类型外,有时还需要定义约束范围•
INTEGER RANGE 100 DOWNTO 0
BIT_ VECTOR (3 DOWNTO 0)
REAL RANGE TO
IEEE定义的逻辑位与矢量
在IEEE |的程序包std_logic_1164 中定义了两个非常重要 的数据类型:
1 ,std_logic
取值:0,1,Z,X,W,L,H
Z:高阻X:不定W:弱信号不定
L:弱信号0 H:弱信号1
2,Std_logic_vector
注意
1, 在使用"std_logic" 和"std」ogic_vector" 时,在程序中必须声明库及
程序包说明语句,即
LIBRARY ieee和这两句在程序中必不可少 .
2, std_logic 有多个取值,与BIT不同,在编程时应特别注意,需要考虑全所有情况 用户自定义的数据类型
1, 枚举类型
格式:TYPE数据类型名IS(元素,元素,…);
TYPE STD_LOGIC IS
(U';X;0';V;Z':W:L:H';-y;
TYPE week IS (Su n,Mo n,Tue,wed,Thu,Fri,Sat);
TYPE color IS (red,gree n,yellow,blue)
TYPE lift_state IS
(stop on 1,doorpee n, doorclose, doorwait1, doorwait2, doorwait3,
doorwait5,up,dow n, stop)
枚举类型的声明
TYPE color IS (red,gree n, yellow,blue);
VARIABLE A:COLOR;
SIGNAL B:COLOR;
A:=RED;
B<=YELLOW;
TYPE lever IS ('0','1','z');
SIGNAL V:lever;
V<='1';
用户自定义的数据类型
2, 整数(INTEGER)
格式:TYPE数据类型名IS数据类型定义约束范围
例 TYPE digit IS INTEGER RANGE 0 TO 9
VARIABLE A:DIGIT;
A:=5;
A:=28; doorwait4, 用户自定义的数据类型
3, 实数(REAL)
格式:TYPE数据类型名IS数据类型定义约束范围
TYPE current IS REAL RANGE -1E4 TO 1E4
VARIABLE A:CURRENT;
A:=1E3;
A:=1E10;
用户自定义的数据类型
4, 数组(ARRAY)
格式:TYPE数据类型名IS ARRAY范围OF原数据类型名
例:TYPE word IS ARRAY (1 TO 8) OF STD_LOGIC;
TYPE word IS ARRAY (INTEGER 1 TO 8) OF STD_LOGIC;
数组常在总线,ROM和RAM中使用.
用户自定义的数据类型
5, 记录(RECODE)类型
将不同的数据类型放在一块,就是记录类型数据
格式:TYPE记录类型名IS RECORD
元素名:数据类型名;
元素名:数据类型名;
END RECORDS录类型名];
记录(RECODE)类型
例:TYPE ba nk IS RECORD
addrO: STD_LOGIC_VECTOR(7 DOWNTO 0);
addr1: STD_LOGIC_VECTOR(7 DOWNTO 0); r0: INTEGER;
END RECORD;
记录(RECODE)类型
例:CONSTANT LEN:i nteger:=100;
TYPE array logic IS ARRAY (99 dow nto 0)OF STD_LOGIC_VECTOR(7 DOWNTO 0)
TYPE table IS RECORD
a: array logic;
b: STD_LOGIC_VECTOR(7 DOWNTO 0);
c: in teger RANGE 0 to len ;
END RECORD;
数据类型的转换
数据类型转换函数有 VHDL语言的包提供
例如:STD_LOGIC_1164,
STD_LOGICARITH
STD_LOGIC_UNSIGNED等
函数
说明
1、STD_LOGIC_1164包
TO_STDLOGIC_VECTOR(A) TO_BITVECTOR(A)
TO_LOGIC(A)
TO_BIT(A)
由 BIT_VECTOR专换成 STD_LOGIC_VECTOR
由 STD_LOGIC_VECTOR^成 BIT_VECTOR
由BIT转换成STD_LOGIC
由STD_LOGIC专换成BIT
2、 STD_LOGIC_ARITH包
CONV_STD_LOGIC_VECTOR位长) CONV_INTEGER(A)
由 INTEGER,UNSIGNE和 SIGNED转换成
STD_LOGIC_VECTOR
由 UNSIGNE[和 SIGNED转换成 INTEGER
3、 STD_LOGIC_UNSIGNE包
CONV_INTEGER(A)
STD_LOGIC_VECTO转换成 INTEGER
VHDL属性
VHDL没有一般程序语言中的那些运算类标准函数,取而代之的是多种能反映和影响硬件行
为的属性.属性在描述时序电路 的VHDL设计文件中几乎处处可见,如检测上升沿,下降沿,知 道前一次发生的事件•
VHDL属性
属性指的是关于实体,结构体,类型及信号的一些特征•有的|属性对综合(设计)非常有用•
VHDL的属性可分为数值类属性,函数类属性,范围类属性,信号类属性,类型类属性•其引用
的一般形式为:对象'属性• 数值类属性 数值类属性用于返回数组,块或一般数据 的有关值,如边界,数组长度等信息•对一般的数据 有4种数值类属性:对象类型的左边界,右边界,上边界,下边界,对应的关键字 是:LEFT,RIGHT,HIGH,LOW.数组在加一个长度属性 LENGTH. 数值类属性
sdow n:IN std」o gic_vector(8 DOWNTO 0);
sup:IN std_logic-vector(0 to 8);
这两个信号的各属性值如下:
sdow n'left=8; sdow n'right=0; sdow n'low=0; sdow n'high=8; sdow n'le ngth=9;
sup'left=0; sup'right=8; sup'low=0; sup'high=8; sup'le ngth=9;
数值类属性
TYPE bit32 IS ARRAY (63 DOWNTO 32)OF BIT
VARIABLE:left_ra nge,right_ra nge,up_ra nge,low_ra nge,le n:INTEGER;
BEGIN
left-range:=bit32'LEFT; --return 63
right-ra nge:=bit32'RIGHT; --return 32
up-ra nge:=bit32'HIGH; --return 63
low-ra nge:=bit32'LOW; --return 32
len :=bit32'LENGTH; --return 32
函数类属性
信号属性函数属于函数类属性 ,用来返回有关信号行为功能 的信息•共有5种信号属性函数,
分别是:'EVENT(事件);'ACTIVE( 活跃);
'LAST_EVENT (最近一次事件到现在经过多少时间 );'LAST_ACTIVE (最近一次活跃到现在
经过多少时间);'LAST_VALUE(信号变化前 的|取值是什么)
EVENT
EVENT它的值为布尔型,取值为TRUE或 FALSE;
如果刚好有事件发生在该属性所附着 的信号上(即信号有变化),取值为TRUE.
利用此属性可决定时钟边沿是否有效,即时钟是否发生
EVENT
SIGNAL elk: IN std_logic;
elk 'EVENT AND clk='1'