Verilog 混合布尔和位运算符

问题描述 投票:0回答:1

这个结构在 verilog 中会做什么?

z= a && (b[1:0]=0) && c

哪里

a:电线

c:[3:0] 线

z:[3:0] 线

看起来像是布尔运算和按位运算的混合?

verilog
1个回答
0
投票

正如 dave_59 提到的,您的代码中有语法错误。假设您的意思是

z = a && (b[1:0] == 0) && c
,则相当于
z = a && (b[1:0] == 0) && |c
。这意味着如果
z=0001
a
并且所有
1
位都是
b
并且
0
的至少一个位是
c
,则意味着
1
。否则
z=0000

接下来,我创建模块及其测试平台,并打印模块的真值表。希望有用。

module stackoverflow_78202191(a, b, c, z);
  input a;
  input [1:0] b;
  input [3:0] c;

  output [3:0] z;
  
  assign z = a && (b[1:0] == 0) && c;
    
endmodule

module stackoverflow_78202191_tb();

  reg a;
  reg [1:0] b;
  reg [3:0] c;
  wire [3:0] z;

  stackoverflow_78202191 uut (
    .a(a),
    .b(b),
    .c(c),
    .z(z)
  );

  initial begin
    a = 0;
    repeat(4) #128 a = ~a;
  end

  initial begin
    b = 2'b00;
    repeat(8 * 2) #32 b = b + 1;
  end

  initial begin
    c = 4'b0000;
    repeat(128 * 2) #2 c = c + 1;
  end

  initial
    begin
      #1;
      repeat(128 * 2) #2 $display("uut(%b, %b, %b) = %b", a, b, c, z);
      $finish ;
    end

endmodule
© www.soinside.com 2019 - 2024. All rights reserved.