|
|
  |
Подключение ПЛИС к асинхронному интерфейсу памяти процессора. |
|
|
Guest_Pruga_*
|
Jul 21 2006, 08:26
|
Guests

|
Здравствуйте. Имеется следующая проблема: есть процессор, к нему подключена ПЛИС (Spartan-3), через асинхронный интерфейс памяти (адрес, данные, WR, RD, CS). По замыслу, обмен данными между процессором и внутренностями ПЛИС должен производиться через внутреннюю память ПЛИС (блочную), т.е память является промежуточным буфером. Однако посмотрев Libraries guide (lib.pdf) от ксайлинксА, выяснилось, что на борту Спартанца есть только синхронная память. В документации на XST, тоже не нашел полностью асинхронного описания памяти. Подскажите как грамотно стыковать синхронную память ПЛИСа с асинхронным интерфейсом процессора??
|
|
|
|
|
Jul 21 2006, 10:03
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(Pruga @ Jul 21 2006, 12:26)  Подскажите как грамотно стыковать синхронную память ПЛИСа с асинхронным интерфейсом процессора?? Какие частоты? На низкой частоте процессора - успеете простробировать более высокой частотой ПЛИСа. А вот если частоты примерно равны, то в ПЛИСе можно сделать FIFO, на одной стороне - WR, RD, CS, на другой системная частота в ПЛИС. Потом в синхронной памяти есть латентность. Поэтому напишите, как и что хотите записывать - отдельные слова или пакеты данных.... А наиболее общий подход - ставить развязывающие регистры в ПЛИСе и делать автомат, который будет перебрасывать данные из регистров в память. А пока он это делает, внешняя шина будет ждать. Вопрос задан неполно, поэтому ответы будут наугад....
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Jul 21 2006, 10:35
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

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

|
Мда.. попробую внести ясность. Частота системной шины процессора равна 100МГц, внутри ПЛИС разведен один тактовый сигнал - 40 МГц. Процессор производит запись в ПЛИС примерно 20 байт в секунду, читает только по сигналам прерывания от ПЛИС до 40000 байт. Передаваемые и принимаемые слова записываются и читаются по случайным адресам и в случайное время. Вообщем, мне кажется поступить таким образом, как Вы мне посоветовали: то есть процессом обмена будет заниматься некоторое устройство в ПЛИС, которое активизируется по сигналу CS, и принимает или выставляет данные в промежуточном регистре, и устанавливает сигнал Wait на шине процессора (внешняя шина в это время ждет). Вопрос у меня возник в том, как сохранять данные из этого регистра в память ПЛИСа. Я так понимаю в данном случае это лучше делать по внутреннему клоку ПЛИС?? Цитата(Golikov A. @ Jul 21 2006, 13:35)  Если частоты равны то... в большинстве процов есть настройки. как долго держится строб внизу, вверху, как долго стоят данные и так далее... Задаете эти настройки так чтобы на каждое состояние приходилось не менее 2 клоков ПЛИС. Ну а дальше все просто по каждому клоку смотрите состояние стробов, и ищете переходы (по переходам работайте, это как будто асинхронный режим но на едином клоке ПЛИС), если строб в каждом своем состоянии будет не менее 2 клоков ПЛИС, то вы их гарантированно найдете. Ну а далее, конкретизируйте, как вам и посоветовали, что вы хотите сделать, и вам ответят менее туманно  А можно поступить таким образом: устройство отслеживает сигнал CS, защелкивает адрес, затем ждет строб RD или WR и выставляет или принимает данные во внутренний регистр?? А дальше по сигналам клока ПЛИС записывает во внутреннюю память?? Т.е обойтись без синхронизации внешней шины с клоком ПЛИСа??
|
|
|
|
|
Jul 22 2006, 19:28
|
Местный
  
Группа: Свой
Сообщений: 459
Регистрация: 15-07-04
Из: g.Penza
Пользователь №: 326

|
PrugaВы уже сами всё описали  По записи ничего ждать не надо, главное захватить данные и протолкнуть их конвейером в требуемые регистры. Если процессор поддерживает пакетные чтения, то начальная задержка будет мало влиять на пропускную способность шины.
|
|
|
|
|
Jul 23 2006, 19:27
|
Частый гость
 
Группа: Свой
Сообщений: 130
Регистрация: 16-06-05
Из: Оренбург
Пользователь №: 6 039

