Полная версия этой страницы:
DMA PCIe Cyclon
Trashy_2
Sep 28 2016, 10:56
Есть железка на Cyclone5 со встроенным PCIe+Avalon без ARM на борту.
Подключено к компу. Со стороны ПЛИС выделен BAR0 и там набор регистров. Верхнее приложение под Виндой по прерыванию или по полингу выгребает данные из БАРа. Работает, но не по феншую: жрёт процессорное время.
У меня дыры в понимании работы DMA. Работал с DMA в контроллерах, где какая-то аппаратная хрень, которой передаёшь смещение и сколько читать и она сама копирует данные в некую область памяти и потом сообщает...
Не пойму как это работает в стыке PCI и компа. Канал то один и тот же. Что необходимо менять в прошивке ПЛИС, что бы этот режим был доступен компу?
Для FPGA вам нужен котролер DMA, а для PC драйвер для вашего контролера. 'Из коробки' это все не заведется
Trashy_2
Sep 28 2016, 11:21
Цитата(XVR @ Sep 28 2016, 14:12)

Для FPGA вам нужен котролер DMA, а для PC драйвер для вашего контролера. 'Из коробки' это все не заведется

Не пойму вашего сленга.
Драйвес со стороны PC напишем. Это не проблема.
Контроллер DMA, он работает через те же BARы или там какой то иной алгоритм работы? Его самостоятельно состряпать можно?
Maverick
Sep 28 2016, 11:31
Цитата(Trashy_2 @ Sep 28 2016, 14:21)

Не пойму вашего сленга.
Драйвес со стороны PC напишем. Это не проблема.
Контроллер DMA, он работает через те же BARы или там какой то иной алгоритм работы? Его самостоятельно состряпать можно?
как примерреализация
Trashy_2
Mar 6 2017, 14:05
Опять я с глупостями.
Возможно ли на Цыклоне 5 сделать такую штуку: PCIe-UART16550, что бы винда увидела эту штуку и установила на неё свои драйвера? 16550, вроде майкрософтом поддерживаются. Какие-нить вендоры подменить, в INFах чё-нить прописать...
У меня все IP оплачены.
Сейчас связка Avalon+16550 работает через бары прямым доступом в регистры.
Как-то на такую ерунду писать свои драйвера, как-то по лоховски выглядит.
Цитата(Trashy_2 @ Mar 6 2017, 17:05)

Возможно ли на Цыклоне 5 сделать такую штуку: PCIe-UART16550, что бы винда увидела эту штуку и установила на неё свои драйвера?
Сделать можно, но вот 'увидеть и поставить драйвера' не получится. Нужно будет прописать параметры вручную в registry
https://msdn.microsoft.com/en-us/library/wi...3(v=vs.85).aspx
На самом деле всё гораздо гораздо проще, говорят нужен какой то контроллер DMA. На самом деле DMA-режим работы можно осуществить без него, если делаете свои TLP пакеты. По сути, на стороне ПК в драйвере выделяется буфер, который будет видеть и ядро и устройство (ну специальным образом выделенная память), его адрес кидается на BAR0 и устройство может тупо слать TLP пакеты на этот адрес и это не сжирает процессор. т.е. устройство само туда пишет, это Bus Mastering. Когда тысячи пакетов накиданы устройством прямо в память (в этот буфер) - делается прерывание (MSI). Скорость будет околосветовая (теор предел линка), загрузка проца ничтожна.
Есть вопросы - пишите, подскажу.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.