Quartus II, начало знакомства

Программа на vhdl уже есть, теперь расскажу что с ней делать.

Вам нужен Quartus II Web Edition (если собираетесь работать с ПЛИС фирмы Altera), скачивайте по ссылке https://www.altera.com/download/dnl-index.jsp. Новую версию качать смысла не вижу, у меня 8.1 и я полностью доволен, в 9 версии отключили поддержку старых чипов, а в 10 уже нет симуляции.
С установкой проблем не должно быть.

При запуске программа предлагает создать новый проект или открыть существующий

выбираем “Create a New Project”, если уже зашли в программу, тогда
File->New Project Wizard…
Не думаю что вы увидите что-то новое: выбор каталога и название проекта, добавление файлов к проекту, выбор чипа, финиш.

Теперь нужно создать файл (основываясь на статью Что такое VHDL. Простейший пример создания логического элемента в ПЛИС) создаем файл vhdl
File->New->VHDL File


Копипастим в него весь код, сохраняем. Теперь указываем программе что это главный файл проекта
Project->Set as Top-Level Entity

(без этого ничего не получится).

Можно компилировать.
Processing->Start Compilation (Ctrl+L)
либо фиолетовый треугольник вверху на панели.

Выводится отчет о компиляции, если все хорошо – идем дальше.

Перед прошивкой нужно назначить соответствие между сигналами входа и выхода в проекте и пинами чипа. Заходим
Assignments->Pins

Внизу видим название наших сигналов. В поле Location просто выбираем нужный пин, либо клацнуть два раза на пине (где изображение микросхемы) и выбрать нужное имя.

В ПЛИС все пины равноправные, могут быть как входом, так и выходом, или двунаправленные. Некоторые выводы могут быть источником глобального клока, глобальным сбросом или глобальным enable. В нашем проекте есть все эти виды сигналов, конечно не обязательно их подключать к этим пинам, но в большем проекте где тактовый сигнал идет на много модулей это будет эффективней, поскольку физически они так построены внутри чипа. Также в зависимости от конкретной микросхемы можно выбирать нагрузочную способность вывода, подключать подтягивающий резистор или защитный диод.

После назначений выводов можно приступать к программированию
Tools->Programmer


Собственно все.

И понеслась…

Когда проект состоит из множества файлов (а это чаще всего), тогда удобно чтобы главным был файл схемотехнического описания. Создаем
File->New->Block Diagram/Schematic File
Сохраняем, назовем его main.

Чтобы добавить туда наш vhdl файл, надо создать с него символьный файл. Для этого выбираем vhdl файл, жмем
File->Create/Update->Create Symbol File for Current File


Возвращаемся к нашему main.bdf, жмем Symbol Tool (кнопочка в виде логического элемента И).

Программа создала 2 символьных файла, поскольку в vhdl два entity. Собственно то что мы описали в entity мы видим в образе этого символьного файла, некий черный ящик у которого есть входы и выходы, а то что в нем происходит описано в architecture.

Теперь добавляем пины, даем им какое-то осмысленное название.


Должно получится что-то типа этого:


Здесь можно добавлять различные интересные штуки, такие как микросхемы стандартной логики или различные сумматоры, мультиплексоры и т. д.

Также в зависимости от используемой микросхемы ее «фарш» в виде памяти, или как в семействе MAX II, встроенный генератор на 5 МГц. Все добавляется и соединяется проводами, причем в чипе оно также будет физически соединено.


Сохраняем файл, снова проделываем
Project->Set as Top-Level Entity

Компилируем.

Теперь мои замечания и доработки проекта.

Здесь 2 entity будут лишними, поскольку в схемотехническом файле можно соединять все блоки привычным образом и одни сигнал пускать куда угодно.

Также здесь не нужно подключать библиотеку, т. к. она не используется (в ней описаны сигналы типа std_logic).

