VHDL数据对象之详解
程序员文章站
2022-06-19 10:13:46
VHDL数据对象常量constant常量定义的位置常量的使用范围变量variable变量定义变量赋值信号signal信号与port的关系信号定义的位置信号赋值三者的比较信号和变量的比较数据对象类似于一种容器,它接受不同数据类型的赋值, 数据名称必须和右方的表达式类型一致.常量constant变量variable信号signal常量constant主要是为了使设计实体中的常数更容易阅读和修改通过修改常数,可以改变硬件结构恒定值,一旦赋值后,在程序中不能再改变具有全局意义consta...
VHDL数据对象之详解
数据对象类似于一种容器,它接受不同数据类型的赋值, 数据名称必须和右方的表达式类型一致.
- 常量constant
- 变量variable
- 信号signal
常量constant
- 主要是为了使设计实体中的常数更容易阅读和修改
- 通过修改常数,可以改变硬件结构
- 恒定值,一旦赋值后,在程序中不能再改变
- 具有全局意义
constant 常数名: 数据类型 :=表达式;
举例:
constant fbus : bit_vector := "010110";
constant vcc : real := 5.0;
constant delay : time := 25ns;
常量定义的位置
- 实体,结构体,程序包
- 块,进程,子程序
常量的使用范围
- 取决于它被定义的位置,向下包含
- 在程序包定义的的常量可以用于调用此程序包的所有实体中
- 在设计实体中定义的常量可以用于这个实体的所有结构体中
- 定义在某一结构体中的常量只能用于此结构体
- 定义在结构体的某一单元的常量,只能用于该单元中
变量variable
- 变量是一个局部量,不能将信息带出对它做出定义的当前设计单元
- 只能在进程和子程序中使用
- 变量的赋值是一种理想化的数据传输,立即发生,无延时
变量定义
variable 变量名 : 数据类型[:= 初始值];
举例:
variable a : integer;
variable b: integer :=2;
变量赋值
目标变量名 :=表达式
信号signal
- 信号类似于连线,可以作为设计实体中并行模块件的信息交流通道
- 体现了硬件系统运行的并行性
- 体现了传输过程中的惯性延时
- 多驱动源的总线行为
- 容纳当前值,保存历史值
信号的定义
signal 信号名 : 数据类型[:=初始值];
举例:
signal s1 : std_logic := 0;
signal s2 : bit;
signal s3: std_logic_vector(15 downto 0);
信号赋值
目标变量名 <= 表达式;
信号与port的关系
- 信号可以认为是没有方向的端口
- 数据流向是双向的
- 实体中定义的端口,在结构体中,都可以看成是信号,无需重新定义
信号定义的位置
- 实体,结构体,程序包
- 进程和子程序中不允许定义信号,只能使用信号
- 在进程中,只能将信号列入敏感变量列表,而不能将变量列入
三者的比较
- 从硬件电路系统看,常量相当于电路中的恒定电平,如GND, VCC接口,而变量和信号则相当于电路中的连线和连线上的信号值
- 从仿真和VHDL语句的功能上看,信号可以设置延时量,变量不能.变量只能作为局部的信号载体,而信号可以座位模块件的信息载体
- 从综合后的电路上看,信号一般将对应更多的硬件结构
- 虽然仿真器允许设置初始值,但是综合器不理会这些
信号和变量的比较
- 信号代表电路单元,功能模块之间的互联,代表实际的硬件连线
- 作用范围不同:
->信号在程序包,实体,结构体中定义,是全局量,但在进程,子程序中可以使用
->变量只能在进程和子程序中定义使用,是局部量 - 信号赋值延时更新,变量赋值立即更新
- 多次赋值
->在一个进程中多次对信号赋值,最后一次赋值有效
->多个进程对同一信号赋值,对应多源驱动,可实现线与,线或,三态
->对变量的赋值,每次都有效
本文地址:https://blog.csdn.net/weixin_48668114/article/details/110497551