Врезка 7
SUBDESIGN mealy ( clk : INPUT; reset : INPUT; Y : INPUT; z : OUTPUT; ) VARIABLE ss : MACHINE WITH STATES (s0, s1, s2, s3); BEGIN ss.clk = clk; ss.reset = reset; TABLE % current current current next % % state input output state % ss, y z, ss; s0, 0 0, s0; s0 1 1, s1; s1, 0 1, s1; s1, 1 0, s2; s2, 0 0, s2; s2, 1 1, s3; s3, 0 0, s3; s3, 1 1, s0; END TABLE; END;
|
Реализация иерархического проекта
В иерархической структуре проекта TDF-файлы, написанные на языке AHDL, можно использовать вместе с другими файлами проектов. На нижнем уровне проекта могут быть макрофункции, поставляемые фирмой Altera или разработанные пользователями.
В системе MAX+plusII есть большая библиотека, представляющая собой блоки высокого уровня, используемые для создания проекта с иерархической логикой.
В языке AHDL существуют два способа макрофункции:
объявить переменную типа <macrofunction> в объявлении примеров INSTANCE в секции VARIABLE и использовать порты примера макрофункции в логиче-ской секции. В этом способе важное значение имеют имена портов;
использовать для макрофункции непосредственную ссылку в логической секции файла TDF. В этом способе важен порядок портов.
Входы и выходы макрофункций перечисляются в описании прототипов функций (FUNCTION PROTOTYPE). Прототипы функций можно записать в отдельный файл и указать его в своём файле с помощью директивы INCLUDE. Такие Include-файлы создаются автоматически для данного проекта с помощью команды Create Default Include File. Include-файл вставляется вместо вызывающей его директивы INCLUDE. Для всех макрофункций системы MAX+plusII Include-файлы должны находить-ся в каталоге \maxplus2\max2inc.
На врезке 8 приведён файл macro1.tdf, который реализует 4-бит счётчик, подсоединённый к дешифратору 4 бит x 16 бит. Соответствующие макрофункции вызываются объявлениями примеров в секции VARIABLE.
Врезка 8
INCLUDE "4count"; INCLUDE "16dmux";
SUBDESIGN macro2 ( clk : INPUT; out[15..0] : OUTPUT; ) VARIABLE q[3..0] : NODE; BEGIN (q[3..-], ) = 4count (clk, , , , , GND, , , , ); %
out[15..0] = 16dmux (.(d, c, b, a)=q[3..0]); % equivalent in-line ref. with positional port association % % out[15..0] = 16dmux (q[3..0]); END;
|
В данном файле используются директивы INCLUDE для импортирования прототипов функций для двух макроофункций фирмы Altera: 4count и 16dmux. В секции VARIABLE объявляются две переменные: counter и decoder — как примеры этих макрофункций. В логической секции определяются входные порты для обеих макрофункций в формате “<имя переменной-примера>.<имя порта>” (Они ставятся в левой части булевых уравнений, а выходные порты — справа). Порядок портов в прототипе функции не важен, так как имена портов в логической секции перечисляются явно.
На врезке 9 приведён файл macro2.tdf, выполняющий те же функции, что и предыдущий, но макрофункции в нём вызываются непосредственной ссылкой.
