未知的 Verilog 错误要求 End after else

Unknown Verilog error asking for End after else

module blank(
  input[7:0]r1,
  input[7:0]g1,
  input[7:0]b1,
  input en1,
  output reg[7:0] r2,
  output reg[7:0] g2,
  output reg[7:0] b2,
  output en2
);

always @(*)
begin 
  if ( 48 < r2 < 255  &&  0 < g2 < 223  && 0  < b2 < 196 ) 
     r2 = 255;
     g2 = 255;
     b2 = 255;
  else   
     r2 = 0;
     g2 = 0;
     b2 = 0;
end
endmodule

这个是用来做阈值的,我希望它能检测出人的肤色,然后把它变成白色,其他的变成黑色。

有几个问题:

  1. 您在 if-else 中的条件可能应该取决于输入,而不是输出。
  2. 就像在 C 中一样,Java 等。在 if-else 之后你需要 {},在 Verilog 中你需要 begin-end 才能执行多个操作.

您的代码应如下所示:

always @(*)
begin 
  if ( 48 < r1 &&  ...  && b1 < 196 ) begin
    r2 = 255;
    g2 = 255;
    b2 = 255;
  end else begin   
    r2 = 0;
    g2 = 0;
    b2 = 0;
  end
end

同意Qui的意见,但还有一个问题。看起来您是一名 Python 程序员并且认为 48 < r1 < 255 会检查 r1 是否在 48 和 255 之间。这在 Verilog 中不起作用。相反,它会检查 r1 是否 > 48 并从中产生 0 或 1。然后它会检查 0 或 1 与 255 的关系,这将始终为真。我重写了等式:

always @(*)
begin 
  if ( 48 < r1 && r1 < 255  &&  0 < g1 && g1 < 223  && 0 < b1 && b1 < 196 ) begin
    r2 = 255;
    g2 = 255;
    b2 = 255;
  end else begin   
    r2 = 0;
    g2 = 0;
    b2 = 0;
  end
end