是否可以在vhdl中使用泛型类型?

时间:2013-03-13 10:32:11

标签: templates generics type-conversion vhdl procedure

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”。

2 个答案:

答案 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;