没有运算符的函数声明

时间:2018-06-14 16:07:44

标签: vhdl

我收到此错误消息:

  

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

我不明白为什么。

1 个答案:

答案 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;只要其中一个操作数与结果的宽度相同,运算符就会很高兴。

https://www.edaplayground.com/x/4VJE