为什么我不能在与受保护类型相同的包中声明共享变量?

时间:2016-01-20 22:38:00

标签: vhdl modelsim

我有一个模拟助手保护类型,它在包中声明。该类型的实例在同一个包中定义。代码由GHDL验证,但不是由ModelSim验证。

标准符合吗?

如何编写解决方法?

  

**错误(可抑制):D:\ ... \ simulation.v08.vhdl(143):( vcom-1257)共享变量" globalSimStatus"受保护类型" T_SIM"不能在受保护的类型主体之前声明。

我的(简化)包示例:

package simulation is
  type T_SIM is protected 
    procedure stop;
  end protected;

  shared variable globalSimStatus : T_SIM;
  -- QuestaSim 10.4c complains that a shared variable can not be declared, before the type's body was parsed.
end package;

package body simulation is
  type T_SIM is protected body
    variable IsStopped : BOOLEAN := FALSE;

    procedure stop is
    begin
      IsStopped := TRUE;
    end procedure;
  end protected body;

  -- This is OK but not global
  shared variable localSimStatus : T_SIM;
end package body;

一种解决方案可能是定义2个包:一个包含类型,另一个包含共享变量。

缺点是找到第二个包名称并在测试平台中导入(使用)2个包...

有更好的解决方案吗?

我假设QuestaSim想要知道类型的大小,在解析所有成员之前,这个大小是未知的。

1 个答案:

答案 0 :(得分:2)

Modelsim 6.3b或更高版本不再允许在受保护的主体之前声明受保护类型的共享变量。

您的解决方法和Jim建议的一个选项是:为您的共享变量创建另一个包。

另一种解决方案是使用modelsim开关将错误抑制为警告:

-allowProtectedBeforeBody

这是我使用的解决方法。