МАРСОХОД

Open Source Hardware Project

FPGA & CPLD Блогchips

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


Загрузка ПЛИС из Raspberry PI3

raspberry pi3 loads altera fpga max10 over JTAG

Раздобыл себе плату Raspberry PI3 для опытов.

Подключил плату Марсоход3bis к Raspberry USB кабелем.
Первая мысль, которая пришла в голову: "Можно ли из Linux на raspberry pi3 загрузить проект в ПЛИС платы Марсоход2 или Марсоход3?"

Альтера выпустила Quartus Prime v16

qprime16

Компания Альтера выпустила новую, 16-ю версию своего САПР Quartus Prime для ПЛИС.
Скачать можно на сайте альтеры.

Здесь, как и в предыдущей версии Quartus Prime, существует три вида квартуса: Lite Edition, Standard Edition, Pro Edition. В зависимости от типа редакции САПР поддерживает разные наборы микросхем и разный набор дополнительных возможностей. Конкретные отличия разных редакций квартусов можно посмотреть вот здесь на сайте альтеры.

Меня интересует бесплатная версия Quartus Prime Lite Edition: она поддерживает ПЛИС серии MAX II, MAX V, MAX10, Cyclone IV, Cyclone V, Arria II. Это значит, что мы сможем использовать это ПО с нашими платами Марсоход (MAX II), Марсоход2bis (Cyclone IV), Марсоход3 и Марсоход3bis (MAX10).

К сожалению, для FPGA Cyclone III и платы Марсоход2 нужно использовать отдельную версию Altera Quartus II v13.1.

Что нового в последней 16-й версии? Ну можно почитать вот здесь: https://www.altera.com/products/design-software/fpga-design/quartus-prime/what-s-new.html - как обычно обещают прирост производительности и небывалую оптимизацию. Впрочем, не уверен, что мы это заметим... Вероятно все эти улучшения становятся сильно заметными в очень сложных проектах для очень больших ПЛИС типа Stratix или Arria. Нужно будет поработать с этим квартусом какое-то время, чтобы понять, что стало лучше, удобней (или хуже)..

Я установил себе 16-ю версию, чтобы откомпилировать наш проект "моргаем светодиодами" для Марсоход3 и проверить как загружается проект в ПЛИС через наш программатор MBFTDI. Проверил - успешно откомпилировал и успешно загрузил SOF файл в плату Марсоход3. Работает.

 

Расчет коэффициентов компенсационного FIR фильтра в GNU Octave.

cic fir filters

Во многих примерах проектов SDR радиоприемников для ПЛИС, которые я рассматривал, используется связка из двух фильтров. Идут последовательно CIC фильтр и потом FIR фильтр. Свой SDR приемник, мы сделали так же используя два фильтра последовательно.

CIC фильтр — это интегрально гребенчатый фильтр (cascaded integral-comb filter).

FIR фильтр – фильтр с конечной импульсной характеристикой (finite impulse response filter).

Говорят, что CIC фильтр хорош в реализации, для него требуется не много вычислительных ресурсов и он хорош для использования в задачах передискретизации. Проще говоря, CIC фильтры используются для снижения частоты дискретизации в десятки и сотни раз. Однако, у CIC фильтра есть недостаток — пологая АЧХ. А хотелось бы, чтобы перед ресамплером стоял фильтр с более прямоугольной Амплитудно Частотной Характеристикой.

Поэтому после CIC фильтра ставят второй фильтр, который должен как-то компенсировать пологость АЧХ CIC фильтра. Как его рассчитать?

Структура библиотеки Winrad DLL для SDR радио

vs logo

Программа радиоприемника HDSDR может взаимодействовать с аппаратными SDR приемниками разных производителей. Чтобы добавить поддержку нашей платы Марсоход2 как SDR приемника придется написать интерфейсную DLL со специальным набором экспортируемых функций. Этот набор функций — Winrad API.

На самом деле, Winrad API довольно хорошо описано http://www.winrad.org/bin/Winrad_Extio.pdf , там в PDF даже есть фрагмент кода.

Имеющийся код мне придется адаптировать под прием и передачу через последовательный порт и под протокол передачи, который мы сами себе придумали (5-ти байтные пакеты).

Вкратце расскажу, что же такое эта Winrad DLL. Winrad DLL - это динамически загружаемая библиотека, которая предоставляет программе HDSDR интерфейс для работы с аппаратным приемником. Библиотека Winrad DLL обязана предоставить некоторый минимальный набор функций.

Протокол передачи для SDR радио

5 byte serial port protocol for SDR radio

В продолжение предыдущей статьи об SDR радиоприемнике на основе платы Марсоход2.

Принцип SDR радио — как можно больше обработки производить в программном обеспечении. По этому собственно оно так и называется Software Defined Radio. Устройство приема делает какую-то начальную обработку и передает сырые данные в компьютер, где специальная программа знает, что с ними делать, как декодировать и как воспроизводить.

В нашем SDR радио прием и первичная обработка происходят в плате Марсоход2. Однако потом все накопленные данные нужно передать программе SDR радио. Я использую программу HDSDR из http://www.hdsdr.de/index.html

Чтобы программа HDSDR могла взаимодействовать с нашей платой нужно написать специальную DLL, которая будет экспортировать функции согласно спецификации Winrad API, http://www.winrad.org/bin/Winrad_Extio.pdf. Чтобы понять какие данные нужно передавать, как передавать, как часто передавать — придется изучить эту спецификацию Winrad да и вообще нужно основательно погрузиться в тему цифрового радио.

В своей работе я значительно опирался на статью на хабре "Простой SDR приёмник на ПЛИС".

Из изученного стало понятно, что:

  • данные пересылаемые по направлению от HDSDR к плате редки и малы — это всего лишь целое число, определяющее частоту тюнера. Может быть 32-х битным числом.
  • данные от платы к компьютеру, к программе HDSDR – это поток, например, 50000 выборок в секунду. Каждая выборка — это пара чисел, так называемые I / Q каналы. Числа могут быть целые знаковые 16-ти битные, 24-х битные, 32-х битные или даже 32-х битные числа с плавающей точкой.

Есть несколько способов передавать данные из платы Марсоход2 в компьютер:

  • поставить Ethernet шилд и передавать данные по сети, хоть UDP пакетами
  • передавать через последовательный порт, на плате стоит USB-FTDI чип и у него скорость последовательного порта до 12 Мбит/сек. Вероятно этого хватит?
  • можно еще передавать через тот же USB-FTDI в режиме MPSSE, тогда скорость передачи будет еще больше.

Из всех способов передачи самый простой — это последовательный порт. Давайте попробуем посчитать, хватит ли его пропускной способности.


GitHub YouTube Twitter
Вы здесь: Начало