Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Altera DE1-Soc + Linux + NiosII + Qt какие библиотеки нужны?
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
RamZoom
Всем привет! Имеется плата DE1-Soc с двух ядерным кортексом и ~85-ю тысячами логики. С сайта terasic был скачан и установлен образ с графическим линуксом. Из репозиториев (не из исходников!) при помощи танцев с бубнами был установлен Qt и полностью настроен. Приложения собираются и запускаются. Какие библиотеки необходимо доустановить Qt для взаимодействия с логикой, т.е. с NiosII и подключенной к нему периферией???
Jury093
Цитата(RamZoom @ Jun 28 2017, 19:39) *
Всем привет! Имеется плата DE1-Soc с двух ядерным кортексом и ~85-ю тысячами логики. С сайта terasic был скачан и установлен образ с графическим линуксом. Из репозиториев (не из исходников!) при помощи танцев с бубнами был установлен Qt и полностью настроен. Приложения собираются и запускаются. Какие библиотеки необходимо доустановить Qt для взаимодействия с логикой, т.е. с NiosII и подключенной к нему периферией???

что в вашем понимание "для взаимодействия с логикой"?
если с устройствами в линуксе, то открываете устройство стандартными вызовами и общаетесь с устройством (при наличии прав в системе)
если с логикой в плане ФПГА, то через какие-нить мосты или шины (это стык проц-фпга) и драйвера, либо самописные, либо из ниоса.. естесно, со стороны ФПГА д.б. что-то типа блока регистров или подобного..
RamZoom
Будет собран проект с qsys, который будет включать в себя подключенное ядро и порт светодиодов (led). Так вот и вопрос как обращаться к led из программы, написанной на Qt. В примерах есть #include <sys/mman.h>
#include "hwlib.h"
#include "socal/socal.h"
#include "socal/hps.h"
#include "socal/alt_gpio.h",
но у меня нет этих библиотек. Сейчас в описаниях нашел вроде они будут в папках самого Quartus после его установки от 13.1 версии и выше. Завтра посмотрю
Gleb80
Цитата(RamZoom @ Jun 28 2017, 19:39) *
... Имеется плата DE1-Soc .... Какие библиотеки необходимо доустановить Qt для взаимодействия с логикой, т.е. с NiosII и подключенной к нему периферией???


Приветствую! Тоже сейчас разбираюсь с платой DE1-SoC. Очень помогают вот эти статьи:
https://zhehaomao.com/blog/fpga/2014/05/24/sockit-10.html
https://habrahabr.ru/company/metrotek/blog/235707/
https://habrahabr.ru/company/metrotek/blog/248145/
В частности, в статье, на которую указывает первая ссылка, рассказывается как установить связь между вашим приложением, выполняемом в пространстве пользователя Linux и аппаратурой в FPGA.
Если я правильно понял, у вас Linux крутится на HPS, а в FPGA еще ядро NIOS, для которого своя программа нужна?
А графический интерфейс как организован? Через ETHERNET на ПК или есть какой-то модуль с дисплеем?
AVR
В Qt нет никакого специального механизма, относящегося к Altera HPS. Вот я пишу консольные программы на Qt для Altera SoC, а с ПЛИС работаю через специальный драйвер, как работал бы с любым прочим устройством. Сначала надо усвоить структуру, что они хоть и лежат в "одном корпусе", но как они связаны между собой? И тогда станет всё очевидно, а Qt тут ни при чем.
Gleb80
Цитата(AVR @ Sep 11 2017, 09:36) *
...Вот я пишу консольные программы на Qt для Altera SoC ...

