生成语句内/生成语句的 VHDL 分层参考

问题描述 投票:0回答:1

我在使用生成语句时寻求一些有关分层参考的帮助。抱歉,我时间有限,还无法为此制作 MCVE。我浏览了很多帖子,但到目前为止还没有找到我的问题的答案。

两个

generate
块符合相同的泛型。如果没有相应地设置这些泛型,则会使用不再存在分层信号的网表来实例化不同的
uut
。由于在这种情况下信号不存在,我会遇到问题。信号在测试台声明区域中初始化,因此即使
generate
没有资格分配它们(即在使用不同的
uut
的情况下),它们至少会有一个默认值值。

似乎存在一个阐述顺序问题,即

rtl_sig_gen
中阐述的分层信号在
uut
中的
rtl_gen
之前阐述,这是分层参考应该指向的位置。无论信号是放置在与
generate
相同的
uut
语句之前、之后还是内部,情况似乎都是如此。

这是我遇到的错误类型。这是 QuestaSim 2021.4 仅供参考。

** Error (suppressible): ../Utilities/pld_top_tb.vhd(105): (vopt-1565) Failed to find 'i_nSysReset' in hierarchical name '.pld_top_tb.rtl_gen.uut.i_nSysReset'.
** Error (suppressible): ../Utilities/pld_top_tb.vhd(106): (vopt-1565) Failed to find 'i_a2dif' in hierarchical name '.pld_top_tb.rtl_gen.uut.i_a2dif.i_AD_Data'.

下面是我看到的一般设置。是否甚至可以在生成语句中对条件实例化实体进行分层引用?任何见解都会有帮助。

rtl_sig_gen: if not g1_g and not g2_g generate
  i_nSysReset_h <= << signal .pld_top_tb.rtl_gen.uut.i_nSysReset : std_logic >>;
  i_AD_DATA_h   <= << signal .pld_top_tb.rtl_gen.uut.i_a2dif.i_AD_Data : std_logic_vector(11 downto 0) >>;
end generate rtl_sig_gen;

rtl_gen: if not g1_g and not g2_g generate

  uut: PLD_TOP
  port map (
    signal1       => ...,
    signal2       => ...,
    signal3       => ...
  );

end generate rtl_gen;
vhdl fpga hierarchical questasim
1个回答
0
投票

VHDL 要求在使用外部名称引用对象之前先详细说明该对象。 VHDL 按文本顺序详细阐述设计。

颠倒生成语句的顺序就足够了。

rtl_gen: if not g1_g and not g2_g generate

  uut: PLD_TOP
  port map (
    signal1       => ...,
    signal2       => ...,
    signal3       => ...
  );

end generate rtl_gen;

rtl_sig_gen: if not g1_g and not g2_g generate
  i_nSysReset_h <= << signal .pld_top_tb.rtl_gen.uut.i_nSysReset : std_logic >>;
  i_AD_DATA_h   <= << signal .pld_top_tb.rtl_gen.uut.i_a2dif.i_AD_Data : std_logic_vector(11 downto 0) >>;
end generate rtl_sig_gen;
``
© www.soinside.com 2019 - 2024. All rights reserved.