首页 理论教育 深度解析VHDL数据对象

深度解析VHDL数据对象

时间:2023-06-29 理论教育 版权反馈
【摘要】:在VHDL中,把可以赋值的客体统称为数据对象。但信号是具有更多的硬件特征的特殊数据对象,是VHDL中最有特色的语言要素之一。常量的定义形式如下:例如:VHDL要求所定义的常量数据类型必须与表达式的数据类型一致。在VHDL中,信号及其相关的信号赋值语句、决断函数、延时语句等很好的描述了硬件系统的许多基本特征。

深度解析VHDL数据对象

在VHDL中,把可以赋值的客体统称为数据对象(Data Objects)。数据对象类似于一种容器,它接受不同数据类型的赋值。数据对象有3种,即常量(CONSTANT)、变量(VAR-IABLE)和信号(SIGNAL)。前两种可以从传统的计算机高级语言中找到对应的数据类型,其语言行为与高级语言中的变量和常量十分相似。但信号是具有更多的硬件特征的特殊数据对象,是VHDL中最有特色的语言要素之一。

1.常量

在程序中,常量是一个恒定不变的值,一旦作了数据类型的赋值定义后,在程序中不能再改变,因而具有全局意义。常量的定义形式如下:

例如:

VHDL要求所定义的常量数据类型必须与表达式的数据类型一致。常量的数据类型可以是标量类型或复合类型,但不能是文件类型(File)或存取类型(Access)。

常量定义语句所允许的设计单元有实体、结构体、程序包、块、进程和子程序。在程序中定义的常量可以暂不设具体数值,它可以在程序包体中设定。

常量的可视性,即常量的使用范围取决于它被定义的位置。在程序包中定义的常量具有最大全局化特征,可以用在调用此程序包的所有设计实体中;定义在设计实体中的常量,其有效范围为这个实体定义的所有的结构体;定义在设计实体的某一结构体中的常量,则只能用于此结构体;定义在结构体的某一单元的常量,如一个进程中,则这个常量只能用在这一进程中。

2.变量

可以被赋予不同数值的数据对象称为变量。变量在程序中可以被多次赋值。变量的赋值是一种理想化的数据传输,是立即发生、不存在任何延时的行为。变量常用在进程中作临时数据存储单元。变量不能将信息带出对它作出定义的当前设计单元。

定义变量的语法格式如下:

例如:

在VHDL语法规则中,变量是一个局部量,其适用范围仅限于定义了变量的进程或子程序中。变量定义语句中的初始值可以是一个与变量具有相同数据类型的常数值,也可以是一个全局静态表达式,这个表达式的数据类型必须与所赋值变量一致。此初始值不是必需的,综合过程中综合器将略去所有的初始值。在进程或子程序中,变量的值由变量赋值语句决定。(www.xing528.com)

变量赋值语句的语法格式如下:

“:=”是立即赋值符号,用来给变量赋值。赋值语句右边的表达式可以是一个数值,也可以是一个表达式,变量的值将随变量赋值语句的运算而改变,但数据类型必须与目标变量一致。

例如:

3.信号

信号是描述硬件系统的基本数据对象,它类似于连接线。信号可以作为设计实体中并行语句模块间的信息交流通道。在VHDL中,信号及其相关的信号赋值语句、决断函数、延时语句等很好的描述了硬件系统的许多基本特征。如硬件系统运行的并行性、信号传输过程中的惯性延时特性、多驱动源的总线行为等。

信号作为一种数值容器,不但可以容纳当前值,也可以保持历史值。这一属性与触发器的记忆功能有很好的对应关系。信号的定义格式如下:

信号初始值的设置不是必需的,而且初始值仅在VHDL的行为仿真中有效。与变量相比,信号的硬件特征更为明显,它具有全局性特性。例如,在实体中定义的信号,在其对应的结构体中都是可见的。

对信号定义了数据类型后,在VHDL设计中就能够对信号赋值了。信号的赋值语句表达式如下:

这里的表达式可以是一个运算表达式,也可以是数据对象(变量、信号或常量)。符号“<=”表示延迟赋值操作,即将数据信息传入。数据信息的传入也可以设置延时量,因此,目标信号获得传入的数据并不是即时的,而是要经历一个特定的延时过程,因此,符号“<=”两边的数值并不是在任一瞬间总是一致的,这与实际器件的传播延迟特性“<=”十分接近,显然与变量的赋值过程有很大的差别。所以,信号赋值符号用“<=”而非“:=”。但需注意,信号的初始赋值符号是“:=”,这是因为仿真的时间坐标是从初始赋值开始的,在此之前无所谓延时时间。以下是信号赋值语句示例:

信号的使用和定义范围是实体、结构体和程序包。在进程和子程序中不允许定义信号。信号可以有多个驱动源,或者说赋值信号源,但必须将此信号的数据类型定义为决断性数据类型。在进程中,只能将信号列入敏感表,而不能将变量列入敏感表。可见进程只对信号敏感,而对变量不敏感。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