VHDL 2008无法使用外部名称的别名来驱动信号

时间:2018-01-19 18:14:30

标签: vhdl modelsim questasim

请查看以下代码,特别是最后的3条注释行。我用Questasim 10.6c模拟了这个:

?

如您所见,我能够使用外部名称(本地信号的别名)驱动信号,但不能使用外部名称的别名。有什么办法可以使用外部名称的别名来驱动vhdl-2008中的信号吗?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

外部名称只能在详细说明被引用的对象之后声明。

VHDL从测试平台开始详细阐述。首先,它阐述了申报区域。然后按顺序详细说明代码区域。如果找到一个组件,它会详细说明它和任何子组件。当它完成对组件(以及任何子组件)的详细说明时,它会在它停止的测试平台中进行详细说明。

因此,您需要将别名声明移动到块语句或进程。块语句的代码如下。注意带有块语句的标签是必需的。

architecture primary of alias_extname_driving_signal_tb is

  signal clk : std_logic := '0';
  signal control_vector16 : std_logic_vector(15 downto 0) := (others => '0');
  alias control_vector16_alias is control_vector16;
  signal vector16 : std_logic_vector(15 downto 0);

begin

  clk <= not clk after 10 ns;

  control_vector16 <= std_logic_vector(unsigned(control_vector16) + 1) when rising_edge(clk);

  uut : entity work.alias_extname_driving_signal
  port map(
    clk => clk
  );

  myblock : block 
    alias buried_control_vector16_alias is << signal .alias_extname_driving_signal_tb.uut.buried_control_vector16 : std_logic_vector(15 downto 0) >>;
  begin
     vector16 <= << signal .alias_extname_driving_signal_tb.uut.buried_control_vector16 : std_logic_vector(15 downto 0) >>; -- this statement works
     vector16 <= control_vector16_alias; -- this statement works
     vector16 <= buried_control_vector16_alias; -- vector16 remains perpetually undefined with this statement
  end block myblock ; 

end architecture primary;