Наш файл упрощается до такого
entity counter is -- описание 16-разрядного счетчика по переднему фпронту
        port (
                c_in,enab_c,res_c:in bit;
                c_out:out integer range 0 to 65535
        );
end counter;

architecture count of counter is -- архитектура данного счетчика
begin
process (c_in)
variable cnt:integer range 0 to 65535;
begin
if (c_in'event and c_in='1') then 
	if (res_c='0') then
		cnt:=0;
	elsif (enab_c='1') then cnt:=cnt+1;
	end if;
end if;
c_out<=cnt;
end process;
end count;


теперь внесу свои 5 копеек в код

entity counter is -- описание 16-разрядного счетчика по переднему фпронту
        port (
                c_in,enab_c,res_c:in bit;
                c_out:out integer range 0 to 65535
        );
end counter;

architecture count of counter is -- архитектура данного счетчика
begin
process (c_in, res_c) –- добавлен сигнал сброса в список чувствительности процесса
variable cnt:integer range 0 to 65535;
begin
if (res_c = '0') then -- асинхронный сброс
	cnt:=0;	
elsif (c_in'event and c_in='1') then 
	if (enab_c='1') then 
		if (cnt = 65535) then	-- так правильнее, хотя ни на что не влияет
			cnt := 0;
		else cnt:=cnt+1;
		end if;
	end if;
end if;
c_out<=cnt;
end process;
end count;


советую прочитать статью по симуляции и самостоятельно протестировать эту программу.
http://marsohod.org/index.php/ourblog/11/86-quartussim

Отмазки
Исторически сложилось что я описал создание проекта в Квартусе по первой статье о vhdl, хотя лучше было бы по второй. Но так как у меня были замечания по этой статье, а также хотелось Ultrin'у показать как создается проект в Квартусе я решил ничего не переделывать.

Комментарии (29)

RSS свернуть / развернуть
Хорошо получилось.
Надо будет скачать Qwartus и поэкспериментировать…
0
Хы. Тема ПЛИС актуальна как никогда. Как оно ВНЕЗАПНО полезло из всех щелей. Так глядишь и на полноценный курс соберется. Марсоход, конечно, жжот. Но товарищам нехватает наглядности и подробностей.

А не влезть ли мне в эту миску своим рылом… Тем жирная и вкусная. Только я на армы покусился, а за всеми зайцами бегать…
+1
Просто инфы про них в сети мало, а люди ими занимающиеся есть. И вдруг появилась простая возможность рассказать об этом всем…

у Марсохода почти ничего не объясняется, просто вылаживают проекты.
0
Я тоже на АРМы покусился, но периодический взрыв мозга ПЛИСами помогает голову разгружать :)
0
Не хватает только от вас отладочной платы на подобии той, что была для AVR, тогда можно будет марсоходу составить конкуренцию.
0
У меня есть простая отладка на Асех 1К. Но ее надо дорабатывать, т.к. Асекс я запустить не смог… Обвес был простой — стабилизаторы по питанию на 3.3 и 2.5 В, конфигуационное пзу AT17..., куча джамперов для переключения режимов программирования. Наверное заведу тему в своем блоге, чтоб собрать советы что туда нафаршировать при доработке.
0
Асекс уже устарели и их не выпускают, для начала либо MAX II (у меня такая) либо Cyclone. Наверно лучше даже MAX II, epm570 с головой хватит, с питанием у них заморочек нет, встроенный генератор, немного флэш памяти, добавить ОЗУ и отличная плата получится.
0
А может у кого есть заготовки на Xilinx?
0
Да я знаю, что устарели. просто валяются в заначке еще с прадедовских времен, халявные, не выкидывать же их… А новые покупать надо…
0
Вообще тема о ПЛИС становится популярной, а для меня в особенности. Пока еще не прочел всех статей, но до сих пор не решу на каком производителе остановиться — Altera или Xilinx. В любом случае ужасно рад, что появилось это сообщество и народ выкладывает статьи на тему ПЛИС, а то начинать только с забугорной литературы и даташитов как-то грустно.

ЗЫ. Параллельно пытаюсь освоить AVR. Ничо так ))))))))))
ЗЗЫ. Обращение к тем, кто знает и умеет: ужасно буду благодарен вам (наверно, не только я), если вы продолжите рассказывать об этой интересной теме с таким же энтузиазмом
0
В постсоветском пространстве почему-то Альтеровская продукция более популярна (ИМХО, возможно по-тому, что есть официальные центры Альтеры), а вот за рубежом, особенно у японо-корейцев и в европе очень часто встречаюсь с разработками под Xilinx. На мой взгляд, русскоязычных материалов под альтеру больше и она проще в освоении.
0
Quartus II, начало занкомства
Название исправить не желаете? :)
0
спс
0
Был у меня както учебный модуль DE2 от Altera. Набаловался вдоволь. Сделал фильтр цифровой НЧ и ВЧ (сгенерировал их матлабом), на лайн_ин засунул музычку с плеера, на выходе слушал фильтрованый звук в зависимости от нажатых кнопок на модуле… Тогда и пожалел что выбрал тему диплома, связанную с DSP-процессорами… Так захотелось все на плисах сделать.
— А так, вскоре получу сертификаты от Altera по верилогу и по квартусу. Уж пошла у меня эта тема. Еще планирую на ниос сертефикат получить. Вобщем, ПЛИСы — оченькрутая и интересная тема.
+1
Согласен, отличная среда. Для тестирования простейшей логики на железе, если нет реального контроллера используйте www.labfor.ru/?act=metod&target=metod_leso2_1 я на нем все лабы делал, отличная идея с замутом на удаленную работы с контроллером.
0
  • avatar
  • pkm
  • 12 марта 2011, 19:43
