未知的 Verilog 错误要求 End after else
Unknown Verilog error asking for End after else
always@(posedge clk or negedge rst)
begin
if(~rst)
Tp <= 0 ;
else
begin
if(g3 == 255)
sum_x <= sum_x + x3;
else
begin
if((x3 == 0) && (y3 == 0))
Tp<=0;
sum_x=0;
x4 = quotient1;
else
begin
if (x3 == 200)
r4 = 200;
g4 = 200;
b4 = 0;
end
end
end
end
endmodule
我的错误与我问的上一个问题不同,后者是通过为每个 begin
添加 end
来解决的。
我遵循了 wilcroft 编码方式,问题仍然存在
这很可能将您的 begin
与 end
匹配 - 它们就像 C/C 中的大括号({
和 }
) ++,因为它们需要与它们捕获的结构相匹配。因此,相应地缩进它们会很有帮助。
正确缩进后,您的 always
块如下所示:
always@(posedge clk or negedge rst) //Line 34
begin
if(~rst)
Tp <= 0 ; //Line 37
else
begin
if(g3 == 255) //Line 40
sum_x <= sum_x + x3;
else
begin //Line 43
if((x3 == 0) && (y3 == 0))
Tp<=0;
sum_x=0; //Line 46
x4 = quotient1;
end
end //Line 49
end
endmodule
在第 49 行放置一个 else
(并相应地将 end
向下移动)给出了您看到的错误,因为当前块中的 if 语句(第 39-49 行,前-insertion) 第 42 行已经有一个 else
子句!
使用适当的缩进,并仔细检查第 49 行是否在它应该去的地方,并且可能在你检查它的时候验证其他 if
,只是为了确定 :)
附录:
重要的是要注意,在 Verilog 中:
begin
if (<condition>)
a = 1;
b = 1;
end
不同于
if (<condition>)
begin
a = 1;
b = 1;
end
在第一个示例中,b = 1;
行 始终 执行,而不管 if
的结果如何。在第二个中,两个语句都取决于 if
.
的结果
If
(和 else
)仅适用于它后面的第一个语句,或者如果第一个 "statement" 是 begin
的一组语句。使用 begin
和 end
仅将语句 运行 作为 if
的结果进行分组,如第二个示例。
always@(posedge clk or negedge rst)
begin
if(~rst)
Tp <= 0 ;
else
begin
if(g3 == 255)
sum_x <= sum_x + x3;
else
begin
if((x3 == 0) && (y3 == 0))
Tp<=0;
sum_x=0;
x4 = quotient1;
else
begin
if (x3 == 200)
r4 = 200;
g4 = 200;
b4 = 0;
end
end
end
end
endmodule
我的错误与我问的上一个问题不同,后者是通过为每个 begin
添加 end
来解决的。
我遵循了 wilcroft 编码方式,问题仍然存在
这很可能将您的 begin
与 end
匹配 - 它们就像 C/C 中的大括号({
和 }
) ++,因为它们需要与它们捕获的结构相匹配。因此,相应地缩进它们会很有帮助。
正确缩进后,您的 always
块如下所示:
always@(posedge clk or negedge rst) //Line 34
begin
if(~rst)
Tp <= 0 ; //Line 37
else
begin
if(g3 == 255) //Line 40
sum_x <= sum_x + x3;
else
begin //Line 43
if((x3 == 0) && (y3 == 0))
Tp<=0;
sum_x=0; //Line 46
x4 = quotient1;
end
end //Line 49
end
endmodule
在第 49 行放置一个 else
(并相应地将 end
向下移动)给出了您看到的错误,因为当前块中的 if 语句(第 39-49 行,前-insertion) 第 42 行已经有一个 else
子句!
使用适当的缩进,并仔细检查第 49 行是否在它应该去的地方,并且可能在你检查它的时候验证其他 if
,只是为了确定 :)
附录: 重要的是要注意,在 Verilog 中:
begin
if (<condition>)
a = 1;
b = 1;
end
不同于
if (<condition>)
begin
a = 1;
b = 1;
end
在第一个示例中,b = 1;
行 始终 执行,而不管 if
的结果如何。在第二个中,两个语句都取决于 if
.
If
(和 else
)仅适用于它后面的第一个语句,或者如果第一个 "statement" 是 begin
的一组语句。使用 begin
和 end
仅将语句 运行 作为 if
的结果进行分组,如第二个示例。