VHDL分层配置

时间:2015-09-29 02:43:42

标签: 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: 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:line

上收到错误“无法找到组件声明”

顺便提一下,整个设计是使用实体进行实例化编写的,但MMCME2_ADV实例化除外。

我很感激有关如何在配置定义中正确指定层次结构的任何建议。

(作为澄清的一点,我在clock_logic_m1.vhd文件中指定了unisim libary。我试图在我的模拟中覆盖它);即:

library unisim;
use unisim.vcomponents.all;

1 个答案:

答案 0 :(得分:2)

您无法使用直接实例化的配置 - 这是主要缺点。但是,如果您不坚持使用控件的配置,则可以使用传播的泛型或在共享包中使用常量来实现您的目标:

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;