В каком смысле консольные? Я думал, что Qt предназначено для создания графического интерфейса пользователя.
Как раз сейчас размышляю над тем, как организовать отображение данных и графический пользовательский интерфейс на своем устройстве.
Данные это графики, в основном FFT принятого сигнала.
Устройство состоит из DE10-Nano + Linux, вот такого ЖКИ:
https://www.terraelectronica.ru/catalog_inf...hp?CODE=1919182
который соединен с DE10-Nano через HDMI,
а также, усилителя аналогового сигнала, подаваемого затем на АЦП, стоящем на DE10-Nano.
Так вот, чтобы рисовать свои графики, я думаю использовать Qt.
С радостью послушаю (почитаю) советы людей, уже применявших SoC + Qt. Стоит ли вообще в данном случае связыаться с Qt?
Может существует иной путь для создания графического пользовательского интерфейса на SoC?
Насколько я понял из вот из этого:
https://rocketboards.org/foswiki/Documentat...sVideoAndHmiIps
на SoC нету аппаратной поддержки OpenGL, и отрисовка будет производиться прогрммно, нагружая HPS.
Если кто пробовал, расскажите, будет ли рисование графика на Qt тормозить?
Jury093
Цитата(Gleb80 @ Sep 15 2017, 23:16) *
на SoC нету аппаратной поддержки OpenGL, и отрисовка будет производиться прогрммно, нагружая HPS.

на SOC вообще нет графического контроллера - контроллер графики организуется в ФПГА части, в простейшем случае просто мост между HPS и экраном, в навороченном варианте в ФПГА реализуются функции аппаратного ускорения
на том же рокетсбоард выложены демки Андроида для Altera SoC (исходники платные), что указывает на возможность такой реализации

Цитата
Если кто пробовал, расскажите, будет ли рисование графика на Qt тормозить?

я гонял графику для SoC на интерфейсах i80 и rgb - QT вполне нормально отрисовывает на небольших разрешениях, Иксы с браузером тоже более-менее нормально..
тормоза будут однозначно на ресурсоемких вещах - флеш в браузере, видео с распаковкой и прочие штучки, где требуются аппаратные кодеки для работы с видео и графикой
Gleb80
Цитата(Jury093 @ Sep 16 2017, 11:24) *
на том же рокетсбоард выложены демки Андроида для Altera SoC (исходники платные), что указывает на возможность такой реализации

Спасибо за подсказку, гляну, что там есть...

Цитата(Jury093 @ Sep 16 2017, 11:24) *
я гонял графику для SoC на интерфейсах i80 и rgb - QT вполне нормально отрисовывает на небольших разрешениях

Если я правильно понял, то у Вас на HPS крутился Linux, на него был установлен Qt. В FPGA находились IP-ядра, занимающиеся отрисовкой на ЖКИ (Frame Reader и т.п.). Linux с графическим интерфейсом, отображаемым на том же ЖКИ?
Какую плату Вы использовали - terasic или что-то самодельное?
Если можно, расскажите по-подробней как и что там было сделано...

Сам я сейчас склоняюсь к такому решению - консольный Linux, в FPGA находится FFT корка и графическая аппаратура. FFT по DMA передает данные в DDR, мое собственное приложение, крутящееся в Linuxе эти данные забирает, на их основе формирует картинку и помещает ее во Frame Buffer, находящийся в DDR, откуда Frame Reader (IP-ядро), через f2h-axi-master это считывает и выдает картинку на ЖКИ.
Повторюсь, что рисовать нужно 2D графики, преимущественно спектр сигнала, захватываемого АЦП, ну и всякую сопутствующую информацию по-бокам. Обновлять кривую нужно будет где-то 10 раз в секунду. Кривая будет состоять из 512 точек.
chirik
Цитата(Gleb80 @ Sep 17 2017, 17:56) *
Спасибо за подсказку, гляну, что там есть...


Если я правильно понял, то у Вас на HPS крутился Linux, на него был установлен Qt. В FPGA находились IP-ядра, занимающиеся отрисовкой на ЖКИ (Frame Reader и т.п.). Linux с графическим интерфейсом, отображаемым на том же ЖКИ?
Какую плату Вы использовали - terasic или что-то самодельное?
Если можно, расскажите по-подробней как и что там было сделано...

