我收到此错误消息:
testbench.vhd:16:22:没有操作员的功能声明" +"
在这一行:
Z <= unsigned(X) + resize(unsigned(Y),X'length);
使用此代码:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
entity MCVE is
end entity MCVE;
architecture MCVE of MCVE is
signal X, Z : std_logic_vector(15 downto 0);
signal Y : std_logic_vector(7 downto 0);
begin
process
begin
Z <= unsigned(X) + resize(unsigned(Y),X'length);
end process;
end architecture MCVE;
https://www.edaplayground.com/x/2LBg
我不明白为什么。
答案 0 :(得分:2)
错误信息非常清楚。操作员&#34; +&#34;没有功能声明。可以将两个unsigned
加在一起并返回std_logic_vector
。在包numeric_std
中,有一个opertor&#34; +&#34;可以将两个unsigned
添加到一起并返回unsigned
。
因此,如果添加另一个类型转换以将添加的结果转换回std_logic_vector
,编译器可以选择&#34; +&#34;的版本。返回unsigned
。
Z <= std_logic_vector(unsigned(X) + unsigned(Y));
重载仅在适合函数,过程或运算符的情况下才有效。如果少于一个,则编译器没有可供选择的版本;如果有多个,编译器不知道选择哪一个,并且存在需要整理的歧义。
实际上,您不需要调整Y
的大小:&#34; +&#34;只要其中一个操作数与结果的宽度相同,运算符就会很高兴。