Проект двоичного счетчика это первое, что делает разработчик FPGA для новой платы или нового чипа. Мы таких проектов делали уже много для разных плат на основе ПЛИС компании Альтера/Интел. Но вот я впервые делаю такой проект для китайской ПЛИС GW1NR-UV9QN88PC6/I5, установленной на плату Marsohod3GW.
Дальше расскажу чуть подробнее о проекте, ну и познакомимся со средой проектирования Gowin FPGA Designer. На видео выше показано, как делается сборка проекта и загрузка ПЛИС и показано, что двоичный счётчик работает!
Я написал программу на Verilog HDL и тут, понятное дело, никаких отличий от альтеровской логики нет.
Вот моя программа:
module top(
input CLK, KEY0, KEY1,
input [7:0] ADC_D,
input [7:0] FTD,
input [7:0] FTC,
input FTB0,
input FTB2,
output FTB1,
output FTB3,
output ADC_CLK,
output [7:0] LED,
output [18:0] IO,
output TMDS_CLK_N,
output TMDS_CLK_P,
output [2:0] TMDS_D_N,
output [2:0] TMDS_D_P
);
reg [28:0]cnt = 0;
always @( posedge CLK )
if( KEY0==1'b0)
cnt <= 0;
else
if( KEY1==1'b1)
cnt <= cnt + 1;
assign LED = cnt[28:21];
//Serial_RX -> Serial_TX
assign FTB1 = FTB0;
assign FTB3 = FTB2;
assign IO = 0;
assign ADC_CLK = 1'b0;
assign TMDS_CLK_N = 1'b0;
assign TMDS_CLK_P = 1'b0;
assign TMDS_D_N = 4'd0;
assign TMDS_D_P = 4'd0;
endmodule
В этом коде все просто: входной сигнал CLK модуля верхнего уровня top используется, как входная частота. Этот сигнал подается на двоичный счетчик [28:0]cnt. При этом, при нажатии на кнопочку KEY0 платы происходит сброс регистра счетчика в ноль, а при нажатии на кнопочку KEY1 происходит приостановка счета. Сигналы KEY0 и KEY1 от кнопочек подтянуты резисторами к напряжению питания, поэтому логика на них получается обратная. Ненажатая кнопка дает сигнал логической единицы (1'b1), а нажатая дает ноль (1'b0). Для обнуления или приращения значения регистра счетчика cnt испольхуется положительный фронт сигнала тактовой частоты CLK.
Проект простой, тут особенно нечего рассказывать. Однако, есть что рассказать про среду проектирования GOWIN FPGA Designer. Тем более, что раньше мы ни о чем подобном на нашем сайте не говорили.
Предлагаю немного поизучать эту среду IDE прямо сейчас. А потом я вернусь к рассказу о счетчике.
Скачать систему проектирования можно на сайте китайской компании https://www.gowinsemi.com/en/support/download_eda/
но требуется предварительная регистрация на сайте. К сожалению, Education Edition не поддерживает наш чип и требуется Standard Edition. Для неё, в свою очередь, требуется лицензия, привязанная к MAC адресу вашего компьютера. В былые времена, можно было запросить лицензию на сайте gowinsemi и они её присылали. Однако сейчас с этим стало трудно - они часто просто не отвечают. Так что ищите "свободные" лицензии в интернетах - они есть.
Среда проектирования Gowin EDA выглядит по спартански просто. Всё выполнено в минимальном достаточном стиле, без излишеств, но достаточно, чтобы достигнуть результат.
В панели инструментов есть всего две-три кнопки, которыми мы будем часто пользоваться. Обычно это "Run all" - собрать весь проект (при этом будет выполнен и синтез и размещение логики) и Programmer - вызывает диалоговое окно программатора, с помощью которого мы будем загружать проекты в FPGA.
Есть несколько полезных окон-панелей:
- Design - список файлов в проекте;
- Process - показаны этапы сборки проекта и всякие полезные отчеты вроде синтезатора, Netlist, отчет Place&Route, список пинов проекта и другие:
- Hierarchy - вид иерархии проекта после компиляции:
- Messages - сообщения системы, сообщения синтезатора, place&route, сообщения программатора и так далее:
- Console - консоль ввода команд. Что там вводить я пока не знаю.
Доступ этим окнам панелям происходит например через меню Window -> Panels. Панели можно включать или выключать. Так же Панели можно перемещать в окне программы и размещать в удобном вам месте.
В панели Design отображаются файлы проекта. Здесь есть обычные Verilog файлы и файлы с расширением cst или sdc. Файл sdc определяет временные ограничения проекта. Файл cst определяет физические ограничения проекта. В частности здесь прописывается расположение выходных сигналов на конкретный вывод микросхемы FPGA.
Для наших демонстрационных проектов конкретно для нашей платы Marsohod3GW эти ограничения и назначения уже выполнены и менять их как правило не следует.
Хочу обратить ваше внимание еще на пару моментов.
Через меню Project -> Set Device можно назначить тип микросхемы FPGA используемой в проекте.
Понятно, что для наших проектов и для нашей уже готовой платы мы уже назначили тип, он у нас один GW1NR-UV9QN88PC6/I5 и менять его не следует. Однако, это диалоговое окно полезно тем, что вы можете посмотреть какими ресурсами обладает каждый конкретный FPGA чип Gowin и таким образом планировать ваши будущие разработки.
Если в проекте используется несколько модулей из разных файлов Verilog, то в проекте полезно указать, какой из модулей является модулем самого верхнего уровня. Иначе можно получать ошибки компиляции и долго не понимать в чем же проблема. Делается это из диалогового окна Configuration, доступного через меню Project -> Configuration:
Здесь же в диалоговом окне Configuration полезно назначить Dual-Purpose Pin. Некоторые выводы микросхемы имеют несколько возможных функций. Чтобы использовать их в качестве обычного FPGA пина нужно поставить галочку возле имени сигнала, который вам не нужен.
Только не ставьте галочку напротив JTAG. Иначе проект не будет повторно загружаться, потребуется сброс питания на ПЛИС. Если же вы не поставите эти галочки, то проект может даже и не скомпилироваться, потому, что проекту не хватит свободных I/O выводов.
Одна из важнейших функций Gowin EDA - создание экземпляров встроенных блоков. Это Ip Core Generator, доступный через меню Tools.
С помощью этого генератора можно создавать специфичные параметризованные блоки PLL, сериализаторов, DDR входов или выходов и многое другое. Микросхемы Gowin богаты встроенными блоками и их нужно будет применять. В моем первом простом проекте двоичного счетчика я ничего такого использовать не буду, но в следующих проектах - обязательно будем это делать.
Вот так коротко я пробежался по основным функциям среды проектирования Gowin FPGA Designer. Теперь давайте же уже запустим наш счетчик.
Первое, что я делаю - нажимаю кнопку на панели инструментов Run All, чтобы выполнить синтез и размещение логики в ПЛИС. Можно перейти в панель Process и убедиться, что и Synthesis и Place & Route выполнены успешно и возле них показаны зеленые иконки - индикаторы.
Так же в консоли и в окне сообщений нет ошибок. Значит всё нормально и проект собран успешно.
Теперь запускаем программатор, например, нажимая соответствующую иконку в панели инструментов. Появляется вот такое диалоговое окно:
На плате Марсоход3GW, как и на предыдущих наших платах стоит двухканальная микросхема FT2232H. Gowin IDE поддерживает этот вид интерфейсных микросхем. На нашей плате первый канал FT2232H это JTAG порт, второй это последовательный порт в ПЛИС. Номер канала можно выбрать нажав кнопку USB Cable Settings в диалоговом окне программатора Gowin. Важно выбрать имя файла для прошивки, обычно это файлы с расширением *.fs (который обычно после сборки проекта находится в папке impl/pnr/ ) и тип операции SRAM Program. В режиме SRAM Program наш проект будет загружаться в статическую память FPGA и после отключения питания вся логика естественно пропадет и нужно заново загружать. Однако, если вы уже отладили проект и уверенны в нем, то вы можете прошить внутреннюю флэш память микросхемы Gowin и тогда после включения питания плата и FPGA будет сразу работать. Чтобы прошить внутреннюю память нужно выбрать режим embFlash Erase, Program.
Вот пожалуй основные сведения я изложил.
Загружаю проект в ПЛИС - двоичный счетчик работает!
PS: В завершении статьи скажу, что все проекты для платы Marsohod3GW я буду размещать на гитхабе в репозитории https://github.com/marsohod4you/Marsohod3GW
Этот проект двоичного счетчика находится в папке _clk_counter нашего репозитория.
Подробнее...