Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Подключение ПЛИС к асинхронному интерфейсу памяти процессора.
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Pruga
Здравствуйте.
Имеется следующая проблема: есть процессор, к нему подключена ПЛИС (Spartan-3), через асинхронный интерфейс памяти (адрес, данные, WR, RD, CS). По замыслу, обмен данными между процессором и внутренностями ПЛИС должен производиться через внутреннюю память ПЛИС (блочную), т.е память является промежуточным буфером. Однако посмотрев Libraries guide (lib.pdf) от ксайлинксА, выяснилось, что на борту Спартанца есть только синхронная память. В документации на XST, тоже не нашел полностью асинхронного описания памяти. Подскажите как грамотно стыковать синхронную память ПЛИСа с асинхронным интерфейсом процессора??
iosifk
Цитата(Pruga @ Jul 21 2006, 12:26) *
Подскажите как грамотно стыковать синхронную память ПЛИСа с асинхронным интерфейсом процессора??


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

Вопрос задан неполно, поэтому ответы будут наугад....
Golikov A.
Цитата(Pruga @ Jul 21 2006, 12:26) *
Здравствуйте.
Имеется следующая проблема: есть процессор, к нему подключена ПЛИС (Spartan-3), через асинхронный интерфейс памяти (адрес, данные, WR, RD, CS). По замыслу, обмен данными между процессором и внутренностями ПЛИС должен производиться через внутреннюю память ПЛИС (блочную), т.е память является промежуточным буфером. Однако посмотрев Libraries guide (lib.pdf) от ксайлинксА, выяснилось, что на борту Спартанца есть только синхронная память. В документации на XST, тоже не нашел полностью асинхронного описания памяти. Подскажите как грамотно стыковать синхронную память ПЛИСа с асинхронным интерфейсом процессора??


Если частоты равны то...
в большинстве процов есть настройки. как долго держится строб внизу, вверху, как долго стоят данные и так далее... Задаете эти настройки так чтобы на каждое состояние приходилось не менее 2 клоков ПЛИС. Ну а дальше все просто по каждому клоку смотрите состояние стробов, и ищете переходы (по переходам работайте, это как будто асинхронный режим но на едином клоке ПЛИС), если строб в каждом своем состоянии будет не менее 2 клоков ПЛИС, то вы их гарантированно найдете. Ну а далее, конкретизируйте, как вам и посоветовали, что вы хотите сделать, и вам ответят менее туманноsmile.gif
Pruga
Мда.. попробую внести ясность.
Частота системной шины процессора равна 100МГц, внутри ПЛИС разведен один тактовый сигнал - 40 МГц. Процессор производит запись в ПЛИС примерно 20 байт в секунду, читает только по сигналам прерывания от ПЛИС до 40000 байт. Передаваемые и принимаемые слова записываются и читаются по случайным адресам и в случайное время.
Вообщем, мне кажется поступить таким образом, как Вы мне посоветовали: то есть процессом обмена будет заниматься некоторое устройство в ПЛИС, которое активизируется по сигналу CS, и принимает или выставляет данные в промежуточном регистре, и устанавливает сигнал Wait на шине процессора (внешняя шина в это время ждет). Вопрос у меня возник в том, как сохранять данные из этого регистра в память ПЛИСа. Я так понимаю в данном случае это лучше делать по внутреннему клоку ПЛИС??

Цитата(Golikov A. @ Jul 21 2006, 13:35) *
Если частоты равны то...
в большинстве процов есть настройки. как долго держится строб внизу, вверху, как долго стоят данные и так далее... Задаете эти настройки так чтобы на каждое состояние приходилось не менее 2 клоков ПЛИС. Ну а дальше все просто по каждому клоку смотрите состояние стробов, и ищете переходы (по переходам работайте, это как будто асинхронный режим но на едином клоке ПЛИС), если строб в каждом своем состоянии будет не менее 2 клоков ПЛИС, то вы их гарантированно найдете. Ну а далее, конкретизируйте, как вам и посоветовали, что вы хотите сделать, и вам ответят менее туманноsmile.gif
А можно поступить таким образом: устройство отслеживает сигнал CS, защелкивает адрес, затем ждет строб RD или WR и выставляет или принимает данные во внутренний регистр?? А дальше по сигналам клока ПЛИС записывает во внутреннюю память?? Т.е обойтись без синхронизации внешней шины с клоком ПЛИСа??
ASN
Pruga
Вы уже сами всё описали smile.gif
По записи ничего ждать не надо, главное захватить данные и протолкнуть их конвейером в требуемые регистры.
Если процессор поддерживает пакетные чтения, то начальная задержка будет мало влиять на пропускную способность шины.
Golikov A.
Цитата(Pruga @ Jul 22 2006, 22:45) *
А можно поступить таким образом: устройство отслеживает сигнал CS, защелкивает адрес, затем ждет строб RD или WR и выставляет или принимает данные во внутренний регистр?? А дальше по сигналам клока ПЛИС записывает во внутреннюю память?? Т.е обойтись без синхронизации внешней шины с клоком ПЛИСа??



