意外的if-vhdl

意外的if-vhdl,vhdl,Vhdl,这个错误已经困扰我很久了,我不知道该怎么办。我在其他代码中也遇到同样的错误,但这是一个简单的错误,所以可能更容易找出问题所在 这是一个频率选择器,如果开关(clau)打开,频率就会改变 library IEEE; use IEEE.numeric_bit.ALL; -- Uncomment the following library declaration if using -- arithmetic functions with Signed or Unsigned values --us

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

这是一个频率选择器,如果开关(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;
IEEE库;
使用IEEE.numeric_bit.ALL;
--如果使用,请取消注释以下库声明
--具有有符号或无符号值的算术函数
--使用IEEE.NUMERIC_STD.ALL;
--如果正在实例化,请取消对以下库声明的注释
--此代码中的任何Xilinx原语。
--UNISIM图书馆;
--使用UNISIM.VComponents.all;
实体选择器_frequencia为
端口(unHz:以位为单位;
centHz:以位为单位;
时钟:输出位;
clau:以位为单位);
终端选择器_频率;
频率选择器的结构是
开始

if(clau=“0”)then Clock我不是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;
选择器的架构行为\u frequencia是
开始
fqsel:进程(unHz、centHz、时钟、clau)
开始
如果(clau='0'),则

时钟我不是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;
选择器的架构行为\u frequencia是
开始
fqsel:进程(unHz、centHz、时钟、clau)
开始
如果(clau='0'),则

Clock您正在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;
//这是分配,您正在将'clau'分配给0,然后将其签入'if'

if(clau=“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;
//这是分配,您正在将'clau'分配给0,然后将其签入'if'

if(clau=“0”)then Clock正如Alex指出的,if语句需要位于进程块内。此外,VHDL不是C…您不应该将parens()放在条件的周围,或者它看起来像一个过程/函数调用或一个信号范围,例如:my_bus(7到0),但这是一个语法错误,因为if是一个保留字。尝试:

process (clau, unHz, centHz)
begin
  if clau = '0' then 
    Clock <= unHz;
  else 
    Clock <= centHz;
  end if;
end process;
过程(clau、unHz、centHz)
开始
如果clau='0',则

时钟正如Alex指出的,if语句需要位于进程块内。此外,VHDL不是C…您不应该将parens()放在条件的周围,或者它看起来像一个过程/函数调用或一个信号范围,例如:my_bus(7到0),但这是一个语法错误,因为if是一个保留字。尝试:

process (clau, unHz, centHz)
begin
  if clau = '0' then 
    Clock <= unHz;
  else 
    Clock <= centHz;
  end if;
end process;
过程(clau、unHz、centHz)
开始
如果clau='0',则


时钟试过了,它不工作了。无论如何,我很确定“=”是用来比较的,而“你有可能有一些行尾问题吗?”?只是一个猜测。这家伙也有同样的问题:(阅读Elephantus的评论)VHDL中没有
==
。您这里的主要问题是
clau
是位,而不是位向量,因此必须与
'0'
而不是
“0”
进行比较。如果您尝试了它,它将不起作用。无论如何,我很确定“=”是用来比较的,而“你有可能有一些行尾问题吗?”?只是一个猜测。这家伙也有同样的问题:(阅读Elephantus的评论)VHDL中没有
==
。这里的主要问题是
clau
是位,而不是位向量,因此如果带括号的
不是语法错误,则必须与
'0'
而不是
'0'
进行比较
if(clau='0')则
在这里完全可以接受(但风格不好)。当然,您是对的……您可以使用parens强制if条件的运算符顺序。我倾向于在不必这样做的地方编写代码,所以我忘了这是允许的。带括号的
if
不是语法错误
if(clau='0')则
在这里完全可以接受(但风格不好)。当然,您是对的……您可以使用parens强制if条件的运算符顺序。我倾向于在不必这样做的地方编写代码,所以我忘了这是允许的。您这里的问题是
clau=“0”
,它必须是
clau=“0”
,因为clau是一个位向量,而不是一个位向量。谢谢,我没有真正注意类型。但是,在这种情况下,它会给出“意外的如果”,这有点奇怪?您这里的问题是
clau=“0”
,它必须是
clau='0'
,因为clau是一个位向量,而不是一个位向量。谢谢,我没有真正注意类型。有点奇怪的是,它会给出“意外的如果”在这种情况下,尽管如此?顺便说一句,即使你得到了这个工作,这种设计将导致随机长度的短时钟脉冲,如果你的选择信号
clau
在电路运行时发生变化。此缺陷使得任何使用合成时钟的同步逻辑都完全不可靠。顺便说一句,即使您能正常工作,如果您的选择信号
clau
在电路运行时发生变化,此设计也会导致随机长度的短时钟脉冲。该缺陷使得任何使用结果时钟的同步逻辑都完全不可靠。