FPGA & Verilog БлогFPGA chips

САПР Altera Quartus II / Intel Quartus Prime, язык Verilog HDL и кое-что про VHDL, FPGA Cyclone III, Cyclone IV, MAX II, MAX10. Платы разработчика серии Марсоход, Марсоход2, Марсоход3.


hdmi 800x600

Читатели нашего блога уже наверняка знают, что плата Марсоход3GW построена на основе платы Марсоход3. Мы заменили чип Intel MAX10 на чип китайской компании Gowin GW1NR. В остальном платы, как близнецы, похожи и по габаритам и по компоновке и наличием одинаковых разъемов для шилдов и выход HDMI.

Для платы Марсоход3 у нас когда-то уже был создан проект генерации сигнала HDMI. Можно попробовать адаптировать тот прежний проект к новому чипу. Собственно это мы и сделали. На картинке выше показан вывод вертикальных цветных полос на монитор через HDMI разъем платы Марсоход3GW.

Микросхема FPGA GW1NR-UV9QN88PC6/I5 китайской компании Gowin имеет много довольно интересных встроенных блоков. Сейчас в этом проекте HDMI мы сможем попробовать использовать встроенные в ПЛИС сериализаторы и LVDS блоки.

Кратко скажу, что в используемой нами микросхеме серии GW1NR есть сериализаторы из параллельного кода в последовательный, это такие блоки, как: OSER4, OSER8, OVIDEO, OSER10, OSER16. И есть десериализаторы, преобразующие последовательный код в параллельный, это блоки IDES4, IDES8, IVIDEO, IDES10 и IDES16.

Если бы мы делали проект захвата видео, тогда нужно было бы пытаться использовать модули IDES. Но в нашем проекте HDMI вывода нам нужны блоки преобразования из параллельного в последовательный, а именно OSER10.  Используем их!

Я продолжаю изучать FPGA китайской компании GOWIN и делаю проекты для FPGA платы Марсоход3GW. В этой статье пойдет речь об АЦП. На нашей плате установлена микросхема АЦП ADC1175. Она даёт нам 8ми битные выборки на частоте до 20МГц. Первый эксперимент, который я сделаю - выведу данные из АЦП просто на 8 светодиодов платы. Сделать это в программе Verilog HDL очень просто. Для этого нужно на АЦП подать тактовую частоту pll_out_clk взятую, например из rPLL, и этим же сигналом тактовой частоты защелкивать входные данные в регистре adc_data. Ну а выход регистра потом подать на светодиоды:
...
wire pll_out_clk;
wire pll_locked;
Gowin_rPLL rpll(
   .clkin( CLK ),
   .clkout( pll_out_clk ),
.   lock( pll_locked )
);

//pass clk to external ADC chip
assign ADC_CLK = pll_out_clk;

//capture ADC data
reg [7:0]adc_data;
always @(posedge pll_out_clk)
   adc_data <= ADC_D;

//show ADC data on LEDs
assign LED = adc_data;
...

Чтобы испытать этот проект можно ко входу АЦП на плате Марсоход3GW подключить среднюю точку переменного резистора. Ну а два других вывода переменного резистора подключить к +5В и к Земле соответственно. Вот как на этотом фрагменте схема платы Марсоход3GW я добавил синим цветом:

adc led

Получается делитель напряжения и вот это напряжение на средней точке и можно измерить с помощью нашего АЦП. На представленном выше видео показано, как я вращаю ручку переменного резистора и как от этого действия меняется двоичное число на 8ми светодиодах платы. Понятно, что это очень примитивный проект, но он дает отправную точку для следующих, более сложных проектов.

Далее я собираюсь оцифрованные данные передавать через последовательный порт в компьютер. А на компьютере напишу программу на питоне и она будет мне отображать осцилограммы из полученных данных.

yosys

Существует такой интересный проект OSS CAD Suite. Это пакет программ с открытым исходным кодом для разработки цифровой логики FPGA. Пакет поддерживает несколько типов FPGA микросхем, в основном Lattice (ice40, ecp5, machxo2, nexus), но так же и некоторые микросхемы Gowin.

В этой статье я расскажу, как компилировать проекты для нашей платы Марсоход3GW с помощью OSS CAD Suite. Многие проекты получится компилировать, но, к сожалению не все. Разработчики пакета не имеют полной документации на микросхемы Gowin и это ограничивает их возможности. Каждый желающий может присоединиться к этой open source разработке и внести свой вклад. Более того, CAD поддерживает FPGA типа generic, то есть абстрактные FPGA, которых не существует. Можно проектировать свою ПЛИС и адаптировать это ПО для сборки проектов для вашей FPGA микросхемы.

Расскажу, как использовать OSS CAD Suite для проектирования под нашу плату Marsohod3GW в среде ОС Windows.

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

Итак, взяв за основу первый проект _clk_counter создадим путём копирования новый проект _clk_pll_counter. Напомню, что все проекты (уже созданные и отлаженные) для платы Marsohod3GW находятся в репозитории на гитхаб https://github.com/marsohod4you/Marsohod3GW

Открываю проект в среде Gowin FPGA Designer.
Теперь через меню Tools запускаю IP Core Generator. Выглядит он вот так:

IpCoreGenRPLL

Выбираю тип нового компонента CLOCK -> rPLL. Двойной клик открывает диалоговое окно, с помощью которого можно редактировать параметры нового экземпляра rPLL. Давайте разберемся, как задавать параметры rPLL.

Проект двоичного счетчика это первое, что делает разработчик FPGA для новой платы или нового чипа. Мы таких проектов делали уже много для разных плат на основе ПЛИС компании Альтера/Интел. Но вот я впервые делаю такой проект для китайской ПЛИС GW1NR-UV9QN88PC6/I5, установленной на плату Marsohod3GW.

Дальше расскажу чуть подробнее о проекте, ну и познакомимся со средой проектирования Gowin FPGA Designer. На видео выше показано, как делается сборка проекта и загрузка ПЛИС и показано, что двоичный счётчик работает!