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语句的功能上看,信号可以设置延时量,变量不能.变量只能作为局部的信号载体,而信号可以座位模块件的信息载体
  • 从综合后的电路上看,信号一般将对应更多的硬件结构
  • 虽然仿真器允许设置初始值,但是综合器不理会这些

信号和变量的比较

  • 信号代表电路单元,功能模块之间的互联,代表实际的硬件连线
  • 作用范围不同:
    ->信号在程序包,实体,结构体中定义,是全局量,但在进程,子程序中可以使用
    ->变量只能在进程和子程序中定义使用,是局部量
  • 信号赋值延时更新,变量赋值立即更新
  • 多次赋值
    ->在一个进程中多次对信号赋值,最后一次赋值有效
    ->多个进程对同一信号赋值,对应多源驱动,可实现线与,线或,三态
    ->对变量的赋值,每次都有效
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值