VHDL的数据对象(学习笔记1)
VHDL语言数据对象
VHDL语言学习笔记(一):数据对象
内容:本文主要介绍VHDL语言的三种主要数据对象,即常量(constant)、变量(variable)和信号(signal)。
文章目录
- VHDL语言数据对象
- 一、 常量
- 二、变量
- 三、信号
- 总结
一、 常量
在VHDL程序中,一经定义数值就不再发生变化的量就是常量。在硬件物理意义上,其表示为硬件电路中的电源或地线。
常量可以在程序包、实体声明、结构体声明和语句的声明部分中进行声明,常量定义语句所允许的设计单元有实体、结构体、程序包、块、进程和子程序。不同部分声明的常量具有不同的作用范围。
常量声明的语言结构:
CONSTANT 常量名 [, 常量名...] : 数据类型 := 表达式;- “CONSTANT”是用来表示常量的保留字,用来声明一个常量;
- “[]”中的内容表示可选项,即多个相同数据类型的常量可以一起声明;
- 数据类型是对象所具有的类型;
- 表达式用来对常量进行赋值,其赋值符号为“:=”。
常量声明示例:
CONSTANT PI : REAL := 3.14; CONSTANT NUM : INTEGER := 6; CONSTANT DELAY : TIME := 7ns;注意:
- 常量定以后不允许修改;
- 使用时要注意常量的作用范围。
二、变量
变量是指在设计实体中值会发生变化的量。变量主要是对临时数据进行局部存储,只能在进程语句、过程语句和函数语句的声明部分中使用。变量的赋值是理想化的数据传输,是立即发生、不存在任何延时的行为。
变量声明结构:
VARIABLE 变量名 [, 变量名...] : 数据类型 [:= 初始值]- “VARIABLE”是用来表示变量的保留字,用来声明一个变量;
- “[:= 初始值]”用来对变量进行初始赋值操作,其中“:=”为赋值符号。
变量声明示例:
VARIABLE vA : INTEGER 0 TO 15 ; --声明了一个取值范围为0~15的整数类型变量 VARIABLE vB, vC : INTEGER :=2 ; --声明了两个初始值为2的整数类型变量 VARIABLE vC : STD_LOGIC := '1' ; --声明了一个初始值为1的标准位逻辑类型变量变量注意事项:
- 变量为局部量,仅限于在定义了变量的进程、过程或子程序的顺序语句中使用;
- 如果变量没有赋予初始值,那么它将取默认值,即指定的数据类型的最左值或最小值。
变量的赋值结构:
目标变量名 := 表达式;- 赋值语句右侧的“表达式”与目标变量必须为同一数据类型;
- 表达式可以为运算表达式,也可以是一个数值;
- 新变量值的获得是直接的、立即发生的;
- 目标变量可以是单值变量,也可以是变量集合,如位矢量类型的变量。
变量赋值示例:
VARIABLE vA, vB : REAL ; --定义了实数类型变量 VARIABLE vC, vD : STD_LOGIC_VECTOR (7 DOWNTO 0); --定义了位矢量类型变量vA := 10.0 ; vB := vA + 6 ; vC := "11010101" ; vD (0 TO 6) := vC (1 TO 7) ; --段赋值三、信号
信号时设计实体之间动态交换数据的一种手段,其物理意义类似于电路内部的连接线。信号可以看做是数值的容器,它不但可以容纳当前值,也可以保持历史值。
信号声明结构:
SIGNAL 信号名 [, 信号名...] : 数据类型 [:= 初始值] ;信号声明示例:
SIGNAL sA : STD_LOGIC := '1' ; --声明一个初始值为‘1’的标准逻辑信号 SIGNAL sB : BIT ; --声明了一个位信号 SIGNAL sC : STD_LOGIC_VECTOR ( 15 DOWNTO 0 ) ; --声明了一个标准位矢量信号信号初始值的设置不是必需的,而且初始值仅在VHDL的行为仿真中有效。与变量相比,信号的硬件特性更明显,它具有全局性特性。比如,在程序包中定义的信号,对于所有调用此程序包的设计实体都是可见的;在实体中定义的信号,在其对应的结构体中都可见。
注意,在进程和子程序的顺序语句中不允许定义信号。
信号的赋值结构:
目标信号名 <= 表达式 ;数据信号的传入可以设置延时,即便延时设置为0,目标信号的数据传入也不是零延时的。因此,符号"<="两边的数值并不一定总是一致的。
在进程中,允许同一个信号有不同驱动源,即同一个目标信号可以被多个表达式赋值,但是只有最后一个赋值语句会被执行。
总结
本文信息源自数据和网络。
与50位技术专家面对面20年技术见证,附赠技术全景图总结
以上是生活随笔为你收集整理的VHDL的数据对象(学习笔记1)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 新建VHDL的Vivado工程
- 下一篇: AXI quad SPI没有输出