经过几周的更新,SV核心部分用户自定义类型和包内容已更新完毕,接下来就是RTL表达式和运算符。
马上HDLBits-SystemVerilog版本也开始准备了,基本这一部分完成后就开始更新~
(按)位运算符(Bitwise operators)
位运算符一次执行一位操作,从最右边的位(最低有效位)向最左边的位(最高有效位)移动。表5-3列出了按位运算符功能。
表5-3:RTL建模的位运算符运算符 | 示例用法 | 描述 |
---|---|---|
~ | ~m | 将m(1的补码)的每一位反转 |
& | m&n | m和n的每一位相与(AND) |
^ | m ^ n | m与n的每一位相异或(XOR) |
^~或者~^ | m ^~n | m和n的每一位相同或 |
I | mIn | m和n的每一位相或(OR) |
(I代表 | - 或操作)
没有位NAND或NOR运算符。NAND或NOR操作是分别反转AND或OR操作的结果,如~(m&n)。需要括号,以便先执行AND运算。
位运算要求两个操作数的向量大小相同。在执行操作之前,较小的操作数将扩展以匹配较大操作数的大小。
按位反转(Bitwise inversion.)。位反转运算符将其单个操作数的每一位反转,从右向左操作,结果是操作数值的一个补数。位反转运算符是X-pessimistic-反转X或Z值的结果始终是X。表5-4显示了位反转的真值表。表中的结果针对操作数的每一位。
表5-4:位反转真值表~ | 结果 |
---|---|
0 | 1 |
1 | 0 |
X | X |
Z | X |
位反转操作的一个示例结果是:
按位和(Bitwise AND)。位AND运算符对第一个操作数的每一位与第二个操作数中的对应位进行布尔AND运算,从右到左运算。位AND运算符是X-optimistic:0与任何值的AND运算都将得到0。表5-5显示了位AND的真值表。表中的结果针对两个操作数的每一位。
表5-5:位AND真值表位AND运算的一些示例结果如下:
按位或(Bitwise OR)。位OR运算符对第一个操作数的每一位与第二个操作数中的对应位进行布尔OR运算,从右向左进行运算。位OR运算符是X-optimistic-与任何值进行OR运算结果都是1。表5-6显示了位OR的真值表。
表5-6:位OR真值表按位OR运算的一些结果示例如下:
按位异或(Bitwise XOR)。位XOR运算符对第一个操作数的每一位与第二个操作数的对应位进行布尔异或XOR运算,从右到左进行运算。按位异或运算符为X-pessimistic——对X或Z值进行异或运算的结果始终为X。表5-7显示了按位异或的真值表。
表5-7:按位异或真值表按位异或运算的一些示例结果如下:
按位XNOR(Bitwise XNOR)。位XNOR运算符对第一个操作数的每一位与第二个操作数的对应位进行布尔XNOR运算,从右到左进行运算。位XNOR运算符为X-pessimistic ——对X或Z值进行XNOR运算的结果为X。表5-8显示了按位XNOR的真值表。
表5-8:按位XNOR真值表按位XNOR运算的一些示例结果如下:
示例5-5说明了一个利用按位运算符的小型RTL模型。
示例5-5:使用按位运算符:多路N位宽和/异或操作- //`begin_keywords "1800-2012" // use SystemVerilog-2012 keywords
-
- // User-defined type definitions
- package definitions_pkg;
- typedef enum logic {AND_OP, XOR_OP} mode_t;
- endpackage: definitions_pkg
-
- // Multiplexed N-bit wide bitwise-AND or bitwise-XOR operation
- module and_xor
- import definitions_pkg::*;
- #(parameter N = 4) // op size (default 8-bits)
- (input mode_t mode, // 1-bit enumerated input
- input logic [N-1:0] a, b, // scalable input size
- output logic [N-1:0] result // scalable output size
- );
- timeunit 1ns; timeprecision 1ns;
-
- always_comb
- case (mode)
- AND_OP: result = a & b;
- XOR_OP: result = a ^ b;
- endcase
- endmodule: and_xor
- //`end_keywords
图5-5显示了示例5-5中的RTL模型综合结果,如上一节前面所述,综合创建的实现可能受到多个因素的影响,包括:目标设备、与运算符一起使用的任何其他运算符或编程语句、使用的综合编译器以及指定的综合选项和约束。
图5-5:示例5-5的综合结果:按位AND和OR运算