Menu Close

VHDL 语言数据对象与变量

在语言编程中都会使用变量,变量可以容纳数据,一般称为数据对象(Data Objects)。在 VHDL中也有数据对象(Data Objects),它类似于一种容器,用于 接受不同数据类型的赋值。VHDL的数据对象有三类 ,即变量(VARIABLE) ,常量(CONSTANT)和信号(SIGNAL)。 变量(VARIABLE) ,常量(CONSTANT)与一般计算语言的数据对象类似, 但信号这一数据对象比较特殊 ,它具有更多的硬件特征是VHDL中最有特色的语言要素之一。

1. 数据对象的硬件特征

由于VHDL是硬件描述语言,那么VHDL的数据对象有哪些硬件特征呢?从硬件电路系统来看变量和信号相当于组合电路中元件之间的连线,信号的值即连线之间的逻辑值,如图1所示。常量相当于电路中的恒定电平如GND 或VCC等,一般用数字表示。

%title插图%num

图1

 

那么信号与变量有什么区别呢?从行为仿真和VHDL语句功能上看, 信号与变量具有比较明显的区别,其差异主要表现如下:

  • 接受和保持信号的方式不同。例如信号可以设置传输延迟量,而变量则不能。
  • 信息保持与转递的范围不同。  变量只能作为局部的信息载体,如只能在所定义的进程中有效,而信号则可在整个构造体内使用,起到传递信息的作用。如在结构体中各进程间传递信息,变量的设置有时只是一种过渡 ,最后的信息传输和界面间的通信都靠信号来完成。

2. 变量(VARIABLE)

在 VHDL 语法规则中, 变量是一个局部量, 只能在进程和子程序中使用。 变量不能将信息带出对它作出定义的进程或子程序。 变量的赋值是一种理想化的数据传输,是立即发生或实现, 不存在任何延时的行为。 VHDL 语言规则不支持变量附加延时语句, 变量常用在实现某种算法的赋值语句中。其它语言也有类似行为特性,如verilog语言中阻塞与非阻塞赋值语句等。其中阻塞赋值语句相当与VHDL语言的变量赋值,非阻塞赋值相当于这里的信号(signal)赋值。变量声明和变量使用探讨如下。

  • 变量声明

变量声明的格式如下:

VARIABLE  变量名  数据类型  :=  初始值;
例如变量定义语句
VARIABLE  a      :     INTEGER  ;                    –声明a 为整数型变量,没有初始值。
VARIABLE  b, c :      INTEGER := 2 ;             –声明 b 和c 整数型变量 ,初始值为2 。
VARIABLE d      :      STD_LOGIC ;                –声明d 为STD_LOGIC变量

需要注意的是变量作为局部量 ,其适用范围仅限于定义了该变量的进程或子程序中, 仿真过程中惟一的例外是共享变量。 变量的值将随变量赋值语句的运算而改变, 变量的初始值可以是一个与变量具有相同数据类型的常数值, 也可以是一个全局静态表达式, 这个表达式的数据类型必须与所赋值的变量一致。 初始值不是必需的, 综合时将略去所有的初始值。

  • 变量赋值语句

    • 变量赋值语句的语法格式如下:
      目标变量名 := 表达式;
      变量赋值符号是 := , 赋值语句右方的表达式或常数必须与变量具有相同数据类型;表达式可以是一个运算表达式 ,也可以是一个数值。 通过赋值操作, 新的变量值的获得是立刻发生的。 变量赋值语句左边的变量,可以是单值变量,也可以是一个变量的集合, 即数组型变量。

VARIABLE x, y : REAL ;
VARIABLE a ,b : BIT_VECTOR( 0 TO 7 ) ;
x := 100.0 ;                                                             — 实数赋值 x 是实数变量
y := 1.5+x ;                                                              — 运算表达式赋值 y 也是实数变量
a := b ;
a := “1010101” ;                                                     — 位矢量赋值 a 的数据类型是位矢量
a (3 TO 6) := ( ‘1’ ,’1′ ,’0′, ‘1’) ;                             — 段赋值 注意赋值格式
a (0 TO 5) := b (2 TO 7) ;
a (7) := ‘0’ ;                                                           — 位赋值

其中 a 和 b 是以变量数组的方式定义的, 它们的位宽都为8, 即分别含有8个单变量 a (0), a (1),… a (7)和 b (0), b (1),… b (7)。 赋值方式也可以是多种多样的。

    • 共享变量

VHDL 93 支持共享变量 共享变量具有某种全局性特征。它可以在进程和子程序之外定义,也可以在结构体, 块或程序包中定义。 以下是共享变量定义示例,

SHARED VARIABLE share_var : BOOLEAN := true;

共享变量也具有变量的特性,即赋值立即生效。但由于共享变量的建模特性过于复杂,因此一般的综合器都不支持共享变量的使用。因此在变量的结果需要在多个进程或子程序间传递时,一般将变量赋值给信号,再由信号传递到别的进程或子程序中去。

 

Posted in FPGA, FPGA 教材教案, IC 教材教案, VHDL, VHDL, 开发语言, 教材与教案, 文章, 编程语言, 资料区

发表回复

相关链接