(1) 类型的预定义属性
  VHDL为所有的标量子类型定义了属性Left,Right,High和Low。举例声明如下;
    type Bit_position is range 15 downto 0;
    type Fraction is range -0.999999 to 0.999999;
    type Opcode is
     (Add,Add_with_carry,Sub,Sub_with_carry,Complement);
    subtype Adding_opcode is Opcode range Add to Add_with_carry;
  下面举例声明预定义属性的含义:
    Bit_posmon'Left = 15, Bit_posmon'Right = 0
    Bit_posmon'Low = 0, Bit_posmon'High = 15
    Fraction'Left = Fraction'Low = -0.999999
    Fxaetion'Right = Fraction' High = 0.999999
    Opcode'Left = Add, Opcode'High = Complement
    Adding_opeode'Right = Add_with_carry
  属性Pos, Val, Succ,Pred,Leftof,与Rightof是为物理子类型和离散子类型(整数类型或枚举类型)定义的。粗略地讲,属性Pos将一个离散类型的值映射到表示位置的整数上,而属性Val则将表示位置的整数映射到一个离散类型的值上。但要注意,对于枚举类型T,T'Pos(T'Left)定义为0,但对整数类型T,T'Pos(T'Left)等同于T'Left。
  对于任意的物理类型或离散类型T, 有下面的关系:
    T'Succ(X) = T'Val(T'Pos(X)+1)
    T'pred(X) = T'Vol(T'Pos(X)-1)
  对于升序的T,有:
    T'Rightof(X) = T'Succ(K)
    T'Leftof(X) = T'Pred(X)
  对于降序的T, 有:
    T'Rightof(X) = T'Pred(X)
    T'Leftof(X) = T'Suec(X)

  对于枚举类型和物理类型,其第一个元素的位置为0。但对于整数来说,无论整数范围的定义是升序,还是降序,也无论其第一个元素和最后一个元素是几,其中某个元素的位置T'Pos总是该元素的值本身。
  下面举例声明预定义属性的含义;
    Opcode'Pos(Add) = 0 --Add在0号位置上.
    Opcode'Pos(Complement) = 4 --Complemem在4号位置上.
    Opcode'Vat(2) = Sub --2号位置对应Sub,
    Opcode'Val(-1) 未定义
    Opcode'Vol(5) 未定义
    Time'Pos(1 ps) = 1000
    Time'Pos(1 fs) = 1
    Bit_position'Pos(15)=15
    Bit_position'Val(15)=15

  (2) 数组的预定义属性
  属性Left,Right,High,Row,Length,Range和Reverse_range,是定义在限定性数组子类型与数组对象上的属性。如果A是一个限定性数组子类型或数组类型的对象,且T是A的第N个下标的子类型,那么A'Left(N)的值与T'Left的值就是相同的。属性Right,High,Low的定义与此类似,A'Length(N)与A的第N维的元素个数相等。属性Range与Reverse_range给出的是范围而不是值,形式为A'Range(N)或A'Reverse_ range(N)的属性值是一个范围声明,它可以作为离散范围在范围限制中使用。举例如下:
    type Window is array(1 to 12, 1 to 40) of Pixel;
    Window'Range(1) = 1 to 12;
    Window'Range(2) = 1 to 40;
    Window'Left(1)=1;
    Window'Right(2)=40;
    Window'Length(2)=40;
    Window'Reverse(2)=40 downto 1;

  (3) 自定义属性
  虽然VHDL的功能十分丰富,仍然不可避免地有一些特殊的设计信息无法用巳有的语言结构直接加以描述。例如,VHDL没有提供直接描述设计中版图的布局或线宽等物理特性的机制。然而使用用户定义的属性可以解决这个问题,设计者可通过用户定义的属性在VHDL描述中插入附加信息。VHDL的这种灵活性使设计者有充分的自由用语言本身以外的信息类型对VHDL描述作注释。
  几乎所有的项目都可以有自定义属性:类型、子类型、信号、变量、常量、实体、结构体、配置、程序包、过程、函数、元件、语句标号。
  用户定义的属性必须是常量。
  自定义属性包括属性声明和属性指定两部分,属性声明定义属性标识符,属性指定的作用是将一个属性与一个或多个对象联系起来。属性的值是一个常数,不能改变。
    attribute Width: Integer;
     --属性声明:定义属性标识符Width是一个整数。
    attribute Width of Obj_name is 15;
     --属性指定:定义项目Obj_name的属性Width的属性值为15。
  引用属性值的方法与预定义属性相同:Obj_name'Width,其值为15。属性引用可以放在任何表达式中作为常量使用。