【发布时间】: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