Max+plusII/Урок1
Начинаем мучения с MAX+plus II
править1. Создаем папку для проекта (файлов будет ОЧЕНЬ много, рекомендую) ВНИМАНИЕ!!! Путь к папке проекта(впрочем как и название самой папки) не должен содержать русских букв, иначе зря паримся. Ферштейн?
2. Запускаем MAX+plus II и создаем новый проект File->Project->Name [Ctrl+J]. В окне указываем созданную папку и вводим имя, например xcnt.
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 - 1) THEN -- Если досчитали до [коэффициента пересчета - 1], то есть на вход пришло ((COEF-1) + 1) импульсов 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 ВНИМАНИЕ!!! Если такого пункта там не имеется в наличии и когда завезут не сказано, то надо скопировать файлик cpt.dll из папки, откуда устанавливали, в папку с устанновленным Max+plusII. И все.
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 (круто, не правда ли ?!).
.