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 - нет. |