VHDL分层配置

VHDL分层配置,vhdl,Vhdl,在我的设计中,我试图将库的映射从unisim更改为unifast,但仅用于模拟目的。我想在测试台级别指定配置 我的设计层次结构如下所示: entity m1_chip_tb is end m1_chip_tb; architecture behavioral of m1_chip_tb is ... m1: entity work.m1_chip m1_clocks: entity work.clock_logic_m1 mmcm_pix

在我的设计中,我试图将库的映射从unisim更改为unifast,但仅用于模拟目的。我想在测试台级别指定配置

我的设计层次结构如下所示:

entity m1_chip_tb is
end m1_chip_tb;

architecture behavioral of m1_chip_tb is
    ...
    m1: entity work.m1_chip
        m1_clocks: entity work.clock_logic_m1
            mmcm_pix: MMCME2_ADV
我能找到的所有进行VHDL配置的示例(包括Xilinx站点上的示例)似乎都假设配置适用于本地实例化的实体。但我需要一个从测试台顶层向下钻取的配置

以下是我尝试使用的:

configuration cfg_xilinx of m1_chip is 
    for rtl
        for m1:clock_logic_m1
            use entity work.clock_logic_m1(rtl);
                for rtl
                    for all:MMCME2
                        use entity unifast.MMCME2;
                    end for;
                end for;
        end for;
    end for;
end cfg_xilinx;
但是我在m1:行上得到一个错误“找不到组件声明”

顺便说一句,除了MMCME2_ADV实例化之外,整个设计都是使用实体实例化编写的

如果您能就如何在配置定义中正确指定层次结构提出建议,我将不胜感激

(作为澄清,我在clock_logic_m1.vhd文件中指定了unisim库。我试图在我的模拟中覆盖它);i、 e:


您不能将配置与直接实例化一起使用-这是主要缺点。但是,如果您不坚持对控件使用配置,则可以使用传播的泛型或共享包中的常量来实现您想要的:

g_MMCM_RTL : if gGeneric_or_cConstant generate
    mmcm_rtl : [entity library.]MMCME2_ADV
. . .
end generate g_MMCM_RTL;

g_MMCM_SIM : if not gGeneric_or_cConstant generate
    mmcm_sim : [entity library.]MMCME2
. . . 
end generate g_MMCM_SIM;

您正在实例化实体,而不是组件。要使用配置,您必须声明并实例化组件。您还需要一个m1_chip_tb配置声明,为m1_chip配置cfg_xilinx提供绑定指示,以避免模拟中的默认绑定。合成将需要m1_芯片配置或默认绑定指示(在这种情况下,您可以只进行m1_芯片tb配置,该配置可到达所有MMCME2进行模拟)@RenaudPacalet-这是否意味着层次结构中一直到MMCME2的所有内容都必须有组件声明?@Barry Moss-绝对如此。如果使用实体实例化,则不需要配置。配置用于将实例化组件绑定到现有的实体/体系结构对(另外,还可以选择配置通用参数)。因此,您必须在实例化实体和使用配置之间进行选择。
g_MMCM_RTL : if gGeneric_or_cConstant generate
    mmcm_rtl : [entity library.]MMCME2_ADV
. . .
end generate g_MMCM_RTL;

g_MMCM_SIM : if not gGeneric_or_cConstant generate
    mmcm_sim : [entity library.]MMCME2
. . . 
end generate g_MMCM_SIM;