zoukankan      html  css  js  c++  java
  • vhdl 语法总结2

    二、        运算操作符和属性

    1.       运算操作符

    l  赋值运算符

    赋值运算符用来给信号、变量和常数赋值。

    <=    用于对SIGNAL类型赋值;

    :=     用于对VARIABLE,CONSTANT和GENERIC赋值,也可用于赋初始值;

    =>    用于对矢量中的某些位赋值,或对某些位之外的其他位赋值(常用OTHERS表示)。

    例:

    SIGNAL x: STD_LOGIC;

    VARIABLE y: STD_LOGIC_VECTOR(3 DOWNTO 0);  –最左边的位是MSB

    SIGNAL w: STD_LOGIC_VECTOR(0 TO 7);  –最右边的位是MSB

    x <= ‘1’;

    y := “0000”;

    w <= “1000_0000”;  – LSB位为1,其余位为0

    w <= (0 => ‘1’, OTHERS => ‘0’);  – LSB位是1, 其他位是0

    l  逻辑运算符

    操作数必须是BIT, STD_LOGIC或STD_ULOGIC类型的数据或者是这些数据类型的扩展,即BIT_VECTOR, STD_LOGIC_VECTOR,STD_ULOGIC_VECTOR。

    VHDL的逻辑运算符有以下几种:(优先级递减)

    ?   NOT —— 取反

    ?   AND —— 与

    ?   OR —— 或

    ?   NAND —— 与非

    ?   NOR —— 或非

    ?   XOR —— 异或

    l  算术运算符

    操作数可以是INTEGER, SIGNED, UNSIGNED, 如果声明了std_logic_signed或std_logic_unsigned,可对STD_LOGIC_VECTOR类型的数据进行加法或减法运算。

    + —— 加

    -          —— 减

    * —— 乘

    / —— 除

    ** —— 指数运算

    MOD —— 取模

    REM —— 取余

    ABS —— 取绝对值

    加,减,乘是可以综合成逻辑电路的;除法运算只在除数为2的n次幂时才能综合,此时相当于对被除数右移n位;对于指数运算,只有当底数和指数都是静态数值(常量或GENERIC参数)时才是可综合的;对于MOD运算,结果的符号同第二个参数的符号相同,对于REM运算,结果的符号同第一个参数符号相同。

    l  关系运算符

    =, /=, <, >, <=, >=

    左右两边操作数的类型必须相同。

    l  移位操作符

    <左操作数> <移位操作符> <右操作数>

    其中左操作数必须是BIT_VECTOR类型的,右操作数必须是INTEGER类型的(可以为正数或负数)。

    VHDL中移位操作符有以下几种:

    u  sll  逻辑左移  – 数据左移,右端补0;

    u  srl  逻辑右移  – 数据右移,左端补0;

    u  sla  算术左移  – 数据左移,同时复制最右端的位,填充在右端空出的位置;

    u  sra  算术右移  – 数据右移,同时复制最左端的位,填充在左端空出的位置;

    u  rol  循环逻辑左移 — 数据左移,从左端移出的位填充到右端空出的位置上;

    u  ror  循环逻辑右移– 数据右移,从右端移出的位填充到左端空出的位置上。

    例:x <= “01001”,那么:

    y <= x sll 2;  – 逻辑左移2位,y<=”00100”

    y <= x sla 2;  – 算术左移2位,y<=”00111”

    y <= x srl 3;  – 逻辑右移3位,y<=”00001”

    y <= x sra 3;  – 算术右移3位,y<=”00001”

    y <= x rol 2;  – 循环左移2位,y<=”00101”

    y <= x srl -2;  –相当于逻辑左移2位

    l  并置运算符

    用于位的拼接,操作数可以是支持逻辑运算的任何数据类型。有以下两种:

    2  &

    2  (, , , )

    与Verilog中{}的功能一样。

    2.       属性(ATTRIBUTE)

    l  数值类属性

    数值类属性用来得到数组、块或一般数据的相关信息,例如可用来获取数组的长度和数值范围等。

    以下是VHDL中预定义的可综合的数值类属性:

    d’LOW             –返回数组索引的下限值

    d’HIGH            –返回数组索引的上限值

    d’LEFT             –返回数组索引的左边界值

    d’RIGHT            –返回数组索引的右边界值

    d’LENGTH       –返回矢量的长度值

    d’RANGE          –返回矢量的位宽范围

    d’REVERSE_RANGE   –按相反的次序返回矢量的位宽范围

    例:定义信号 SIGNAL d: STD_LOGIC_VECTOR(7 DOWNTO 0);

    则有:d’LOW = 0, d’HIGH = 7, d’LEFT = 7, d’RIGHT = 0, d’LENGTH = 8, d’RANGE = (7 DOWNTO 0), d’REVERSE_RANGE = (0 TO 7).

    l  信号类属性

    对于信号s,有以下预定义的属性(可综合的):

    s’EVENT            若s的值发生变化,则返回布尔量TRUE,否则返回FALSE

    s’STABLE          若s保持稳定,则返回TRUE,否则返回FALSE

    例:clk的上升沿判断

    IF (clk’EVENT AND clk = ‘1’)

    IF (NOT clk’STABLE AND clk = ‘1’)

    WAIT UNTIL (clk’EVENT AND clk = ‘1’)

    3.       通用属性语句

    GENERIC语句提供了一种指定常规参数的方法,所指定的参数是静态的,增加了代码的可重用性,类似于Verilog中的parameter与defparam。GENERIC语句必须在ENTITY中进行声明,由GENERIC语句指定的参数是全局的,不仅可在ENTITY内部使用,也可在后面的整个设计中使用。语法结构如下:

    GENERIC (parameter_name: parameter_type := parameter_value);

    用GENERIC语句指定多个参数:

    GENERIC (n: INTEGER := 8; vector: BIT_VECTOR := “0000_1111”);

  • 相关阅读:
    写的一个split函数
    从头開始写项目Makefile(十):make内嵌函数及make命令显示
    MySQL 中文乱码解决
    查看DNS主机名解析的主机IP并向DNSserver进行DNS域名解析
    【iOS开发-90】CALayer图层:自己定义图层,图层的一些动画
    iconv 中文截断问题的解决方法
    linux有用技巧:使用ntfs-3g挂载ntfs设备
    SQL Sever——远程过程调用失败(0x800706be)
    USACO ariprog 暴力枚举+剪枝
    Shell编程(脚本)的经常使用命令和语句
  • 原文地址:https://www.cnblogs.com/feitian629/p/2961645.html
Copyright © 2011-2022 走看看