写了我的第一个VHDL代码,编译时Modelsim生成了这些错误
错误:E:\ Digital Logic \ ModelSim \ myxor.vhd(10):前缀运算符" xor"没有可行的条目。
**错误:E:\ Digital Logic \ ModelSim \ myxor.vhd(10):输入错误解析前缀表达式" xor"类型ieee.std_logic_1164.STD_LOGIC。
**错误:E:\ Digital Logic \ ModelSim \ myxor.vhd(11):VHDL编译器退出
我不明白为什么它无法解决xor问题。 xor在ieee库中定义。不知道我做错了什么。
library ieee; use ieee.std_logic_1164.all;
entity xorgate is
port (a : in std_logic_vector (3 downto 0);
y : out std_logic);
end;
architecture synth of xorgate is
begin
y <= xor a;
end;
答案 0 :(得分:4)
根据user1155120的建议,您必须使用VHDL 2008才能使用一元xor
。 Modelsim的-2008
编译器的vcom
选项使您处于2008模式。有关综合,请查看工具的文档,但要注意其中很多尚未完全支持2008。
如果你需要这个一元xor
但无法在2008模式下工作,你可以自己定义一个xor_reduce
函数:
function xor_reduce(v: std_logic_vector) return std_logic is
constant n: natural := v'length;
constant t: std_logic_vector(n - 1 downto 0) := v;
begin
if n = 0 then
return '0';
elsif n = 1 then
return t(0);
else
return xor_reduce(t(n - 1 downto n / 2)) xor xor_reduce(t(n / 2 - 1 downto 0));
end if;
end function xor_reduce;
并使用函数调用的语法而不是运算符的语法:
y <= xor_reduce(a);
注意:例如,使用for
循环有更简单,更自然的方式来描述它。上面显示的递归样式有两个有趣的属性:
log(n)
而不是n
的最差情况传播延迟,其中n
是输入值长度。如果您的合成器不够智能,无法从线性描述推断树结构,这将有所帮助。答案 1 :(得分:0)
你应该使用a1,a2,a3,a4然后你应该使用,.. y = a1 xor a2 xor a3 xor a4。 你不能使用... y&lt; = xor a ....这是错误的声明。