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

 
 
5 страниц V  < 1 2 3 4 5 >  
Reply to this topicStart new topic
> OpenSource DMA for Virtex 5, проект на www.ds-dev.ru
dsmv
сообщение Sep 6 2011, 17:00
Сообщение #31


Местный
***

Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284



Нет, частота локальной шины ядра 62.5 Мгц - 16 нс.
У меня есть узел, который мигает светодиодом в соответствии с шириной шины. Он остался от реализаций для x8 на Virtex 5 и Virtex 6. Но там частота шины 250 Мгц, а мигает он и там достаточно медленно. А здесь будет ещё в 4 раза медленней, точный период сказать не могу, возможно раз в минуту.
Go to the top of the page
 
+Quote Post
dsmv
сообщение Sep 13 2011, 08:42
Сообщение #32


Местный
***

Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284




Есть новая информация. Проект SP605_LX45T_CORE успешно работает. Огромное спасибо Kuzmi4 за проверку на реальной плате и обнаружение проблемы при работе с chipset от NVIDEA. В процессе отладки проявилась интересная особенность chipeset P55 - он игнорирует поле LOWER ADR в пакете COMPLETION. Это я поле я оставлял нулевым. В результате на компьютере с процессором AMD и chipset от NVIDEA читались только регистры у которых в младших адресах был 0. На компьютерах c P55 всё работало отлично. После исправления LOWER ADR - заработало и на NVIDEA.

Скорость ввода данных на компьютере с chipset P55 - 201 Мбайт/с.
Go to the top of the page
 
+Quote Post
Jack_of_Shadows
сообщение Dec 28 2012, 14:12
Сообщение #33


Участник
*

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



Добрый день! Пишет вам благодарный, но немного бестолковый пользователь вашего проекта sm.gif
Только начал вникать в ваши исходники, поэтому вопросов огромное множество, но пока не буду их все вываливать, надеюсь что постепенно сам разберусь.
Итак, скачал с 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-буфер?
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jan 5 2013, 19:29
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 Jack_of_Shadows
Есть версия для вишбона, или вас интересует именно LC bus?
Go to the top of the page
 
+Quote Post
Jack_of_Shadows
сообщение Jan 6 2013, 10:07
Сообщение #35


Участник
*

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



Kuzmi4, да-да, видел, на данном этапе мне это не особо принципиально, лишь бы было попроще.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jan 6 2013, 10:14
Сообщение #36


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 Jack_of_Shadows
А куда проще ? Времянки на WB документированы, MemoryMap имеется...
Go to the top of the page
 
+Quote Post
Jack_of_Shadows
сообщение Jan 7 2013, 18:25
Сообщение #37


Участник
*

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



Kuzmi4,
я хотел сказать что вокруг PCIE_CORE64_M1 есть обертки на обе эти шины, можно взять любую из них, и получить готовый блок PCIe, для работы с которым понадобится только подсовывать новые данные на входную шину. Я правильно понимаю степень законченности вашего проекта?
Go to the top of the page
 
+Quote Post
Jack_of_Shadows
сообщение Jan 9 2013, 15:08
Сообщение #38


Участник
*

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



И еще, может я конечно начинаю не с той стороны, но немного покопав программу под Linux совсем засел в тупик:

скорость теста должно показывать в МБ/с, в то время как у меня выдает совершенно нереальные несколько миллионов (из-за того, что параметр BLOCK_RD растет как на дрожжах)

с какими параметрами надо вызывать программу, к примеру для того, чтобы протестировать чтение тестовых данных из плис? Надо указывать тетраду 1 (TEST_CTRL) или какую-то другую? Тесты test_dio_s128.cfg и out_dio_s128.cfg висят в нуле, при вызове программы без параметров счетчики тикают, но как я уже говорил показывают нереально больше значения.
Go to the top of the page
 
+Quote Post
dsmv
сообщение Jan 11 2013, 13:14
Сообщение #39


Местный
***

Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284



Спасибо за интерес к моему проекту. Тест работает неправильно. В качестве параметра надо передавать имя файла конфигурации: test_dio_s128.cfg; Должна появится только одна строчка для тетрады 6; Строки с TRD 4 быть не должно. Что то не срослось. Есть возможность проверить работу на компьютере с Windows ?

Тетрады 4 в тестовом проекте нет, поэтому значения скорости - произвольные. Значение регистра STATUS=0xFFFF это правильно.

Для тетрады 6 значение регистра STATUS=0x4F - это означает что FIFO полностью заполнено, но передачи в PCI Express нет.

По поводу скорости: текущаяя скорость измеряется на интервале 4 секунды, средняя скорость - с момента запуска теста. Вывод в Мбайтах/с; Для PCI Express x1 должно быть около 200 Мбайт/с.

Для Virtex 5 ядром PCI Express является узел PCIE_CORE64_M1. Он реализует пакетную шину PB_BUS; Узел PCIE_CORE64_M2 содержит переход на шину LC_BUS и блок управления BLOCK_MAIN - он нужен для работы наших драйверов. Наиболее просто использовать LC_BUS. Это простая параллельная шина без ожидания готовности. Переход на WISHBONE связан с добавлением промежуточных FIFO.

Go to the top of the page
 
+Quote Post
Jack_of_Shadows
сообщение Jan 14 2013, 08:10
Сообщение #40


Участник
*

Группа: Участник
Сообщений: 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 нет.

что посоветуете посмотреть для дебага?
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jan 17 2013, 07:37
Сообщение #41


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 Jack_of_Shadows
удалось побороть ошибку ? Система заработала в обе стороны ?
Go to the top of the page
 
+Quote Post
Jack_of_Shadows
сообщение Jan 17 2013, 08:31
Сообщение #42


Участник
*

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



Kuzmi4
пока нет. Управляющие регистры доступны, явных ошибок в лог ни программа ни драйвер не выдаёт. Судя по регистру статуса передающее FIFO заполняется тестовыми данными, но DMA не хочет их передавать. В обратную сторону соответственно не хочет забирать.
Кстати по регистрам: в тетраде MAIN есть набор регистров SELx выбора прерывания и канала DMA. Единственное ненулевое значение в них, это в SEL1 записано 0x1000, что значит примерно: для канала 1 DMA разрешено формирование запроса и выбрана тетрада 0. Непонятно почему здесь стоит нулевая тетрада (main) а не приемная или передающая. И как можно посмотреть отправляются ли реально DMA-запросы - в драйвере, программе или плисе?
Go to the top of the page
 
+Quote Post
karak
сообщение Jan 17 2013, 09:33
Сообщение #43





Группа: Участник
Сообщений: 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-**) и покажите результат.
Go to the top of the page
 
+Quote Post
Jack_of_Shadows
сообщение Jan 17 2013, 09:40
Сообщение #44


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
karak
сообщение Jan 17 2013, 10:11
Сообщение #45





Группа: Участник
Сообщений: 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?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 12:16
Рейтинг@Mail.ru


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