这个错误一直困扰着我,我不知道该怎么办。我在其他代码中得到了同样的错误,但是这个错误很简单,所以也许更容易找出问题所在。
这是一个频率选择器,如果开关(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
谢谢。
答案 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块中。
希望这有帮助。