如果没有[最小、完整和可验证的示例],您的问题就无法复制。这里至少包括实体声明ripple_carry_adder
和实际的完整警告:
例如添加时:
library ieee;
use ieee.std_logic_1164.all;
entity ripple_carry_adder is
generic ( g_WIDTH: natural := 4); -- a default value for convenience
port (
i_add_term1: in std_logic_vector (g_WIDTH - 1 downto 0);
i_add_term2: in std_logic_vector (g_WIDTH - 1 downto 0);
o_result: out std_logic_vector (g_WIDTH downto 0)
);
end entity;
警告(全部):
ghdl -a ripple_carry_adder.vhdl
ghdl -e ripple_carry_adder
ripple_carry_adder.vhdl:34:5:warning: component instance "i_full_adder_inst" of 'full_adder' is not bound
[-Wbinding] ripple_carry_adder.vhdl:13:14:warning: (in default configuration of ripple_carry_adder(rtl)) [-Wbinding]
这里告诉我们未绑定实体的名称。第 13 行是full_adder
. 第 34 行是组件实例化,当尝试在组件配置中生成隐式绑定指示时找不到该实例化。
使用未绑定的组件详细说明设计并导致绑定指示打开,这并不违法。在自顶向下设计的增量开发过程中,允许未绑定的组件可能很有用。
参见 IEEE Std 1076-2008
3.4.3 组件配置:
如果给定组件实例在相应块中未绑定,则该实例的任何不包含显式绑定指示的显式组件配置将包含隐式默认绑定指示(参见 7.3.3)。类似地,如果给定组件实例在相应块中未绑定,则该实例的任何隐式组件配置将包含隐式默认绑定指示。
您不提供带有提供绑定指示的组件配置的配置声明。隐式组件配置将包含默认绑定指示。
7.3.3 默认绑定指示
在某些情况下,默认绑定指示将在没有明确绑定指示的情况下应用。默认绑定指示由默认实体方面以及默认通用映射方面和默认端口映射方面(视情况而定)组成。
如果没有可见实体声明与实例化组件具有相同的简单名称,则默认实体方面是打开的。可见实体声明是以下列表中的第一个实体声明(如果有):
a) 与实例化组件具有相同简单名称且直接可见的实体声明(见 12.3),
b) 与实例化组件具有相同简单名称的实体声明,并且在没有与实体声明具有相同简单名称的直接可见(参见 12.3)组件声明的情况下将直接可见,或
c) 由 LC 表示的实体声明,其中 L 是目标库,C 是实例化组件的简单名称。目标库是包含声明组件 C 的设计单元的库的库逻辑名称。
这些可见性检查是在导致应用默认绑定指示的缺少显式绑定指示时进行的。
在细化(这里是链接和加载的静态链接部分)组装模型期间,VHDL 工具将搜索具有相同名称的实体声明(这里full_adder
)。
如果在细化过程中发现具有架构的实体,full_adder
它将被默认绑定指示绑定:
ghdl -a full_adder.vhdl
ghdl -a ripple_carry_adder.vhdl
ghdl -e ripple_carry_adder
如果模型驱动 full_adder 输出,则没有警告并且使用测试台,您将看到有效的信号电平。(如果没有测试台,模拟只会显示没有复合匹配元素错误,并且所有类型都正确。full_adder和ripple_carry_adder的分析顺序并不重要,只要在阐述ripple_carry_adder之前对两者进行分析即可。
警告告诉您的是您的组件名称与可见实体名称不匹配,可能该实体尚未分析到参考库中。
这是我生成的用于演示的 full_adder:
library ieee;
use ieee.std_logic_1164.all;
entity full_adder is
port (
i_bit1: in std_logic;
i_bit2: in std_logic;
i_carry: in std_logic;
o_sum: out std_logic;
o_carry: out std_logic
);
end entity full_adder;
architecture foo of full_adder is
begin
o_sum <= i_carry xor i_bit1 xor i_bit2;
o_carry <= (i_carry and i_bit1) or
(i_carry and i_bit2) or
(i_bit1 and i_bit2);
end architecture;
也可能存在详细说明错误。组件声明和实体声明必须匹配,实例化中通用映射方面或端口映射方面的形式必须对应于实体声明,模式必须一致,复合形式的每个元素必须有一个匹配元素并且实际在关联列表中。...