Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: OpenSource DMA for Virtex 5
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > ISA/PCI/PCI-X/PCI Express
Страницы: 1, 2
Jack_of_Shadows
Всё руки не доходили написать по поводу 64-битного линукса: было замечено что дело не только в нём (на одном компьютере проект работал, на втором нет), и единственное бросающееся в глаза различие было в том, что при выделении памяти разрядность адреса была разная - на компе где обмен не шёл память выделялась за границами 32-битной области. Поборол принудительным ограничением в драйвере, в функции RequestMemory:
Код
dma_set_coherent_mask(dma->m_dev, 0xFFFFFFFF);

после чего адреса стали 32-битными и DMA-обмен пошел. После исправления из предыдущего поста стали отвечать те тетрады которые и должны. Вообщем проект вполне себе нормально работает с 200 МБ/с на x1.
StrangerX
Доброго времени суток.
Пытаюсь запустить ваше ядро pcie_core64_m1 (m2) на своей плате.
Вроде бы разобрался частично, но остались вопросы.
Прошу мне помочь.

1. При записи в адреса PE_EXT_FIFO, не содержащие регистров, дальнейшее чтение из правильных регистров невозможно (всегда получаю FFFFF...) это не существенно, вопрос в том, нормальное ли это поведение контроллера.
2. В wiki написано:
*Составить цепочку дескрипторов, которая описывает цепочку передаваемых блоков
*Записать адрес начального дескриптора в регистр PCI_ADRL
*Записать локальный адрес в регистр LOCAL_ADR
Модификация 1 - только режим автоинициализации

Я пытаюсь набросать драйвер под Win7. Что это для меня значит?
Как мне составить дескрипторы?
Выделить 64*8 байт область памяти, заполнить её в соответствии с описанием "Дескриптор блока автоинициализации";
в PCI_ADRL записать адрес этого блока;
в LOCAL_ADR адрес, относительно которого на LC шине будут запросы DMA на передачу/прием данных.

Прошу помощи.
StrangerX
И ещё ничего не понял про NEXT_BLOCK.

Как я понял, в памяти PCI, что отображена в оперативную создаю структуру 64*8 байтов - это и есть блок дескрипторов.
Допустим у меня 8192 байт, выделяется три куска памяти по 4096, 1712, 2384.
Я создаю блок дескрипторов:
1. - адрес блока 1, команда JUMP_NEXT_BLOCK, размер(4096), направление передачи
2. - адрес блока 2, команда JUMP_NEXT_BLOCK, размер(1712), направление передачи
3. - адрес блока 3, команда EOT, размер(2384), направление передачи

Поясните, чем отличается JUMP_NEXT_DS от JUMP_NEXT_BLOCK и что делать с NEXT_BLOCK, какой писать адрес и как считать CRC.

Спасибо заранее.
dsmv
В памяти компьютера создаётся блок 64*8=512 байт - это блок дескрипторов.

Каждый дескриптор - это четыре байта: описание здесь: http://src.ds-dev.ru/doc/core/block_pe_ext_fifo.htm

Блок содержит 63 дескриптора и указатель на следующий блок. Что будет происходить после завершения обмена с текущим блоком определяют три бита в поле CMD. Может быть установлен один из них, либо все нули.

Если все нули - то канал DMA остановиться.

Если JUMP_NEST_DS=1, то произойдёт переход к следующему дескриптору в этом блоке.

Если JUMP_NEXT_BLOCK=1, то произойдёт переход к следующему блоку (при этом следующий дескритор содержит адрес следующего блока). Это бит может быть установлен у любого дескриптора. Т.е. не обязательно заполнять все 63 элемента, оставшиеся можно заполнить нулями.

Если JUMP_DS0=1, то произойдёт переход к нулевому дескриптору в текущем блоке. Это позволяет не читать блоки дескрипторов из памяти.

Обратите внимание - обмен всегда ведётся блоками кратными 4 кбайтам. А при выделении памяти в USER MEMORY - так и просто по 4 килобайта. Если выделено три блока памяти (допустим по 4096 байт), то нужно создать один блок дескрипторов размером 512 байт.

1. адрес блока 1, команда *JUMP_NEST_DS*, размер(4096), направление передачи

2. адрес блока 2, команда *JUMP_NEST_DS*, размер(4096), направление передачи

3. адрес блока 3, команда *EOT*, размер(4096), направление передачи

Остальные дескрипторы - нули. В конце надо записать сигнатуру и контрольную сумму.

Прерывание будет получено после завершения обмена с блоком 3. P.S. Направление передачи всегда одно и то же для одного сеанса работы.

