Если Вы начинаете разбираться со средой проектирования Altera Quartus II, начинаете делать свой новый проект для ПЛИС, то, возможно, эти советы покажутся вам полезными.
1) Нужно понять иерархию проекта. Какой модуль проекта является самым верхним модулем?
Есть несколько способов сделать свой проект для ПЛИС в среде Altera Quartus II.
Первый способ - это воспользоваться визардом. Выбираете в меню пункты File => New Project Wizard и следуя указаниям в диалоговых окнах визарда задаете все нужные параметры будущего проекта. Визард позволяет задавать папку, где будут храниться файлы проекта, имя модуля верхнего уровня, имена подключаемых библиотек, микросхему ПЛИС, для которой делается проект, разные EDA инструменты. К сожалению, новичок осваивающий ПЛИС не очень понимает, что и как нужно в визарде выбирать. Все приходит с опытом.
Второй способ - взять где нибудь на просторах интернета готовый интересующий вас проект для ПЛИС и начинать с него, адаптировать для своей платы ПЛИС. В чужом проекте так же не очень просто разобраться, но можно. Самое главное понять, что является модулем самого верхнего уровня. Входы и выходы модуля верхнего уровня непосредственно идут на входные или выходные контакты микросхемы. Именно поэтому важно знать, что есть модуль вернего уровня. Модуль верхнего уровня включает в себя все остальные модули. Он может быть написан как на языке Verilog HDL / VHDL или быть в графическом виде.
Предположим у вас есть проект в котором нужно разобраться. Например, я открываю проект Amber для платы Марсоход2 - это Amber ARM - система на кристалле!. Скачиваем его , или другой похожий проект с нашего сайта, хоть вот этот:
Затем:
Выбираем в меню View => Utility Windows => Project Navigator... или просто в панели инструментов нажимаем на кнопочку с такой четырехугольной звездочкой иконкой. Появляется окно с иерархией проекта, ну или по крайней мере сразу видно какой модуль самый главный.
В моем случае я вижу главный модуль - это msystem, написанная на Verilog HDL. Если проект еще не компилировался, то возможно всей иерархии проекта и не видно. Это легко исправить. Выбираем пункты меню Processing => Start => Start Hierarhy Elaboration.
После этого в окне Project Navigator уже будет видна вся иерархия проекта в виде дерева, будет видно какой модуль включает в себя другие модули.
Итак, первый совет - обязательно понять, какой модуль на самом верхнем уровне и какие модули включены в иерархию. А то бывает человек целый день меняет схему проекта, а ничего не происходит, его изменения никак не влияют на ПЛИС и он ничего не понимает, отчего же так происходит. Да может просто изменяемый файл вообще не часть проекта?
Изменить или задать новый топ-модуль проекта просто. Нужно открыть файл модуля (хоть на Veriloig HDL или VHDL или графический файл) и сделать его текущим топ модулем из меню Project => Set As Top Level Entity. Все.
2) Что делают неиспользуемые выходы в проекте? Хорошо бы, чтоб они ничего не делали.
На мой взгляд - это довольно тонкий момент. Новичок про это никогда не догадается. Предположим, вы стали счастливым обладателем платы Марсоход, или Марсоход2 или Altera / Terasic DE0 или любой другой. Первое, что приходит на ум - сделать самый первый проект "поморгать светодиодом". Для этого проекта нам нужен один вход ПЛИС куда подключен генератор тактовой частоты и один выход на светодиод. Ну проект простой, счетчик делитель да и все. Делаем назначения для двух пинов в Assignment Editor и готово.
Все в принципе правильно, но есть нюанс. Как правило люди забывают про неиспользуемые пины проекта. У нас ведь готовая собранная плата. Выходы микросхемы ПЛИС куда-то идут на какие-то другие компоненты платы, на микросхемы. Не может ли быть здесь проблем? Редко кто досконально изучает схему платы перед использованием, а зря.
Нужно помнить, что визард создания новых проектов Quartus II по умолчанию, все неиспользуемые проектом пины устанавливает в ноль. Они будут подключены к земле изнутри микросхемы ПЛИС. Если, например, на вашей плате developer kit стоит АЦП и выдает параллельный код на входы вашей ПЛИС, а они вдруг уходят на землю, то для АЦП это будет не очень хорошо. Для нее это будет короткое замыкание, она может начинать греться.
Таким образом, в новых проектах желательно проверять что делают неиспользуемые пины проекта. Зайдите в настройки Assignments => Device. В диалоговом окне найдите кнопку Device And Pin Options. Нажмите ее.
Выбирайте Unused Pins => As Input tri-stated.
После этого не важно, что еще подключено снаружи к ПЛИС. Неиспользуемые выводы будут отсоединены от всех внешних сигналов.
3) Следите за температурой ПЛИС.
После того, как проект создан и откомпилирован настает время испытания проекта в реальной микросхеме FPGA. С помощью программатора нужно загрузить образ прошивки в микросхему и она начнет жить и выполнять новую функцию. Если вдруг что-то пошло не так, микросхема может сильно разогреться и это плохо. Это может быть результат ошибки назначений в проекте, назначений свойств пинов или просто ошибка в логике. Например, шина PCI является двунаправленной шиной. Два агента: материнская плата и плата с ПЛИС не имеют права одновременно выдавать на шину данных свои данные - кто-то может пострадать.
Мой совет, во время загрузки образа в ПЛИС держите на ней палец чтобы почувствовать возможное изменение температуры микросхемы. Если что-то пошло не так - вы успеете выключить питание устройства.
Я что-то не припомню, чтоб так что-то реально сгорело, но помню у нас был стажер, который сделал проект, который загружался в ПЛИС и должен был работать с микросхемами памяти DDR, об которые можно было реально обжечься.
Был конфликт на шине данных. И обнаружить конфликт можно хотя бы по температуре платы - хотя это уже вопиющий случай. Конечно, лучше сложные проекты сперва моделировать в ModelSim и там все проверять, так ведь этот наш стажер утверждал, что все было просимулировано успешно.
Конечно, разных тонкостей при разработке для ПЛИС много, но вот эти советы, пожалуй, никогда не будут лишними..
Подробнее...