如果vhdl意外

时间:2012-11-03 17:43:26

标签: vhdl

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

这是一个频率选择器,如果开关(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;

我得到的错误就是这个:

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

谢谢。

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

正如Alex指出的那样,你的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;

答案 2 :(得分: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块中。

希望这有帮助。