首页 > 解决方案 > VHDL中有没有办法外部名称引用泛型?

问题描述

层次结构中较低的模块具有整数泛型。我想通过使用 VHDLforce命令从我的测试台覆盖这个自动生成的代码中的泛型。问题是无论我做什么模拟器都会给出错误消息:

# ELAB2: Fatal Error: ELAB2_0127 W_PROBE_FPGA.vhd (136): Incorrect object class for external name: '<<probe_fpga_inst.SPRINT_PROBE_TOP_LEVEL_0.SYNTHESIZE_ACCELERATION_DAQ>>'.

我试过这段代码:

alias SYNTHESIZE_ACCELERATION_DAQ is <<signal probe_fpga_inst.SPRINT_PROBE_TOP_LEVEL_0.SYNTHESIZE_ACCELERATION_DAQ : integer>>;

使用关键字信号、变量、常量和空。但它们都不起作用。现在我该怎么做?

标签: vhdl

解决方案


您可以从@Tricky 的回复中看到外部名称无法完成工作。但是,您可以使用配置声明来执行此操作。

配置声明可以是分层的,并且可以设置泛型,如下所示。下面对于实体/组件 Block1(其实例标签为 Block1_1),通用 G1 的值更改为 NewValue。请注意,对于通用 G2,完成的映射会保留该值。

library LIB_CHIP ; 
configuration CfgLower of TbCHIP is
  for StructTb
    for CHIP_1 : CHIP 
      use entity LIB_CHIP.CHIP (StructChip) ;
      for Structural
        for Block1_1 : Block1
          use entity work.Block1(RTL) 
          generic map (G1 => NewValue, G2 => G2) ; 
        end for ; 
      end for ; 
    end for ; 
  end for ;
end CfgLower ;

对于综合,您需要通过将较低级别的泛型放在更高级别的设计上来“传播泛型”,直到您达到使用更高级别组件的级别。

entity NextHigher is
  generic (G1 : integer ) ; 
  port (...) ; 
end entity NextHigher ;
architecture RTL of NextHigher is

begin
  Lower_1 : Lower
    generic map (G1 => G1) -- mapping Generic from NextHigher to Lower
    port map (. . . ) ; 

  . . . 
end architecture RTL ; -- NextHigher

推荐阅读