0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是逻辑运算符

汽车电子技术 来源:OpenFPGA 作者: 碎碎思 2023-02-09 15:55 次阅读

数字硬件建模SystemVerilog-逻辑运算符

poYBAGPkpiyAIH3vAATd-hAQQfA004.png

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

pYYBAGPkpjeAHw_lAAIrsU-9Z64181.png

逻辑运算符

逻辑运算符对其操作数求值,并返回一个值,该值指示求值结果是真还是假(true or false)。例如,运算a && b测试a和b是否都为真,如果两个操作数都为真,则运算符返回真。否则,运算符返回false。

逻辑运算符返回值。SystemVerilog没有内置的true或false布尔值。相反,逻辑运算符的返回使用逻辑值1’b1(一个一位宽的逻辑l)表示真,1’b0表示假。逻辑运算符还可以返回1’bx,指示仿真无法确定实际逻辑门的评估结果是否为真或假的模糊条件。

判断一个表达式是真是假。要确定操作数是真是假,SystemVerilog使用以下规则:

  • 如果所有位均为0,则操作数为假
  • 如果所有位均为1,则操作数为真
  • 如果所有位均为X或Z,且没有位为1,则操作数未知X

表5-1列出了RTL综合编译器普遍支持的逻辑运算符。

表5-11:RTL建模的逻辑运算符

pYYBAGPkpkSANdXrAADSr4eViwU021.png

逻辑求反运算符通常被称为“not运算符”,它是“not true”的缩写。

逻辑运算符通过对每个操作数进行归约OR来执行其运算,从而产生一个1位结果。然后对该结果进行求值,以确定其为真还是假。对于not运算符,1位的结果首先被反转,然后求值为真或假。

表5-12和5-13显示了这些逻辑运算符对几个示例值的结果。

表5-12:逻辑AND and OR运算的示例结果

pYYBAGPkpnCAHjVOAAGAvWQPM9U423.png

表5-13:逻辑求反运算的示例结果

poYBAGPkpoGAOYXjAAFiZF8FZ0U483.png

逻辑求反运算符(!)和按位反转运算符(~)之间的区别

练习题目《HDLBits: 在线学习 SystemVerilog(一)-Problem 2-6》Problem 4

应注意不要混淆逻辑求反运算符(!)以及按位反转运算符(~)。求反运算符对其操作数执行真/假求值,并返回表示真、假或未知结果的1位值。按位反转运算符对操作数的每一位(补码)执行逻辑反转,并返回与操作数相同位宽的值。

在某些操作中,这些操作的结果恰好相同,但在其他操作中,它们返回的值非常不同。当运算符与决策语句一起被错误使用时,这种差异可能导致错误代码。考虑下面的例子:

poYBAGPkpoyAYuOLAAD7SenzQ2w554.png

前面代码片段的最后两行之所以不同,是因为这两个运算符的工作方式不同——逻辑求反运算符(!)通过将两位相加或相减,对2位选择执行真/假计算,然后反转1位结果,按位反转运算符(~)只反转2位选择向量的每一位的值,并返回2位结果。if语句然后对2位向量进行真/假测试,该向量的计算结果为真,因为反转后的值仍有一位设置为1。

最佳实践指南5-1
使用按位反转运算符反转值的位,不要使用按位反转运算符对逻辑求反运算符求反。相反,使用逻辑求反运算符来否定真/假测试的结果。不要使用逻辑求反运算符反转值。
最佳实践指南5-2
仅使用逻辑求反运算符求反来测试标量(1位)值,而不是 对向量执行真/假测试。

如果向量的任何位为1,逻辑运算将返回true,这可能会导致在测试特定位时出现设计错误。计算向量值时,使用等式或关系运算符测试可接受的值。

示例5-7说明了一个小型RTL模型,该模型使用逻辑NOT、逻辑AND和逻辑OR运算符。该设计是一个逻辑比较器,如果两个数据值中的任何一个在可配置的值范围内,则设置一个flag。

示例5-7:使用逻辑运算符:当值在某个范围内时设置flag

poYBAGPkpp-AIiNYAAHodulFuHs131.png

图5-7显示了示例5-7中的RTL模型综合结果

图5-7:示例5-7的综合结果:逻辑运算符(范围内比较)

poYBAGPkpq6AdRsxAALenHpaj_E942.png

不可综合的逻辑运算符

SV-2009增加了两个额外的逻辑运算符,它们是蕴涵和等价运算符,在本文编写时RTL综合编译器通常不支持这些运算符。表5-14列出了这两个运算符的标记和描述。

表5-14:不可综合逻辑运算符

pYYBAGPkpriAQUdWAAC9Pw7X9aA902.png
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 操作
    +关注

    关注

    0

    文章

    43

    浏览量

    18870
  • 逻辑
    +关注

    关注

    2

    文章

    833

    浏览量

    29462
  • 运算符
    +关注

    关注

    0

    文章

    172

    浏览量

    11078
