Max+plusII/Урок1: различия между версиями

Содержимое удалено Содержимое добавлено
Нет описания правки
(нет различий)

Версия от 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 (круто, не правда ли ?!).