组件未在VHDL生成语句中正确实例化

时间:2014-09-17 16:47:36

标签: vhdl

我正在使用先前设计的一位ALU从事VHDL项目设计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;

1 个答案:

答案 0 :(得分:3)

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

GEN_MIDDLE_BITS: FOR I IN 1 TO 6 GENERATE
  for bit1_6 : bitslice use entity work.one_bit_alu(alu_1_bit);
begin
    bit1_6 : bitslice PORT MAP(A(I), B(I), c(I), P, K, R, Z(I), c(I+1));
end generate;

您还可以考虑使用外部配置声明将所有内容保存在一起。如果需要,可以类似于VHDL-93直接实体实例化来实例化配置。