VHDL generate语句中未正确实例化的组件

VHDL generate语句中未正确实例化的组件,vhdl,Vhdl,我正在进行一个VHDL项目,使用以前设计的一位ALU设计一个8位ALU。为此,我使用一个generate语句来生成ALU的第1-6位,而第0位和第7位则在这个块之外处理。当我去模拟ALU时,不管输入是什么,1-6位的值都不会改变。我知道一位ALU工作得很好,因为手动实例化8个一位ALU的工作与预期一样 我认为不管出于什么原因,生成块中的组件实例化没有被正确编译。当我在ModelSim中运行模拟时,转录本中会显示消息,说明“组件实例bit1_6:bitslice未绑定”。为了说明发生了什么,我为架

我正在进行一个VHDL项目,使用以前设计的一位ALU设计一个8位ALU。为此,我使用一个generate语句来生成ALU的第1-6位,而第0位和第7位则在这个块之外处理。当我去模拟ALU时,不管输入是什么,1-6位的值都不会改变。我知道一位ALU工作得很好,因为手动实例化8个一位ALU的工作与预期一样

我认为不管出于什么原因,生成块中的组件实例化没有被正确编译。当我在ModelSim中运行模拟时,转录本中会显示消息,说明“组件实例bit1_6:bitslice未绑定”。为了说明发生了什么,我为架构firstGen发布的代码没有编译,说“没有找到带有标签bit1_6:bitslice的语句”(使用for ALL:…掩盖了错误行为,因为lsb和msb的实例化很好)。有人知道发生了什么事吗

ENTITY alu8bit IS
PORT( A, B : IN bit_vector(7 downto 0);
    P,K,R : IN bit_vector(3 downto 0);
    ci : IN bit;
    Z : OUT bit_vector(7 downto 0);
    co : OUT bit);
END;

ARCHITECTURE firstGen of alu8bit IS

COMPONENT bitslice 
    PORT(a, b, ci: IN bit;
        P, K, R : IN bit_vector(3 downto 0);
        ri, cn: OUT bit);
END COMPONENT;

FOR bit1_6: bitslice USE ENTITY work.one_bit_alu(alu_1_bit);
FOR others : bitslice USE ENTITY work.one_bit_alu(alu_1_bit);
signal c : bit_vector(7 downto 1);
BEGIN
    lsb : bitslice PORT MAP(A(0), B(0), ci, P, K, R, Z(0), c(1));
    GEN_MIDDLE_BITS: FOR I IN 1 TO 6 GENERATE
        bit1_6 : bitslice PORT MAP(A(I), B(I), c(I), P, K, R, Z(I), c(I+1));
    end generate;
    msb : bitslice PORT MAP(A(7), B(7), c(7), P, K, R, Z(7), co);
END;

generate语句向名称空间添加了额外的层次结构层。使用内部配置规范时,您仅限于在直接作用域内配置组件。生成(或块)中的任何内容都无法访问。可以使用generate语句的声明性区域指定中间切片的配置绑定:

GEN_MIDDLE_位:为1到6中的I生成
对于bit1_6:bitslice使用实体工作。一位alu(alu 1_位);
开始
比特1_6:比特片端口映射(A(I)、B(I)、c(I)、P、K、R、Z(I)、c(I+1));
终端生成;

您也可以考虑使用外部配置声明来将所有的东西放在一起。如果需要,可以类似于VHDL-93直接实体实例化来实例化配置