2

这个错误困扰了我很久,我不知道该怎么办。我在其他代码中也遇到了同样的错误,但这个错误很简单,所以也许更容易找出问题所在。

这是一个频率选择器,如果开关(clau)打开,频率就会改变。

library IEEE;
use IEEE.numeric_bit.ALL; 

-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;

-- Uncomment the following library declaration if instantiating
-- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity selector_frequencia is
Port ( unHz : in bit ;
       centHz : in bit ;
       Clock : out bit;
          clau: in bit);
end selector_frequencia;

architecture Behavioral of selector_frequencia is

begin
if (clau = "0") then Clock <= unHz;
else Clock <= centHz;
end if;

end Behavioral;

我得到的错误是这个:

ERROR:HDLParsers:164 - "C:/Documents and Settings/Administrador/Escritorio/practica_digital/practica_digital/selector_frequencia.vhdl" 第 23 行。解析错误,意外 IF

谢谢你。

4

3 回答 3

3

我并不是真正的 VHDL 专家,但我相信您应该if在进程中使用以下语句:

architecture Behavioral of selector_frequencia is

begin

fqsel:PROCESS(unHz , centHz , Clock , clau)
BEGIN

  if (clau = '0') then
      Clock <= unHz;
  else
      Clock <= centHz;
  end if;

END PROCESS fqsel;

end Behavioral;
于 2012-11-03T17:53:28.690 回答
1

正如亚历克斯指出的那样,您的 if 语句需要在进程块内。此外,VHDL 不是 C ......你不应该把 parens () 放在条件周围,或者它看起来像一个过程/函数调用或一个信号范围,即:my_bus(7 downto 0) 但这是一个语法错误,因为如果是保留字。尝试:

process (clau, unHz, centHz)
begin
  if clau = '0' then 
    Clock <= unHz;
  else 
    Clock <= centHz;
  end if;
end process;

最后,在流程之外,您可以只使用条件信号分配,这是实现等效流程和 if 语句的简写方式:

Clock <= unHz when clau='0' else centHz;
于 2012-11-03T19:24:02.483 回答
0

您在 IF 子句中使用了赋值语句:

// This is assignment, you are assigning 'clau' to 0 and then checking it in 'if'
if (clau = "0") then Clock <= unHz;

// Try this, note the double '='
if (clau == "0") then Clock <= unHz;

赋值语句应该在一个 PROCESS 块中。

希望这可以帮助。

于 2012-11-03T18:50:42.437 回答