FPGA & Verilog БлогFPGA chips

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


Я продолжаю изучать 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. На видео выше показано, как делается сборка проекта и загрузка ПЛИС и показано, что двоичный счётчик работает! 

m3gw angle2

Мы разработали новую плату на базе китайского чипа Gowin GW1NR-UV9QN88PC6/I5.

Используемая нами микросхема Gowin FPGA имеет встроенные ресурсы:

  • до 71 User IO pin
  • 8640 LUT
  • 6480 FF
  • 17280 bit SSRAM
  • 468kb BSRAM
  • 608Kb User Flash
  • 5 DSP Blocks
  • 2 PLL
  • встроенный генератор OSC
  • встроенные блоки сериализаторов OSER/ISER, ELVDS/TLVDS, ODDR/IDDR

Плата Марсоход3GW визуально довольно похожа на платы Марсоход3, она такой же геометрии и основные компоненты расположены так же. Но чип FPGA другой. Что ещё есть на плате?