数字硬件建模systemverilog-按位运算符
经过几周的更新,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 |
位反转操作的一个示例结果是:
(按)位and按位和(bitwise and)。位and运算符对第一个操作数的每一位与第二个操作数中的对应位进行布尔and运算,从右到左运算。位and运算符是x-optimistic:0与任何值的and运算都将得到0。表5-5显示了位and的真值表。表中的结果针对两个操作数的每一位。
表5-5:位and真值表
位and运算的一些示例结果如下:
(按)位or按位或(bitwise or)。位or运算符对第一个操作数的每一位与第二个操作数中的对应位进行布尔or运算,从右向左进行运算。位or运算符是x-optimistic-与任何值进行or运算结果都是1。表5-6显示了位or的真值表。
表5-6:位or真值表
按位or运算的一些结果示例如下:
(按)位xor按位异或(bitwise xor)。位xor运算符对第一个操作数的每一位与第二个操作数的对应位进行布尔异或xor运算,从右到左进行运算。按位异或运算符为x-pessimistic——对x或z值进行异或运算的结果始终为x。表5-7显示了按位异或的真值表。
表5-7:按位异或真值表
按位异或运算的一些示例结果如下:
(按)位xnor按位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 definitionspackage definitions_pkg; typedef enum logic {and_op, xor_op} mode_t;endpackage: definitions_pkg// multiplexed n-bit wide bitwise-and or bitwise-xor operationmodule and_xorimport definitions_pkg::*;#(parameter n = 4) // op size (default 8-bits)(input mode_t mode, // 1-bit enumerated inputinput logic [n-1:0] a, b, // scalable input sizeoutput 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; endcaseendmodule: and_xor//`end_keywords图5-5显示了示例5-5中的rtl模型综合结果,如上一节前面所述,综合创建的实现可能受到多个因素的影响,包括:目标设备、与运算符一起使用的任何其他运算符或编程语句、使用的综合编译器以及指定的综合选项和约束。
图5-5:示例5-5的综合结果:按位and和or运算
华为畅享8e青春评测 一款非常良心的百元小炮
商业采购策略上如何搭配上人工智能
华为将5G引入平板市场,带动平板市场新的增量空间
特瑞仕用于二次电池充电的稳压器IC XC6242系列
沐渥科技介绍PCB电路板和集成电路的特点与区别
什么是按位运算符
光调制器的基本原理
三星半导体存储芯片西安高新区一期项目满产 二期项目预计8月底完成内部装修工程
交流AC-DC电源芯片220V转12V300MA芯片AH8668
中国的军用无人机强势突围,打破了美国及其铁杆盟友的垄断地位
Snowflake上市预示大数据分析时代到来?
关于PowerVR 25周年发展的行业展望
华为公开信:阻止华为参与5G将对英国不利
高通携手合作伙伴推出首批支持广电700MHz频段的5G商用终端
数字化运营业务如何实现5G业务开源节流
pcb中的mark点到底如何使用?
RISC-V可以支持Android 10了
汽车软件测试包括哪些内容
英蓓特科技推出功能完善的SoC FPGA开发套件Lark Board
靠风力就能行驶的车是怎么样的