要求在else之后结束的未知Verilog错误 始终@(posedge clk或negedge rst) 开始 如果(~rst) Tp
这可能是将您的要求在else之后结束的未知Verilog错误 始终@(posedge clk或negedge rst) 开始 如果(~rst) Tp,verilog,Verilog,这可能是将您的开始与结束相匹配-它们就像C/C++中的大括号({和}),因为它们需要与所捕获的结构相匹配。因此,将它们相应地缩进是有帮助的 正确缩进后,始终块如下所示: always@(posedge clk or negedge rst) begin if(~rst) Tp <= 0 ; else begin if(g3 == 255) sum_x <= sum_x + x3; else
开始
与结束
相匹配-它们就像C/C++中的大括号({
和}
),因为它们需要与所捕获的结构相匹配。因此,将它们相应地缩进是有帮助的
正确缩进后,始终
块如下所示:
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
if (<condition>)
a = 1;
b = 1;
end
if()
开始
a=1;
b=1;
结束
在第一示例中,b=1无论if
的结果如何,代码>行始终执行。在第二种情况下,这两条语句都取决于if
的结果
If
(和else
)仅适用于它后面的第一条语句,或者如果第一条“语句”是begin
,则适用于一组语句。使用begin
和end
仅对由于if
而运行的语句进行分组,就像在第二个例子中一样。我遇到的唯一问题是当我添加一个新的else语句时,该语句将要求我添加另一个END,如果您试图将else应用于该END,则该END是if
行吗?只有当我尝试添加else时才会弹出错误(49)如果(x3==200)r3=200,则开始;g3=200;b3=0;如果
要将其他
匹配到哪个?由于您的HDL是在您的问题中编写的,除了第44行的if
之外,每个if
都有一个匹配的else
。在第46行以外的位置添加一个else
,意味着in没有一个if
要匹配。我尝试了你的方法,并按照你说的方式添加了新的语句,但问题仍然存在,相同的问题并不重要,这是完全相同的问题。问题可能是相同的,但我尝试了解决方案,但它没有像你在上面看到的那样起作用。我使用你教我的方法,在每个开始添加一个结束,但它没有解决它。这就是为什么我问使用相同的标题,如果这导致误解,我通常可以删除旧帖子,if
和else
仅适用于一条语句。您使用的begin
和end
就像C/C++或Java中的大括号({
和}
)一样-它们定义了要执行的代码块。然而,它们必须正确匹配,这一点很重要——因此我在下面建议使用正确的缩进。
begin
if (<condition>)
a = 1;
b = 1;
end
if (<condition>)
begin
a = 1;
b = 1;
end