我创建了一个名为mux21_generic.vhdl的多路复用器。这是一个Nx1多路复用器。我定义了两种架构,一种是行为,另一种是结构。
结构架构以下列方式使用小型2x1多路复用器:
architecture structural of MUX21_GENERIC is
component MUX21 is
Port ( A: In std_logic;
B: In std_logic;
S: In std_logic;
Y: Out std_logic);
end component MUX21;
begin -- structural
create_mux:
for i in 0 to N-1 generate
begin
MUX21_i : MUX21 port map(A=>A(i), B=>B(i), S=>SEL, Y=>Y(i));
end generate create_mux;
end structural;
这些是配置:
-- CONFIGURATIONS --
-- (1) CFG_MUX21_GEN_BEHAVIORAL
configuration CFG_MUX21_GEN_BEHAVIORAL of MUX21_GENERIC is
for behavioral
end for;
end CFG_MUX21_GEN_BEHAVIORAL;
-- (2) CFG_MUX21_GEN_STRUCTURAL
configuration CFG_MUX21_GEN_STRUCTURAL of MUX21_GENERIC is
for structural
for create_mux
for all : MUX21
use configuration WORK.CFG_MUX21_STRUCTURAL;
end for;
end for;
end for;
end CFG_MUX21_GEN_STRUCTURAL;
编译效果很好,所以我认为问题不在上述配置中。
我想问题出现在测试平台上。
以下代码表示我如何在测试平台的“TEST”体系结构中实例化行为和结构多路复用器:
U1 : MUX21_GENERIC
Generic Map (NBIT, 7 ns)
Port Map ( A1, B1, S1, output_beh); -- it should be behavioral
U2 : MUX21_GENERIC
Generic Map (NBIT)
Port Map ( A1, B1, S1, output_str); -- it should be structural
这是我在testbench中编写的配置:
configuration MUX21GENTEST of TB_MUX21_GENERIC is
for TEST
for U1: MUX21_GENERIC
use configuration WORK.CFG_MUX21_GEN_BEHAVIORAL;
end for;
for U2: MUX21_GENERIC
use configuration WORK.CFG_MUX21_GEN_STRUCTURAL;
end for;
end for;
end MUX21GENTEST;
现在的问题是,当我使用modelsim开始模拟时,它会使用结构体系结构实例化组件。 Modelsim image
我注意到如果我在mux21_generic.vhdl文件中交换两个体系结构之间的位置,modelsim使用行为而不是结构arch。它应该是配置问题吗?
答案 0 :(得分:0)
您没有提供Minimal, Complete and Verifiable example。
您的配置过于复杂。
在您的测试平台配置中,您可以:
configuration MUX21GENTEST of TB_MUX21_GENERIC is
for TEST
for U1: MUX21_GENERIC
use entity WORK.MUX21_GENERIC(behavioral);
end for;
for U2: MUX21_GENERIC
use entity WORK.MUX21_GENERIC(structural);
end for;
end for;
end MUX21GENTEST;
不依赖于多余的配置。在VHDL中有一个称为绑定指示的概念,其中默认绑定指示可以由配置规范(可以找到配置声明或块声明项)取代。
当您的配置声明似乎忽略特定的绑定指示并使用默认值时,因为它们不适用。 (组件绑定指示无效)。
在没有配置声明的情况下在测试平台中使用配置规范需要将它们作为体系结构声明项提供。
如果没有MCVe提供答案,由于缺乏可见性和无法在不复制您的工作的情况下测试解决方案而产生的不确定性会带来一定的风险。