Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: грамотные констрейны для внешней асинхронной памяти
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
spooki
Здравствуйте,

Есть 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 нс. Но насколько это красиво?
spooki
Может я в вопросе чего-то намудрил?

Упростим.

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

UG612
Figure 3-18, ”Timing Reference Diagram of OFFSET IN Constraint”
Figure 3-19, ”Timing Reference Diagram of OFFSET OUT Constraint”

Здесь всё ещё понятней расписано.

PS
А чип собсно памяти у вас какой ?
alexPec
Цитата(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 клок, никаких других сдвинутых по фазе нет...

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

Заранее благодарен!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.