VHDL的signal、variable与constant
无论是软件还是硬件程序设计,赋值操作都贯穿代码始终,任何功能、计算、调用最终都要转化为赋值,如果要做统计的话,赋值操作符出现的次数几乎是与代码行数相同的,由此可见赋值的重要性。而VHDL语言中可以被赋值的对象有3种:signal、variable和constant。分别介绍如下:
Signal
Signal即是“信号”的意思,它具有特定的物理意义,一般对应电路中特定的物理连线或存储单元。Signal是VHDL语法中最重要、最常用的一种可赋值对象。当程序中需要用到signal时,我们一般需要在VHDL基本程序框架中的architecture语法的声明与定义部分先声明一个signal,然后才能在architecture的语句部分使用它。 Signal的声明语法如下:
signal <signal_name> : := ; – 有初值
或
signal <signal_name> : ; – 无初值
如果有多个同样类型的信号需要声明,也可以用这样的语法:
signal <signal_name_list> : ; – 多个信号名之间用逗号隔开
除此以外,entity语法中的port语法结构中的in、out、buffer或者inout类型的端口,虽然没有用关键字“signal”来声明,但它们其实都是signal类型的,并且同类型的端口也支持逗号分隔单行书写的方法。还有library里的package语法中,也可以声明signal。
Variable
Variable即是“变量”的意思,它不具有特定的物理意义,对应关系也不太直接,通常只代表暂存某些值的载体。** 在之前介绍的VHDL基本程序框架中,可以看到variable出现在process语句中,作为process的局部变量来使用。** 当程序中要用到variable时,只需要在process语法的敏感量列表与begin关键字之间先声明一个variable,然后就能在process的语句体中使用它。Variable的声明语法如下:
variable : := ; – 有初值
或
variable : ; – 无初值
如果有多个同样类型的变量需要声明,也可以用这样的语法:
variable : ; – 多个变量名之间用逗号隔开
除此以外,后续介绍的function与procedure语法结构中也可声明variable。
Constant
Constant即是“常量”的意思,它具有特定的物理意义,通常对应数字电路中的电源或者地。Constant能出现在所有signal和variable出现的场合中,它的声明语法如下:
constant : := ;
可以注意到,常量是不能单独赋值的,仅仅能在声明的同时被初始化赋值。
命名规则
VHDL语言中的信号、变量或者常量都必须有一个属于自己的名字,即标识符,然后才能在程序中进行引用。而VHDL语法中的命名规则如下:
1、标识符中只能包含字符、数字和下划线,即”A-Z”,”a-z”,”0-9”,”_”;
2、标识符必须以字符开头,即开头符号只能是”A-Z”,”a-z”。