Max+plusII/Урок1: различия между версиями
SMile (обсуждение | вклад) Нет описания правки |
(нет различий)
|
Версия от 20:47, 30 октября 2006
Начинаем мучения с MAX+plus II.
1. Создаем папку для проекта (файлов будет ОЧЕНЬ много, рекомендую)
2. Запускаем MAX+plus II и создаем новый проект File->Project->Name [Ctrl+J]. В окне указываем созданную папку и вводим имя, например xcnt. [img001.png]
3. Создаем файл с описанием проектируемой логической схемы, File->New; {File type = Text Editor File}. Откроется окно текстового редактора.
4. Свяжем созданный пустой (пока) файл с проектом, File->Project->Set Project to Current File [Ctrl+Shift+J] Заметим, что в заголовке текстового редактора появилось вместо Untitled.tdf xcnt.tdf
5. Набираем описание. ВНИМАНИЕ! Имя проектируемого элемента в директиве SUBSET должно совпадать с названием проекта, т.е. xcnt
%
Счетчик с коэффициентом пересчета 264,
используются только примитивы AHDL
Параметры выходного импульса не заданы, поэтому выбраны
исходя из простоты решения
%
TITLE "Counter 264";
CONSTANT COEF = 264; -- Коэффициент пересчета
% Внимание!
При изменении коэффициента пересчета в меньшую сторону
возможно придется изменить условие лог.1 на выходе (строка Out = ...)
%
SUBDESIGN xcnt
(
Out : OUTPUT; -- Выход счетчика
Clk, Reset: INPUT =GND; -- Счетный вход и вход сброса
)
VARIABLE
TR[9..1] : TFF; -- Массив T-триггеров
Res_int : NODE; -- Внутренняя связь - асинхронный сброс счетчиков
BEGIN
TR[].(CLK, PRn)= (Clk, VCC);
TR[].CLRn = !(Reset OR Res_int);
-- Двоичный счетчик с параллельным переносом
TR[1].T = VCC;
TR[2].T = TR[1].Q;
TR[3].T = TR[1].Q&TR[2].Q;
TR[4].T = TR[1].Q&TR[2].Q&TR[3].Q;
TR[5].T = TR[1].Q&TR[2].Q&TR[3].Q&TR[4].Q;
TR[6].T = TR[1].Q&TR[2].Q&TR[3].Q&TR[4].Q&TR[5].Q;
TR[7].T = TR[1].Q&TR[2].Q&TR[3].Q&TR[4].Q&TR[5].Q&TR[6].Q;
TR[8].T = TR[1].Q&TR[2].Q&TR[3].Q&TR[4].Q&TR[5].Q&TR[6].Q&TR[7].Q;
TR[9].T = TR[1].Q&TR[2].Q&TR[3].Q&TR[4].Q&TR[5].Q&TR[6].Q&TR[7].Q&TR[8].Q;
IF (TR[].Q == COEF) THEN -- Если досчитали до коэффициента пересчета
Res_int = VCC; -- начинаем счет с 0
ELSE
Res_int = GND; -- Иначе - сигнал сброса не активен
END IF;
Out = TR[9] AND TR[3];
END;
6. Сохраним и проверим описание, File->Project->Save & Check [Ctrl+K]. Появится окно, в котором указано количество ошибок и замечаний, выявленных при проверке. Описания ошибок и замечаний находятся в окне с заголовком Messages - Compiler.
7. Если все OK, компилируем проект File->Project->Save & Compile [Ctrl+L], иначе - к п.5
8. Можно приступить к симуляции. Откроем редактор временных диаграмм (Waveform Editor) MAX+plus II->Waveform Editor
9. Чтобы добавить сигнал, можно дважды кликнуть ЛКМ по пустому месту под разделительной линией, а можно с помощью контекстного меню (клик ПКМ) Insert Node... Чтобы отобразить список доступных сигналов есть кнопка List, но настоящие гуру не боятся трудностей и набирают названия и тип сигнала вручную. Если же выбрать название сигнала из появившегося списка, то все параметры подставляются автоматически. Для начала выберем Reset (в скобках - I, т.е. это вход) OK. Аналогично нужно добавить все сигналы из списка. Hint Если список не появился, значит проект не скомпилирован
10. Установим форму входных сигналов, в нашем случае это сигнал сброса Reset и взод тактовых импульсов Clk. Можно отключить привязку к сетке, чтобы делать сигналы произвольной длительности Options->Snap to Grid. Выбрать основной режим (слева вверху должна быть активна стрелочка), теперь удерживая ЛКМ можно выделить отрезок временной диаграммы. Затем можно установить значение на этом участке либо в 1, либо в 0 (кнопки слева с 0 и 1). Нужно сделать единичный импульс сброса.
11. Можно также заставить редактор сформировать последовательность импульсов, но для начала увеличим время симуляции до 10 мс File->End time {Time = 10us}. Теперь все будет видно. Сформируем тактовые импульсы, чтобы выделить всю строку целиком, нужно ткнуть ЛКМ, например, по названию (Clk). Затем ПКМ по выделенному и в контекстном меню Owerwrite->Clock..., либо слева кнопочку с красным секундомерчиком. В окне выбирается начальное состояние {Starting Value = 0} период {Clock Period = 15ns} множитель {Multiplied by = 1}.
12. Симуляция с сохранением Project->Save & Simulate [Ctrl+Shift+L]. Появится окно с предложением сохранить файл с временной диаграммой, отказываться не стоит.
13. Чтобы снова открыть окно с диаграммой Open SCF в окне Simulator Timing Simulation или просто найти окно "вручную". Просматриваем, не забывая о полосе горизонтальной прокрутки, изучаем, радуемся.
14. Для оценки быстродействия MAX+plus II->Timing Analyzer, выбрать режим оценки производительности Analysis->Registered Performance. ЛКМ по Start. OK. Смотрим чуть ниже спидометра и видим параметр Frequency, должно быть 227.27MHz (круто, не правда ли ?!).