Verilog中的^~、~^、~&、~|运算符

这篇具有很好参考价值的文章主要介绍了Verilog中的^~、~^、~&、~|运算符。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

今天看书上的Verilog代码中,出现了运算符~^,从来没见过,搜了一些资料,记录一下。

assign slt_result[0]    = (alu_src1[31] & ~alu_src2[31])
                        | ((alu_src1[31] ~^ alu_src2[31]) & adder_result[31]);

结论

~^^~作为二元运算符时,是同或;~^^~作为一元运算符时,是缩减异或的取反(感谢@smile、陌离老哥在评论区指正);

~&只能作为一元运算符,是对缩减&结果的取反;

~|只能作为一元运算符,是对缩减|结果的取反;

对缩减异或取反不等于缩减同或!例如5'b11011
( ( ( ( 1 ⊕ 1 ) ⊕ 0 ) ⊕ 1 ) ⊕ 1 ) = ( ( ( 0 ⊕ 0 ) ⊕ 1 ) ⊕ 1 ) = ( ( 0 ⊕ 1 ) ⊕ 1 ) = ( 1 ⊕ 1 ) = 0 ( ( ( ( 1 ⊙ 1 ) ⊙ 0 ) ⊙ 1 ) ⊙ 1 ) = ( ( ( 1 ⊙ 0 ) ⊙ 1 ) ⊙ 1 ) = ( ( 0 ⊙ 1 ) ⊙ 1 ) = ( 0 ⊙ 1 ) = 0 ∴ ¬ ( 1 ⊕ 1 ⊕ 0 ⊕ 1 ⊕ 1 ) ≠ ( 1 ⊙ 1 ⊙ 0 ⊙ 1 ⊙ 1 ) ((((1\oplus 1)\oplus 0)\oplus 1)\oplus 1)=(((0\oplus 0)\oplus 1)\oplus 1)=((0\oplus 1)\oplus 1)=(1\oplus 1)=0 \\ ((((1\odot 1)\odot 0)\odot 1)\odot 1)=(((1\odot 0)\odot 1)\odot 1)=((0\odot 1)\odot 1)=(0\odot 1)=0 \\ \therefore \lnot (1\oplus 1\oplus 0\oplus 1\oplus 1) \neq (1\odot 1\odot 0\odot 1\odot 1) ((((11)0)1)1)=(((00)1)1)=((01)1)=(11)=0((((11)0)1)1)=(((10)1)1)=((01)1)=(01)=0¬(11011)=(11011)
~^,fpga开发

有没有&~|~呢?
譬如a[2:0] &~ b[2:0],这里便不能将&~整体看做一个单独的运算符了,~作为一元操作,优先级最高,先将b[2:0]做按位取反,再通过&a[2:0]做位与,|~类似。

再补充HDLBits的一些说明(https://hdlbits.01xz.net/wiki/Reduction):
The reduction operators can do AND, OR, and XOR of the bits of a vector, producing one bit of output:

& a[3:0]     // AND: a[3]&a[2]&a[1]&a[0]. Equivalent to (a[3:0] == 4'hf)
| b[3:0]     // OR:  b[3]|b[2]|b[1]|b[0]. Equivalent to (b[3:0] != 4'h0)
^ c[2:0]     // XOR: c[2]^c[1]^c[0]

These are unary operators that have only one operand (similar to the NOT operators ! and ~).
You can also invert the outputs of these to create NAND, NOR, and XNOR gates, e.g., (~& d[7:0]).

测试过程

~^、^~作为二元运算符时

reg [1:0] x;

initial
    begin
        x <= 2'b00 ~^ 2'b00;
        #5 x <= 2'b01 ~^ 2'b00;
        #5 x <= 2'b10 ~^ 2'b00;
        #5 x <= 2'b11 ~^ 2'b00;
        #5 $finish;
    end

结果如下图所示(^~结果亦如下),为同或
~^,fpga开发

~^、^~作为一元运算符时

reg x;

initial
    begin
        x <= ~^ 2'b00;
        #5 x <= ~^ 2'b01;
        #5 x <= ~^ 2'b10;
        #5 x <= ~^ 2'b00;
        #5 $finish;
    end

结果如下图所示(^~结果亦如下),为缩减异或的取反。
~^,fpga开发

~&作为一元运算符时

reg [1:0] x;

initial
    begin
        x <= ~& 2'b00;
        #5 x <= ~& 2'b01;
        #5 x <= ~& 2'b10;
        #5 x <= ~& 2'b11;
        #5 $finish;
    end

结果如下图所示,为缩减&取反的结果。
~^,fpga开发

~|作为一元运算符时

reg [1:0] x;


initial
    begin
        x <= ~| 2'b00;
        #5 x <= ~| 2'b01;
        #5 x <= ~| 2'b10;
        #5 x <= ~| 2'b11;
        #5 $finish;
    end

结果如下图所示,为缩减|取反的结果。
~^,fpga开发

吐槽

好想过年前写完龙芯杯初赛,然后PASS掉啊啊啊啊!!!
已经写完的啦,不过是年后写完的 : )文章来源地址https://www.toymoban.com/news/detail-784188.html

