VHDL中是否有通用类型的方法?所以例如我想调用一个过程,但我不确定我想要作为参数给出的信号类型,是否可以将参数声明为通用? 就像在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”。
答案 0 :(得分:4)
彼得·阿森登和吉姆·刘易斯的书“VHDL-2008 - 新的东西”打开了
第1章:增强的泛型
1.1通用类型
因此,如果您的工具正确支持VHDL-2008,您现在可以声明泛型类型,并且可以在子程序(而不仅仅是实体)上声明泛型。
如果他们遵循Ada模型,那么在您第一次编译它们时将检查泛型,而不是在实例化它们时,以便编译的任何实例化都可以工作,这与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;
答案 1 :(得分:1)
如果您在写作的那一刻不知道类型,例如一个程序,你可以使用一个子类型。您可以在合成之前始终更改子类型。 好吧,这只是“有些通用”但仍然......它可能看起来像那样:
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;