|
Цитата(Golikov A. @ Jul 23 2006, 02:33)  Цитата(Pruga @ Jul 22 2006, 22:45)  А можно поступить таким образом: устройство отслеживает сигнал CS, защелкивает адрес, затем ждет строб RD или WR и выставляет или принимает данные во внутренний регистр?? А дальше по сигналам клока ПЛИС записывает во внутреннюю память?? Т.е обойтись без синхронизации внешней шины с клоком ПЛИСа??
Можно. Только учтите обработка каждого сигнала по фронту приведет к использованию глобального буфера клоков, во всяком случае в ИСЕ и ксалинксе, а их в плисах не очень много. Это единственное что остановило меня от вашего варианта, и я реализовал свой. ... Вход Clock Enable (CE) можно использовать для защелкивания, тогда не будут расходоваться глобальные клоковые буфера; в этом случае сигнал CE должен быть длинее полупероида тактовой частоты, иначе можно не защелкнуть
--------------------
Программа выполнила невыполнимое и допустила недопустимое
|
|
|
|
|
Jul 25 2006, 06:55
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата(ishergin @ Jul 23 2006, 23:27)  Вход Clock Enable (CE) можно использовать для защелкивания, тогда не будут расходоваться глобальные клоковые буфера; в этом случае сигнал CE должен быть длинее полупероида тактовой частоты, иначе можно не защелкнуть  а это как? чуть подробнее. Исходные есть ПЛИС на 100 МГц клок, к ней подключена АЦП с 50Мегосемплами. АЦП дергает ножку датареди, когда у нее готовы данные, я ничего не придумал как запустить ее на 25 Мегосемплах, и отлавливать фронт датареди по базовому клоку. То есть 2 сигнала, один состояние датареди, другой состояние первого такт назад, когда они в конфигурации 1 0, значит фронт. Второй вариант это асинхронно по датареди запускать процесс, что сжирает глобальный клоковый буфер. А вы как предлагаете? Поставить буфер, подать на него глобальный клок, а сигнал датареди пустить на буфер енайбл, тогда когда датареди будет в 1 буфер пропустить клоковый сигнал? Если это так то на таких частотах возможно, что восходящие фронты будут пропущены... А забыл условие про длиннее полупериода. Но тогда может так оказаться, что будет защелкнут фронт сосвсем рядом с концом датареди, и при защелкивании, данные могут начать меняться... опять же есть условие на время выставления сигнала до клока... я правильно понял что вы предлагаете?
|
|
|
|
Guest_Pruga_*
|
Jul 25 2006, 07:19
|
Guests

|
Мои сомнения рассеились. СпасиБо всем за советы. Цитата(dinam @ Jul 25 2006, 09:13)  А какой процессор используете? Может у него есть выход тактовой частоты внешней шины. Или уже плата разведена? Да, плату уже к сожалению (или к счастью) не изменить.
|
|
|
|
|
Jul 25 2006, 09:07
|
Частый гость
 
Группа: Свой
Сообщений: 130
Регистрация: 16-06-05
Из: Оренбург
Пользователь №: 6 039

|
Цитата(Golikov A. @ Jul 25 2006, 12:55)  Цитата(ishergin @ Jul 23 2006, 23:27)  Вход Clock Enable (CE) можно использовать для защелкивания, тогда не будут расходоваться глобальные клоковые буфера; в этом случае сигнал CE должен быть длинее полупероида тактовой частоты, иначе можно не защелкнуть  а это как? чуть подробнее. Исходные есть ПЛИС на 100 МГц клок, к ней подключена АЦП с 50Мегосемплами. АЦП дергает ножку датареди, когда у нее готовы данные, я ничего не придумал как запустить ее на 25 Мегосемплах, и отлавливать фронт датареди по базовому клоку. То есть 2 сигнала, один состояние датареди, другой состояние первого такт назад, когда они в конфигурации 1 0, значит фронт. Второй вариант это асинхронно по датареди запускать процесс, что сжирает глобальный клоковый буфер. А вы как предлагаете? Поставить буфер, подать на него глобальный клок, а сигнал датареди пустить на буфер енайбл, тогда когда датареди будет в 1 буфер пропустить клоковый сигнал? Если это так то на таких частотах возможно, что восходящие фронты будут пропущены... А забыл условие про длиннее полупериода. Но тогда может так оказаться, что будет защелкнут фронт сосвсем рядом с концом датареди, и при защелкивании, данные могут начать меняться... опять же есть условие на время выставления сигнала до клока... я правильно понял что вы предлагаете? У меня не было таких скоростей как у Вас, так что ничего не пропускалось и не накладывалось
--------------------
Программа выполнила невыполнимое и допустила недопустимое
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|