意外的if-vhdl
这个错误已经困扰我很久了,我不知道该怎么办。我在其他代码中也遇到同样的错误,但这是一个简单的错误,所以可能更容易找出问题所在 这是一个频率选择器,如果开关(clau)打开,频率就会改变意外的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
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
在电路运行时发生变化,此设计也会导致随机长度的短时钟脉冲。该缺陷使得任何使用结果时钟的同步逻辑都完全不可靠。