其中xnor, sll, sla, srl, sra, rol, ror 为VHDL-93增加的运算符。
  加减运算符的运算数必须类型相同,并且可以是任何一种数值类型(整数、实数或物理类型),一元算术运算符的运算数也可以是任一数值类型。
  取模与取余运算符的运算数必须是同一类型的任何一种整数类型。取模(A MOD B)的结果符号与B相同,其绝对值小于B的绝对值。对某一整数值N,其结果必须满足下式关系:
    A = B * N + (A mod B)
  取余即整数除,(A rem B)的结果的符号与A相同,其绝对值小于B的绝对值,并满足下式定义:
    A = (A/B)*B + (A rem B)
  乘、除运算符的运算数既可以都是相同的整数类型,也可以都是相同的实数类型。有关物理类型的乘或除,有三种特殊情形:
  ·任一物理类型数可以乘以一个整数文字量或一个实数文字量。
  ·任一物理类型数可以除以一个整数文字量或一个实数文字量。
  ·任一物理类型数可以除以一个相同的物理类型的数。
  乘方运算符左边的运算数可以是整数类型或实数类型:右边的运算数则必须是整数文字量(只有当左边的运算数是实数类型时,右边的运算数才容许是负整数文字量)。如果一个算术运算符有一个(或二个)运算数不是文字量,那么结果表达式就具有该运算数的类型,但有一个例外:两个相同的物理类型(文字或数)相除的结果是整数类型。
  六个移位运算符 (sll,srl,sla,sra,rol,ror)为二元运算符。左边必须为位串类型,右边为整数类型。若右边为0,则无任何动作。即(A srl 0)为NULL运算,其结果仍为A。若右边为正数,则移动或循环移动次数即为该数。例如,(A srl 5)向右移动5位。若右边为负数,则移动次数为该数的绝对值,例如,(A ror -6) 等价于(A ror 6)。
一位移位与循环移位的语义示意如图2.5所示。
图2.5 移位运算符

  填充值定义为数组元素类型的属性LEFT的值。对Bit_Vector操作的填充值为0,Bolean 向量操作的填充值为False。
  由关系运算符形成的表达式的值总是布尔类型.关系运算符的运算数的类型必须相 同。关系运算符"="和"/="的运算数可以是任何类型(文件类型除外),其余的关系运算符的运算数可以是任一标量类型或任一一维数组类型(其元素类型是离散类型:枚举类型或整数类型)。
  逻辑运算符and,or,nand,nor,xor,xnornot的运算数可以是Bit和Boolean类型,也可以是这些类型的一维数组。对于数组运算数,运算施加于每个数组的相应元素,并得到同样长度的数组结果。对于Bit 与Boolean类型的运算数,and,or,nand,nor为"短路运算符", 即只有左边的运算不能确定其结果时才执行右边的运算。这样,and, nand只有左边的运算结果为'1'或true时才执行右边的运算。or, nor只有左边的运算结果为0或False时才执行右边的运算。例如,在if (a /= 0) and (b/a >2) then ...中的(b/a)可因运算符and的短路运算而避免出现0作为除数的运算。
  连接运算符(&)是一个二元运算符,它的任何一个运算数既可以是一维数组类型,也可以是一维数组类型的元素的类型:运算数必须具有相同的类型,或者其中的一个运算数必须是另一个运算数的元素的类型。
  下面的常量声明(S3、S4、S5、A3、A4和A5)实例声明字符串中连接运算符的用法。
    constant S1:String := "ABC";
    constant S2:String := "CDF";
    constant S3:String := S1 & S2; --"ABCDEF"
    constant Cl:Character := 'X';
    constant C2:Character := 'Y';;
    constant S4;String := S3 & Cl; --"ABCDEFX"
    constant S5:String := C1 & C2; --"XY"
  下面是关于一维数组的连接运算例子:
    Type Arr is array ( Integer range <>) of Boolean;
    Constant A1: Arr := (1 => True, 2 => False);
    Constant A2: Arr := (1 => False, 2 => True);
    Constant A3: Arr := A1 & A2; -- (True, False, False, True)
    Constant B1: Boolean := False;
    Constant B2: Boolean := True;
    Constant A4: Arr := A3 & B1; -- (True, False, False, True, False)
    Constant A5: Arr := B1 & B2; -- (True, False, False, True, False, True)