到了这里,关于Verilog中的^~、~^、~&、~|运算符的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Verilog运算符优先级

    0 ! ~ 1 * / % 2 + 1 3 4 = = 5 == != === !== 6 ~ 7 ^ ^~ 8 | ~| 9 10 || 11 ?: 从上至下优先级依次降低

    2024年02月16日
    浏览(27)
  • Verilog基本语法之运算符(三)

    运算符按功能分为9类: 算术运算符 逻辑运算符 关系运算符 等式运算符 缩减运算符 条件运算符 位运算符 移位运算符 位拼接运算符 运算符按操作数的个数分为3类: 单目运算符:带一个操作数 逻辑非!,按位取反~,缩减运算符,移位运算符 双目运算符:带两个操作数 算

    2023年04月09日
    浏览(32)
  • Verilog学习记录3——三目运算符

    进阶示例: 以牛客网 VL1 四选一多路器 为例 使用三目运算符写法:

    2024年02月11日
    浏览(48)
  • Verilog常用运算符及表达式

    本文详细介绍了Verilog常用的运算符和表达式,特别是分享了处理“计算位宽溢出”和“负数”的可行方式,帮助读者更加轻松地理解和掌握Verilog语言的运算符。 算数运算符:加(+)、减(-)、乘(*)、除(/)、取余(%) 赋值运算符:非阻塞赋值(=)、阻塞赋值(=);

    2024年02月08日
    浏览(37)
  • Verilog语法——2.模块例化、运算符

    参考资料 【明德扬_verilog零基础入门语法HDL仿真快速掌握-手把手教你写FPGA/ASIC代码设计流程中的应用】 2.1.1 什么是模块例化 例化,即将项目不断拆分成次级功能模块,然后从最简单的模块开始实现,进而完成整个复杂项目 2.1.2 模块例化的方法 针对已经抽象好的模块,需要

    2024年01月16日
    浏览(30)
  • C语言中的运算符及算术运算符详解

    在C语言中,运算符是一种特殊的符号,用于表示数据的运算、赋值和比较等。本文将介绍C语言中的运算符,特别关注算术运算符,并提供一些示例来说明它们的用法。 C语言中的运算符可以按照其功能和操作数个数进行分类。以下是一些主要的运算符分类: 1. 按照功能分类

    2024年01月22日
    浏览(55)
  • 【JAVA】你可知JAVA中的运算符|重温运算符

    作者主页:paper jie的博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《JAVASE语法系列》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造,将javaSE基础知识一网打尽,希望可以帮到读者们哦。 其他专栏

    2024年02月15日
    浏览(34)
  • C++ 中的运算符,包括三目运算符,关系和逻辑运算符,地址运算符等等(C++复习向p8)

    加减乘除 ±*/:略 取模运算符 %: 比如 10 % 4=2 自增运算符 ++:给自己加1 自减运算符 —:给自己减1 “==” 是否相等 “!=” 是否不等 “” 是否大于 “” 是否小于 逻辑与,如果2个都是true,条件才true || 逻辑或,两个有一个是true,就是true ! 逻辑非,true变成false,false变成t

    2024年02月07日
    浏览(37)
  • Java中的运算符--短路运算

    JAVA中有两个短路运算,一个是短路与,一个是短路或。 所谓短路,就是当一个参与运算的操作数足以推断该表达式的值时,另一个操作数(可能是表达式)就不会执行。 短路与: 短路或: || 应用: 逻辑与、逻辑或都是自作向右计算。 两边同时为true,则为true。 有一方为fal

    2024年02月16日
    浏览(36)
  • Verilog基础:仿真时x信号的产生和x信号对于各运算符的特性

    相关阅读 Verilog基础 https://blog.csdn.net/weixin_45791458/category_12263729.html?spm=1001.2014.3001.5482         信号爆x也许是所有IC人的噩梦,满屏的红色波形常让人头疼不已,但x信号的产生原因却常常只有几种,只要遵循一定的代码规范,就可以避免产生信号中出现x的问题。         最常

    2024年02月05日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包