表2.1 VHDL三种对象的比较

对象名 关键字 意义
信号 Signal 控制模块或进程间通信的机制,定义两个模块或进程间的数据通路。 时间序列 (波形),延迟赋值(延时)
变量 Variable 程序中临时使用的对象。 可变的单值,即时赋值(无延时)
常量 Constant 程序中不变的量。 初始化时确定,运行过程中不改变。


   三种类型的共同点是:具有相同的类型特性;在初始化时均可赋初值;可相互赋值。
  VHDL是一种类型丰富的语言,每个对象都有一个类型,并且只能保存该类型的值。对象的类型在声明部分中确定。
  对象声明的一般形式是:
    对象类 对象标识符:对象类型 := 初值表达式;
  对象类可以是constant, signal, variable。对象标识符由一个标识符或由逗号( ,)隔开的多个标识符组成。对象类型声明可以是简单地给出一个类型的名字,也可以在类型名后附加上约束杀件(类型的约束条件在后面讨论)。赋值号(:=)和表达式共同规定了一个初始值(是对象声明部分的任选项)。初值也可以不指定,系统默认其初值为类型定义中的最左边的值。注意3种对象赋初值均用符号 ":="。
  下面举几个对象声明的例子;
   constant ROM_Size: Integer := 16#FFFF#;
    
-- 定义ROM_Size为整数类型的常数,其值为16进制的FFFF。
   variable In_fetch: Boolean;
    --定义布尔类型的变量In_fetch,初值默认为False。
   signal Enable: Bit;
    
--定义二进制位类型的信号Enable,初值默认为'0'。
   signal CLK, CLEAR: Bit:='1';
    
--声明了两个信号,均为二进制位类型,初值指定为'1'。
   variable Address:Integer range 0 to ROM_Size;
    
--声明了一个具有范围限制的整数类型的变量,其范围为0到FFFF。

  VHDL中的对象可以有丰富的数据类型。它们与软件程序设计语言中的类型相类似,有下列几种:
  标量类型:整数, 实数,枚举类型,物理类型,文件类型,访问类型;
  复合类型:数组,记录。

  VHDL规则规定:一个对象(信号、变量或常量)以及一个表达式能够有唯一确定的类型。一般来说,类型在表达式中或者在给对象的赋值中不能混杂。例如,一个信号如果已经被声明为实数类型(或许该信号代表一个浮点寄存器),那么,将此信号的值赋给另外一个整数类型的信号(该信号可能代表一个通用寄存器)就是一种错误。对象和表达式的类型可以静态地确定。这就是说,类型可以简单地通过分析VHDL的语句及声明而在模拟之前确定下来,并且在模型的运行期间不会改变。因此,VHDL中的类型是设计者在模拟之前检查设计错误的手段。