Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Pipeline bridge
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
DASM
Подключают к нему всякое разношерстное и пишут что мол производительность повысить можно. Поясните на пальцах, как это работает ? Я понимаю как оно в процах работает - одновременно идет выбрка, декодирование предыдущей инструкции и т.п. А тут как ? Какие устройства есть смысл на него вешать ?
vetal
Он нужен для оптимизации декодирования шины и обратных связей. При наличии большого количества слейвов это может поднять Fmax.
Примерно такой же принцип у fifoed bridge. Путем вынесения низкочастотной периферии можно поднять fmax.
DASM
fMax проца ? Честно говоря все равно не совсем понял. Ну вроде ясно, что в фифо молжно заталкивать данные от разных источников с разной скорострельностью. А как потом проц разберется - что от чего пришло ?
vetal
Да, проца, но не обязательно его. Процу разбираться не надо - мосты для него прозрачные.
Пример: Постройте систему с 30 UART - для них потребуется очень много декодеров(арбитров), с помощью pipeline bridge можно их вынести с шины проца на отделенную шину(шины), где и будут расположены их арбитры.
cpu+srdam+epcs+jtag-uart+30uart+10spi =43 арбитра, которые можно сократить до cpu+sdram+pipeline_bridge1(epcs+jtag-uart+10spi) + pileline_bridge2(30 uart) = 3 арбитра на шине проца+12 арбитров на шине после pipeline1 + 30 арбитров на шине после pipeline2. Так де можно поступать и в отношении мастеров : вместо одного большого арбитра для sdram c помощью мостов разбить на несколько более мелких.
DASM
а разве арбитры занимают время проца ? Или просто когда их много на шине то чисто по разводке ПЛИС приходится снижать частоту ? И можно еще один наивный вопрос по синхронным SRAM ? Я такак понял у них Latency есть, в моей микруле она равна трем. Я правильно понимаю, что после выстаавленнего N-нного адреса - данные относящиеся к этому адреса появятся на ШД только после 3-х тактов ? (за исключением бурстового режима, которой пока использовать не могу). А как же процессор разбирается с тем, что выставляет тот адрес, который хочет, а данные получает еще старые.. Еще примерно понимаю, как проблему решить в линейной проге, но если ветвление - ему же ждать 3 такта придется ? (если без кешей) . Я все правильно понял или туплю ?
vetal
Цитата
а разве арбитры занимают время проца ? Или просто когда их много на шине то чисто по разводке ПЛИС приходится снижать частоту ?

Не занимают. Когда они большие - увеличивается количество логики, что ведет к снижению тактовой.

Цитата
И можно еще один наивный вопрос по синхронным SRAM ? Я такак понял у них Latency есть, в моей микруле она равна трем. Я правильно понимаю, что после выстаавленнего N-нного адреса - данные относящиеся к этому адреса появятся на ШД только после 3-х тактов ? (за исключением бурстового режима, которой пока использовать не могу). А как же процессор разбирается с тем, что выставляет тот адрес, который хочет, а данные получает еще старые..

Процессор получает данные по тому адресу, по которому его запросил. Все особенности памяти учитывает ее контроллер. Процессору(мастеру) все равно какая там память on-chip, srdm, sdram, ssram. Для него это просто ячейка в адресном пространстве.

Цитата
. Еще примерно понимаю, как проблему решить в линейной проге, но если ветвление - ему же ждать 3 такта придется ? (если без кешей) . Я все правильно понял или туплю ?

Это уже зависит от того насколько навороченный контроллер. Без кэшей придется ждать. С кэш памятью - она постепенно заполнится и на циклах код будет браться уже из кэша.

Со стандартным контроллером процессор вполне справляется с расчетами на плавающей точке без аппаратных ускорителей, тактовая небольшая - 80МГц(CL3, на CL2 мешают большие значения setup/hold у памяти). В своей системе я больше оптимизировал процесс сбора информации, с целью снижения нагрузки на слабое место - прерывания.
DASM
угу, но понял я все же верно - память выдает данные с запаздыванием, и разобирается с этим уже контроллер памяти ? А с прерываниями и правда беда. Но вроде в новых VIC из 9.1 время входа-выхода снижено до нескольких тактов ? И не понял, как значение setup hold зависят от семейства Альтер, это ж вроде как раз контроллером памяти задается ?
vetal
Цитата
угу, но понял я все же верно - память выдает данные с запаздыванием, и разобирается с этим уже контроллер памяти ?

Да.
Цитата
А с прерываниями и правда беда.

Можно делать периферию, которая сама будет все делать, складывать в память и выдавать прерывание, когда данные уже готовы к обработке.

Цитата
И не понял, как значение setup hold зависят от семейства Альтер, это ж вроде как раз контроллером памяти задается ?

На больших частотах это уже не от контроллера зависит, физические параметры(задержки) галочками в квартусе не поправишь sad.gif
DASM
тогда последний вопрос - а зачем этот burst например в SDRAM вообще нужен, если данные и так поступают с каждым тактом, разве что только сдвинутые
vetal
В том-то и дело, что не с каждым. Там все вперемешку идет, например при установках арбитра 1 на инструкции и 1 на данные доступ будут получать по очереди 2 мастера, что понесет значительную потерю производительности. С вurst он считает burstcount с минимальной задержкой.
DASM
хорошо, а если я арбитраж 8-8 поставлю это будет тоже самое, что и установка sdram в burst=8 ?
vetal
Это будет говорить о том, что каждый порт сможет по 8 раз непрерывно обратиться к памяти. Burst - это тип транзакции. Например: у мастера 1 burst=8, у мастера 2 простые транзакции, арбитраж настроен как 2-3. Доступ будет таким: мастер 1 прочитает 2 раза по 8 единиц данных, потом мастер 2 прочитает 3 раза по 1единице данных и так по кругу.
DASM
спасибо, понял. Стандартный SDRAM контроллер как я понял burst не поддерживает ? Вроде особых тормозов не замечал (из-за кешей наверное?). А когда кеш заполняет линию - процессор вынужден простаивать ?
vetal
Цитата
Стандартный SDRAM контроллер как я понял burst не поддерживает ?

Вам лучше взять signaltap и посмотреть. Burst на шине не есть тоже самое что burst в микросхеме памяти. Это непрерываемая последовательность простейших транзакций. Контроллер их получит как несколько подряд идущих простейших обращений и не будет лишний раз переключаться. В нем уже есть свое маленькой fifo для чтения и для записи.

Цитата
Вроде особых тормозов не замечал (из-за кешей наверное?). А когда кеш заполняет линию - процессор вынужден простаивать ?

Надо сильно постараться чтобы это заметить при наличии кэша. По поводу того, что он там делает лучше спрашивать в суппорте.
Methane
Цитата(DASM @ Apr 24 2010, 15:35) *
спасибо, понял. Стандартный SDRAM контроллер как я понял burst не поддерживает ? Вроде особых тормозов не замечал (из-за кешей наверное?). А когда кеш заполняет линию - процессор вынужден простаивать ?

Я использовал "стандартный SDRAM" и Burst он точно поддерживает. Точнее SDRAM можно запрограммировать на разные режимы. Выдать там 8 слов, 16 слов итд. В разной последовательности. Или просто "всю страницу, на выход". SDRAM и выдаст. Тоже самое и для записи. Точнее сказать "сейчас писаться будет целая страница. После того выдавать байты длинной в целую страницу.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.