Экземпляр мегафункции со связью порта
SUBDESIGN lpm_add1
(
a[8..1], b[8..1] : INPUT;
c[8..1] : OUTPUT;
carry_out : OUTPUT;
)
BEGIN
% Экземпляр мегафункции со связью порта по положению %
(c[], carry_out, ) = lpm_add_sub(GND, a[], b[], GND,,)
WITH (LPM_WIDTH=8,
LPM_REPRESENTATION="unsigned");
%Эквивалентный экземпляр со связью по имени %
--(c[],carry_out,)= lpm_add_sub(.dataa[]=a[],.datab[]=b[],
-- .cin=GND, .add_sub=GND)
-- WITH (LPM_WIDTH=8,
LPM_REPRESENTATION="unsigned");
END;
Прототип функции для lpm_add_sub приведен ниже:
FUNCTION lpm_add_sub(cin, dataa[LPM_WIDTH-1..0], datab[LPM_WIDTH-1..0], add_sub)
WITH (LPM_WIDTH, LPM_REPRESENTATION, LPM_DIRECTION, ADDERTYPE,
ONE_INPUT_IS_CONSTANT)
RETURNS (result[LPM_WIDTH-1..0], cout, overflow);
Здесь требуется только параметр LPM_WIDTH и экземпляр функции lpm_add_sub в файле lpm_add1.tdf определяет значения параметров только для LPM_WIDTH и LPM_REPRESENTATION.
Файл lpm_add2.tdf, приведенный ниже, идентичен с lpm_add1.tdf, но реализует 8-битный сумматор с помощью объявления
Instance.
INCLUDE "lpm_add_sub.inc";
SUBDESIGN lpm_add2
(
a[8..1], b[8..1] : INPUT;
c[8..1] : OUTPUT;
carry_out : OUTPUT;
)
VARIABLE
8bitadder : lpm_add_sub WITH (LPM_WIDTH=8,
LPM_REPRESENTATION="unsigned");
BEGIN
8bitadder.cin = GND
8bitadder.dataa[] = a[]
8bitadder.datab[] = b[]
8bitadder.add_sub = GND
c[] = 8bitadder.result[]
carry_out = 8bitadder.cout
END;
Содержание Назад Вперед