|
|
  |
OpenSource DMA for Virtex 5, проект на www.ds-dev.ru |
|
|
|
Dec 28 2012, 14:12
|

Участник

Группа: Участник
Сообщений: 46
Регистрация: 29-10-10
Пользователь №: 60 513

|
Добрый день! Пишет вам благодарный, но немного бестолковый пользователь вашего проекта  Только начал вникать в ваши исходники, поэтому вопросов огромное множество, но пока не буду их все вываливать, надеюсь что постепенно сам разберусь. Итак, скачал с ds-dev.ru архив ambpex5_v20_sx50t_core_2012_04_09_v1_1_build_0x100.zip. Собрал в ISE, немного исправил под свою плату с XC5VFX30T. Скачал оттуда же исходники под linux, скомпилил то что в application/adm_test. Результаты тестов примерно такие (соединение x1): test_dio_s128.cfg Код BLOCK_WR BLOCK_RD BLOCK_OK BLOCK_ERR SPD_CURR SPD_AVR STATUS
TRD : 4 0 -544350728 0 0 1423616.0 100837.2 0xFFFF 0 0 TRD : 6 0 0 0 0 0.0 0.0 0x004F 1 0 out_dio_s128.cfg Код BLOCK_WR BLOCK_RD BLOCK_OK BLOCK_ERR SPD_CURR SPD_AVR STATUS
TRD : 4 0 1919343662 0 0 1485236.4 5566.9 0xFFFF 0 0 TRD : 7 1024 0 0 0 0.0 0.0 0x0073 Тест test_main.cfg вылетает с segmentation fault. Результаты вроде обнадеживают. Непонятны некоторые величины, выдаваемые прогой: если текущая скорость остается примерно одинаковой, то средняя скачет многократно и показывает явно заниженные значения. Это какой-то глюк? Можно вкратце пояснить способ измерения скорости? Можно пояснить смысл столбцов в логе? Для меня только значения скорости оказались интуитивно понятны. Касаемо прошивки плис: правильно ли я понимаю, что само ядро интерфейса это PCIE_CORE64_M1, ну или PCIE_CORE64_M2, если нужна обычная параллельная шина LC bus? И для того, чтобы использовать ядро, достаточно приделать к этой шине свой источник данных, например FIFO-буфер?
|
|
|
|
|
Jan 14 2013, 08:10
|

Участник

Группа: Участник
Сообщений: 46
Регистрация: 29-10-10
Пользователь №: 60 513

|
Цитата Есть возможность проверить работу на компьютере с Windows ? есть win 7 x64. Качал ambpex5_test_v1_0, но там только тестовая прога без драйвера. И при запуске BRD.DLL требует. Цитата Строки с TRD 4 быть не должно она возникает если запускать как описано здесь: ./adm_test <имя устройства> <файл конфигурации> [<файл конфигурации>]так как в программе для параметров по умолчанию прописана тетрада 4. Когда же указываю только файл конфигурации, строчка одна, как и должна. Цитата Для тетрады 6 значение регистра STATUS=0x4F - это означает что FIFO полностью заполнено, но передачи в PCI Express нет. что посоветуете посмотреть для дебага?
|
|
|
|
|
Jan 17 2013, 09:33
|
Группа: Участник
Сообщений: 5
Регистрация: 17-01-13
Пользователь №: 75 224

|
Цитата(Jack_of_Shadows @ Jan 17 2013, 12:31)  Kuzmi4 пока нет. Управляющие регистры доступны, явных ошибок в лог ни программа ни драйвер не выдаёт. Судя по регистру статуса передающее FIFO заполняется тестовыми данными, но DMA не хочет их передавать. В обратную сторону соответственно не хочет забирать. Кстати по регистрам: в тетраде MAIN есть набор регистров SELx выбора прерывания и канала DMA. Единственное ненулевое значение в них, это в SEL1 записано 0x1000, что значит примерно: для канала 1 DMA разрешено формирование запроса и выбрана тетрада 0. Непонятно почему здесь стоит нулевая тетрада (main) а не приемная или передающая. И как можно посмотреть отправляются ли реально DMA-запросы - в драйвере, программе или плисе? чтобы посмотреть информацию о состоянии регистров модуля нужно выполнить команду cat /proc/MODULE_NAME вместо MODULE_NAME посмотрите какая плата у Вас (что-то вроде ***-PEX5-**) и покажите результат.
|
|
|
|
|
Jan 17 2013, 09:40
|