По поводу расчёта CRC - постараюсь выделить кусок программы, но чуть позже.

По поводу записи в PE_EXT_FIFO и чтении FF. Интересное наблюдение. Я таких экспериментов не ставил, но вроде бы такого быть не должно. А для записи используются 32-х разрядные команды ?
StrangerX
Цитата(dsmv @ Nov 25 2013, 19:58) *
По поводу записи в PE_EXT_FIFO и чтении FF. Интересное наблюдение. Я таких экспериментов не ставил, но вроде бы такого быть не должно. А для записи используются 32-х разрядные команды ?


Спасибо большое за развернутый ответ, всё понятно.
Для записи/чтения PE_EXT_FIFO использовал 32-битные команды.
dsmv
Цитата(StrangerX @ Dec 12 2013, 16:32) *
Спасибо большое за развернутый ответ, всё понятно.
Для записи/чтения PE_EXT_FIFO использовал 32-битные команды.


Вот нашёл класс для подсчёта CRC: PE_ExtChainItem.zip
dsmv
Всем доброго времени суток.


Вот хочу спросить, кому-нибуть помогло изучение проекта DS_DMA ?

Есть ли вопросы, предложения ?




Antonx86
Добрый день!
Имеется желание запустить проект на плате Xilinx Artix 7 AC701 (FPGA XC7A200T FBG676ACX плата в наличии).

dsmv, напишите пожалуйста с чего лучше начать и каким образом.

может быть имеются программные мастера по подготовке DS_DMA проекта для нового ядра PCIE?
dsmv
Добрый день.

Давайте сделаем. Я посмотрю на AC701 и сформирую проект.




Цитата(Antonx86 @ Feb 10 2014, 08:15) *
Добрый день!
Имеется желание запустить проект на плате Xilinx Artix 7 AC701 (FPGA XC7A200T FBG676ACX плата в наличии).

dsmv, напишите пожалуйста с чего лучше начать и каким образом.

может быть имеются программные мастера по подготовке DS_DMA проекта для нового ядра PCIE?
dsmv
Собрал проект AC701_A200T_CORE. Пока есть проблемы с моделированием.

http://ds-dev.ru/issues/65

Antonx86
dsmv, добрый день,

в http://ds-dev.ru/issues/65 обратил внимание на вопрос о генерации ISE 14.5.

я сгенерировал ядро pcie для Artix 7 на ISE 14.7 (во вложении)
приложил принтскрины с настройками генерации
(в случае если настройки не верные - могу сгенерировать заново)
надеюсь, что это поможет решить проблемы с моделированием
dsmv
Настройки нормальные. Хотя у меня есть некоторые отличия:

Payload - 256 байт, пока в компьютерах нет поддержки 512 байт (по крайней мере я не встречал)

И я ставлю "Buffering Optimized for Bus Mastering Application"

Вчера я обновил ядро - сделал на 14.6; Стало лучше, но полностью ещё не работает. Попробую на этом.

dsmv
Проверил с ядром от ISE 14.7 - не работает.

Проблема на передаче запроса чтения от HOST к ПЛИС.


Отправляю два пакета - пакет записи проходит нормально, пакет чтения - не доходит до ПЛИС.

Узел xilinx_pcie_rport_m2 тот же самый что и в остальных проектах, видимо проблема в самом IP Core; Для моделирования использую Active-HDL 9.3 SP1 и библиотеки для ISE 14.7;

Куда копать - не знаю.

Antonx86
dsmv, добрый день,
измеряли ли Вы скорость обмена информацией PC->FPGA->PC для платы SP605 ?
т.е. скорости в одном направлении у Вас предоставлены http://ds-dev.ru/projects/ds-dma/wiki/Sp605_lx45t_core
а вот про одновременный обмен от компьютера к ПЛИС и обратно я информацию не нашел ...
Какую теоретическую скорость можно добиться PC->FPGA->PC на плате SP605 с помощью Вашего проекта?
dsmv
Цитата(Antonx86 @ Jun 10 2014, 03:32) *
dsmv, добрый день,
измеряли ли Вы скорость обмена информацией PC->FPGA->PC для платы SP605 ?
т.е. скорости в одном направлении у Вас предоставлены http://ds-dev.ru/projects/ds-dma/wiki/Sp605_lx45t_core
а вот про одновременный обмен от компьютера к ПЛИС и обратно я информацию не нашел ...
Какую теоретическую скорость можно добиться PC->FPGA->PC на плате SP605 с помощью Вашего проекта?


Конкретно на SP605 не измерял, но по аналогии с другими модулями пропускная способность будет делиться пополам. Т.е. следует ожидать ~ 80 Мбайт/с
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.