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
这用于阈值,我希望它能够检测人体皮肤颜色并将其变为白色而其他颜色变为黑色。
答案 0 :(得分:2)
有几个问题:
if-else
中的条件应该取决于输入,而不是输出。{}
之后需要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
答案 1 :(得分:2)
我同意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