是否有VHDL办法有泛型类型? 因此,例如,我要调用一个过程,但我不知道的信号,我想给作为paarameter什么类型,是可以声明参数为通用? 就像在C ++中你可以使用一个模板。
procedure eq_checker(name : string; sig : ANYTHING); should : ANYTHING; at : time) is
if (at = now) then
if sig = should then
report "has same value" severity note;
else
report "has not same value" severity note;
end if;
end if;
end checker;
至少它应该可以使用不同的信号类型为“SIG”。
彼得艾舍登和吉姆·刘易斯的书“VHDL-2008 - 只是新的东西”与打开
第1章:增强泛型
1.1泛型类型
所以,如果你的工具支持VHDL-2008正常,您现在可以声明泛型类型,你可以在子程序(不只是实体)申报仿制药。
如果他们都跟着阿达模型,仿制药将被选中当你第一次编译它们,而不是当你实例化它们,这样,编译会的工作,不像C ++模板的情况任何实例。臭虫可以潜伏多年,直到你实例化它们以特定的方式(因为C ++模板是不是真正的通用元编程接近宏)
例如:未经检验的,但写下面就上述书第17页的例子...
procedure eq_checker
generic (type ANYTHING)
parameter(name : string; sig,should : ANYTHING; at : time) is
begin
if (at = now) then
if sig = should then
report "has same value" severity note;
else
report "has not same value" severity note;
end if;
end if;
end procedure eq_checker;
如果你不知道在那一刻你写如程序的类型,你可以使用一个亚型。 你可以随时合成前更改亚型。 好吧,这只是“有点通用”,但仍...它可能看起来像:
PACKAGE generics_pkg IS
-- type definition
subtype data_type is integer;
-- instantiation
COMPONENT generics IS
PORT(
i: IN data_type;
ii : in data_type;
o: OUT std_logic
);
END COMPONENT;
-- procedure
procedure comp ( signal x,y: in data_type;
signal o: out std_logic);
END PACKAGE generics_pkg;
package body generics_pkg is
procedure comp ( signal x,y: in data_type;
signal o: out std_logic) is
begin
if x = y then
o<='1';
report "same value" severity note;
else
o<='0';
report "not same value" severity note;
end if;
end procedure comp;