Вы можете сделать это.Когда вы определяете обобщенную функцию, вы можете сказать ей использовать видимую функцию по умолчанию, используя <>
generic (
type t;
function increment(x : t) return t is <>
);
Затем, когда вы присваиваете тип t, если вы не задаете явное назначение функции приращения, это займетфункция, которая соответствует сигнатуре.
Я сделал это, чтобы определить универсальную функцию «match_x», где любое значение X в ожидаемом результате совпадает с чем-либо в фактическом результате:
function match_X_generic generic ( type data_t;
function to_string(d : data_t) return string is <>
)
parameter( act, exp : data_t )
return boolean;
function match_x is new match_X_generic generic map (std_logic_vector);
function match_x is new match_X_generic generic map (unsigned );
function match_x is new match_X_generic generic map (signed );
Здесь функции to_string автоматически поступают из пакетов std_logic_1164 или numeric_std.Я могу предоставить шестнадцатеричные версии, подключившись к to_hstring:
function match_x_hex is new match_X_generic generic map (std_logic_vector, to_hstring);
function match_x_hex is new match_X_generic generic map (unsigned , to_hstring);
function match_x_hex is new match_X_generic generic map (signed , to_hstring);
Так что теперь, пока функция to_string определена и видима, я могу создать эту функцию для любого пользовательского типа:
function match_x is new match_X_generic generic map ( data_t => axis_trans_t );