FPGA chips

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


На этом демонстрационном видео показана очень простая игра Теннис, реализованная в плате Марсоход3GW.

Здесь используется HDMI вывод изображения, которое формируется на лету просто из текущих координат строчной и кадровой развертки. Управление ракеткой выполнено переменным резистором, который подключен к АЦП платы.

Про HDMI вывод я уже писал раньше, впрочем, как и про захват данных из АЦП.

Весь проект можно посмотреть в папке _hdmi_tennis нашего репозитория на github: https://github.com/marsohod4you/Marsohod3GW

Если вы захотите повторить или просто испытать этот проект, то проще всего приобрести плату FPGA Марсоход3GW2 в нашем интернет магазине!

buy button

 

 

 

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.