整数: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);
函数法