Jump to content

    

Recommended Posts

Подключают к нему всякое разношерстное и пишут что мол производительность повысить можно. Поясните на пальцах, как это работает ? Я понимаю как оно в процах работает - одновременно идет выбрка, декодирование предыдущей инструкции и т.п. А тут как ? Какие устройства есть смысл на него вешать ?

Share this post


Link to post
Share on other sites

Он нужен для оптимизации декодирования шины и обратных связей. При наличии большого количества слейвов это может поднять Fmax.

Примерно такой же принцип у fifoed bridge. Путем вынесения низкочастотной периферии можно поднять fmax.

Share this post


Link to post
Share on other sites

fMax проца ? Честно говоря все равно не совсем понял. Ну вроде ясно, что в фифо молжно заталкивать данные от разных источников с разной скорострельностью. А как потом проц разберется - что от чего пришло ?

Share this post


Link to post
Share on other sites

Да, проца, но не обязательно его. Процу разбираться не надо - мосты для него прозрачные.

Пример: Постройте систему с 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 помощью мостов разбить на несколько более мелких.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
а разве арбитры занимают время проца ? Или просто когда их много на шине то чисто по разводке ПЛИС приходится снижать частоту ?

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

 

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

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

 

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

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

 

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

Share this post


Link to post
Share on other sites

угу, но понял я все же верно - память выдает данные с запаздыванием, и разобирается с этим уже контроллер памяти ? А с прерываниями и правда беда. Но вроде в новых VIC из 9.1 время входа-выхода снижено до нескольких тактов ? И не понял, как значение setup hold зависят от семейства Альтер, это ж вроде как раз контроллером памяти задается ?

Share this post


Link to post
Share on other sites
угу, но понял я все же верно - память выдает данные с запаздыванием, и разобирается с этим уже контроллер памяти ?

Да.

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

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

 

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

На больших частотах это уже не от контроллера зависит, физические параметры(задержки) галочками в квартусе не поправишь :(

Share this post


Link to post
Share on other sites

тогда последний вопрос - а зачем этот burst например в SDRAM вообще нужен, если данные и так поступают с каждым тактом, разве что только сдвинутые

Share this post


Link to post
Share on other sites

В том-то и дело, что не с каждым. Там все вперемешку идет, например при установках арбитра 1 на инструкции и 1 на данные доступ будут получать по очереди 2 мастера, что понесет значительную потерю производительности. С вurst он считает burstcount с минимальной задержкой.

Share this post


Link to post
Share on other sites

Это будет говорить о том, что каждый порт сможет по 8 раз непрерывно обратиться к памяти. Burst - это тип транзакции. Например: у мастера 1 burst=8, у мастера 2 простые транзакции, арбитраж настроен как 2-3. Доступ будет таким: мастер 1 прочитает 2 раза по 8 единиц данных, потом мастер 2 прочитает 3 раза по 1единице данных и так по кругу.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Стандартный SDRAM контроллер как я понял burst не поддерживает ?

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

 

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

Надо сильно постараться чтобы это заметить при наличии кэша. По поводу того, что он там делает лучше спрашивать в суппорте.

Share this post


Link to post
Share on other sites
спасибо, понял. Стандартный SDRAM контроллер как я понял burst не поддерживает ? Вроде особых тормозов не замечал (из-за кешей наверное?). А когда кеш заполняет линию - процессор вынужден простаивать ?

Я использовал "стандартный SDRAM" и Burst он точно поддерживает. Точнее SDRAM можно запрограммировать на разные режимы. Выдать там 8 слов, 16 слов итд. В разной последовательности. Или просто "всю страницу, на выход". SDRAM и выдаст. Тоже самое и для записи. Точнее сказать "сейчас писаться будет целая страница. После того выдавать байты длинной в целую страницу.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this