【FPGA学习笔记】VHDL语言(二):VHDL的数字表示,数据对象,数据类型

VHDL 的语法规则

一、数字表示

整数:5,34,123_789_456
实数:44.66E-2(44.66*0.01)
以数制基数表示的数2#1111_1110#254表示二进制数,11111110,转换为十进制是254,254可以省略(2#1111_1110#)。

字符、字符串:字符放在单引号中,字符串放在双引号中

数位字符串(位矢量)代表的是二进制,8进制,16进制的数组,长度为等值的二进制数位数

B:二进制,X:八进制,O:十六进制。
eg:B"1_1110_1100" 表示二进制数数组,长度是9
**X“34”**表示八进制数数组,长度是6
**O“1AB”**表示十六进制数数组,长度是12
数组:用下标名表示

SIGNAL a : BIT_VECTOR (0 TO 3); --数组
SIGNAL z : BIT ;
z <= a(3);  --数组元素

二、 数据对象

常量,变量,信号
1、常量CONSTANT
常量允许的设计单元有实体,结构体,程序包,块,进程,子程序。常量的使用范围取决于被定义的位置。

CONSTANT constant_name :数据类型 :=表达式;

CONSTANT DATA:T_VECTOR(3 DOWNTO 0) :="1010"
CONSTANT VCC:REAL := 5.0;
CONSTANT DELY :TIME := 25ns;
CONSTANT X:NEW_BIT := 'X';
CONSTANT WIDTH:INTERGER := 8;

2、变量VARIABLE
暂存某些值的存储单元,常用于赋值语句。
变量是一个局部量,只能用于进程和子程序中。
变量赋值会立即发生,没有延时。

VARIABLE variable_name:数据类型 约束条件 :=表达式;

VARIABLE A B :BIT;--定义数据A B为bit类型的变量
VARIABLE C,D :INTEGER :=2;--定义C,D为整形变量,初始值为2
VARIABLE count : INTEGER RANGE 0 TO 255 :=10; --定义count为整形变量,范围为0~255,初值是10 

3、信号SIGNAL
a.信号代表物理设计中的一条硬件连接线,包括输入,输出端口。

b.信号作为一种数值容器,不仅仅可以容纳当前值,还可以保持历史值

c.使用和定义范围是:实体,结构体,程序包。进程和子程序中不允许定义信号。进程只对信号敏感,不对变量敏感。,所以进程只能将信号列入敏感列表。

c.信号不需要赋初值,硬件特性明显,具有全局性

eg:在程序包定义的信号,在调用这个程序包的设计实体全可见。
实体中定义的信号,在其对应的结构体中都可见。

4、CONSTANT,VARIABLE,SIGNAL 三者比较

a. VARIABLE是局部量,只能用于进程和子程序;
SIGNAL是全局量,可以用来进程之间的通信。

b. 变量赋值立即生效;信号赋值存在一定延时。

c. 变量暂存数据,信号用作连线。

d. 信号赋值可以在进程和结构体中。
进程中:顺序赋值过程,赋值操作要视进程是否启。
结构体重:并行执行,各自独立发生。

**e.**信号赋值语句中,其值不会立即带入,在下一条语句执行时,仍使用原来的信号。只到进程结束后,所有的赋值顺序代入。

三、数据类型

1、标准数据类型
integer整数类型
real实数类型
bit位
bit_vector位矢量:每位取0or1
boolean:布尔量,分为TRUE,FALSE
character
string
time
nature自然数
severity level错误等级:NOTE、WARNING、ERROR、FAILUER
2、IEEE库STD_LOGIC_1164程序包中的数据类型

1、STD_LOGIC
有九种取值:‘U’初始值,“X”不定态(常用于系统仿真),‘0’强制0,‘1’强制1,‘Z’高阻态(双向总线),‘W’弱信号不定态,‘L’弱信号0,‘H’弱信号1,‘_’不可能情况
2、STD_LOGIC_VECTOR
一维数组,每个元素都是STD_LOGIC类型的,要严格考虑位宽和数据类型。

3、用户自定义数据类型
1、枚举(ENUMERATED)

TYPE  数据类型名 IS (元素1,元素2...);

TYPE STD_LOGIC IS ('U','X','0','1','Z','W','L','H','_');

2、数组(ARRAY)

TYPE 数据类型名 IS ARRAY(范围) OF 元素类型名;

TYPE count IS ARRAY (STD_LOGIC '-' DOWNTO 'U ') OF INTEGER; 

3、子类型:定义具有一定限制条件的基本类型的数据对象

SYBTYPE 子类型名 IS 数据类型名(约束范围);

SYBTYPE BYTE IS BIT_VECTOR(7 DOWNTO 0);

4、类型转换

VHDL程序中,不同类型的对象不能代入,所以要类型转换。
类型标记法:

VARIABLE x : INTEGER;
VARIABLE y :REAL;

x := INTEGER(y);
y := REAL(x);

函数法

发布了12 篇原创文章 · 获赞 3 · 访问量 615

猜你喜欢

转载自blog.csdn.net/yang_jiangning/article/details/104984751
今日推荐