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

DMA PCIe Cyclon

Есть железка на Cyclone5 со встроенным PCIe+Avalon без ARM на борту.

 

Подключено к компу. Со стороны ПЛИС выделен BAR0 и там набор регистров. Верхнее приложение под Виндой по прерыванию или по полингу выгребает данные из БАРа. Работает, но не по феншую: жрёт процессорное время.

 

У меня дыры в понимании работы DMA. Работал с DMA в контроллерах, где какая-то аппаратная хрень, которой передаёшь смещение и сколько читать и она сама копирует данные в некую область памяти и потом сообщает...

 

Не пойму как это работает в стыке PCI и компа. Канал то один и тот же. Что необходимо менять в прошивке ПЛИС, что бы этот режим был доступен компу?

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


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

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

 

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


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

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

Не пойму вашего сленга.

Драйвес со стороны PC напишем. Это не проблема.

Контроллер DMA, он работает через те же BARы или там какой то иной алгоритм работы? Его самостоятельно состряпать можно?

 

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


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

Не пойму вашего сленга.

Драйвес со стороны PC напишем. Это не проблема.

Контроллер DMA, он работает через те же BARы или там какой то иной алгоритм работы? Его самостоятельно состряпать можно?

как пример

реализация

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


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

Опять я с глупостями.

 

Возможно ли на Цыклоне 5 сделать такую штуку: PCIe-UART16550, что бы винда увидела эту штуку и установила на неё свои драйвера? 16550, вроде майкрософтом поддерживаются. Какие-нить вендоры подменить, в INFах чё-нить прописать...

 

У меня все IP оплачены.

Сейчас связка Avalon+16550 работает через бары прямым доступом в регистры.

Как-то на такую ерунду писать свои драйвера, как-то по лоховски выглядит.

 

 

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


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

Возможно ли на Цыклоне 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). Скорость будет околосветовая (теор предел линка), загрузка проца ничтожна.

 

Есть вопросы - пишите, подскажу.

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


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

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

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

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

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

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

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

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

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

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