Без реального контроллера не интересно. Надо будет придумать что-то с отладочной платой чтобы читатели могли посмотреть все в работе и изобретать свое.
В принципе код на VHDL будет одинаково выполнятся в любой ПЛИС, так что если ничего не придумаю опишу общие принципы создание отладочной платы.
0
Как только вы хоть чуть-чуть приблизитесь к максимально доступным для вашего чипа частотам, вы внезапно обнаружите, что код может «исполняться» по-разному даже после сборки под один и тот же чип, одной и той же софтиной с одними и теми же настройками. Времянки — страшная штука.
0
Подскажите пожалуйста, только только начал осваивать VHDL, написал небольшую программу, пытаюсь её скомпилировать, но выводится ошибка:
Error: Peak virtual memory: 271 megabytes
Пробовал с уже готовыми программами-примерами с этого сайта — ошибка аналогичная. На alteraforum.com прочитал, что связано это как-то с ядрами какими-то, с Nios II, но не совсем понял как именно и что делать (в английском не очень хорошо шарю). Помогите разобраться.
0
На форуме Альтеры говорят что проект занимает больше ресурсов чем есть на кристалле. Можете выложить его сюда, или хотя бы дать больше информации.
0
Ага, это так. У меня на первый раз еще смешнее вышло. Логика была — MAX7000S на 128 ячеек :) Компилирую проект — все лезет, но в притирку. Я обрадовался, назначил пины на ноги (входы/выходы уже физические) — а оно… хрен, не лезет. Благо там можно было урезать осетра и снизить разрядность (это был точный генератор, управляемый с компа, который умел давать постоянную частоту и свип-сигнал), что я и сделал. Да еще один из счетчиков пришлось перенести в контроллер, что уже не труъ. Тем не менее, даже на 128 ячейках такой генератор можно сделать с разрядностью 20 бит (частоты от 0 до 1200 Гц выводятся с точностью 0.001 Гц). Как я кусал локти тогда, что связался с этим щщщщитом, семейством MAX7000S — но это было от незнания…
0
Версия 8.1 квартуса уже не качается, пишет «404 файл не найден»…

