VHDL中常用的数据对象

2017-03-06 23:46刘春梅高香梅
电子技术与软件工程 2016年23期
关键词:常量变量信号

刘春梅 高香梅

摘 要

简要介绍了VHDL中数据对象的基本概念,从不同方面讨论了常用的数据对象的区别与联系,通过实例详细比较了信号与变量的用法。

【关键词】VHDL 变量 信号 常量

1 引言

VHDL是一种常用的高级描述语言,通常包含库、程序包、实体、构造体和配置等部分。而数据对象根据不同情况可以定义在VHDL程序的这些部分中,尤其是信号和变量的使用易产生混淆。

2 数据对象的区别与联系

在VHDL语言中,凡是可以赋予一个值的对象称为客体也可叫做数据对象,能够接受不同数据类型的赋值。常用的数据对象主要有常量、变量和信号三种。

从定义范围来看,常量和信号是全局量,变量是局部量。常量可以在程序包、实体、进程中使用,一般在程序开始前对常量进行赋值。信号是电子电路内部硬件实体相互连接的抽象表示,可以在结构体、程序包和实体说明中使用,信号名不能冲突。变量仅在进程语句、过程语句、函数语句的结构中使用,不能将信息带出对它作出定义的当前设计单元。其中,应用在不同范围的变量名可以重复。

从延时特性来看,常量与变量的赋值是立即生效的,没有延时。VHDL语言规则不支持变量附加延时语句,变量的赋值是一种理想化的数据传输,是立即发生。但是信号的代入赋值是允许延时的。比如,A0<=A1 AFTER 10 ns表示信号A0的值是由A1延时10ns所赋予的。

从赋值方式来看,常量与变量采用的是“:=”进行赋值,信号采用的是“<=”进行代入赋值,但是不论何种数据对象,初始化赋值均采用“:=”,其中,采用“:=”对信号赋初值时候不产生延时。常量的值在程序运行过程不能改变,但是信号与变量可以进行赋值。

常量、变量和信号所赋的值应该与定义的表达式数据类型一致,否则会出现错误。信号与变量也可相互赋值,赋值符号的选择取决于被赋值的数据对象。由于变量只能在所定义进程内使用,若想将变量用于进程外,则可以赋值给同类型的信号。在VHDL中,如果需要对某一数据进行多次操作,则必须使用变量,因为对信号的多次赋值只有最后一次会生效。

3 变量与信号用法的实例分析

数据对象中,变量与信号的用法易混淆,以四选一数据选择器为例,分别采用信号赋值语句和变量赋值语句来实现。A0,A1,A2,A3分别为选择器的一位数据输入端,选择端为S1,S0,其中S1S0分别为00,01,10,11时,选择A0,A1,A2,A3的值给输出端口Q。采用信号赋值语句的结构体程序如下:

ARCHITECTURE one OF mux4 IS

SIGNAL xy:INTEGER RANGE 0 TO 3;

BEGIN

PROCESS(A0,A1,A2,A3,S0,S1)

BEGIN

xy<=0;

IF (S0='1') THEN xy<=xy+1;

END IF;

IF (S1='1') THEN xy<=xy+2;

END IF;

CASE xy IS

WHEN 0=>Q<=A0;

WHEN 1=>Q<=A1;

WHEN 2=>Q<=A2;

WHEN 3=>Q<=A3;

WHEN OTHERS =>NULL;

END CASE;

END PROCESS;

END one;

該程序段内xy是全局量的信号,定义在结构体中,其值与S1S0的值一样,当xy分别为0,1,2,3时,将A0,A1,A2,A3赋给Q。经过Quartus II9.0软件程序编译可以通过。仿真结果如图1所示,其中,输入A0设置为频率较高的周期信号,A1为低电平,A2位频率较低的周期信号,A3为高电平。

从图1仿真结果看出,采用信号赋值语句的结果不正确,分析其原因主要是因为信号赋值是在进程结束时更新,启动一次进程信号xy的值只能改变一次。

下面采用变量赋值语句来实现,对程序进行如下修改:

ARCHITECTURE one OF mux4 IS

BEGIN

PROCESS(A0,A1,A2,A3,S0,S1)

VARIABLE xy:INTEGER RANGE 0 TO 3;

BEGIN

xy:=0;

IF (S0='1') THEN xy:=xy+1;

END IF;

IF (S1='1') THEN xy:=xy+2;

END IF;

CASE xy IS

WHEN 0=>Q<=A0;

WHEN 1=>Q<=A1;

WHEN 2=>Q<=A2;

WHEN 3=>Q<=A3;

WHEN OTHERS =>NULL;

END CASE;

END PROCESS;

END one;

该程序段中,作为局部量的变量定义在进程中,经过软件编译成功。图2为采用变量赋值语句的仿真结果。

从图2看出,当S1S0也就是xy的值为0时,Q输出A0的值,S1S0为1时,Q输出A1的值,S1S0为2时,Q输出A2的值,S1S0为3时,Q输出A3的值,所以采用变量赋值语句的结果实现了选择器的功能,这是因为变量赋值是立即更新,启动一次进程变量xy的值为所需要的最后结果。

4 结束语

在VHDL中,数据对象类似于一种容器,它接受不同数据类型的赋值。常量,变量和信号是常用的三种数据对象。其中,信号与变量的使用容易产生混淆,通过实例分析讨论了信号与变量,如果使用不当,结果会产生错误,因此,在设计中要谨慎使用信号与变量。

参考文献

[1]吴方,刘文娟.EDA技术[M].武汉:武汉大学出版社,2011.

[2]刘昌华.EDA技术与应用——基于Quartus II和VHDL[M].北京:北京航空航天大学出版社,2012.

[3]胥勋涛.EDA技术项目化教程[M].北京:电子工业出版社,2011.

作者单位

安徽农业大学经济技术学院 安徽省合肥市 230011

猜你喜欢
常量变量信号
科学照亮世界
——卡文迪什测定万有引力常量
抓住不变量解题
完形填空二则
也谈分离变量
孩子停止长个的信号
基于LabVIEW的力加载信号采集与PID控制
SL(3,3n)和SU(3,3n)的第一Cartan不变量
低氧低分压环境下泡塑吸附火焰原子吸收光谱法测定常量金
分离变量法:常见的通性通法
论常量函数的充分必要条件