Врезка 12
SUBDESIGN daisy ( /local_request : INPUT; /local_grant : OUTPUT; /request_in : INPUT; % from lower priority % /request_out : OUTPUT; % to higher priority % /grant_in : INPUT; % from higher priority % /grant_out : OUTPUT; % to lower priority % ) BEGIN DEFAULTS /local_grant = VCC; % active-low output % /request_out = VCC; % signals should default % / grant_out = VCC; % to VCC % END DEFAULTS; IF /request_in == GND # /local_request == GND THEN /request_out = GND; END IF; IF /grant_in == GND THEN IF /local_request == GND THEN /local_grant = GND; ELSIF /request_in -- GND THEN /grant_out = GND; END IF; END IF; END; |
Все сигналы в данном файле имеют активный низкий уровень. Фирма Altera рекомендует помечать как-нибудь имена сигналов с низким активным уровнем, например, первым символом в имени ставить “/”, не являющийся оператором, и использовать его постоянно.
В операторе IF проверяется, является ли модуль активным, то есть равен ли он GND. Если это так, то реализуются действия, записанные в операторе IF.
В объявлении по умолчанию DEFAULTS считается, что сигналу присваивается значение VCC, если он не активен.
Система MAX+PlusII позволяет конфигурировать порты ввода/вывода (I/O) в устройствах Altera как двунаправленные порты. Двунаправленный вывод задаётся как порт BIDIR, который подсоединяется к выходу примитива TRI. Сигнал между этим выводом и буфером с тремя состояниями является двунаправленным, и его можно использовать в проекте для запуска других логических схем.
Приводимый на врезке 13 файл bus_reg2.tdf реализует регистр, который делает выборку значения, найденного на шине с тремя состояниями, а также может передать обратно на шину хранимое значение.
Врезка 13
SUBDESIGN bus_reg2 ( clk : INPUT; oe : INPUT; io : BIDIR; ) BEGIN io = TRI(DFF(io, clk,, ), oe); END; |
Двунаправленный сигнал io, запускаемый примитивом TRI, используется в качестве входа d для D-триггера (DFF). Запятые в конце списка параметров отделяют места для сигналов триггера clrn и prn. Эти сигналы по умолчанию установлены в неактивное состояние.
Двунаправленный вывод можно также использовать для подсоединения TDF-файла более низкого уровня к выводу с высоким уровнем. Прототип функции для TDF-файла более низкого уровня должен содержать двунаправленный вывод в предложении RETURNS. В приведённом на врезке 14 файле bidir1.tdf даны четыре примера использования макрофункции bus_reg2.
