Пошаговое руководство.
1. Создадим новый проект.
Для этого в среде САПР Intel Quartus Prime выбираем пункт меню File -> New Project Wizard.. Появляется новое окно диалога, в котором задаются некоторые параметры нового проекта.
2. Окно диалога для создания нового проекта выглядит вот так:
Диалог позволяет задать имя проекта и папку, куда он будет помещен, имя модуля верхнего уровня проекта, здесь можно подключить имеющиеся у вас файлы дизайна или библиотеки, задать тип микросхемы FPGA и при необходимости задать, какие дополнительные инструменты EDA будут использоваться с проектом.
В основном в этом визарде мы будем нажимать кнопку Next, не задавая каких-то особых параметров. Тем более, что все, что нужно может быть изменено или задано позднее.
3. Выбор папки для будущего проекта и название проекта.
Я назвал создаваемый проект project. Это может быть любое другое имя. Правда, мой совет (он касается не только Quartus, но вообще любых иностранных САПР и инженерных программ) - никогда не давайте имена файлов в кирилице, то есть русскими буквами, и лучше не иметь имен файлов или имен папок содержащих пробел (Например, "Рабочий стол"). Возможно этот совет покажется вам глупым, но поверьте, с этими именами файлов иногда бывают проблемы.
Если папки для проекта пока не существует, то Quartus может спросить создать ли новую папку (Do you want to create it?) - понятно, что тут нужно согласиться.
4. Задаем тип проекта. Project type.
Мы создаем новый пустой проект - Empty project. Теоретически можно было бы воспользоваться созданием проекта по шаблону, Template, но у меня именно цель создать новый проект с нуля. Поэтому я выбираю первый пункт.
5. Добавление новых файлов в проект.
Здесь действительно можно добавить какие-то файлы в проект. Если есть какие-то заготовки, файлы дизайна, схемы, Verilog или VHDL файлов из предыдущих проектов. Их можно здесь добавить. Я же просто пропускаю этот пункт, нажимаю Next.
6. Выбор типа микросхемы FPGA.
Это очень важный пункт меню. Подготовленный проект будет скомпилирован и загружен в конкретную FPGA на конкретной плате. Тип микросхемы нужно знать. Я делаю проект для платы Марсоход3 и там согласно документации стоит FPGA MAX10 10M50SAE144C8G. Именно ее я и выбираю на этом шаге в визарде. На самом деле, тип микросхемы можно задать и позже, через пункт меню Assignments -> Device, но лучше это сделать прямо сейчас.
7. Выбор дополнительных инструментов для проекта.
Здесь предлагается добавить дополнительные инструменты EDA tools используемые совместно с Quartus Prime. EDA - это Electronic Design Automation. Я здесь пока предлагаю ничего не трогать, нам одного квартуса пока хватит.
8. Итоговое диалоговое окно визарда нового проекта Quartus Prime.
В этом диалоговом окне показывается, что же мы навыбирали про создании проекта. В принципе сам проект уже создан, но пока в нем смысла особо нет. Мы нажимаем кнопку Finish и открывается САПР Quartus Prime с нашим пока пустым проектом.
9. Создание первого файла для проекта.
Заходим в меню File -> New и появляется окно, где мы выбираем типр создаваемого файла. Можно создавать проект в виде схемы, може сделать VHDL описание проекта. Я предпочитаю создавать Verilog HDL файлы. Нажимаю OK и новый файл создан. Обычно по умолчанию имя нового файла принимает вид примерно как Verilog1.v и его нужно записать под настоящим именем.
Поэтому, через меню File -> Save As.. сохраняем файл под именем project.v - именно это имя модуля верхнего уровня мы задали в визарде при создании проекта.
Если же задать другое имя файла, то лучше заново указать проекту, какой именно файл будет использоваться в проекте, как содержащий модуль верхнего уровня. Это можно сделать через меню Project -> Set as Top-Level Entity.. Вот этот пункт меню:
10. Редактируем verilog HDL файл.
Редактирую файл созданный на предыдущем этапе.
Я создаю очень простой проект, который содержит простой двоичный счетчик. Он будет тактироваться от входного сигнала clk и будет отображать значение восьми битов счетчика на светодиодах платы Маросход3. Текст модуля:
module project(
input wire clk,
output wire [7:0]led
);
reg [31:0]counter;
always @(posedge clk)
counter<=counter+1;
assign led = counter[27:20];
endmodule
Обратите внимание, что мой модуль имеет имя project и оно совпадает с именем файла Verilog, project.v. У САПР Quartus Prime есть такая особенность, что имя модуля верхнего уровня должно совпадать с именем файла.
11. Назначим сигналы модуля project конкретным выводам микросхемы FPGA.
Это делается через меню Assignments -> Assignments Editor.
Тут не обойтись без документации на конкретную плату, в моем случае, на плату Марсоход3. Я должен посмотреть на схему платы и найти откуда и куда идут нужные мне сигналы clk и leds. По схеме платы я нахожу номера выводов микросхемы и проставляю их в проекте.
На скриншоте видно, что назначение имеет вид "имя сигнала" -> "тип назначения" -> "номер вывода".
Советую писать имена сигналов именно в таком виде, как они указаны в Verilog файле - строчные буквы - это строчные буквы, заглавные это заглавные. Как-то так получилось, что разные версии квартуса по разному воспринимали регистр при назначении сигналов. Чтобы в дальнейшем избежать возможных проблем учитывайте регистр написания имен сигналов при назначении.
Тип назначения - в данном случае это Location, то есть местоположение вывода сигнала. Почти любой сигнал можно вывести на почти любой I/O вывод FPGA. Это просто рай для проектировщиков печатных плат. Если нет особых требований по быстродействию, то они могут разводить трассы печатной платы "как удобно", а уже в проекте FPGA будут назначены выводы на конкретные пины.
В нашем случае мы сейчас не проектируем плату, она уже есть готовая и значит нужно назначать сигналы на выводы согласно их использованию на плате.
Кроме местоположения здесь же можно назначить и другие полезные значения, например, подключить вывод к внутреннему подтягивающему резистору или установить на вход триггер Шмидта.
Номер сигнала - это обычно строка вида PIN_123. Но если корпус микросхемы BGA, то имена выводов бывают и посложнее. В этом моем простом проекте я назначаю только нужные мне 9 сигналов - clk и восемь led.
12. Неиспользуемые выводы FPGA.
На предыдущем шаге мы назначили некоторые важные для нашего проекта сигналы clk и led[7:0]. Однако, на микросхеме FPGA гораздо больше выводов и они все куда-то идут, подключенны к другим микросхемам на плате, к разъемам, кнопкам и прочему. Если мы взяли новую для нас плату, то естественно мы еще пока не знаем ее досконально. Куда ведут остальные сигналы по схеме платы? Нужно время, чтобы разобраться.
Существует довольно простой способ, пока не разбираться. Можно неиспользуемые нашим проектом выводы FPGA совсем отключить от выходов микросхемы.
Для этого зайдем в меню Assignments -> Device и в открывшемся диалоговм окне нажмем кнопку Device And Pin Options.
Справа выбираю Unused Pins и слева проставляю: Reserve all Unused Pins: As input tri-stated.
Все готово. Нажимаем Ok.
13. Компиляция проекта.
Запустим сборку проекта через меню Processing -> Start COmpilation. Сборка проекта занимает некоторое время. Чем сложнее проект, тем дольше идет компиляция.
14. Сборка завершена.
Сборка поекта ведется через несколько этапов: анализ и синтез (Analysis & Synthesis), компоновщик (Fitter), сборщик (Assembler), анализатор потребления питания (Power Analizer), временной анализатор (Timer Analizer). Статус каждого этапа виден в окне статуса. Если у вас этого окна не видно, то его можно вызвать через меню View -> Utility Windows -> Status.
Во время компиляции сообщения выводятся в специальное окно сообщений. Его можно вызвать через меню View -> Utility Windows -> Messages. Последнее сообщение видно на скриншоте - это Quartus Prime Full Compilation was successful - это сообщение об успешной сборке всего проекта.
Вообще, в общем случае, важно читать сообщения предупреждения и конечно, если есть, то сообщения об ошибках компиляции.
В папке проекта после компиляции обычно появляется еще одна папка output_files, где сохраняются различные отчеты и выходные файлы. Файл для загрузкив ПЛИС Intel - это файлы с расширением *.sof
Для микросхем MAX10 кроме sof файла создается еще и pof файл.
С помощью программатора можно загрузить образ sof файла в FPGA, но после снятия питания с платы микросхема FPGA очищается и ее заново придется загружать при следующем включении. Микросхемы MAX10 (в отличии от некоторых других FPGA) могут быть прошиты pof файлом и тогда сразу после включении питания на плату она сразу будет готова к работе.
О том как загружать FPGA с помощью программатора я расскажу в следующей статье.
Подробнее...