使用 vhdl 的 If 语句
If statement using vhdl
我正在使用 planahead 软件使用 vhdl 设计计数器,无论如何我正在使用 if 语句但它给出了很多错误。计数器的目的是从 1 到 10 计数 Ascending/Descending,反之亦然。在 Ascending 的情况下,当它达到 9 时我重置输出以从 0 再次计数。如果 Descending 在它获得 0 时重置输出并将 9 作为新值。我正在使用板上的切换按钮在 Ascending/Descending 计数之间切换。在 if 语句和错误下方。我不知道我是否在写表上使用它。如果有人有想法就完美了。
Line:27- if(inc_dec='1') then
Line:28 if (r_reg=M-1) then
r_next<=(others=>'0')
Line:30 else r_reg+1;
Line: 31 elsif (inc_dec='0')then
Line:32 if (r_reg=M-10) then
r_next<=(others=>'9')
Line:34 else
r_reg-1;
end if;
end if;
end if;
错误:
Line:27 [HDLCompiler 806] Syntax error near "if".
Line:28[HDLCompiler 806] Syntax error near "then".
Line:30[HDLCompiler 806] Syntax error near "else".
Line:31[HDLCompiler 806] Syntax error near "then".
Line:32[HDLCompiler 806] Syntax error near "then".
Line:34[HDLCompiler 806] Syntax error near "else".
正如 Morten Zilmer 所指出的,您需要使用 end if 来终止 if/else。也有一些丢失的分号。下面的代码应该可以工作。
if (inc_dec='1') then
if (r_reg=(M-1)) then
r_next <= (others=>'0');
else
r_reg+1;
end if;
elsif (inc_dec='0') then
if (r_reg=(M-10)) then
r_next <= to_unsigned(9, r_next'length);
else
r_reg-1;
end if;
end if;
更新:Jonathan Drolet 是对的。已更改
r_next <= (others=>'9');
到
r_next <= to_unsigned(9, r_next'length)
代码中
我正在使用 planahead 软件使用 vhdl 设计计数器,无论如何我正在使用 if 语句但它给出了很多错误。计数器的目的是从 1 到 10 计数 Ascending/Descending,反之亦然。在 Ascending 的情况下,当它达到 9 时我重置输出以从 0 再次计数。如果 Descending 在它获得 0 时重置输出并将 9 作为新值。我正在使用板上的切换按钮在 Ascending/Descending 计数之间切换。在 if 语句和错误下方。我不知道我是否在写表上使用它。如果有人有想法就完美了。
Line:27- if(inc_dec='1') then
Line:28 if (r_reg=M-1) then
r_next<=(others=>'0')
Line:30 else r_reg+1;
Line: 31 elsif (inc_dec='0')then
Line:32 if (r_reg=M-10) then
r_next<=(others=>'9')
Line:34 else
r_reg-1;
end if;
end if;
end if;
错误:
Line:27 [HDLCompiler 806] Syntax error near "if".
Line:28[HDLCompiler 806] Syntax error near "then".
Line:30[HDLCompiler 806] Syntax error near "else".
Line:31[HDLCompiler 806] Syntax error near "then".
Line:32[HDLCompiler 806] Syntax error near "then".
Line:34[HDLCompiler 806] Syntax error near "else".
正如 Morten Zilmer 所指出的,您需要使用 end if 来终止 if/else。也有一些丢失的分号。下面的代码应该可以工作。
if (inc_dec='1') then
if (r_reg=(M-1)) then
r_next <= (others=>'0');
else
r_reg+1;
end if;
elsif (inc_dec='0') then
if (r_reg=(M-10)) then
r_next <= to_unsigned(9, r_next'length);
else
r_reg-1;
end if;
end if;
更新:Jonathan Drolet 是对的。已更改
r_next <= (others=>'9');
到
r_next <= to_unsigned(9, r_next'length)
代码中