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

 
 
> Обконстрейнить асинхронный EMIF
andrew_b
сообщение Dec 12 2014, 06:37
Сообщение #1


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

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Дожив до седых волос, понял, что не вполне понимаю как правильно обконстрейнить чтение по асинхронной шине. Не люблю асинхронные схемы, но "жизнь вынуждает написать бестселлер", поэтому нужно восполнить некоторый пробел.

Дано: DSP имени TI и FPGA имени Xilinx, соединённые шиной EMIF. EMIF асинхронный. Временные диаграммы чтения в приаттаченном рисунке.
Прикрепленное изображение


В FPGA имееется много регистров, формируемых в общем случае на разных клоках. Их надо читать процессором. То есть получается такой большой многоразрядный мультиплексор:
Код
process (EMIFA, D0, D1, D2)
begin
       -- для простоты тут регистра только три, реально их много больше
       case EMIFA is
              when A0 => D <= D0;
              when A1 => D <= D1;
              when A2 => D <= D2;
              when others => D <= (others => '0');
       end case;

       EMIFD <= D when (EMIFCE = '0' and EMIFOE = '0') else (others => 'Z');
end;


Вопрос в том, как всё это правильно обконстрейнить. Пока я обхожусь только указанием максимальной задержки от каждого из регистров до ножек микросхемы:
Код
# DSP read strobe: setup: 2 * 6 ns, strobe: 4 * 6 ns, hold: 2 * 6 ns

TIMEGRP DSP_EMIFD_GRP = PADS(EMIFD(*));

NET U00/D0(*) TPSYNC = UU0_D0;
TIMESPEC TS_UU0_D0 = FROM UU0_D0 TO DSP_EMIFD_GRP 30 ns;
# 30 нс -- это меньше чем setup+hold=36 нс.

Но видимо, этого недостаточно. Наверное, надо как-то учесть и EMIFA, и EMIFCE, и EMIFOE.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
monty
сообщение Dec 16 2014, 06:23
Сообщение #2


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

Группа: Свой
Сообщений: 130
Регистрация: 19-12-05
Пользователь №: 12 399



Цитата(andrew_b @ Dec 12 2014, 13:37) *
Дожив до седых волос, понял, что не вполне понимаю как правильно обконстрейнить чтение по асинхронной шине. Не люблю асинхронные схемы, но "жизнь вынуждает написать бестселлер", поэтому нужно восполнить


Помнится мне, что EMIF, на самом деле, не вполне асинхронная весч. Снаружи он асинхронный, но внутри он по клокам (не помню каким, зависит от камня) работает, и вся времянка у него к этим клокам привязана. Можно сделать фпгашную часть не асинхронной, а синхронной, работающей примерно на таких же клоках что и внутренности емива в техасе. Собстно я именно так делал. В этом случае не нужно заморачиватся с асинхронными констрэйнтами.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Dec 16 2014, 07:35
Сообщение #3


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

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(monty @ Dec 16 2014, 10:23) *
Помнится мне, что EMIF, на самом деле, не вполне асинхронная весч. Снаружи он асинхронный, но внутри он по клокам (не помню каким, зависит от камня) работает, и вся времянка у него к этим клокам привязана.
Разумеется. Клок этот 1/6 ГГц. Только в даташите никаких привязок к этому клоку нет.
Цитата
Можно сделать фпгашную часть не асинхронной, а синхронной, работающей примерно на таких же клоках что и внутренности емива в техасе.

Ну собсно в итоге я так и сделал: перенёс всё внутри на самый высокий из имеющихся клоков, раздвинул "корыта" OE и WE и вроде как всё заработало.
Go to the top of the page
 
+Quote Post
SM
сообщение Dec 16 2014, 12:41
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(andrew_b @ Dec 16 2014, 10:35) *
Только в даташите никаких привязок к этому клоку нет.

Ну это, не совсем, так. Можно перевести режим Вашего CE, например в SBSRAM, и уже получить вполне себе синхронный интерфейс.
Go to the top of the page
 
+Quote Post



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

 


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


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