- •3.2. Использование чисел и констант в языке ahdl
- •3.2.1 Использование чисел
- •3.2.2. Использование констант
- •3.4. Последовательностная логика
- •3.4.1. Объявление регистров
- •3.4.2. Объявление регистровых выходов
- •3.4.3. Создание счетчиков
- •3.5. Цифровые автоматы с памятью (statemashine)
- •3.5.1. Реализация цифровых автоматов (statemachine)
- •3.5.2. Установка сигналов Clock, Reset и Enable
- •3.5.3. Задание выходных значений для состояний
- •3.5.4. Задание переходов между состояниями
- •3.5.5. Присвоение битов и значений в цифровом автомате
- •3.5.6. Цифровоые автоматы с синхронными выходами
- •3.5.7. Цифровые автоматы с асинхронными выходами
- •3.5.8. Восстановление после неправильных состояний
- •3.6. Реализация иерархического проекта
- •3.6.2. Создание и применение пользовательских макрофункций
- •3.6.3. Определение пользовательской макрофункции
- •3.6.4. Импорт и экспорт цифровых автоматов (statemachine)
- •Использование входных буферов плис в качестве элементов памяти конечных автоматов
- •Введение
- •Структуры конечных автоматов классов e и f
- •Синтез конечных автоматов класса e
- •Алгоритм 1
- •Синтез конечных автоматов класса f
- •Программная реализация методов синтеза автоматов классов e и f
- •Результаты экспериментальных исследований методов синтеза автоматов классов e и f
- •Вопрос3.2
- •Последовательный интерфейс spi
- •1 Описание интерфейса i2c
- •Вопрос 3.3Интерфейс Avalon
3.5.7. Цифровые автоматы с асинхронными выходами
В языке AHDL возможна реализация цифрового автомата с асинхронными выходами. Выходы такого типа автоматов всегда изменяются, когда изменяются входы, независимо от состояния синхросигнала.
В приведенном ниже фале mealy.tdf реализован автомат Мили с четырьмя состояниями и асинхронными выходами.
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 currentcurrent 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;
3.5.8. Восстановление после неправильных состояний
Логика, сгенерированная для цифрового автомата компилятором системы MAX+PLUS II, будет работать так, как определено в TDF-файле. Однако проекты с использованием цифровых автоматов часто допускают значения битов состояний, которые не присваиваются правильным состояниям. Эти значения с не присвоенными битами состояний называются неправильными состояниями. Проект, который переходит в неправильное состояние, например, в результате нарушений временных требований к установке или задержке, может реализовать ошибочные выходы. Несмотря на рекомендации фирмы Altera по соблюдению временных требований к установке и задержке, пользователь может сделать восстановление цифрового автомата после неправильного состояния путем принудительного преобразования неправильного состояния к известному правильному в рамках оператора CASE.
Для восстановления после неправильных состояний следует поименовать их все для данного автомата. Предложение WHEN OTHERS в операторе CASE, которое принудительно преобразует состояния, применяется только к состояниям, которые были объявлены, а не упомянуты в предложении WHEN. Данный метод работает, только если все неправильные состояния определены в объявлении цифрового автомата.
Для n-битового цифрового автомата существует 2n возможных состояний. Поэтому нужно добавить воображаемые имена состояний, чтобы получилось такое их число.
Ниже приведен файл recover.tdf, в котором реализован цифровой автомат, который может восстанавливаться из неправильных состояний.
SUBDESIGN recover
(
clk : INPUT;
go : INPUT;
ok : OUTPUT;
)
VARIABLE
sequence : MACHINE
OF BITS (q[2..0]) WITH STATES (
idle,
one,
two,
three, four, illegal1, illegal2, illegal3);
BEGIN
sequence.clk = clk;
CASE sequence IS
WHEN idle =>
IF go THEN
sequence = one;
END IF;
WHEN one =>
sequence = two;
WHEN two =>
sequence = three;
WHEN three =>
sequence = four;
WHEN OTHERS =>
sequence = idle;
END CASE;
ok = (sequence == four);
END;
В данном примере цифровой автомат имеет три бита, поэтому она должна иметь 23, или 8 состояний. В объявлении заданы только 5 состояний. Следовательно, нужно туда добавить еще три воображаемых состояния illegal1, illegal2, illegal3.
3.6. Реализация иерархического проекта
В иерархической структуре проекта TDF-файлы, написанные на языке AHDL, можно использовать вместе с другими файлами проектов. На нижнем уровне проекта могут быть макрофункции, поставляемые фирмой Altera или разработанные пользователями.
3.6.1. Использование макрофункций системы Altera MAX+PLUS II
В системе MAX+PLUS II есть большая библиотека, в которую входят 74 стандартных макрофункций, реализующих шины с последовательным опросом, оптимизацию архитектуры и конкретные приложения. Библиотека представляет собой собрание блоков высокого уровня, используемых для создания проекта с иерархической логикой. Во время инсталляции системы эти макрофункции автоматически записываются в каталог \maxplus2\max2lib и его подкаталоги, создаваемые в процессе инсталляции.
В языке AHDL существуют два способа вызова (то есть вставки в качестве примера) макрофункции:
объявить переменную типа <macrofunction> в объявлении примеров INSTANCE в секции VARIABLE и использовать порты примера макрофункции в логической секции. В этом способе важное значение имеют имена портов;
использовать для макрофункции непосредственную ссылку в логической секции файла TDF. В этом способе важен порядок портов.
Входы и выходы макрофункций перечисляются в описании прототипов функций (FUNCTION PROTOTYPE). Прототипы функций можно записать в отдельный файл и указать его в своем файле с помощью директивы INCLUDE. Такие Include-файлы создаются автоматически для данного проекта с помощью команды CreateDefaultIncludeFile. Include-файл вставляется вместо вызывающей его директивы INCLUDE. Для всех макрофункций системы MAX+PLUS II Include-файлы должны находиться в каталоге \maxplus2\max2inc.
Ниже приведен файл macro1.tdf, который реализует четырех битовый счетчик, подсоединенный к дешифратору 4бит -> 16 бит. Соответствующие макрофункции вызываются объявлениями примеров в секции VARIABLE
INCLUDE "4count";
INCLUDE "16dmux";
SUBDESIGN macro1
(
clk : INPUT;
out[15..0] : OUTPUT;
)
VARIABLE
counter : 4count;
decoder : 16dmux;
BEGIN
counter.clk = clk;
counter.dnup = GND;
decoder.(d,c,b,a) = counter.(qd,qc,qb,qa);
out[15..0] = decoder.q[15..0];
END;
В данном файле используются директивы INCLUDE для импортирования прототипов функций для двух макроофункций фирмы Altera: 4count и 16dmux. В секции VARIABLE объявляются две переменные: counter и decoder как примеры этих макрофункций. В логической секции определяются входные порты для обеих макрофункций в формате <имя переменной-примера>.<имя порта>. (Они ставятся в левой части булевых уравнений, а выходные порты - справа.) Порядок портов в прототипе функции не важен, так как имена портов в логической секции перечисляются явно.
Ниже приведен файл macro2.tdf, выполняющий те же функции, что и предыдущий, но макрофункции в нем вызываются непосредственной ссылкой.
INCLUDE "4count";
INCLUDE "16dmux";
SUBDESIGN macro2
(
clk : INPUT;
out[15..0] : OUTPUT;
)
VARIABLE
q[3..0] : NODE;
BEGIN
(q[3..0], ) = 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;
Вызов макрофункций 4count и 16dmux осуществляется в логической секции непосредственной ссылкой (в правой части булевых уравнений).
Ниже приведены прототипы этих макрофункций, записанные в файлах 4count.inc 16dmux.inc:
FUNCTION 4count (clk, clrn, setn, ldn, cin, dnup, d, c, b, a)
RETURNS (qd, qc, qb, qa, cout);
FUNCTION 16dmux (d, c, b, a)
RETURNS (q[15..0]);
Соединение портов показано в логической секции файла macro2.tdf. Порядок портов важен, так как должно быть однозначное соответствие между портами, описанными в прототипе функции и при ее реализации в логической секции. В данном примере запятыми отделяются (но не перечисляются) порты, для которых не делается явного подключения.
