【问题标题】:VHDL found '0' definition of operator "+" cannot determine exact overloaded matching definition for "+"VHDL 发现运算符“+”的“0”定义无法确定“+”的精确重载匹配定义
【发布时间】:2020-12-14 00:02:37
【问题描述】:

我的问题是这条线B1 <= (-c1 * (A3 + A1) + A3 + A2 - A1); 一直显示为错误。我知道这个问题在 stackoverflow 上已经存在,但是没有一个解决方案对我有帮助。我已经从头开始创建了这个项目,这也没有帮助。我不知道下一步该怎么做,希望有人可以在这里帮助我。

提前致谢

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_arith.ALL;
use IEEE.STD_LOGIC_signed.ALL;
use IEEE.STD_LOGIC_unsigned.ALL;
use IEEE.NUMERIC_STD.ALL;



entity ParallelAdaptor is
    Port ( A1 : in STD_LOGIC;
           A2 : in STD_LOGIC;
           A3 : in STD_LOGIC;
           c1 : in STD_LOGIC;
           B1 : out STD_LOGIC;
           B2 : out STD_LOGIC;
           B3 : out STD_LOGIC);
end ParallelAdaptor;

architecture Behavioral of ParallelAdaptor is

begin

    B1 <= (-c1 * (A3 + A1) + A3 + A2 - A1);


end Behavioral;

【问题讨论】:

  • 符号运算符和用于加法、减法和乘法的算术运算符在 VHDL 中都有常规的数学含义(IEEE Std 1076-2008 9.2.5 加法运算符,9.2.6 符号运算符,9.2.7 乘法运算符)。数学处理数字(算术值)。逻辑运算符处理二进制值,即布尔代数的域。很明显,use 子句中的数学包都没有为 std_logic 提供重载。如果不提供输入和预期输出,您将不清楚您的意图。这是布尔代数还是数学数字?

标签: vhdl


【解决方案1】:

我认为 STD_LOGIC 是一个位(我的 vhdl 经验大约是 20 年前),你不能对它进行此类操作。 所以你至少需要一个可以保存结果的输出...... 并且没有使用输出B2和B3...

我建议你应该从这里尝试一下https://www.nandland.com/vhdl/tutorials/tutorial-introduction-to-vhdl-for-beginners.html

【讨论】:

  • 这个答案没有澄清问题。依靠问题作者的外部链接来发现不清楚问题的答案,因为它无法启发使用 Stackoverflow 作为搜索资源的未来读者。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多