我试图制作一个重载包,这样我就可以使用RIT数据类型来设计一个32位乘法器。正如我在下面定义的那样,RIT数据类型可以采用1,0或高阻抗值(Z)。
这些函数似乎都是我需要的,但是我无法弄清楚如何重载它以识别向量,就像STD_LOGIC和BIT数据类型一样。谁能指出我正确的方向?我的重载包" rit_overload_package"目前的情况如下:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
PACKAGE rit_overload_package IS
TYPE rit IS('0','1','Z');
TYPE rit_table_2D IS array(rit,rit) OF rit;
TYPE rit_table_1D IS array(rit) OF rit;
CONSTANT rit_and_table: rit_table_2D :=
-- 0 1 Z
(('0', '0', '0'), -- 0
('0', '1', '1'), -- 1
('0', '1', 'Z')); -- Z)
CONSTANT rit_or_table: rit_table_2D :=
-- 0 1 Z
(('0', '1', '0'), -- 0
('1', '1', '1'), -- 1
('0', '1', 'Z')); -- Z)
CONSTANT rit_not_table: rit_table_1D :=
-- 0 1 Z
(('1','0','Z'));
FUNCTION "AND"(a,b:rit) RETURN rit;
FUNCTION "OR"(a,b:rit) RETURN rit;
FUNCTION "NOT"(a:rit) RETURN rit;
END rit_overload_package;
PACKAGE BODY rit_overload_package IS
FUNCTION "AND" (a,b:rit) RETURN rit IS
BEGIN
RETURN rit_and_table(a,b);
END "AND";
FUNCTION "OR" (a,b:rit) RETURN rit IS
BEGIN
RETURN rit_or_table(a,b);
END "OR";
FUNCTION "NOT" (a:rit) RETURN rit IS
BEGIN
RETURN rit_not_table(a);
END "NOT";
END rit_overload_package;
答案 0 :(得分:0)
执行函数重载的常用方法是简单地声明具有相同名称但具有不同参数签名的其他函数。因此,如果您希望AND用于其他类型myt
,那么您只需添加声明:
FUNCTION "AND"(a,b:myt) RETURN myt;
然后当然也实现了功能。
必须显式声明并实现所有参数组合。
如果需要函数为相同的参数返回不同的结果类型,那么函数名称必须不同,例如声明和实现例如AND_rit
和AND_myt
,其中参数可以是相同的类型,但结果可能不同。
答案 1 :(得分:0)
“vector”只是一个定义为标量数组的类型。您只需要首先定义矢量类型(对于可变长度矢量,传统方法是使用natural range <>
作为数组范围),然后定义另一个重载,就像您已经为标量类型所做的那样。