VHDL变量与信号的差异
1,
赋值方式的不同
变量 := 表达式;
信号 <= 表达式;
2,
硬件实现的功能不同
信号代表电路单元,功能模块间的互联,代表实际的硬件连线
变量代表电路单元内部的操作,代表暂存的临时数据
3,
有效范围不同
信号(全局量):程序包,实体,结构体
变量(局部量):进程,子程序
注:在进程和子程序中,信号只能被使用,不能被定义说明
4,
赋值行为的不同
信号赋值延时更新数值,一般生成时序电路
变量赋值立即更新数值,一般生成组合电路
5,
信号的多次赋值
a, 一个进程中:仅最后一次赋值有效
b, 多个进程中:称为多源驱动(如总线结构)
能综合成硬件电路的多源驱动有三种:线与,线或,三态
例子
ARCHITECTURE rtl OF sig IS
SIGNAL a,b : STD_LOGIC; --定义信号
BEGIN
PROCESS(a,b)
BEGIN
a <= b;
b <= a;
END PROCESS;
END rtl ;
由于信号赋值的延时性(赋新值发生在进程结束时),所以结果是a,b 的值互换
ARCHITECTURE rtl OF var IS
BEGIN
PROCESS
VARIABLE a,b : STD_LOGIC;--定义变量
BEGIN
a := b;
b := a;
END PROCESS;
END rtl ;
由于变量赋值的立即更新,所以结果是a和b的值均为b
赋值方式的不同
变量 := 表达式;
信号 <= 表达式;
2,
硬件实现的功能不同
信号代表电路单元,功能模块间的互联,代表实际的硬件连线
变量代表电路单元内部的操作,代表暂存的临时数据
3,
有效范围不同
信号(全局量):程序包,实体,结构体
变量(局部量):进程,子程序
注:在进程和子程序中,信号只能被使用,不能被定义说明
4,
赋值行为的不同
信号赋值延时更新数值,一般生成时序电路
变量赋值立即更新数值,一般生成组合电路
5,
信号的多次赋值
a, 一个进程中:仅最后一次赋值有效
b, 多个进程中:称为多源驱动(如总线结构)
能综合成硬件电路的多源驱动有三种:线与,线或,三态
例子
ARCHITECTURE rtl OF sig IS
SIGNAL a,b : STD_LOGIC; --定义信号
BEGIN
PROCESS(a,b)
BEGIN
a <= b;
b <= a;
END PROCESS;
END rtl ;
由于信号赋值的延时性(赋新值发生在进程结束时),所以结果是a,b 的值互换
ARCHITECTURE rtl OF var IS
BEGIN
PROCESS
VARIABLE a,b : STD_LOGIC;--定义变量
BEGIN
a := b;
b := a;
END PROCESS;
END rtl ;
由于变量赋值的立即更新,所以结果是a和b的值均为b