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

|
Здравствуйте. Имеется следующая проблема: есть процессор, к нему подключена ПЛИС (Spartan-3), через асинхронный интерфейс памяти (адрес, данные, WR, RD, CS). По замыслу, обмен данными между процессором и внутренностями ПЛИС должен производиться через внутреннюю память ПЛИС (блочную), т.е память является промежуточным буфером. Однако посмотрев Libraries guide (lib.pdf) от ксайлинксА, выяснилось, что на борту Спартанца есть только синхронная память. В документации на XST, тоже не нашел полностью асинхронного описания памяти. Подскажите как грамотно стыковать синхронную память ПЛИСа с асинхронным интерфейсом процессора??
|
|
|
|
|
 |
Ответов
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 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 буфер пропустить клоковый сигнал? Если это так то на таких частотах возможно, что восходящие фронты будут пропущены... А забыл условие про длиннее полупериода. Но тогда может так оказаться, что будет защелкнут фронт сосвсем рядом с концом датареди, и при защелкивании, данные могут начать меняться... опять же есть условие на время выставления сигнала до клока... я правильно понял что вы предлагаете?
|
|
|
|
|
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
|
|
|