FAQ
Version 1 (Dmitry Smekhov, 01/11/2012 01:11 am)
| 1 | 1 | h1. FAQ - Часто Задаваемые Вопросы  | 
|
|---|---|---|---|
| 2 | 1 | ||
| 3 | 1 | h2. Общие вопросы  | 
|
| 4 | 1 | ||
| 5 | 1 | h3. Это действительно работает ?  | 
|
| 6 | 1 | ||
| 7 | 1 | Да. Этот проект стал основным для компании "Иструментальные Системы" http://www.insys.ru  | 
|
| 8 | 1 | ||
| 9 | 1 | h3. А под какой лицензией это распространяется ?  | 
|
| 10 | 1 | ||
| 11 | 1 | Тип лицензии пока не определён. Возможно будет GPL.  | 
|
| 12 | 1 | ||
| 13 | 1 | h3. А зачем Вам это надо ?  | 
|
| 14 | 1 | ||
| 15 | 1 | Сложный вопрос, вот несколько мыслей по этому поводу:  | 
|
| 16 | 1 | # Из любви к искусству.  | 
|
| 17 | 1 | # Что бы сохранить знания.  | 
|
| 18 | 1 | # Что обеспечить тестирование в разных проектах и на разном оборудовании.  | 
|
| 19 | 1 | ||
| 20 | 1 | h3. А у Вас теперь все проекты будут Open Source ?  | 
|
| 21 | 1 | ||
| 22 | 1 | Нет.  | 
|
| 23 | 1 | ||
| 24 | 1 | h3. А на каких модулях проекты уже работают ?  | 
|
| 25 | 1 | ||
| 26 | 1 | * Virtex 5 - AMBPEX5, ADP201x1, FMC105P  | 
|
| 27 | 1 | * Virtex 6 - FMC114V, ML605  | 
|
| 28 | 1 | * Spartan 6 - FMC103E, SP605  | 
|
| 29 | 1 | ||
| 30 | 1 | h2. Прошивка ПЛИС  | 
|
| 31 | 1 | ||
| 32 | 1 | h3. Почему такие странные названия: pcie_core64_m1, pcie_core64_m2, pcie_core64_m4 и т.д.  | 
|
| 33 | 1 | ||
| 34 | 1 | * pcie_core - это ядро для PCI Express  | 
|
| 35 | 1 | * 64 - используется 64-х разрядная шина  | 
|
| 36 | 1 | * m1, m2, m4 - это метки различных модификаций ядра для разных ПЛИС и разных локальных шин.  | 
|
| 37 | 1 | ||
| 38 | 1 | h3. В чём отличие между pcie_core64_m1 и pcie_core64_m2  | 
|
| 39 | 1 | ||
| 40 | 1 | * pcie_core64_m1 - это контроллер PCI Express для Virtex 5 и выходом на шину PLD_Bus. В пространстве BAR0 реализованы только блоки управления PE_EXT_FIFO (под номерами 4 и 5)  | 
|
| 41 | 1 | * pcie_core64_m2 - это надстройка над pcie_core64_m1. Добавлен блок управления PE_MAIN и сделан переход на шину LC_Bus  | 
|
| 42 | 1 | ||
| 43 | 1 | h3. Зачем нужна шина PLD_Bus ?  | 
|
| 44 | 1 | ||
| 45 | 1 | Шина PLD_Bus понадобилась что бы отделить реализацию контроллера от типа используемой шины. PLD_Bus может быть адаптирована к параллельным или последовательным шинам. В данный момент есть компоненты для подключения к шинам LC_Bus и WISHBONE.  | 
|
| 46 | 1 | ||
| 47 | 1 | h3. Возможно ли подключение PLD_Bus к AXI ?  | 
|
| 48 | 1 | ||
| 49 | 1 | Возможно. Но в данный момент такого моста нет.  | 
|
| 50 | 1 | ||
| 51 | 1 | h3. Зачем нужно разделение на пространства BAR0 и BAR1 ?  | 
|
| 52 | 1 | ||
| 53 | 1 | Для разделения управления каналом DMA и приложением.  | 
|
| 54 | 1 | Различия:  | 
|
| 55 | 1 | * На пространство BAR0 наложено ограничение - в нём обязательно должны быть реализованы блоки управления PE_EXT_FIFO для управления каналом DMA.  | 
|
| 56 | 1 | * На пространство BAR1 никаких ограничений не наложено.  | 
|
| 57 | 1 | * BAR0 - всегда работает на частоте компонентов IP Core Xilinx. (250 MHz для Virtex 5)  | 
|
| 58 | 1 | * BAR1 - может работать на другой частоте (например 266 MHz)  | 
|
| 59 | 1 | * Канал DMA работает только с BAR1  | 
|
| 60 | 1 | * BAR0 - фиксированный тип шины  | 
|
| 61 | 1 | * BAR1 - шина PLD_Bus с возможностью перехода на LC_Bus, WISHBONE.  | 
|
| 62 | 1 | ||
| 63 | 1 | ||
| 64 | 1 | h3. Обязательно ли делать обращения к регистрам через 32-х разрядные команды ?  | 
|
| 65 | 1 | ||
| 66 | 1 | Обязательно. Байтовые операции не поддерживаются.  | 
|
| 67 | 1 | ||
| 68 | 1 | h3. А что произойдёт если я дам команду на запись или чтение байта ?  | 
|
| 69 | 1 | ||
| 70 | 1 | Не знаю. Попробуйте и сообщите о результате.  | 
|
| 71 | 1 | ||
| 72 | 1 | h3. А мне обязательно надо использовать байтовые операции. Что делать ?  | 
|
| 73 | 1 | ||
| 74 | 1 | Необходимо модифицировать компоненты core64_rx_engine, core64_tx_engine, core64_reg_access, core64_pb_disp, core64_pb_transaction; Но это получиться уже другой контроллер.  | 
|
| 75 | 1 | ||
| 76 | 1 | h3. Канал DMA за одну операцию производит передачу блока в 4096 байт. Это обязательно ?  | 
|
| 77 | 1 | ||
| 78 | 1 | Да. Это фундаментальное свойство. 4096 байт это размер страницы для компьютеров Intel x86. Ограничение на кратность 4096 байт для размера и начального адреса блока данных позволило существенно упростить контроллер.  | 
|
| 79 | 1 | ||
| 80 | 1 | h3. А мне обязательно надо использовать канал DMA с размером буфера не кратным 4096 байт. Что делать ?  | 
|
| 81 | 1 | ||
| 82 | 1 | Сделать другой контроллер.  | 
|
| 83 | 1 | ||
| 84 | 1 | h3. Что такое сигнал "Запрос DMA" (dmar0, dmar1) ?  | 
|
| 85 | 1 | ||
| 86 | 1 | Сигнал "запрос DMA" сообщает контроллеру что источник или приёмник данных готов к обмену.  | 
|
| 87 | 1 | Например в системе ввода данных от АЦП в компьютер между АЦП и DMA контроллером находится FIFO. Сигналом запроса DMA должен является флаг заполнения FIFO на 512 64-х разрядных слов. Как только в FIFO появится 512 слов будет установлен сигнал запроса DMA и канал DMA передаст 4096 байт в компьютер. Это свойство позволяет запрограммировать DMA канал на приём большого блока данных (например 1 Гбайт) или на непрерывный ввод данных. При этом с центрального процессора снимается задача слежения за заполнением данных в FIFO.  | 
|
| 88 | 1 | ||
| 89 | 1 | h3. DMA контроллер может работать без сигнала "запрос DMA" ?  | 
|
| 90 | 1 | ||
| 91 | 1 | Да. Это нормальный режим для работы DMA контроллера с памятью в пространстве BAR1.  | 
|
| 92 | 1 | ||
| 93 | 1 | h3. Какой адрес DMA контроллрер выставляет на шине PLD_Bus ?  | 
|
| 94 | 1 | ||
| 95 | 1 | В данный момент это адрес из регистра LOCAL_ADR в блоке PE_EXT_FIFO. Адрес является константой. Это нормально для работы с FIFO. Но не всегда удобно для работы с памятью. Возможно будет введён режим модификации локального адреса в будущих версиях контроллера.  | 
|
| 96 | 1 | ||
| 97 | 1 | h3. Зачем понадобилось объединять дескрипторы в блок дескрипторов ?  | 
|
| 98 | 1 | ||
| 99 | 1 | Для ускорения работы с фрагментированной памятью.  | 
|
| 100 | 1 | ||
| 101 | 1 | h3. Зачем в блоке дескрипторов присутствуют сигнатура и контроляная сумма ?  | 
|
| 102 | 1 | ||
| 103 | 1 | При ошибке программирования DMA канал обнаружит несоответствие контрольной суммы и остановит работу. Если бы такой проверки не было, то произошло бы зависание компьютера.  | 
|
| 104 | 1 | ||
| 105 | 1 | h2. Организация обмена  | 
|
| 106 | 1 | ||
| 107 | 1 | h3. Как обеспечить непрерывный ввод и обработку принимаемых данных ?  | 
|
| 108 | 1 | ||
| 109 | 1 | * Необходимо выделить несколько буферов, например 8. И из них сформировать кольцевой буфер, т.е. после заполенения буфера 0 будет заполнятся буфер 1, потом 2 и т.д. А после заполения буфера 7 будет заполняться буфер 0. Буферы должны быть достаточно большими, например 8-16 Мбайт, или больше.  | 
|
| 110 | 1 | ||
| 111 | 1 | * После того, как DMA канал заполнит буфер 0, он сформирует прерывание и сразу начнёт заполнять буфер 1 и т.д.  | 
|
| 112 | 1 | ||
| 113 | 1 | * Центральный процессор получает прерывание и через обработчик прерывания сообщает прикладной программе что очередной буфер готов. Программа его обрабатывает. Необходимо обеспечить, что бы скорость обработки была больше, чем скорость ввода данных.  | 
|
| 114 | 1 | ||
| 115 | 1 | h3. Какова загрузка центрального процессора для обслуживания DMA контроллера ?  | 
|
| 116 | 1 | ||
| 117 | 1 | При использовании больших буферов загрузка центрального процессора минимальна ~0.01%  | 
|
| 118 | 1 | ||
| 119 | 1 | h3. Из каких соображений надо выбирать число и размер буферов ?  | 
|
| 120 | 1 | ||
| 121 | 1 | Необходимо помнить, что существуют паузы в процессы выполнения программы. Эти паузы должны быть скомпенсированы размером буфера.  | 
|
| 122 | 1 | ||
| 123 | 1 | h3. Существует ли возможность приостановить обмен данными ?  | 
|
| 124 | 1 | ||
| 125 | 1 | Да. Для этого существует бит PAUSE в регистре DMA_CTRL блока PE_EXT_FIFO.  | 
|
| 126 | 1 | Если обработчик прерываения обнаруживает, что прикладная программа не успевает обработать данные, то обработчик может приостановть процесс. Такой режим работы называется "согласованный режим".  | 
|
| 127 | 1 | Он подходит для систем, в которых возможна приостановка данных. Например для систем связи.  | 
|
| 128 | 1 | ||
| 129 | 1 | ||
| 130 | 1 | h2. Программное обеспечение  | 
|
| 131 | 1 | ||
| 132 | 1 | h3. А опубликованы исходные тексты драйвера ?  | 
|
| 133 | 1 | ||
| 134 | 1 | Для Linux - опубликованы.  | 
|
| 135 | 1 | Для Windows - нет.  |