Участник

Группа: Участник
Сообщений: 46
Регистрация: 29-10-10
Пользователь №: 60 513

|
karak Код Device information m_TotalIRQ = 0
PE_EXT_FIFO 4
BLOCK_ID = 18 BLOCK_VER = 103 FIFO_ID = 3400 FIFO_NUMBER = 0 RESOURCE = 2 DMA_MODE = 0 DMA_CTRL = 0 FIFO_STATUS = a000 FLAG_CLR = 0 PCI_ADRL = 0 PCI_ADRH = 0 LOCAL_ADR = 0
PE_EXT_FIFO 5
BLOCK_ID = 18 BLOCK_VER = 103 FIFO_ID = 3400 FIFO_NUMBER = 1 RESOURCE = 2 DMA_MODE = 0 DMA_CTRL = 0 FIFO_STATUS = a000 FLAG_CLR = 10 PCI_ADRL = c000 PCI_ADRH = 0 LOCAL_ADR = 1000 а во время работы программы (пытающейся принимать из FIFO 1): Код PE_EXT_FIFO 5
BLOCK_ID = 18 BLOCK_VER = 103 FIFO_ID = 3400 FIFO_NUMBER = 1 RESOURCE = 2 DMA_MODE = 27 DMA_CTRL = 1 FIFO_STATUS = a000 FLAG_CLR = 10 PCI_ADRL = c000 PCI_ADRH = 0 LOCAL_ADR = 1000
Сообщение отредактировал Jack_of_Shadows - Jan 17 2013, 10:01
|
|
|
|
|
Jan 17 2013, 10:11
|
Группа: Участник
Сообщений: 5
Регистрация: 17-01-13
Пользователь №: 75 224

|
Цитата(Jack_of_Shadows @ Jan 17 2013, 12:31)  Kuzmi4 пока нет. Управляющие регистры доступны, явных ошибок в лог ни программа ни драйвер не выдаёт. Судя по регистру статуса передающее FIFO заполняется тестовыми данными, но DMA не хочет их передавать. В обратную сторону соответственно не хочет забирать. Кстати по регистрам: в тетраде MAIN есть набор регистров SELx выбора прерывания и канала DMA. Единственное ненулевое значение в них, это в SEL1 записано 0x1000, что значит примерно: для канала 1 DMA разрешено формирование запроса и выбрана тетрада 0. Непонятно почему здесь стоит нулевая тетрада (main) а не приемная или передающая. И как можно посмотреть отправляются ли реально DMA-запросы - в драйвере, программе или плисе? чтобы посмотреть информацию о состоянии регистров модуля нужно выполнить команду cat /proc/MODULE_NAME вместо MODULE_NAME посмотрите какая плата у Вас (что-то вроде ***-PEX5-**) и покажите результат. Цитата(Jack_of_Shadows @ Jan 17 2013, 13:40)  а во время работы программы (пытающейся принимать из FIFO 1): Код PE_EXT_FIFO 5
BLOCK_ID = 18 BLOCK_VER = 103 FIFO_ID = 3400 FIFO_NUMBER = 1 RESOURCE = 2 DMA_MODE = 27 DMA_CTRL = 1 FIFO_STATUS = a000 FLAG_CLR = 10 PCI_ADRL = c000 PCI_ADRH = 0 LOCAL_ADR = 1000 Что-то предыдущее сообщение отправилось второй раз. то что в статусе 0xA000 говорит о том, что контроллер не стартовал. Должно быть 0xA001 у вас 64 битная linux система или 32?
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|