FPGA & Verilog БлогFPGA chips

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


cat on hdmi

У микросхем FPGA компании Gowin может быть встроенное динамическое ОЗУ, причем один из двух возможных типов:

  • классическая SDR SDRAM типа MT48LC4M16 (64 мегабита);
  • PSRAM (псевдо статическая) HyperRAM типа W955D8MBYA (2*32 мегабита ).

HyperRAM отличается от "классики" интерфейсом и наличием встроенной системы регенерации. Конкретно в чипе GW1NR-UV9QN88PC6/I5, установленном на нашей плате Марсоход3GW, есть ОЗУ именно второго типа. 

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

Проект находится в папке _hdmi_psram_fb репозитория гитхаб https://github.com/marsohod4you/Marsohod3GW.

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.