• SystemVerilog-(按)位运算符


    数字硬件建模SystemVerilog-按位运算符

    经过几周的更新,SV核心部分用户自定义类型和包内容已更新完毕,接下来就是RTL表达式和运算符。

    马上HDLBits-SystemVerilog版本也开始准备了,基本这一部分完成后就开始更新~

    5132fe6fc21842290e3cd582b0b8a988.png

    介绍

    (按)位运算符(Bitwise operators)

    位运算符一次执行一位操作,从最右边的位(最低有效位)向最左边的位(最高有效位)移动。表5-3列出了按位运算符功能。

    表5-3:RTL建模的位运算符
    运算符示例用法描述
    ~~m将m(1的补码)的每一位反转
    &m&nm和n的每一位相与(AND)
    ^m ^ nm与n的每一位相异或(XOR)
    ^~或者~^m ^~nm和n的每一位相同或
    ImInm和n的每一位相或(OR)

    (I代表   |     -    或操作)

    没有位NAND或NOR运算符。NAND或NOR操作是分别反转AND或OR操作的结果,如~(m&n)。需要括号,以便先执行AND运算。

    位运算要求两个操作数的向量大小相同。在执行操作之前,较小的操作数将扩展以匹配较大操作数的大小。

    (按)位反转

    按位反转(Bitwise inversion.)。位反转运算符将其单个操作数的每一位反转,从右向左操作,结果是操作数值的一个补数。位反转运算符是X-pessimistic-反转X或Z值的结果始终是X。表5-4显示了位反转的真值表。表中的结果针对操作数的每一位。

    表5-4:位反转真值表
    ~结果
    01
    10
    XX
    ZX

    位反转操作的一个示例结果是:

    381b331443166aa918a3b2ebc8736368.png

    (按)位AND

    按位和(Bitwise AND)。位AND运算符对第一个操作数的每一位与第二个操作数中的对应位进行布尔AND运算,从右到左运算。位AND运算符是X-optimistic:0与任何值的AND运算都将得到0。表5-5显示了位AND的真值表。表中的结果针对两个操作数的每一位。

    表5-5:位AND真值表 b85f7ab90ee4014d0170cf3bf0546a72.png

    位AND运算的一些示例结果如下:

    612915df4e0cadc0cf5eb94f54d6fb9d.png

    (按)位OR

    按位或(Bitwise OR)。位OR运算符对第一个操作数的每一位与第二个操作数中的对应位进行布尔OR运算,从右向左进行运算。位OR运算符是X-optimistic-与任何值进行OR运算结果都是1。表5-6显示了位OR的真值表。

    表5-6:位OR真值表 3f4521dd046685d4f175f1165ec64e9c.png

    按位OR运算的一些结果示例如下:

    e57318a8bbc65d3250ed1e2f708470b3.png 975a6ffed0e280e04fb4e3fe735cae2a.png

    (按)位XOR

    按位异或(Bitwise XOR)。位XOR运算符对第一个操作数的每一位与第二个操作数的对应位进行布尔异或XOR运算,从右到左进行运算。按位异或运算符为X-pessimistic——对X或Z值进行异或运算的结果始终为X。表5-7显示了按位异或的真值表。

    表5-7:按位异或真值表 d1396753b3662f94b1c4e89f4fe5a8bc.png

    按位异或运算的一些示例结果如下:

    01cdcfbe9844634a1e8f3be5c46b578d.png

    (按)位XNOR

    按位XNOR(Bitwise XNOR)。位XNOR运算符对第一个操作数的每一位与第二个操作数的对应位进行布尔XNOR运算,从右到左进行运算。位XNOR运算符为X-pessimistic ——对X或Z值进行XNOR运算的结果为X。表5-8显示了按位XNOR的真值表。

    表5-8:按位XNOR真值表 c9a451958dfd4dea71d86d605d16fd3f.png

    按位XNOR运算的一些示例结果如下:

    5b63f75c068ddd5ec37ca33496875824.png

    示例5-5说明了一个利用按位运算符的小型RTL模型。

    示例5-5:使用按位运算符:多路N位宽和/异或操作
    1. //`begin_keywords "1800-2012" // use SystemVerilog-2012 keywords
    2. // User-defined type definitions
    3. package definitions_pkg;
    4.  typedef enum logic {AND_OP, XOR_OP} mode_t;
    5. endpackage: definitions_pkg
    6. // Multiplexed N-bit wide bitwise-AND or bitwise-XOR operation
    7. module and_xor
    8. import definitions_pkg::*;
    9. #(parameter N = 4)            // op size (default 8-bits)
    10. (input  mode_t        mode,   // 1-bit enumerated input
    11. input  logic [N-1:0] a, b,   // scalable input size
    12. output logic [N-1:0] result  // scalable output size
    13. );
    14.  timeunit 1ns; timeprecision 1ns;
    15.  always_comb
    16.    case (mode)
    17.      AND_OP: result = a & b;
    18.      XOR_OP: result = a ^ b;
    19.    endcase
    20. endmodule: and_xor
    21. //`end_keywords

    图5-5显示了示例5-5中的RTL模型综合结果,如上一节前面所述,综合创建的实现可能受到多个因素的影响,包括:目标设备、与运算符一起使用的任何其他运算符或编程语句、使用的综合编译器以及指定的综合选项和约束。

    5-5:示例5-5的综合结果:按位AND和OR运算
    f3a954c64aaa8d5095d8d2707af57a6e.png
  • 相关阅读:
    二叉树OJ
    Nginx入门
    Java的replaceAll()方法
    从键盘上输入数字并查找某数
    设计循环队列---力扣622
    NIFI实现JSON转SQL并插入到数据库表中
    《C++ primer plus》第10章:对象和类(1)
    这么分析大文件日志,以后就不用加班卷了!
    【项目实践-04】实验室移动端:对象添加新属性+webview IOS端appendJsFile()方法不生效
    嵌入式Linux驱动开发基础知识(一)——hello驱动程序开发
  • 原文地址:https://blog.csdn.net/Pieces_thinking/article/details/126314133