Перейти к содержанию
    

Как прикладное ПО может взаимодействовать с устройством FPGA

Доброго времени суток. Начал вникать в тему программирования FPGA устройств. Много непонятно. Подскажите такие моменты:

1. Каким образом, разработаное ПО (на С++) , поток, может взаимодействовать с FPGA-устройством? Например: как ПО может отправить, на обработку  FPGA-устройству, заранее сформированый массив данных, и дождатся и  получить результат? 

2. Любые ли FPGA-устройства можно программировать на verilog, Open CL?

3. Сильно ли страдает производительность от применения высокоуровневого языка Open CL, если операции, над массивом данных, простейшие?

4. Какие FPGA-устройства, для настольного ПК, доступны на рынке (за адекватную цену).

Заранее спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вы чего делать то собрались? хоть примерно, а то упоминание open cl, как то пугает

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. Зависит от железа, на котором выполняется разработанное ПО. Вариантов много - от контроллера AVR до суперкомпьютеров. В общем случае используется шина/протокол.

2. На Verilog - практически все. На OpenCL более емкие семейства.

3. Тема для исследований.

4. Не понятно что имеется в виду под словами "FPGA-устройства для настольного ПК". Возможно это Вам подойдет - https://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=47&No=862

Все сильно зависит от объемов массивов и нужной скорости обработки

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1) Самое очевидное - это через PCIe. Менее очевидное - это сетевой порт. Далее уже менее скоростные протоколы.

Изменено пользователем new123

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

17 minutes ago, Oleg82 said:

1. Каким образом, разработаное ПО (на С++) , поток, может взаимодействовать с FPGA-устройством? Например: как ПО может отправить, на обработку  FPGA-устройству, заранее сформированый массив данных, и дождатся и  получить результат? 

Любое взаимодействие  предполагает интерфейс и протокол через который это взаимодействие будет осуществляется.  Это  может быть как с любой из стандартных начиная c простейших от UART, I2С, SPI, и заканчивая  PCIe, SRIO,  Etheret, ... Так  и любой другой нестандартный который  вы можете реализовать как в FPGA так и в ответном устройстве.
Чаще  всего "пляшут  от печки" - смотрят  что есть в устройстве где будет работать  "разработанное ПО (на С++)" и выбирают тот который может обеспечить требуемые параметры - пропускную,  latency,  надежность, ....  и  который можно реализовать  в выбранной/доступной FPGA.  

17 minutes ago, Oleg82 said:

2. Любые ли FPGA-устройства можно программировать на verilog, Open CL?

Теоретически любые.  Практически те для которых есть соответствующий софт и имеющие достаточный объем.

18 minutes ago, Oleg82 said:

3. Сильно ли страдает производительность от применения высокоуровневого языка Open CL, если операции, над массивом данных, простейшие?

Как и в программировании. Чем выше  абстракции - тем больше накладных расходов  как в производительности (чаще всего)  так и в объеме (всегда). Все зависит от задачи и возможности ее оптимизации  в железе . 

23 minutes ago, Oleg82 said:

4. Какие FPGA-устройства, для настольного ПК, доступны на рынке (за адекватную цену).

Ответ зависит  от критерия  "адекватная  цена"  :yes3:
 

Удачи! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 минут назад, gridinp сказал:

вы чего делать то собрались? хоть примерно, а то упоминание open cl, как то пугает

Есть ПО, собирающее определенные числа, из БД, в массив. Размер массива всегда один и тот же. Как и выходной массив. Кажое число массива нужно обработать integer max value раз. И вернуть результат. Смісл таков: отправить, множеством потоков, множество массивов на оработку. Операции над числами - простейшие. 

1 минуту назад, RobFPGA сказал:

Ответ зависит  от критерия  "адекватная  цен

Спасибо за обширный ответ. 

3 минуты назад, new123 сказал:

1) Самое очевидное - это через PCIe. Менее очевидное - это сетевой порт. Далее уже менее скоростные протоколы.

PCIe. Я никогда не работал  с портами. По-этому, не понимаю, как. с ними, можна обмениваться информацией.

 

3 минуты назад, RobFPGA сказал:

Приветствую!

