Vhdl 如何制作受保护类型的数组?

Vhdl 如何制作受保护类型的数组?,vhdl,Vhdl,声明了受保护类型并包含正文,例如: type flag_pt is protected procedure asg(val : boolean); impure function get return boolean; end protected flag_pt; type flag_pt is protected body ... end protected body flag_pt; 如何制作标记\u pt的数组 尝试显而易见的: type flag_array_pt is

声明了受保护类型并包含正文,例如:

type flag_pt is protected
  procedure asg(val : boolean);
  impure function get return boolean;
end protected flag_pt;

type flag_pt is protected body
  ...
end protected body flag_pt;
如何制作
标记\u pt
的数组

尝试显而易见的:

type flag_array_pt is array (0 to 1) of flag_pt;
在ModelSim中生成此错误:

复合类型中不允许使用受保护类型(flag_pt)的元素


如有任何关于解决办法的建议,也将不胜感激;一个明显的想法是将数组属性构建到
标志中,但在所有方法中都必须显式处理索引参数是相当乏味的,对于更复杂的数据结构来说,这一点甚至更糟。

IEEE 1076-2008指出“复合类型用于定义值的集合。这包括两个值数组。。。和价值记录。。。如果复合类型包含文件类型或受保护类型的元素,则是错误的。”因此,Modelsim将其丢弃是正确的。因此,我想尝试访问类型数组,但结果是“每个这样的访问值都指定由访问类型定义的子类型指示定义的子类型的对象。此子类型称为指定子类型,此子类型的基类型称为指定类型。指定的类型不应是文件类型或受保护类型。”(1076-1800)再次感谢,因此ModelSim出错是正确的。无论如何,代码至少显示了我想要实现的目标。我尝试将访问类型设置为受保护类型,但ModelSim给出了“指定类型的访问类型不能是受保护类型”“,正如根据您的描述所预期的那样。@MatthewTaylor为什么不把它放在回答中呢?因此问题可以解决OSVVM包ScoreboardGenericPkg使用David建议的方法实现记分板阵列。您可以在github找到OSVVM。