我目前正在为帧生成器编写代码,我和其他人需要通过仿真中的一些 VHDL 逻辑生成数据。
为此,我在包文件中创建了一个生成器过程和一个监视器过程。
由于我喜欢受保护类型的想法,并且出于明显的原因,我不能将信号发生器和监视器放入受保护类型中,所以我刚刚在包文件中创建了它们,如上所述,我还创建了额外的过程和函数来初始化并帮助设置生成器和监视器的不同方面。
为此,在受保护类型中,您可以拥有在整个保护类型中可见的变量,我使用的是共享变量。现在这是一个问题,一些模拟器会给你一个警告。
现在为了使这些变量有点安全并删除这些警告,我已经制作了受保护的变量。
让我们取一个在我的代码中最常见的布尔值。
包裹
subtype st_pBool is boolean;
type pBoolean is protected
procedure Set (
constant invar : in st_pBool
);
impure function Get return st_pBool;
end protected pBoolean;
shared variable GenUseRandom : pBoolean;
包体
type pBoolean is protected body
variable var : st_pBool;
procedure Set (
constant invar : in st_pBool
) is
begin
var := invar;
end procedure Set;
impure function Get return st_pBool is
begin
return var;
end Get;
end protected body pBoolean;
我使用了其他语言的 getter 和 setter 的想法,从这个受保护的类型中设置和获取值
GenUseRandom.Set(False)
if GenUseRandom.Get then
do something intelligent here
end if;
这个主意好吗?它会做我认为它做的事情吗 IE 防止在不同进程中对同一变量进行多次更新,或者我只是掩盖了模拟器警告我的问题。
问候安德斯