第四章 运算操作符和属性

VHDL 语法基础的学习令人感到枯燥乏味,但是只有在对数据类型、运算操作符及其属性有了深刻的理解之后,才有可能写出高质量和高效率的代码。

  1. 运算操作符

VHDL 提供了6 种预定义的运算操作符,分别是:赋值运算符、逻辑运算符、算术运算符、关系运算符、移位运算符和并指运算符。

  • 赋值运算符:用来给信号、变量和常数赋值。赋值运算符包括以下 3 种:
    <= 用于对 SIGNAL 赋值。
    := 用于对VARIABLE,CONSTANT 和 GENERIC 赋值,也可用于赋初始值。
    => 给矢量中的某些位赋值,或对某些为之外的其他位(常用 OTHERS 表示)赋值。


首先定义下列信号和变量:
SIGNAL x: STD_LOGIC;
VARIABLE y: STD_LOGIC_VECTOR( 3 DOWNTO 0);

对于上面的信号或变量,下面的赋值方式都是符合规则的:
x <= ‘1’ ;
y := “0000” ;

  • 逻辑与算符:用来执行逻辑运算操作。操作数必须是BIT ,STD_LOGIC_VECTOR 或 STD_ULOGIC 类型的数据。VHDL 的逻辑运算符有以下几种:
    NOT——取反
    AND——与
    OR——或
    NAND——与非
    NOR——或非
    XOR——异或


y <= NOT a AND b;
y <= NOT (a AND b);

  • 算术运算符:用来执行算数运算操作。VHDL 语言有以下 8 种算术运算符:
    加(+)、减(-)、乘( * )、除(/)、指数运算( ** )、取模( MOD)和取余(REM)。

  • 关系运算符:用来对两个操作数进行比较运算,VHDL 有以下 6 种关系运算:
    = 等于
    /= 不等于
    < (>) 小于(大于)
    <=(>=)小于等于(大于等于)

关系操作符左右两边操作数的数据类型必须相同。

  • 移位操作符:用来对数据进行唯一操作。其语法结构为:
    <左操作数><唯一操作符><右操作数>
    其中,左操作数必须是BIT_VECTOR 类型的。VHDL 中的移位操作符有以下几种:
    第四章 运算操作符和属性_第1张图片
    第四章 运算操作符和属性_第2张图片
  • 并置运算符:用于位的拼接,其操作数可以是支持逻辑运算的任何数据类型。并置运算符有以下两种:& 和 (,)


z <= x & “10000000” --如果 x <=‘1’ ,那么 z <= “11000000”
z <= (‘1’, ‘1’,‘0’, ‘0’,‘0’, ‘0’,‘0’, ‘0’, ) – z <= “11000000”

  1. 属性

VHDL 语言中的属性(ATTRIBUTE)语句可以从指定的客体或对象中获得关心的数据或信息,因此可以使 VHDL 代码更灵活。VHDL 中的预定义属性可以划分为两大类:数值类属性和信号类属性。

  • 数值类属性:用来得到数组、块或一般数据的相关信息,例如可以用来获取数组的长度和数值范围等。
    第四章 运算操作符和属性_第3张图片
    第四章 运算操作符和属性_第4张图片
  • 信号类属性

第四章 运算操作符和属性_第5张图片
第四章 运算操作符和属性_第6张图片

  1. 用户自定义属性

VHDL 也允许用户自定义属性。其语法格式为:

第四章 运算操作符和属性_第7张图片
4. 操作符扩展

上面提到用户可以自定义属性,用户同样也可以自定义操作符。

第四章 运算操作符和属性_第8张图片

  1. 通用属性语句
    GENERIC(属性)语句提供了一种指定常规参数的方法,错指定的参数是静态的,设计人员可以根据具体设计需求方便地进行参数修改。该语句可以增加代码的灵活性和可重用性。GENERIC 语句必须在 ENTITY 中进行声明。GENERIC 语句指定的参数是全局的,不仅可以在ENTITY 内部使用,也可以在后面的整个设计中使用。其语法结构如下:

GENERIC (parameter_name: papameter_type := parameter_value);

第四章 运算操作符和属性_第9张图片

你可能感兴趣的:(VHDL)