Язык AHDL

         

Реализация двунаправленных выводов


MAX+PLUS II позволяет конфигурировать выводы I/O как двунаправленные. Двунаправленные выводы можно определить с помощью порта BIDIR, который соединяется с выходом примитива TRI. Сигнал между выводом и примитивом TRI является двунаправленным и может использоваться для управления другой логикой проекта.

Файлы bus_reg2.tdf и bus_reg3.tdf,  приведенные ниже, оба реализуют регистр, который фиксирует значение, обнаруженное на тристабильной шине. Также они могут выдавать запомненное значение обратно на шину. Один файл реализует DFF и TRI функции с помощью ссылок на логические функции. Другой файл использует объявления Register

и Instance, соответственно, в разделе Variable.

SUBDESIGN bus_reg2                 SUBDESIGN bus_reg3

(                                          (

clk : INPUT;                           clk : INPUT;

oe  : INPUT;                           oe  : INPUT;

io  : BIDIR;                             io  : BIDIR;

)                                          )

VARIABLE                             VARIABLE

   dff_out : NODE;                      my_dff  : DFF;

                                                   my_tri  : TRI;

BEGIN                                       BEGIN



   dff_out = DFF(io, clk, ,);             my_dff.d = io;

   io = TRI(dff_out, oe);                  my_dff.clk = clk;

                                                 my_tri.in = my_dff.q;

END;                                          my_tri.oe = oe;

                                                 io = my_tri.out;

                                                 END;

Двунаправленный сигнал io, управляемый примитивом TRI, используется в качестве входа d триггера D (DFF).

Также Вы можете присоединить двунаправленный вывод из TDF файла нижнего уровня к выводу верхнего уровня. Двунаправленный выходной порт подпроекта должен соединяться с двунаправленным выводом с верхнего уровня иерархии. Прототип Function для TDF файла нижнего уровня должен включать двунаправленный вывод в предложении RETURNS. Файл bidir1.tdf, приведенный ниже, включает четыре экземпляра функции bus_reg2, упомянутой выше.

FUNCTION bus_reg2 (clk, oe)

RETURNS (io);

SUBDESIGN bidir1

(

   clk, oe  : INPUT;

   io[3..0] : BIDIR;

)

BEGIN

   io0 = bus_reg2(clk, oe);

   io1 = bus_reg2(clk, oe);

   io2 = bus_reg2(clk, oe);

   io3 = bus_reg2(clk, oe);

END;



Содержание раздела