多输入和门的行为设计

Behavioral designing of a multiple input and gate

我试图连接 3 个 2 对 1 与门,以使用更行为化的设计获得 4 对 1 与门。 我不断收到错误,无法编译模块。

有人可以帮忙吗? (我知道使用 y = &x 的可能性,但我正在尝试不同的方法 :))

module and4_gateb(x, y);
  input [3:0] x;
  reg y;
  output y;
  integer i;
  
  y = x[0];
  initial begin
    for(i=1; i<4; i= i+1) begin
      y = y&x[i];
    end
  end
endmodule

您收到这些错误消息是因为您将 y 声明为 reg,并且您需要在 initial 等程序块内对 reg 进行赋值.

在我修复了那个编译错误之后,我也收到了一个警告,因为你需要先将 y 声明为 output,然后再将其声明为 reg:

module and4_gateb(x, y);
  input [3:0] x;
  output y;
  reg y;
  integer i;
  
  initial begin
    y = x[0];
    for(i=1; i<4; i= i+1) begin
      y = y&x[i];
    end
  end
endmodule

这是一种使用 ANSI 样式声明来简化端口声明的方法:

module and4_gateb (
  input [3:0] x,
  output reg y
);
  integer i;
  
  initial begin
    y = x[0];
    for(i=1; i<4; i= i+1) begin
      y = y&x[i];
    end
  end
endmodule

这种方式不太容易出错,因为你只需要提到每个信号一次(而不是 2 或 3 次)。