реклама на сайте
подробности

 
 
> грамотные констрейны для внешней асинхронной памяти, ISE, Xilinx, асинхронное ППЗУ
spooki
сообщение Feb 27 2012, 10:36
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 105
Регистрация: 9-04-10
Из: Москва
Пользователь №: 56 524



Здравствуйте,

Есть Virtex 4 и внешняя асинхронная ППЗУ.
Времянка работы с ППЗУ проще не куда - выставляем адрес, через 40 нс(взято для примера ибо хочется рассмотреть общий случай) можно забирать данные.

Время доступа данных из ППЗУ Td= Taddr+Tacc+Tdata
Taddr - время прохождения сигнала по шине addr из ПЛИС в ППЗУ
Tacc - 40 нс
Tdata - время прохождения сигнала по шине data из ППЗУ в ПЛИС.

В данный момент времянка чтения/записи сделана на счетчике, т.е. клок проекта выше чем период считывания из ППЗУ, время смены адреса и прочего осуществляется по enable-ам которые определяются значением счетчика.


Как правильно описать констрейны чтобы учесть(ограничить) время Taddr и Tdata.





Можно решение в лоб.
Задать констрейн OFFSET OUT AFTER на шину add скажем 6 нс.
Задать констрейн OFFSET IN BEFORE на шину data скажем 3 нс.

Итого мы ограничим задержку Taddr+Tacc=9нс.
Таким образом, максимальное время доступа к памяти 40+9 = 49 нс.
Если допустим проект работает на 100 МГц, то времянка чтения из ППЗУ определяется 5 тактами работы = 50 нс. Но насколько это красиво?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
spooki
сообщение Feb 28 2012, 13:06
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 105
Регистрация: 9-04-10
Из: Москва
Пользователь №: 56 524



Может я в вопросе чего-то намудрил?

Упростим.

Как сделать грамотные констрейны для асинхронной внешней пмяти.
Go to the top of the page
 
+Quote Post
alexPec
сообщение Mar 10 2012, 16:55
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(spooki @ Feb 28 2012, 17:06) *
Как сделать грамотные констрейны для асинхронной внешней пмяти.


Господа профи! Та же беда, подскажите людям. Чего только уже не пробовал, и input delay, и output delay (делал min и max чтоб в рамки вогнать), и maximum delay, minimum delay - вобще никак. Весь извелся. Память (операция чтения) эмулирую в тестбенче так:

Код
always @ (ramadr_sig or ram_oe_sig or ram_we_sig)
begin
   if (ram_we_sig && !ram_oe_sig)  begin
  #2.5 data_out=32'bx;
  #8 data_out = mem[ramadr_sig];
end


Т.е. после смены адреса 2,5 нс старые данные держатся, потом через 8 нс появляется новое слово на выходе. Память запускаю на 80 МГц. В моделсиме свою модельку посмотрел - все как по даташиту на память. Но вот входной регистр в ПЛИС никак не защелкивает в нужное время. Все время попадает на момент смены данных.

Можно конечно сделать отдельный клок, которым защелкивать данные и подогнать его по фазе, но это ведь не правильно - проект поменялся, пути изменились и снова подгонять.

Кстати, специалисты по НИОСУ, а как в ниосе интерфейс к асинхронной памяти законстрейнен? У меня как раз ниос работает на такой же асинхронной памяти на 80 МГц - проблем нет. Посмотрел cpu0.sdc - ничего про память там не нашел. Не может быть чтоб без констрейнов такое работало. И кстати используется только 1 клок, никаких других сдвинутых по фазе нет...

В общем подскажите кто чем может...

Заранее благодарен!
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 21:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01614 секунд с 7
ELECTRONIX ©2004-2016