Скачиваний:
196
Добавлен:
08.06.2016
Размер:
635.39 Кб
Скачать
      1. Реализация двунаправленных выводов

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;

      1. Реализация тристабильных шин

Примитивы TRI, которые управляют портами OUTPUT или BIDIR, имеют вход разрешения выхода (Output Enable), который переводит выход в высокоимпедансное состояние.

Вы можете создать тристабильную шину путем соединения примитивов TRI и портов OUTPUT или BIDIR вместе с помощью узла TRI_STATE_NODE типа. Схема управления должна обеспечивать разрешение не более одного выхода в одно и тоже время.

Файл tri_bus.tdf, приведенный ниже, реализует тристабильную шину, используя узел TRI_STATE_NODE типа, созданный в объявлении Node.

SUBDESIGN tri_bus

(

in[3..1], oe[3..1] : INPUT;

out1 : OUTPUT;

)

VARIABLE

tnode : TRI_STATE_NODE;

BEGIN

tnode = TRI(in1, oe1);

tnode = TRI(in2, oe2);

tnode = TRI(in3, oe3);

out1 =tnode;

END;

В этом примере несколько присваиваний узлу tnode, связывают сигналы вместе. Для реализации тристабильной шины требуется тип TRI_STATE_NODE, вместо типа NODE: для типа NODE сигналы связываются вместе с помощью проводного И или проводного ИЛИ, тогда как для типа TRI_STATE_NODE сигналы соединяются с тем же самым узлом. Однако, если только одна переменная присваивается узлу TRI_STATE_NODE, то она трактуется как переменная обычного типа NODE.

Соседние файлы в папке Минина 2014
  • #
    08.06.2016338.77 Кб291113PV1.pdf
  • #
    08.06.2016635.39 Кб196ahdl.doc
  • #
    08.06.20167.32 Кб22Digital term.vi
  • #
    08.06.201651 б22L8.asv
  • #
    08.06.201645 б22L8.m
  • #
    08.06.201613.4 Кб24temp. analis.vi
  • #
    08.06.201616.62 Кб23temp. control.vi