当前位置:   article > 正文

Verilog中&(按位与)与&&(逻辑操作符)的区别

Verilog中&(按位与)与&&(逻辑操作符)的区别

按位操作符用于直接操作整数的二进制位,而逻辑操作符则用于连接或比较布尔值,并控制程序的流程。本文详细介绍Verilog中按位与操作与逻辑操作符之间的区别,并通过相关代码示例和仿真波形演示其具体操作结果。

1 逻辑操作符

逻辑操作符有:·

●  &&(逻辑与)

●  ||(逻辑或)

●  !(逻辑非)

这些操作符在逻辑值0或1上操作。逻辑操作的结构为0或1。例如,假定:

crd ='b0; //0为假

Dgs='b1; //1为真

那么:

Crd &&Dgs 结果为0(假)

Crd || Dgs 结果为1(真)

!Dgs 结果为0(假)

对于向量操作,非0向量作为1处理。例如,假定:

A_Bus = 'b0110; B__Bus=b0100;那么:

A_Bus || B_Bus 结果为1

A_Bus && B_Bus 结果为1

并且:

!A_Bus 与!B_Bus的结果相同。

结果为0。

如果任意一个操作数包含x,结果也为x。

!x 结果为x

2 按位操作符

按位操作符有:

●  ~(一元非)

●  &(二元与)

●  |(二元或)

●  ^(二元异或)

●  .~^,^~(二元异或非)

这些操作符在输入操作数的对应位上按位操作,并产生向量结果。下表显示对于不同操作符按步操作的结果。

按位与
&与01XZ
00000
101XX
X0XXX
Z0XXX
按位或
|或01XZ
001XZ
11111
XX1XX
ZX1XX
按位异或
^异或01XZ
001XX
110XX
XXXXX
ZXXXX
按位异或非
^异或非01XZ
010XX
101XX
XXXXX
ZXXXX
按位非
~非01XZ
10XX

例如,假定,

A = 'b0110;

B = ‘b0100;

那么:

AIB 结果为0110

A&B 结果为0100

如果操作数长度不相等,长度较小的操作数在最左侧添0补位。例如,

'b0110 ^ 'b10000

与如下式的操作相同:

b00110 ^b10000

结果为'b10110。

3 仿真

为了对逻辑操作符和按位操作符有更明显的对比,这里编写相应代码,通过仿真观察逻辑操作符与按位操作符的实际区别。

代码:

  1. `timescale 1ns / 1ps
  2. //
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date: 2024/05/17 09:00:09
  7. // Design Name:
  8. // Module Name: and_test
  9. // Project Name:
  10. // Target Devices:
  11. // Tool Versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //
  21. module and_test(
  22. input clk,
  23. input [3:0] a,
  24. input [3:0] b,
  25. output [3:0] and_0,
  26. output [3:0] and_1,
  27. output [3:0] or_0,
  28. output [3:0] or_1,
  29. output [3:0] not_0,
  30. output [3:0] not_1,
  31. output [3:0] xor_0,
  32. output [3:0] xor_not_0
  33. );
  34. assign and_0 = a & b;
  35. assign and_1 = a && b;
  36. assign or_0 = a | b;
  37. assign or_1 = a || b;
  38. assign not_0 = !a;
  39. assign not_1 = ~a;
  40. assign xor_0 = a ^ b;
  41. assign xor_not_0 = a ~^ b;
  42. endmodule

仿真代码:

  1. `timescale 1ns / 1ps
  2. //
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date: 2024/04/17 11:51:13
  7. // Design Name:
  8. // Module Name: SIM
  9. // Project Name:
  10. // Target Devices:
  11. // Tool Versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //
  21. module SIM(
  22. );
  23. reg clk;
  24. reg [3:0] a;
  25. reg [3:0] b;
  26. wire [3:0] and_0;
  27. wire [3:0] and_1;
  28. wire [3:0] or_0;
  29. wire [3:0] or_1;
  30. wire [3:0] not_0;
  31. wire [3:0] not_1;
  32. wire [3:0] xor_0;
  33. wire [3:0] xor_not_0;
  34. and_test and_test(
  35. . clk(clk),
  36. . a(a),
  37. . b(b),
  38. . and_0(and_0),
  39. . and_1(and_1),
  40. . or_0(or_0),
  41. . or_1(or_1),
  42. . not_0(not_0),
  43. . not_1(not_1),
  44. . xor_0(xor_0),
  45. . xor_not_0(xor_not_0)
  46. );
  47. initial
  48. begin
  49. clk = 'b0;
  50. a = 4'b0010;
  51. b = 4'b1110;
  52. end
  53. always #5 clk = !clk;
  54. endmodule

仿真结果:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/594792
推荐阅读
相关标签
  

闽ICP备14008679号