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.


android и плата Марсоход
Возникла идея подключить плату Марсоход к смартфону с ОС Android так, что бы  можно было с телефона подавать какие нибудь команды в плату.

Я уже пол-года пользуюсь недорогим HTC Wildfire S, так что телефон для экспериментов есть. Могу попробовать связать телефон с платой Марсоход.  Для чего это нужно еще толком не придумал, но сама идея интересная. Как это можно сделать? У телефона есть разные интерфейсы и самый простой их них, пожалуй – это аудио выход. Я подумал, что, теоретически, я могу на телефоне воспроизводить короткие аудио файлы, например, тоны разной частоты. Если плата Марсоход сможет распознавать эти звуковые тоны, то их можно интерпретировать как разные команды.

Задумавшись о реализации этого проекта я понял, что придется преодолеть массу проблем. Самые серьезные – это:

  1. На плате Марсоход нет аналогового входа, куда можно было бы подавать звук с телефона. Все входы ПЛИС (Altera  CPLD) на плате Марсоход цифровые.
  2. Я не умею писать программы для Android.

Понятно, что проект легким не будет, но, «мы не привыкли отступать».

Синусоида на осцилографе

Язык описания аппаратуры Verilog HDL очень часто используется для проектирования аппаратуры с интенсивными математическими вычислениями. Алгоритмы БПФ (Быстрое Преобразование Фурье), ДКП (Дискретное Косинусное Преобразование), обработка и фильтрация сигналов, нейронные сети, геометрические 3D построения – все это зачастую требует реализации тригонометрических функций (синус, косинус, тангенс) в «кремнии».

Реализация тригонометрии в аппаратуре – очень непростое занятие. Стандарт Verilog поддерживает тип real для симуляции, но не поддерживает его для синтеза. Это значит, что не то, что синус или косинус, но даже базовые математические операции вроде сложения, вычитания или умножения для реальных чисел придется каким-то образом реализовывать с помощью двоичной логики и регистров reg.

mbftdi в среде Altera Quartus II

По результатам тестирования программатора MBFTDI в среде Altera Quartus II было выявлено несколько недостатков. Они не очень критические и касаются поиска подключенного устройства. Сейчас эти недостатки устранены.

Если Вам важно иметь более новую версию драйвера, то ее можно взять здесь:

Изменения в драйвере:

  • Реализована поддержка нескольких (до 4-х ) устройств программатора MBFTDI совместно и одновременно в среде Altera Quartus II (Programmer, SignalTap и др.)
  • Драйвер jtag_hw_mbftdi_blaster.dll для программатора MBFTDI мог мешать работе Альтеровского USBBlaster. Сейчас исправлено.

Для установки драйвера, как и раньше, нужно скопировать драйвер jtag_hw_mbftdi_blaster.dll в папку c:\altera\11.1sp2\quartus\bin64, ну или что-то похожее - зависит от того, куда у Вас установлен Quartus.

 

If someone wants to work with FPGA or CPLD he needs a programming cable. Simplest programming cable for Altera devices is Altera ByteBlaster. Unfortunately it uses PC’s parallel port, which already disappeared from computer rare panel.

Other possibility is Altera UsbBlaster which is absolutely fine because uses popular USB interface. Disadvantage of UsbBlaster is rather high pricing. Another issue is – people cannot easy reproduce UsbBlaster because hardware is protected.

That is why we decided to create our own programming device, as simple and cheap as possible.
Now we have it - MBFTDI :

MBFTDI USB Jtag programmer device

Programmer MBFTDI is built on single chip FTDI FT2232HL.
Description of a chip is here on a vendor web site: http://www.ftdichip.com/Support/Documents/DataSheets/ICs/DS_FT2232H.pdf

This chip is most suitable for our purposes because it has embedded JTAG interface, which is necessary for loading FPGA/CPLD images. Additionally, FT2232HL chip has a possibility to send/receive data via dual serial port or using fast FIFO parallel mode. MPSSE (Dual Multi-Protocol Synchronous Serial Engine) allows to do many other things like control JTAG pins etc.

Schematic of MBFTDI programming device is here:

MBFTDI schematic

Also it is possible to get schematic in form of PDF file:



Programmer is first, but also programming software is necessary.
We had developed our own open source SVF player utility tool. Everybody may get source and windows binary from our web site download section () or from GIT. Sources are both Windows and Linux compatible.

SVF is Serial Vector Format File which describes sequence of JTAG/TAP controller commands. Altera Quartus II can generate SVF files together with other FPGA/CPLD image formats. This means that now developer can use Quartus II, compile his project and obtain SVF file representing loadable image. Then SVF file is passed to SVF player tool which loads image into FPGA/CPLD chip. Here is sample of SVF player usage from console:


C:\Altera\marsohod\mBlasterFtdi\windows\Release>mbftdi.exe ..\..\common\test1.svf
mbftdi - burn MAX2 CPLD from Altera Vector Programming File *.svf
FTDI port to JTAG is used for programming
Usage example: mbftdi myfile.svf
Checking for FTDI devices...
2 FTDI devices found - the count includes individual ports on a single chip
Assume first device has the MPSSE and open it...
Configuring port for MPSSE use...
-----------------------------------
!CHECKING SILICON ID
-----------------------------------
!BULK ERASE
-----------------------------------
!PROGRAM
-----------------------------------
!VERIFY
JTAG program executed successfully.


 

Using SVF Player tool is not the only one possibility.

Nowdays it is also possible to use MBFTDI directly from Altera Quartus II environment. There is a special driver jtag_hw_mbftdi_blaster.dll which can be put into quartus/bin folder of Quartus II installation. Then programmer MBFTDI becomes accessible from Quartus II Programmer or SignalTap or other Quartus II tools:

programmer MBFTDI in Quartus II


Additional info about JTAG and programmer (Russian language here):

 

Давайте подумаем, как на языке Verilog можно описать счетчик в коде Грея (Gray code). Такой счетчик может нам понадобиться для реализации асинхронного FIFO. В кодах Грея соседние значения меняются только в одном бите. Это делает возможным безопасную передачу последовательно меняющихся значений кодов из одного клокового домена в другой. Напомню, что в асинхронном FIFO указатели на голову/хвост очереди пересекают clock domain именно в кодах Грея.