Перейти к содержанию

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

.