|
VHDL 变量
变量主要用于对暂时数据进行局部存储 , 它是一个局部量 , 可以在程序的很多区域进行说明 , 并且可以具有任何数据类型的值。作为一种硬件描述语言中的对象, 变量在硬件电路设计中具有一定的物理意义, 变量主要用于局部数据的暂时存储, 是一种载体。
通常情况下 , 对于仿真来说 , 变量可以用来进行高层次的建模 ; 对于综合来说 , 变量可 以用来进行计算。虽然变量可以用于建模操作, 但是变量的综合难以定义,因此建议初学者应该尽量避免使用变量。
在 VHDL 中 , 变量说明的语法结构为:
VARIABLE 变量名 [ , 变量名… ] : 数据类型 [ : = 表达式 ] ;
下面给出几个变量说明的例子。
VARIABLE i: integer RANGE 0 TO 15: = 0;
VARIABLE counter: bit _ vector (3 DOWN TO 0);
VARIABLE flag: boolean: = true;
VARIABLE enable: bit:
在上面的例子中 , "RANGE" 是用来表示限制数据范围的保留字 ; "TO" 则是用来表示数据范围递增的保留字 ; "DOWN TO" 则是用来表示数据范围递增的保留字。
在变量说明中 , 可以对它赋予初始值 , 也可以不赋初始值。如果在变量说明中没有指定初始值 , 那么认为它取默认值 , 即该数据类型的最左值或者是最小值 O 与常量不同 , 变量的值并不是一成不变的。这里 , VHDL 程序中变量值的改变是通过变量赋值语句来进行的 , 在 VHDL 语法中 , 变量赋值语句的语法结构为 :
目标变量 := 表达式 ;
变量说明的范围较窄 , 它只能在进程语句、过程语句以及函数语句中使用 , 因此说明的
变量也只能在进程语句、过程语句以及函数语句中使用。
另外 , VHDL-93 标准提供了一种称为共享变量的新变量 , 它不但可以在进程、过程和 函数之外定义 , 而且也可以在结构体、块语句和程序包中定义。在 VHDL 中 , 共享变量说 明的语法结构为 :
SHARE VARIABLE 变量名 [ , 常量名… ] : 数据类型 [: = 表达式 ] ;
由于共享变量不需要保存历史和波形信息 , 因此采用共享变量为存储器、寄存器和总线等建模时可以大大提高仿真速度。采用共享变量的主要缺点是会将非确定性问题引入到 VHDL 中 , 这样将使仿真结果需要依赖并行语句的调度顺序 , 从而影响 VHDL 仿真的具体 操作结果。同时 , 目前大多数的 EDA 仿真器和综合器都不支持共享变量 , 因此读者应该慎重使用共享变量。
|