收藏 人收藏

    评论

    相关推荐

    单片机的逻辑运算符和位运算符是什么?数字电路中的常用符号

    “真”就是其它一切“非 0 值”。然后,我们来具体分析一下几个主要的逻辑运算符。我们假定有 2 个字节变量:A 和 B,二者进行某种逻辑运算后的结果为 F。以下逻辑运算符都是按照变量整体值进行
    的头像 发表于 10-03 08:50 2.7w次阅读
    单片机的<b class='flag-5'>逻辑运算符</b>和位<b class='flag-5'>运算符</b>是什么?数字电路中的常用符号

    Bug之逻辑运算符优先级分享!

    发现原来是运算符优先级的问题;看下面的图可以知道,==的优先级高于 & ,再看上面那段代码。。。发现了什么。。。。。。。天呐,,,可把我害苦了。。这也告诉我们,如果对优先级不全熟悉的话,那么尽量加括号来限制优先级,养成好习惯对减少Bug是多么重要啊!在此分享,希望能吸取教训;
    发表于 10-28 20:31

    逻辑运算符是什么

    逻辑运算符:与或非条件结构if -else及其嵌套循环结构whilefordo-while
    发表于 07-14 07:50

    逻辑电路与逻辑运算符

    一、逻辑电路与逻辑运算逻辑运算符:(1)按变量整体值进行运算逻辑与(&&)逻辑或(||)
    发表于 07-16 10:51

    【通信专栏】附录一:STM32单片机C语言基础/逻辑运算/按位运算/结构体/宏定义 精选资料分享

    在单片机开发中,总有一些C语言基础知识是常常用到的而我们又不易掌握的,今天以STM32单片机为例,总结一下那些常用的C语言基础知识,例如逻辑运算符,结构体,宏定义以及按位运算符逻辑运算符逻辑
    发表于 07-21 08:28

    Bitwise 逻辑运算符进行设计

    锁定。  AND Bitwise 运算符  摄像头滑块的主要位运算符是 AND。该运算器使用 C 语言编程中的安培 (&) 符号,使用图 1 中的真值表。  图 1
    发表于 04-02 17:39

    【verilog每日一练】基本逻辑运算符的使用

    用组合逻辑实现以下运算
    发表于 08-11 10:32

    C语言中的逻辑运算符是怎么样的

    C语言提供了一组逻辑运算符:或(||)、且(&&)、非(!),分别对应于命题逻辑中的 OR、AND、NOT运算
    的头像 发表于 02-20 16:25 4055次阅读

    逻辑运算符与表达式

    在C语言中,我们通常会进行真值与假值的判断,这时我们就需要用到逻辑运算符逻辑表达式。如果表达式的值不为0,则通通返回为真值。只有当表达式的值为0时,才会返回假值。
    的头像 发表于 02-21 15:16 2115次阅读
    <b class='flag-5'>逻辑运算符</b>与表达式

    逻辑运算符与表达式

    逻辑运算符与位逻辑表达式可以实现位的编辑,比如位的清零、设置、取反和取补等操作。使用位逻辑运算符与位逻辑表达式可以在不使用汇编的情况下实现部分汇编的功能
    的头像 发表于 02-21 15:22 1238次阅读
    位<b class='flag-5'>逻辑运算符</b>与表达式

    C语言逻辑运算符优先次序

    有3种逻辑运算符:与(AND),或(OR),非(NOT)。在basic和Pascal等语言可以在程序中直接用and,or,not作为逻辑运算符。在C语言中不能再程序中直接使用,而是用其他符号代替。
    的头像 发表于 03-09 10:49 3072次阅读

    KUKA机器人的逻辑运算符

    逻辑运算符用于布尔变量、常数和简单的、借助比较运算符构成的逻辑表达式的逻辑运算
    发表于 07-21 10:06 2503次阅读
    KUKA机器人的<b class='flag-5'>逻辑运算符</b>

    C语言中逻辑运算符的使用方法及优先级关系

    逻辑运算符是用来比较和操作布尔值的运算符
    发表于 08-21 14:46 4218次阅读
    C语言中<b class='flag-5'>逻辑运算符</b>的使用方法及优先级关系

    verilog的逻辑运算符

    写在前面 之前曾经整理过verilog的各类运算符的表达方式,但是在学习的过程中并未深入研究关于逻辑运算符的相关知识,导致在实际使用过程中错误频出,下面是我从网络上整理的相关verilog的逻辑运算符
    的头像 发表于 09-21 10:07 2332次阅读
    verilog的<b class='flag-5'>逻辑运算符</b>

    逻辑运算符两侧运算对象的数据类型是

    逻辑运算符是编程中常用的运算符之一,用于判断两个表达式之间的关系,并返回布尔值结果。在逻辑运算中,两侧运算对象的数据类型可以是任意类型。 首先,我们需要了解
    的头像 发表于 11-30 14:15 1729次阅读