是否有可能在VHDL泛型类型?(Is it possible to have generic typ

2019-08-17 13:25发布

是否有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”。

Answer 1:

彼得艾舍登和吉姆·刘易斯的书“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;


Answer 2:

如果你不知道在那一刻你写如程序的类型,你可以使用一个亚型。 你可以随时合成前更改亚型。 好吧,这只是“有点通用”,但仍...它可能看起来像:

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;


文章来源: Is it possible to have generic type in vhdl?