VHDL 分层配置
VHDL Hierarchical Configuration
我正在尝试在我的设计中将库原语的映射从 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: 行
上收到错误 "Cannot find component declaration"
顺便说一句,除了 MMCME2_ADV 实例化之外,整个设计都是使用实体实例化编写的。
对于如何在配置定义中正确指定层次结构的任何建议,我将不胜感激。
(需要澄清的是,我在 clock_logic_m1.vhd 文件中指定了 unisim 库。我正在尝试为我的模拟覆盖它);即:
library unisim;
use unisim.vcomponents.all;
您不能使用直接实例化的配置 - 这是主要缺点。但是,如果您不坚持对控件使用配置,则可以使用传播的泛型或在共享包中使用常量来实现您想要的:
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;
我正在尝试在我的设计中将库原语的映射从 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: 行
上收到错误 "Cannot find component declaration"顺便说一句,除了 MMCME2_ADV 实例化之外,整个设计都是使用实体实例化编写的。
对于如何在配置定义中正确指定层次结构的任何建议,我将不胜感激。
(需要澄清的是,我在 clock_logic_m1.vhd 文件中指定了 unisim 库。我正在尝试为我的模拟覆盖它);即:
library unisim;
use unisim.vcomponents.all;
您不能使用直接实例化的配置 - 这是主要缺点。但是,如果您不坚持对控件使用配置,则可以使用传播的泛型或在共享包中使用常量来实现您想要的:
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;