Verilog中的逻辑运算符与按位运算符的区分

举报
李锐博恩 发表于 2021/07/15 03:18:37 2021/07/15
【摘要】 我们在写Verilog的时候经常会用到的是低电平复位问题,例如: always@(posedge clk or negedge rst_n) begin if(~rst_n) ...; else ...; end 由于rst_n是一位的,所以使用逻辑非!,或者是按位非~,效果是一样的,但是如果遇到的是向量呢? 逻辑非和按位非就不能混用了。包括逻辑或||,按位或|等。 ...

我们在写Verilog的时候经常会用到的是低电平复位问题,例如:


  
  1. always@(posedge clk or negedge rst_n) begin
  2. if(~rst_n) ...;
  3. else ...;
  4. end

由于rst_n是一位的,所以使用逻辑非!,或者是按位非~,效果是一样的,但是如果遇到的是向量呢?

逻辑非和按位非就不能混用了。包括逻辑或||,按位或|等。

二者之间的长相区别很明显,按位操作一般只有单个符号,例如:&,|,而逻辑是双的,如:&&,||。

下面给出一个例子:

Bitwise vs. Logical Operators

a和b是输入,out_or_bitwise和out_or_logic分别是按位或与逻辑或的结果。

out_not是a和b的按位取反,b在高位。

写出代码如下:


  
  1. module top_module(
  2. input [2:0] a,
  3. input [2:0] b,
  4. output [2:0] out_or_bitwise,
  5. output out_or_logical,
  6. output [5:0] out_not
  7. );
  8. assign out_or_bitwise = a | b;
  9. assign out_or_logical = a || b;
  10. assign out_not = {~b, ~a};
  11. endmodule



参考链接

 

文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。

原文链接:reborn.blog.csdn.net/article/details/99552725

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。