未知的 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
这个是用来做阈值的,我希望它能检测出人的肤色,然后把它变成白色,其他的变成黑色。
有几个问题:
- 您在
if-else
中的条件可能应该取决于输入,而不是输出。
- 就像在 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
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
这个是用来做阈值的,我希望它能检测出人的肤色,然后把它变成白色,其他的变成黑色。
有几个问题:
- 您在
if-else
中的条件可能应该取决于输入,而不是输出。 - 就像在 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