Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PCI-Express не сразу разгоняется
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > ISA/PCI/PCI-X/PCI Express
dsmv
Здравствуйте.
Хочу поделится интересным наблюдением. Я продолжаю исследовать передачу данных по шине PCI-Express.
Описание эксперимента:
Модуль ADP201x1, контроллер PCI-Express реализован на ПЛИС Virtex 5 LX50T
PCI-Express x8
Chipset P45;

Модуль ADP201x1 умеет формировать тестовую последовательность в двух режимах:
1. С анализом готовности FIFO
2. Без анализа готовности FIFO

В режиме 1, если контроллер PCI-Express не успевает передать данные, то формирование данных приостанавливается. В итоге получаем максимальную скорость передачи данных 1431 Мбайт/с.
В режиме 2 задаётся определённая скажность формирования данных, в итоге получаем поток на фиксированной скорости.

На комьютере выделяется блок памяти 1536 Мбайт. Для программы это выглядит на 32 блока по 48 Мбайт. На физическом уровне память фрагментирована на страницы по 4 килобайта.
Так вот собственно проблема: Если сразу запустить режим 2 на скорости 1400 Мбайт/с, то FIFO переполняется - ошибка. Если сначала запустить режим 1, а через несколько секунд переключиться в режим 2,
то ввод на скорости 1400 Мбайт/с идёт нормально в течении длительного времени. Проверял в течении часа - работает.

Запуск формирования тестовой последовательности производится после запуска канала DMA.

Может это связано с какой-либо динамической конфигурацией мостов PCI-Express ?
bav
Цитата
Модуль ADP201x1 умеет формировать тестовую последовательность в двух режимах:
1. С анализом готовности FIFO
2. Без анализа готовности FIFO

как я понимаю, первый режим - это: заполняется FIFO, затем пакет отправляется?
второй режим - как только появляются какие-то данные и канал свободен - происходит передача?
или как?
dsmv
Цитата(bav @ Jul 9 2009, 10:58) *
как я понимаю, первый режим - это: заполняется FIFO, затем пакет отправляется?
второй режим - как только появляются какие-то данные и канал свободен - происходит передача?
или как?


Нет, не так. В ПЛИС существует FIFO 1024 слова по 64 бита. Как только в FIFO оказывается 128 слов они передаются в контроллер PCI-Express; Это для обоих режимов.

А вот запись в FIFO отличается:

Первый режим - если в FIFO есть место - происходит запись. Если FIFO заполнено - запись останавливается.

Второй режим - в FIFO записывается поток данных на определённой скорости. Контролеер PCI-Express должен успеть взять данные из FIFO. Если он не успел, то данные пропадают.
bav
Цитата
Второй режим - в FIFO записывается поток данных на определённой скорости. Контролеер PCI-Express должен успеть взять данные из FIFO. Если он не успел, то данные пропадают.

а для чего такой режим?
вообще, возьмите осциллограф и посмтрите сигналы чтения/записи, переполнения и т.п. получите очень много инфы.
я один раз задействовал LCD монитор и через DVI формировал картинку, на коорой показывались запросы на передачу. например, если идет передача - пиксел зеленый, если нет - черный. в итоге было видно как ведет себя PCI-e при разных воздействиях и режимах.
dsmv
Цитата
а для чего такой режим?


У нас это основной режим. Ко входу FIFO подключается АЦП.

Цитата
вообще, возьмите осциллограф и посмтрите сигналы чтения/записи, переполнения и т.п. получите очень много инфы.


В системную плату с осциллографон не залезешь. А у себя я могу только определить что в начале чтение дескрипторов и передача данных идёт медленнее чем в установившемся режиме.

Цитата
я один раз задействовал LCD монитор и через DVI формировал картинку, на коорой показывались запросы на передачу. например, если идет передача - пиксел зеленый, если нет - черный. в итоге было видно как ведет себя PCI-e при разных воздействиях и режимах.


А вот это круто !
bav
Цитата
В системную плату с осциллографон не залезешь.

а зачем туда лезть? Вы же говорили, что
Цитата
контроллер PCI-Express реализован на ПЛИС Virtex 5 LX50T

вот там и можно вывести несколько сигналов.
Anatol'
Вместо осциллографа в данном случае очень рекомендую ChipScope - записываем историю хоть на 300 сигналов прямо внутри ПЛИС, ничего не выводя, считываем через JTAG и смотрим красивые диаграммки smile.gif
dsmv
Цитата(Anatol' @ Feb 27 2010, 07:16) *
Вместо осциллографа в данном случае очень рекомендую ChipScope - записываем историю хоть на 300 сигналов прямо внутри ПЛИС, ничего не выводя, считываем через JTAG и смотрим красивые диаграммки smile.gif

Это ничего не покажет. Здесь другой масштаб времени. Счёт идёт на гигабайты. ChipScope просто переполнится и всё.

Я выделяю в памяти компьютера буфер 1536 Мбайт. И запускаю приём данных в циклическом режиме. Получается что скорость заполнения в первых нескольких циклах меньше чем в последующих.
Вот сейчас экпериментр провёл.
Первые 10 секунд - 1518 Мбайт/с
Дальше - 1527 Мбайт/с

Скорее всего это как-то связано с работой кеша в компьютере.
Anatol'
Цитата(dsmv @ Feb 27 2010, 21:21) *
Это ничего не покажет. Здесь другой масштаб времени. Счёт идёт на гигабайты. ChipScope просто переполнится и всё.

Можно снять несколько диаграмм в начале и при нормальной работе.

Правда я не очень понимаю, что вам это даст )
Так же как и осциллограф.

Если честно, пихать что-то в реальном времени в PCI-экспресс на максимальной скорости не кажется мне очень хорошей идеей. Даже если бы у вас на испытаниях нужная скорость достигалась, никто не гарантирует, что в другом месте она будет той же.
На PC вам никто и нигде не гарантирует жёсткого реального времени.
Скорость может зависеть от архитектуры моста. Другая материнка или проц - другие скорости.
Она может зависеть просто от случайных факторов - захотелось вдруг процессору интенсивно пообщаться с памятью, на DMA осталось меньше, скорость упала.
В конце концов, рядом электростанция взорвалась( rolleyes.gif ), помеха, пара пакетов на data link layer'е потерялось, повторная отправка, скорость упала.

Как-то ненадёжно это всё получается...
dsmv
Цитата(Anatol' @ Mar 1 2010, 09:14) *
На PC вам никто и нигде не гарантирует жёсткого реального времени.


Разумеется. Но всегда интересно знать предельные возможности и к ним стремится. На 1500 Мбайт/с непрерывный поток не получиться. А вот на 1000 Мбайт/с - вполне.
Никакой другой интерфейс это не даст.
Пропусконая способность канала Процессор-Память на порядок выше чем у PCI-Express, так что в этом месте задержек не будет. Гораздо более реальной является проблема занятости процессора. Процессор на что-то отвлёкся и не успел обработать блок. Но вот для решения этой проблемы и нужен огромный буфер памяти. Кроме того, у нас на плате есть ещё SODIMM 2 ГБ. И удалось его заставить работать в режиме FIFO.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.