在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: PayPal

[讨论] 对于1bit信号,例如复位信号取反,使用 ~ 还是 !

[复制链接]
发表于 2024-1-15 10:17:25 | 显示全部楼层
我都是习惯性用!,这两个一个是逻辑取反,一个是按位取反。1bit情况下混用没啥问题。多比特情况下就需要区分了
发表于 2024-1-26 09:50:59 | 显示全部楼层


767781537 发表于 2022-7-29 17:46
导师教的,作为条件使用的话用! , 作为最终的输出信号的话用~ , 但是我还没感到区别 ...


你导师骗你的,你要知道他两个都表示的是反相器,DC不会因为你用~还是!而有所变化
发表于 2024-2-2 11:19:48 | 显示全部楼层
我感觉设计数字电路的话,不应该出现使用!来取反的场景,任何时候都应该使用~
因为作为一个电路来说,如果是一个多bit信号,那么对其进行逻辑判定本来其实就是不合理的,非0即1应该是一个对于软件设计人员来说的抽象概念,而作为数字电路设计,我们应该任何时候都清楚信号的位宽,如果信号是1位,那么用~取反,如果不是1位,应该首先通过其它运算符将其变成1位,然后使用~取反,这样才最能表达出你的电路要设计成什么样,比如一个counter,我想表达当counter不等于xyz的时候,做一件事情,那么我会写if (~(counter==xyz)),或者写成if (counter != xyz),第一种写法首先通过counter == xyz把值变成一个1bit信号,然后再通过~取反,第二种写法直接用!=产生1bit信号,但是我不会写if (!(counter == xyz)),虽然从实际效果上和if (~(counter==xyz))相同,但是我认为对数字电路设计者来说,使用~可以体现你对电路的设计和理解

点评

the best answer  发表于 2024-3-27 08:22
发表于 2024-4-10 10:30:27 | 显示全部楼层


767781537 发表于 2022-7-29 17:46
导师教的,作为条件使用的话用! , 作为最终的输出信号的话用~ , 但是我还没感到区别 ...


赞同。!是逻辑运算符,适合用在条件判断语句,~可以理解为算术运算的取反,一般if语句条件判断用!取反。这样只是更严谨一些吧,仿真综合的时候没有明显的区别
发表于 2024-4-22 16:12:19 | 显示全部楼层
其实verilog最基本的语法书应该说的挺明确的,~跟|、&一样是位操作符,!跟||、&&一样是逻辑操作符。
对于单比特的取反而言,不论用~还是!结果都是一样的。
但是对于多比特就不一样了:
如果使用位操作符,其实就是对数据的每一位进行取反、与、或的逻辑,输出跟输入的位宽是一样的;
而如果使用逻辑操作符,编译器会认为全0的数是False,非全0的数就是True,按照这个逻辑去做非、与、或逻辑,最后输出的就是单比特的True或False
搞清楚编译器的这个逻辑,确保最终编译或综合出来是你自己想要的结果,这个是最基本要求。但是我们一般会要求一个逻辑中使用的操作符要一致,要么你全都使用位操作符,要么全部都是用逻辑操作符
发表于 2024-4-23 10:51:15 | 显示全部楼层
哇,从来没想过这么深,从来都是结果是对的就是好的。反正有formality,LEC一类的工具把关呢。

一开始,觉得有点孔乙己问回字有几个写法了。

仔细想想,Verilog是HDL,还是语言范畴,跟最终的数字电路还是不一样的。DC的功能就是把HDL的想法用数字电路去映射。所以在HDL,条件判断觉得还是用!比较好,是反映的语言的本意。当然,对一比特来说,数字电路就是用反相器实现的。所以在条件判断,我还是觉得应该用!
发表于 2024-6-6 09:21:05 | 显示全部楼层


yuanpin318 发表于 2024-4-23 10:51
哇,从来没想过这么深,从来都是结果是对的就是好的。反正有formality,LEC一类的工具把关呢。

一开始,觉 ...


”觉得有点孔乙己问回字有几个写法了“,你有这种想法是因为你可能仅仅把Verilog当作语法学习了。Verilog本质上是对数字电路的建模,所以搞清楚Verilog语法的底层建模逻辑是必要的。没事可以多看看IEEE的Verilog Spec吧
发表于 2024-8-16 15:59:01 | 显示全部楼层


767781537 发表于 2022-7-29 17:46
导师教的,作为条件使用的话用! , 作为最终的输出信号的话用~ , 但是我还没感到区别 ...


我看很多代码是这么用的 当肌肉记忆了
发表于 2024-9-3 22:22:51 | 显示全部楼层
从语言角度来说,~是按位取反,作用于1-bit信号得到的是1-bit信号(0/1),!是逻辑取反,作用于1-bit信号得到的是逻辑值(真/假),如果~的结果用在需要逻辑值的地方,会把0值作为“假”,把非0值作为“真”,转换为逻辑值。
从实现角度来说,在1-bit信号情况下~和!综合出的电路是一样的,所以综合的结果没有区别,建议按照个人习惯,在同一个设计中使用一致的运算符,不建议随便混用。

点评

  发表于 2024-9-4 12:18
发表于 2024-10-10 15:32:32 | 显示全部楼层
讨论这问题有什么意义吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-25 15:25 , Processed in 0.025000 second(s), 11 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表