为什么我不能在与受保护类型相同的包中声明共享变量?
Why can't I declare a shared variable in the same package as the protected type?
我有一个模拟助手保护类型,它是在包中声明的。该类型的实例在同一个包中定义。该代码被 GHDL 接受,但不被 ModelSim 接受。
是否符合标准?
和
如何编写解决方法?
** Error (suppressible): D:\...\simulation.v08.vhdl(143): (vcom-1257) Shared variable "globalSimStatus" of protected type "T_SIM" cannot be declared before the protected type body.
我的(简化的)包示例:
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 想知道类型的大小,在解析所有成员之前这是未知的。
Modelsim 6.3b 或更高版本不再允许在受保护主体之前声明受保护类型的共享变量。
您的解决方法和 Jim 建议的解决方法是一个选项:为您的共享变量创建另一个包。
另一种解决方案是使用 modelsim 开关将错误抑制为警告:
-allowProtectedBeforeBody
这是我用的work-around。
我有一个模拟助手保护类型,它是在包中声明的。该类型的实例在同一个包中定义。该代码被 GHDL 接受,但不被 ModelSim 接受。
是否符合标准?
和
如何编写解决方法?
** Error (suppressible): D:\...\simulation.v08.vhdl(143): (vcom-1257) Shared variable "globalSimStatus" of protected type "T_SIM" cannot be declared before the protected type body.
我的(简化的)包示例:
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 想知道类型的大小,在解析所有成员之前这是未知的。
Modelsim 6.3b 或更高版本不再允许在受保护主体之前声明受保护类型的共享变量。
您的解决方法和 Jim 建议的解决方法是一个选项:为您的共享变量创建另一个包。
另一种解决方案是使用 modelsim 开关将错误抑制为警告:
-allowProtectedBeforeBody
这是我用的work-around。