качаю 9.1 SP2
0
  • avatar
  • WitGo
  • 02 сентября 2012, 16:15
И с другой инструкцией тоже самое… порядок действий такой же как и здесь описано, и такая же ошибка.

я сделал скрины с экрана

Делаю проект по инструкции www.marsohod.org/index.php/ourblog/11/78-newproject
назначаю главный файл проекта:
[URL=http://radikal.ru/F/s40.radikal.ru/i090/1209/70/6c88d18ae26e.jpg.html][IMG]http://s40.radikal.ru/i090/1209/70/6c88d18ae26et.jpg[/IMG][/URL]

но при компиляции все равно получаю ошибку:
[URL=http://radikal.ru/F/s017.radikal.ru/i441/1209/18/9491d8cb5c20.jpg.html][IMG]http://s017.radikal.ru/i441/1209/18/9491d8cb5c20t.jpg[/IMG][/URL]

в чем дело?
Quartus II версия 9.2 SP2
0
  • avatar
  • WitGo
  • 02 сентября 2012, 20:37
Присоединяюсь к WitGo.
Создаю проект по этой инструкции, в консоли квартуса получаю:

Info: Found 4 design units, including 2 entities, in source file new.vhd
	Info: Found design unit 1: counter-count
	Info: Found design unit 2: one_element-a
	Info: Found entity 1: one_element
	Info: Found entity 2: counter
Error: Top-level design entity "new" is undefined
Error: Quartus II Analysis & Synthesis was unsuccessful. 1 error, 0 warnings
	Error: Peak virtual memory: 207 megabytes
	Error: Processing ended: Wed Nov 21 09:41:43 2012
	Error: Elapsed time: 00:00:04
	Error: Total CPU time (on all processors): 00:00:02
Error: Quartus II Full Compilation was unsuccessful. 3 errors, 0 warnings


Quartus II 9.1 build 350
В чем дело?
0
Разобрался блеать.
Оказывается проект нужно было назвать «one of element».
Прям как описываемую суЧность.
0
Хорошая заметка. ИМХО, первые два вопроса начинающего (по своему опыту):

— Как из шины вывести отдельный проводник, чтобы назначить на него физический пин?
— Как из исходника сделать элемент?

Статья отвечает как раз на второй вопрос.
А на счет отладочной платки — не надо начинающему связываться с MAX II, хотя, оно и немного удобнее циклона тем, что flash есть встроенный. Уверяю вас, чего-то большего захочется ОЧЕНЬ быстро :) так что только циклон и ячеек не менее 5k. По цене будет — ну один раз пива не попил :)
0
По цене будет — ну один раз пива не попил :)
Хренасе вы там пива пьете)
0
Ну засмущал аж. Посмотри цены в терраэлектронике той-же.

А по сабжу: вот чем логика хороша в отличие от контроллера — это:

— Ну понятное дело, все распараллелено (и это главное!). Считай чего-то, лей в UART, читай из SPI — все одновременно, лишь бы память успевала (ну это, если она вообще нужна).
— Мало каких-то интерфейсов? Добавь хоть сколько, каких надо на одном камне.

Но есть, конечно, вещи, для которых логика, ИМХО, не очень подходящая штука: например поддержка FAT, стека TCP/IP… и это все что я вспомнил :)
Так же, не следует заниматься херней и пытаться запихнуть в логику какой-нибудь проц, например альтеровский Nios II. Это бессмысленно, лучше взять готовый, он все равно выиграет по скорости, а гемора будет сильно меньше.
0
Ну если есть неиспользованные ресурсы, то уж лучше помучаться и запхать ниос, чем, тулить внешний. А вообще многие вещи, которые делают на МКконроллерах/процессоре часто можно заменить не сложным цифровым автоматом.
0
Для новичков посоветую еще неплохую серию статей по Quartus I. Там есть и компиляция, и назначение портов, и моделирование и ТаймКвест.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.