【问题标题】:If statement using vhdl使用 vhdl 的 if 语句
【发布时间】:2015-03-07 07:58:53
【问题描述】:

我正在使用 planahead 软件使用 vhdl 设计计数器,无论如何我正在使用 if 语句,但它给出了很多错误。计数器的目的是从 1 到 10 进行升序/降序计数,反之亦然。在升序的情况下,当它到达 9 时我重置输出以从 0 再次计数。如果降序在它得到 0 时重置输出并将 9 作为新值。我正在使用板上的开关按钮在升序/降序计数之间切换。在 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". 

【问题讨论】:

  • 对于else,您不能在没有end if 的情况下使用else 后跟elsif。但从错误消息看来,您尝试在错误的地方使用 if 语句,可能在进程之外。请贴出原始源代码。
  • 正确格式化这段代码,错误可能很明显。

标签: if-statement vhdl fpga xilinx


【解决方案1】:

正如Morten Zilmer 所指出的,您需要以 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)

在代码中

【讨论】:

  • 行 r_next '9') 是错误的。如果使用 numeric_std 包,正确的表达式是 r_next
  • 是的,我怎么忘记了 (others=>'9');。 Itz 完全不正确。谢谢你,我要试试这个代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多