Изучаем САПР Altera Quartus II / Intel Quartus Prime, язык описания аппаратуры Verilog HDL и кое-что про VHDL. Программируем FPGA Altera / Intel Cyclone III, Cyclone IV, MAX II, MAX10. Экспериментируем с платами разработчика FPGA серии Марсоход, Марсоход2, Марсоход3. А еще разбираемся с FPGA Gowin.
Подключил плату Марсоход3bis к Raspberry USB кабелем. Первая мысль, которая пришла в голову: "Можно ли из Linux на raspberry pi3 загрузить проект в ПЛИС платы Марсоход2 или Марсоход3?"
Здесь, как и в предыдущей версии 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. Работает.
Во многих примерах проектов SDR радиоприемников для ПЛИС, которые я рассматривал, используется связка из двух фильтров. Идут последовательно CIC фильтр и потом FIR фильтр. Свой SDR приемник, мы сделали так же используя два фильтра последовательно.
CIC фильтр — это интегрально гребенчатый фильтр (cascaded integral-comb filter).
FIR фильтр – фильтр с конечной импульсной характеристикой (finite impulse response filter).
Говорят, что CIC фильтр хорош в реализации, для него требуется не много вычислительных ресурсов и он хорош для использования в задачах передискретизации. Проще говоря, CIC фильтры используются для снижения частоты дискретизации в десятки и сотни раз. Однако, у CIC фильтра есть недостаток — пологая АЧХ. А хотелось бы, чтобы перед ресамплером стоял фильтр с более прямоугольной Амплитудно Частотной Характеристикой.
Поэтому после CIC фильтра ставят второй фильтр, который должен как-то компенсировать пологость АЧХ CIC фильтра. Как его рассчитать?
Программа радиоприемника HDSDR может взаимодействовать с аппаратными SDR приемниками разных производителей. Чтобы добавить поддержку нашей платы Марсоход2 как SDR приемника придется написать интерфейсную DLL со специальным набором экспортируемых функций. Этот набор функций — Winrad API.
Имеющийся код мне придется адаптировать под прием и передачу через последовательный порт и под протокол передачи, который мы сами себе придумали (5-ти байтные пакеты).
Вкратце расскажу, что же такое эта Winrad DLL. Winrad DLL - это динамически загружаемая библиотека, которая предоставляет программе HDSDR интерфейс для работы с аппаратным приемником. Библиотека Winrad DLL обязана предоставить некоторый минимальный набор функций.
Принцип 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 да и вообще нужно основательно погрузиться в тему цифрового радио.
данные пересылаемые по направлению от HDSDR к плате редки и малы — это всего лишь целое число, определяющее частоту тюнера. Может быть 32-х битным числом.
данные от платы к компьютеру, к программе HDSDR – это поток, например, 50000 выборок в секунду. Каждая выборка — это пара чисел, так называемые I / Q каналы. Числа могут быть целые знаковые 16-ти битные, 24-х битные, 32-х битные или даже 32-х битные числа с плавающей точкой.
Есть несколько способов передавать данные из платы Марсоход2 в компьютер:
поставить Ethernet шилд и передавать данные по сети, хоть UDP пакетами
передавать через последовательный порт, на плате стоит USB-FTDI чип и у него скорость последовательного порта до 12 Мбит/сек. Вероятно этого хватит?
можно еще передавать через тот же USB-FTDI в режиме MPSSE, тогда скорость передачи будет еще больше.
Из всех способов передачи самый простой — это последовательный порт. Давайте попробуем посчитать, хватит ли его пропускной способности.
Подробнее...