Сам я сейчас склоняюсь к такому решению - консольный Linux, в FPGA находится FFT корка и графическая аппаратура. FFT по DMA передает данные в DDR, мое собственное приложение, крутящееся в Linuxе эти данные забирает, на их основе формирует картинку и помещает ее во Frame Buffer, находящийся в DDR, откуда Frame Reader (IP-ядро), через f2h-axi-master это считывает и выдает картинку на ЖКИ.
Повторюсь, что рисовать нужно 2D графики, преимущественно спектр сигнала, захватываемого АЦП, ну и всякую сопутствующую информацию по-бокам. Обновлять кривую нужно будет где-то 10 раз в секунду. Кривая будет состоять из 512 точек.


Если вам не нужна крутая графика, а просто вывод графика или графиков, то это можно сделать и на ПЛИС https://www.youtube.com/watch?v=8O06kx9tA2w
https://www.youtube.com/watch?v=P2Jpszg-6YQ
Gleb80
Цитата(chirik @ Sep 25 2017, 19:52) *
Если вам не нужна крутая графика...

Нужно приблизительно вот так:



а на предложенных видео отображается только результат БПФ и больше ничего лишнего )
AVR
Цитата(Gleb80 @ Sep 27 2017, 09:40) *
Нужно приблизительно вот так:

Я очень люблю Qt, но вынужден признать: в Вашем случае он совершенно не нужен для этой задачи.
Можно прекрасно налохматить такой простейший интерфейс без помощи Qt, тут даже кругов с заливкой нет.
Gleb80
Цитата(AVR @ Sep 27 2017, 11:07) *
Можно прекрасно налохматить такой простейший интерфейс без помощи Qt...


Тут согласен, но ведь нет пределов совершенству, GUI можно будет и по-красивей сделать. К тому же, будет большое разветвленное меню, а в его воздвижении, как я понимаю, Qt мне сильно поможет.
RamZoom
Извиняюсь, что долго отсутствовал. Решение по моему вопросу оказалось достаточно простым: при установке самого QuartusII эти библиотеки находятся в ....embedded\ip\altera\hps\altera_hps\hwlib. В папке include хидер файлы, а в src\hwmgr исходники. Папку altera_hps переименовал а Altera, закинул на запущенной плате в Qt и все пошло как по маслу. Единственное огорчение возникает, когда проект на Qt собранный на виртуальной машине закидываешь и пере собираешь на плате не подключенной к интернету, получаешь ошибку о разнице времени. Часов реального времени-то на ней не предусмотрено. А в остальном пробовал ставить образы и с Ubuntu и с LXDE. LXDE работает поинтереснее, но при любом изменении файла configure (установка mc, nautilus ....) при следующем старте платы вылетает ошибка. Подтверждение позволяет дальше операционке загрузиться. У Ubuntu такой проблемы не наблюдал

Цитата(Gleb80 @ Sep 27 2017, 07:40) *
Нужно приблизительно вот так:



а на предложенных видео отображается только результат БПФ и больше ничего лишнего )


По поводу графиков использовал QCustomPlot и эта библиотека показала себя с наилучшей стороны. При отрисовке проблем нет. Устанавливать и собирать ничего не нужно просто скинул в папку с проектом хидер и исходник, добавил их к проектным файлам, закинул на форму widget преобразовал его в QCustomPlot, добавил в .pro файл проекта QT += printsupport и всех вопросов. QWT еще не собирал на плате.
Gleb80
Цитата(RamZoom @ Sep 28 2017, 19:42) *
использовал QCustomPlot

Понял, благодарю за подсказку, погляжу что это за QCustomPlot. Для меня вообще Qt пока нечто новое и неизведанное.
Какой вы монитор используете? Какое разрешение? Я сейчас как раз этим занимаюсь, пытаюсь изменить установленное в сборке Linux Xfce Desktop для платы DE10-Nano разрешение на то, которое имеет мой дисплей.
RamZoom
Qt по моему мнению лучшая на сегодняшний день среда разработки среди своих соратников. По повода дисплея использую стандартный монитор, подключенный через VGA с разрешением 1024х768. И мне очень интересен ваш подход к решению по изменению видео вывода. Сколько документации уже перекопал, так и не понял, как в общем в linux и в каком формате данные передаются на видеокарту
Gleb80
Цитата(RamZoom @ Sep 28 2017, 20:02) *
...подход к решению по изменению видео вывода... как в общем в linux и в каком формате данные передаются на видеокарту


