Menu Close

VHDL 语言数据对象与常量

在VHDL语言编程中,常数(constant)数据对象也是一类经常使用的数据类型,使用规则与signal和variable类似。常数数据对象的定义和设置主要是为了使设计实体中的数据更容易阅读和修改 ,特别是在一个设计中具有一定含义且多出使用的地方,如果使用具体数字,在设计需求发生改变,需要修改时,只要一处修改,可以全局有效。在状态机设计可以预定义常数用来表达状态机的状态, 就是经常使用常数表达,如 使用IDLE,INITIAL, READ, WRITE等的意义清晰的单词,比仅使用简单的0,1,2,3等数字表达,要清晰多了。再例如: 将位矢的宽度定义为一个常量 ,只要修改这个常量就能很容易地改变宽度 ,从而改变硬件结构。在VHDL中generic 内的参数也是常数范畴,虽然可以通过例化接口传递不同内容,但这些改变都是发生在编译之前,一旦编译就不能改变。

1. 常量数据对象的声明

在VHDL程序中, 常量是一个恒定不变的值。 一旦声明并指定数据类型和赋值后, 在程序的其它地方不能再改变 ,因而具有全局性意义 。由于常数的值不能改变,因此常数在声明是就赋初值,并在整个程序范围内保持该值。

  • 常量对象的声明格式

常量对象的声明格式如下:

CONSTANT  常数名   数据类型 := 表达式;

例如:
CONSTANT   data  : BIT_VECTOR(31 downto 0) := “01011500” ;          — 声明常量data,位矢量数据类型,位宽32,初始值为”01011500″
CONSTANT   Vcc   : REAL := 5.0 ;                                                                   –实数数据类型
CONSTANT  delay : TIME := 25ns ;                                                                –时间数据类型
VHDL 要求所定义的常量数据类型必须与表达式的数据类型一致, 常量的数据类型可以是标量类型或复合类型, 但不能是文件类型(file)或存取类型(Access)。

  • 常量对象声明区域

常量对象声明区域有实体(entity) ,构造体(architecture), 程序包(package),块(block), 进程(process)和子程序(subprogram)。在程序包中定义的常量对象可以暂不设定具体数值, 可以在与之对应的程序包体中设定,例如:

程序包:
PACKAGE reset_p IS
CONSTANT rst : STD_LOGIC ;
END PACKAGE reset_p

程序包体:
PACKAGE BODY reset_p IS
CONSTANT rst : STD_LOGIC := ‘0’ ;
END PACKAGE BODY reset_p;

上例 ,在程序包首中没有设定 rst 的具体值 ,其值是在程序包体中设定的。常量对象的可视性, 即常量对象的使用范围取决于它被声明的位置, 如果在程序包中声明的常量具有最大的全局化特征, 可以用在调用此程序包的所有设计实体中。 常量如果在实体中声明, 其有效范围为这个实体所配置的所有构造体。 如果常量对象在构造体中声明, 则只能用于此构造体。 如果常量在构造体的某一单元中声明( 如一个进程中), 则这个常量只能在这一进程中使用, 这就是常数的可视性规则。 这一规则与信号的可视性规则相同。

               例1:在构造体内声明状态机的常量状态

Architecture sm_arch of sm_entity

 constant IDLE  : integer  :=0;

 constant INIT   : integer  :=1;

constant READ  : integer  :=2;

constant WRITE : integer  :=3;

constant END     : integer  :=4;

             begin

…                –使用常量

end Architecture

 

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

发表回复

相关链接