Язык AHDL


         

Экземпляр мегафункции со связью порта


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;


Содержание  Назад  Вперед