Ответа на этот вопрос я пока не знаю, но вот, какая картина мира у меня к настоящему моменту сложилась. Так как в недрах Linux я разбираюсь слабо, начну с противоположного конца.
У меня имеется вот такой монитор:
https://www.terraelectronica.ru/catalog_inf...hp?CODE=1919182
c разрешением 800х480 точек. Подключается по HDMI. На плате DE10-Nano тоже есть HDMI разъем, сигнал на который поступает от микросхемы ADV7513 http://www.analog.com/media/en/technical-d...ets/ADV7513.pdf
Эта микросхема преобразует обычный видеосигнал, состоящий из 24 бит цвета, пиксель-клока и сигналов вертикальной и горизонтальной синхронизации (не знаю как он правильно называется, пусть будет TFT-интерфейс) в HDMI. На плате DE1-SoC вместо ADV7513 установлена микросхема ADV7123 преобразующая TFT-интерфейс в аналоговый VGA. Еще у ADV7513 есть канал I2C, через который ее можно конфигурировать. Что конкретно в ней настраивают я пока не выяснял. Провода TFT-интерфейса и I2C подключены к FPGA-части SoC. В FPGA находится аппаратура, читающая данные, представляющие собой картинку, из Frame Buffer и выдающая ее наружу по TFT-интерфейсу. Frame Buffer - это кусок памяти в DDR3. Чтобы читать оттуда, аппаратура FPGA использует fpga2sdram мост (вроде бы..., надо уточнить). Теперь переходим к HPS, где живет Linux. Чтобы писать данные в кусок памяти, представляющий собой Frame Buffer есть драйвер (модуль), после загрузки которого появляется устройство /dev/fb0 - у меня оно так называется. Надо полагать, что то что будет записано в это устройство, отобразится на экране.
Чтобы монитор правильно отображал картинку, в строке должно быть нужное кол-во пикселей (800) и в кадре правильное число строк (480). В моей сборке по умолчанию разрешение 1024х768, поэтому часть рабочего стола выходит за край экрана. На microSD карте, с которой грузится моя плата, обнаружил 3 подозрительных приложения: de10_nano_hdmi_config.bin, dump_adv7513_regs.bin и dump_adv7513_edid.bin. Подозреваю, что сразу после загрузки запускается либо первое либо все три по-очереди и настраивают аппаратуру в FPGA и микросхему ADV7513 через I2C. Нормального исходного кода этих приложений я не нашел, только в виде патча в составе сценариев bitbake https://github.com/01org/meta-de10-nano/blo...ebug-apps.patch Но похоже, это то что нужно, так как там есть строки, устанавливающие это самое разрешение:
Код
  pixel_clock_MHz = 65000000;
  horizontal_active_pixels = 1024;
  horizontal_blanking_pixels = 320;
  vertical_active_lines = 768;
  vertical_blanking_lines = 38;
  horizontal_sync_offset = 24;
  horizontal_sync_width = 136;
  vertical_sync_offset = 3;
  vertical_sync_width = 6;
  interlaced = 0;


и часто упоминается название микросхемы ADV7513

В общем, пока у меня весьма расплывчатое представление о механизме отображения в системе SoC+Linux и если тут есть специалисты, то любезно прошу вас изложить как оно там на самом деле )
Gleb80
Цитата(Gleb80 @ Sep 28 2017, 23:50) *
..... Но похоже, это то что нужно, так как там есть строки, устанавливающие это самое разрешение:
Код

....
  horizontal_active_pixels = 1024;
  ....
  vertical_active_lines = 768;


да, это было то, что нужно, заменил на свои значения и разрешение стало какое нужно
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.