Любое взаимодействие  предполагает интерфейс и протокол через который это взаимодействие будет осуществляется.  Это  может быть как с любой из стандартных начиная c простейших от UART, I2С, SPI, и заканчивая  PCIe, SRIO,  Etheret, ... Так  и любой другой нестандартный который  вы можете реализовать как в FPGA так и в ответном устройстве.
Чаще  всего "пляшут  от печки" - смотрят  что есть в устройстве где будет работать  "разработанное ПО (на С++)" и выбирают тот который может обеспечить требуемые параметры - пропускную,  latency,  надежность, ....  и  который можно реализовать  в выбранной/доступной FPGA.  

Теоретически любые.  Практически те для которых есть соответствующий софт и имеющие достаточный объем.

Как и в программировании. Чем выше  абстракции - тем больше накладных расходов  как в производительности (чаще всего)  так и в объеме (всегда). Все зависит от задачи и возможности ее оптимизации  в железе . 

Ответ зависит  от критерия  "адекватная  цена"  :yes3:
 

Удачи! Rob.

Адекватная цена.... ну, 700- 1000 у.е.(+ -)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну если обьём данных не очень большой, тогда один из наиболее простых путей, это виртуальный COM-порт VCP на USB<->RS232 контроллере от FTDI, то есть со стороны операционной системы USB, а в FPGA делаете TTL RS232

Изменено пользователем gridinp

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, Oleg82 said:

PCIe. Я никогда не работал  с портами. По-этому, не понимаю, как. с ними, можна обмениваться информацией.

я прочитал, что вы написали про задачу. Конечно, вам наверное надо попроще, чем pcie )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 минут назад, new123 сказал:

я прочитал, что вы написали про задачу. Конечно, вам наверное надо попроще, чем pcie )

Как вы оцените, для моей задачи, подобное ПО

https://www.jungo.com/st/support/documentation/windriver/12.7.0/wdpci_manual.mhtml/index.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, Oleg82 said:

Как вы оцените, для моей задачи, подобное ПО

https://www.jungo.com/st/support/documentation/windriver/12.7.0/wdpci_manual.mhtml/index.html

я с ходу в этой штуке не разобрался года три назад. Написал свой драйвер, с отладкой, месяца за 4 базовый вариант

Им можно написать, они мануал раньше высылали подробный. Правда потом спамят звонками с целью продажи

Изменено пользователем new123

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 minutes ago, Oleg82 said:

Размер массива всегда один и тот же

И какой, и какая скорость передачи требуется? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 минуты назад, Leka сказал:

И какой, и какая скорость передачи требуется? 

20 4-байтных чисел. последнее число, с каждым циклом, увеличивается на 1. Скорость...даже не знаю. Цикл состоит из 100 суммирований. Хочется реализовать конвеер, например, чтоб такт обрабатывал, к примеру, 10000 шагов (100 циклов по 100 вариантам последнего числа).  

Например, если использовать FPGA-ускоритель, к нему идет драйвер? Или обмен данными, через PCIe,  я должен программировать сам? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, Oleg82 said:

20 4-байтных чисел

Тогда с самого простого можно начать - готового USB-UART или USB-SPI переходника, и любой простой платы с ПЛИС.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, Leka сказал:

Тогда с самого простого можно начать - готового USB-UART или USB-SPI переходника, и любой простой платы с ПЛИС.

Посоветуйте плату(ы), пжл.

52 минуты назад, andrewkrot сказал:

1. Зависит от железа, на котором выполняется разработанное ПО. Вариантов много - от контроллера AVR до суперкомпьютеров. В общем случае используется шина/протокол.

2. На Verilog - практически все. На OpenCL более емкие семейства.

3. Тема для исследований.

4. Не понятно что имеется в виду под словами "FPGA-устройства для настольного ПК". Возможно это Вам подойдет - https://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=47&No=862

Все сильно зависит от объемов массивов и нужной скорости обработки

Да. Это похоже на то, что нужно. Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 minutes ago, Oleg82 said:

Скорость...даже не знаю

... дальше пошла игра цифрами, но о скорости таки ни слова нет.

начните с того - что посчитайте - сколько "байт в секунду" нужно отправить в FPGA и сколько "байт в секунду" получить обратно? 

Цифра - даст понимание - какой интерфейс пропустит через себя такой поток.

попробуйте почитать готовые проекты на marsohod.org... 

https://marsohod.org/11-blog/308-mars3-sync-fifo - например

www.terasic.com.tw - Вам уже говорили, ... к каждой плате они дают документацию и примеры ...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...