реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Aletra, Qsys, работа двух dma-котроллеров с одной памятью
novartis
сообщение Dec 20 2014, 14:30
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-09
Из: Свердловский регион
Пользователь №: 52 845



Набросал в qsys такую систему: pcie, on-chip memory, два dma controller. Прикрепил картинку
Прикрепленное изображение
.

Если контроллеру 0 дать задание перекачивать большой объем данных, например, из памяти в pcie, а контроллеу 1 в это время давать маленькие команды тоже на перекачку данных из памяти в pcie, не возникнут ли конфликты и как будет осуществляться работа такой системы? контроллеры будут получать доступ к памяти по очереди (в рамках своих burst пакетов) или кто первый начал качать данные, тот и будет их качать, пока все не выкачает?
Go to the top of the page
 
+Quote Post
alexadmin
сообщение Dec 22 2014, 10:10
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 572
Регистрация: 17-11-05
Из: СПб, Россия
Пользователь №: 10 965



Цитата(novartis @ Dec 20 2014, 17:30) *
контроллеры будут получать доступ к памяти по очереди (в рамках своих burst пакетов) или кто первый начал качать данные, тот и будет их качать, пока все не выкачает?


По очереди. Есть арбитраж, настраивается через arbitration shares - сколько подряд транзакций может выполнить каждое устройство.
Go to the top of the page
 
+Quote Post
novartis
сообщение Dec 24 2014, 15:18
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-09
Из: Свердловский регион
Пользователь №: 52 845



Спасибо за ответ!

Решил все таки посмотерть, как это будет работать в живую.
PCIE не стал использовать, заменил ее на Nios.
Собрал такую систему:
Прикрепленное изображение


dma_0 и dma_1 настроены одинаково:
length - 14 bit
enable burst transfers
maximum burst size (words) - 128
data transfer fifo depth - 32

ram1 и ram2 настроены одинаково:
ширина слова 8 бит
размер памяти 4096 байт

В ниосе набросал исходный код на си.
Настроил сигналтап, запасся попкорном.

Вылезла следующая проблема.
Выставляю dma_0 размер транзакции 256 байт.
То есть в его регистр length по адресу 0x3 записываю 256.
В регистре control (адрес 0x6) выставляю работу по-байтно, с прерыванием, с ожиданием обнуления регистра length.
Стартую контроллер.
Прерывание не приходит.

Делаю тоже самое, но с меньшим length, например 255, все срабатывает.

Вот картинка из сигналтапа при 256:
Прикрепленное изображение

Вот картинка из сигналтапа при 255:
Прикрепленное изображение



Посмотрел в qsys на сигналы dma. Сигнал burstcount шириной 8 бит. Значит его максимальное значение 255.

Получается при length=255 чтение происходит с burstcount=255, и чтение происходит всех 255 слов.
А при length=256 в восьмибитной шине burstcount все нули (что и видно в сигналтапе), и производится чтение 1 слова (что и видно в сигналтапе).
После этого дма подвисает, больше он ничего не вычитывает, сигнал done не выставляется.

Это вообще нормально?? Я предполагал, что dma_controller должен разбить заданный блок на порции не больше maximum burst size слов. И в случае с length=256 сначала должен был сформироваться пакет на чтение 255 слов, а потом еще пакетик на чтение 1 слова. А тут сразу маленький пакетик 05.gif .




Go to the top of the page
 
+Quote Post
des00
сообщение Dec 24 2014, 15:53
Сообщение #4


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



вы уверенны что birstsize не равен burst_length-1 ? обычно так делают.


--------------------
Go to the top of the page
 
+Quote Post
novartis
сообщение Dec 24 2014, 16:30
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-09
Из: Свердловский регион
Пользователь №: 52 845



Да я не про это писал. Я к тому, что задаю, например, для дма отправить 300 байт, он 300-256 = 44 байта отправляет и висит.
Go to the top of the page
 
+Quote Post
krux
сообщение Dec 24 2014, 18:36
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



http://www.altera.com/support/kdb/solution...182008_741.html


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
novartis
сообщение Dec 25 2014, 05:05
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-09
Из: Свердловский регион
Пользователь №: 52 845



Спасибо за ссылку, как я понял, они там описывают проблему с дма и предлагают ее решить, задавая размер блока дма кратным размеру burst.
Попробовал так сделать - не помогло.

Стал копать альтеровскую Knowledge Base > Browse Knowledge Base, нашел такую ссылку:
http://www.altera.com/support/kdb/solution...032006_770.html

Цитата
Title
When I enable burst for the SOPC Builder DMA component, why are some of my DMA transfers truncated or stalled?
Description
For the SOPC Builder DMA component when burst transfers are enabled, the maximum amount of data that can be transferred is limited to the maximum burst transfer length (The Burst Transactions “Maximum Burst Size” setting in the DMA parameters tab). For a width N of burstcount, the maximum burst length is 2(N-1).

Any transfers larger than the maximum burst count length are truncated by the DMA component and may stall the DMA burst transfer operation.

Workarounds:
1) Increase the DMA component’s “Maximum Burst Size” words to be greater than the largest DMA transfer length that will be used in your system. The maximum burst size value must be a power of 2.
2) Limit the DMA transfers to be no larger than the “Maximum Burst Size” setting in the DMA parameters tab.

Note: This issue only affects the SOPC Builder DMA component when burst is enabled. This does not affect the DMA in non-burst mode.

All versions of the DMA controller are affected by this burst issue.


Нехилый такой косяк. Подсунули бяку maniac.gif .

Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 22:24
Рейтинг@Mail.ru


Страница сгенерированна за 0.01408 секунд с 7
ELECTRONIX ©2004-2016