Можно. Только учтите обработка каждого сигнала по фронту приведет к использованию глобального буфера клоков, во всяком случае в ИСЕ и ксалинксе, а их в плисах не очень много. Это единственное что остановило меня от вашего варианта, и я реализовал свой.

Кстати не забывайте что во многих ПЛИС есть ДКМ (ну не во многих, но есть!) и ими можно 40 МГц входных до 80 как минимум поднять.
ishergin
Цитата(Golikov A. @ Jul 23 2006, 02:33) *
Цитата(Pruga @ Jul 22 2006, 22:45) *

А можно поступить таким образом: устройство отслеживает сигнал CS, защелкивает адрес, затем ждет строб RD или WR и выставляет или принимает данные во внутренний регистр?? А дальше по сигналам клока ПЛИС записывает во внутреннюю память?? Т.е обойтись без синхронизации внешней шины с клоком ПЛИСа??



Можно. Только учтите обработка каждого сигнала по фронту приведет к использованию глобального буфера клоков, во всяком случае в ИСЕ и ксалинксе, а их в плисах не очень много. Это единственное что остановило меня от вашего варианта, и я реализовал свой.
...


Вход Clock Enable (CE) можно использовать для защелкивания, тогда не будут расходоваться глобальные клоковые буфера; в этом случае сигнал CE должен быть длинее полупероида тактовой частоты, иначе можно не защелкнуть smile.gif
dinam
А какой процессор используете? Может у него есть выход тактовой частоты внешней шины. Или уже плата разведена?
Golikov A.
Цитата(ishergin @ Jul 23 2006, 23:27) *
Вход Clock Enable (CE) можно использовать для защелкивания, тогда не будут расходоваться глобальные клоковые буфера; в этом случае сигнал CE должен быть длинее полупероида тактовой частоты, иначе можно не защелкнуть smile.gif



а это как? чуть подробнее.
Исходные
есть ПЛИС на 100 МГц клок, к ней подключена АЦП с 50Мегосемплами. АЦП дергает ножку датареди, когда у нее готовы данные, я ничего не придумал как запустить ее на 25 Мегосемплах, и отлавливать фронт датареди по базовому клоку. То есть 2 сигнала, один состояние датареди, другой состояние первого такт назад, когда они в конфигурации 1 0, значит фронт. Второй вариант это асинхронно по датареди запускать процесс, что сжирает глобальный клоковый буфер.

А вы как предлагаете? Поставить буфер, подать на него глобальный клок, а сигнал датареди пустить на буфер енайбл, тогда когда датареди будет в 1 буфер пропустить клоковый сигнал? Если это так то на таких частотах возможно, что восходящие фронты будут пропущены... А забыл условие про длиннее полупериода. Но тогда может так оказаться, что будет защелкнут фронт сосвсем рядом с концом датареди, и при защелкивании, данные могут начать меняться... опять же есть условие на время выставления сигнала до клока... я правильно понял что вы предлагаете?
Pruga
Мои сомнения рассеились. СпасиБо всем за советы.

Цитата(dinam @ Jul 25 2006, 09:13) *
А какой процессор используете? Может у него есть выход тактовой частоты внешней шины. Или уже плата разведена?
Да, плату уже к сожалению (или к счастью) не изменить.
ishergin
Цитата(Golikov A. @ Jul 25 2006, 12:55) *
Цитата(ishergin @ Jul 23 2006, 23:27) *


Вход Clock Enable (CE) можно использовать для защелкивания, тогда не будут расходоваться глобальные клоковые буфера; в этом случае сигнал CE должен быть длинее полупероида тактовой частоты, иначе можно не защелкнуть smile.gif



а это как? чуть подробнее.
Исходные
есть ПЛИС на 100 МГц клок, к ней подключена АЦП с 50Мегосемплами. АЦП дергает ножку датареди, когда у нее готовы данные, я ничего не придумал как запустить ее на 25 Мегосемплах, и отлавливать фронт датареди по базовому клоку. То есть 2 сигнала, один состояние датареди, другой состояние первого такт назад, когда они в конфигурации 1 0, значит фронт. Второй вариант это асинхронно по датареди запускать процесс, что сжирает глобальный клоковый буфер.

А вы как предлагаете? Поставить буфер, подать на него глобальный клок, а сигнал датареди пустить на буфер енайбл, тогда когда датареди будет в 1 буфер пропустить клоковый сигнал? Если это так то на таких частотах возможно, что восходящие фронты будут пропущены... А забыл условие про длиннее полупериода. Но тогда может так оказаться, что будет защелкнут фронт сосвсем рядом с концом датареди, и при защелкивании, данные могут начать меняться... опять же есть условие на время выставления сигнала до клока... я правильно понял что вы предлагаете?


У меня не было таких скоростей как у Вас, так что ничего не пропускалось и не накладывалось smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.