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

 
 
> 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
 
Start new topic
Ответов
novartis
сообщение Dec 24 2014, 15:18
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 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



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

 


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


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