FAQ - Часто Задаваемые Вопросы

Общие вопросы

Это действительно работает ?

Да. Этот проект стал основным для компании "Иструментальные Системы" http://www.insys.ru

А под какой лицензией это распространяется ?

LGPL.

А зачем Вам это надо ?

Сложный вопрос, вот несколько мыслей по этому поводу:
  1. Из любви к искусству.
  2. Что бы сохранить знания.
  3. Что обеспечить тестирование в разных проектах и на разном оборудовании.

А у Вас теперь все проекты будут Open Source ?

Нет.

А на каких модулях проекты уже работают ?

  • Virtex 5 - AMBPEX5, ADP201x1, FMC105P
  • Virtex 6 - FMC114V, ML605
  • Spartan 6 - FMC103E, SP605

Прошивка ПЛИС

Почему такие странные названия: pcie_core64_m1, pcie_core64_m2, pcie_core64_m4 и т.д.

  • pcie_core - это ядро для PCI Express
  • 64 - используется 64-х разрядная шина
  • m1, m2, m4 - это метки различных модификаций ядра для разных ПЛИС и разных локальных шин.

В чём отличие между pcie_core64_m1 и pcie_core64_m2

  • pcie_core64_m1 - это контроллер PCI Express для Virtex 5 и выходом на шину PLD_Bus. В пространстве BAR0 реализованы только блоки управления PE_EXT_FIFO (под номерами 4 и 5)
  • pcie_core64_m2 - это надстройка над pcie_core64_m1. Добавлен блок управления PE_MAIN и сделан переход на шину LC_Bus

Зачем нужна шина PLD_Bus ?

Шина PLD_Bus понадобилась что бы отделить реализацию контроллера от типа используемой шины. PLD_Bus может быть адаптирована к параллельным или последовательным шинам. В данный момент есть компоненты для подключения к шинам LC_Bus и WISHBONE.

Возможно ли подключение PLD_Bus к AXI ?

Возможно. Но в данный момент такого моста нет.

Зачем нужно разделение на пространства BAR0 и BAR1 ?

Для разделения управления каналом DMA и приложением.
Различия:
  • На пространство BAR0 наложено ограничение - в нём обязательно должны быть реализованы блоки управления PE_EXT_FIFO для управления каналом DMA.
  • На пространство BAR1 никаких ограничений не наложено.
  • BAR0 - всегда работает на частоте компонентов IP Core Xilinx. (250 MHz для Virtex 5)
  • BAR1 - может работать на другой частоте (например 266 MHz)
  • Канал DMA работает только с BAR1
  • BAR0 - фиксированный тип шины
  • BAR1 - шина PLD_Bus с возможностью перехода на LC_Bus, WISHBONE.

Обязательно ли делать обращения к регистрам через 32-х разрядные команды ?

Обязательно. Байтовые операции не поддерживаются.

А что произойдёт если я дам команду на запись или чтение байта ?

Не знаю. Попробуйте и сообщите о результате.

А мне обязательно надо использовать байтовые операции. Что делать ?

Необходимо модифицировать компоненты core64_rx_engine, core64_tx_engine, core64_reg_access, core64_pb_disp, core64_pb_transaction; Но это получиться уже другой контроллер.

Канал DMA за одну операцию производит передачу блока в 4096 байт. Это обязательно ?

Да. Это фундаментальное свойство. 4096 байт это размер страницы для компьютеров Intel x86. Ограничение на кратность 4096 байт для размера и начального адреса блока данных позволило существенно упростить контроллер.

А мне обязательно надо использовать канал DMA с размером буфера не кратным 4096 байт. Что делать ?

Сделать другой контроллер.

Что такое сигнал "Запрос DMA" (dmar0, dmar1) ?

Сигнал "запрос DMA" сообщает контроллеру что источник или приёмник данных готов к обмену.
Например в системе ввода данных от АЦП в компьютер между АЦП и DMA контроллером находится FIFO. Сигналом запроса DMA должен является флаг заполнения FIFO на 512 64-х разрядных слов. Как только в FIFO появится 512 слов будет установлен сигнал запроса DMA и канал DMA передаст 4096 байт в компьютер. Это свойство позволяет запрограммировать DMA канал на приём большого блока данных (например 1 Гбайт) или на непрерывный ввод данных. При этом с центрального процессора снимается задача слежения за заполнением данных в FIFO.

DMA контроллер может работать без сигнала "запрос DMA" ?

Да. Это нормальный режим для работы DMA контроллера с памятью в пространстве BAR1.

Какой адрес DMA контроллрер выставляет на шине PLD_Bus ?

В данный момент это адрес из регистра LOCAL_ADR в блоке PE_EXT_FIFO. Адрес является константой. Это нормально для работы с FIFO. Но не всегда удобно для работы с памятью. Возможно будет введён режим модификации локального адреса в будущих версиях контроллера.

Зачем понадобилось объединять дескрипторы в блок дескрипторов ?

Для ускорения работы с фрагментированной памятью.

Зачем в блоке дескрипторов присутствуют сигнатура и контроляная сумма ?

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

Организация обмена

Как обеспечить непрерывный ввод и обработку принимаемых данных ?

  • Необходимо выделить несколько буферов, например 8. И из них сформировать кольцевой буфер, т.е. после заполнения буфера 0 будет заполнятся буфер 1, потом 2 и т.д. А после заполения буфера 7 будет заполняться буфер 0. Буферы должны быть достаточно большими, например 8-16 Мбайт, или больше.
  • После того, как DMA канал заполнит буфер 0, он сформирует прерывание и сразу начнёт заполнять буфер 1 и т.д.
  • Центральный процессор получает прерывание и через обработчик прерывания сообщает прикладной программе что очередной буфер готов. Программа его обрабатывает. Необходимо обеспечить, что бы скорость обработки была больше, чем скорость ввода данных.

Какова загрузка центрального процессора для обслуживания DMA контроллера ?

При использовании больших буферов загрузка центрального процессора минимальна ~0.01%

Из каких соображений надо выбирать число и размер буферов ?

Необходимо помнить, что существуют паузы в процессы выполнения программы. Эти паузы должны быть скомпенсированы размером буфера.

Существует ли возможность приостановить обмен данными ?

Да. Для этого существует бит PAUSE в регистре DMA_CTRL блока PE_EXT_FIFO.
Если обработчик прерываения обнаруживает, что прикладная программа не успевает обработать данные, то обработчик может приостановть процесс. Такой режим работы называется "согласованный режим".
Он подходит для систем, в которых возможна приостановка данных. Например для систем связи.

Программное обеспечение

А опубликованы исходные тексты драйвера ?

Для Linux - опубликованы.
Для Windows - нет.