【问题标题】:Components not being instantiated properly in VHDL generate statement在 VHDL 中未正确实例化组件生成语句
【发布时间】:2014-09-17 16:47:36
【问题描述】:

我正在做一个 VHDL 项目来设计一个 8 位 ALU,使用之前设计的一位 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;

【问题讨论】:

    标签: vhdl


    【解决方案1】:

    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 直接实体实例化一样实例化配置。

    【讨论】:

      猜你喜欢
      • 2016-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      • 2016-09-23
      相关资源
      最近更新 更多