Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Тайминги с минимальным циклом для интерфейса к Async SRAM ?
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
IanPo
В общем, по даташиту могу читать данные каждые 10 нс ( /OE=/CS=0 и /WE=1).

На практике не получается читать в цикле, меньшем 20 нс (75, 100 МГц не работает).

Это так и должно быть ? Запись работает на 75 МГц, однако.

Хочу 3-цикл чтение-запись-чтение на 75 МГц (по 13 нс) или 4-цикл чтение-запись-чтение-запись на 100 МГц.

Есть мнение, что такое возможно только на синхронной SRAM.
DmitryR
Вполне возможно и на асинхронной, надо только проследить, чтобы триггеры шины встали в лапы. Смотрите: адрес при чтении (при записи проще, поэтому рассмотрим сразу чтение) должен выйти из ПЛИС через буферы, прийти в память, память должна выбрать данные, потом они должны выйти из нее и прийти в ПЛИС. В принципе все эти задержки распространения есть в документации, если вы их найдете, просуммируете и они окажутся менее 10 ns - все возможно. Если больше - можно продолжать пытаться, выставляя следующий адрес до того, как защелкнуты текущие данные, но это уже может оказаться ненадежно и надо точно расчитать hold памяти (сколько гарантированно держится в буферах старое значение после установки нового адреса).
IanPo
DmitryR, cпасибо за ответ.

Что вы думаете о такой реализации:
Два процесса от клоков одной частоты (от PLL), сдвинутых по фазе.
Один процесс ставит адрес, другой читает данные.
Тогда задержки как бы компенсируются.
Подбирая фазу, я смогу читать (после доработки и писать) на нужной мне частоте (в данном случае 75 МГц).

Код
type tTakt is (t0,t1,t2);
signal sTakt : tTakt;

process ( clk )
begin
    case sTakt is
        when t2 => -- takt 0
            sTakt <= t0;
            --
            oMA <= sAdr0;
        when t0 => -- takt 1
            sTakt <= t1;
            --
            oMA <= sAdr1;
        when t1 => -- takt 2
            sTakt <= t2;
            --
            oMA <= sAdr2;
        end case;
    end if;
end process;

process ( clk2 )
begin
    case sTakt is
        when t2 => -- takt 0
            sData0 <= ioMD;
        when t0 => -- takt 1
            sData1 <= ioMD;
        when t1 => -- takt 2
            sData2 <= ioMD;
        end case;
    end if;
end process;


oWE <= '1';
oOE <= '0';
ioMD <= (others => 'Z');
DmitryR
Это идея маргинальная, когда уже больше ничего не помогает (потому что в полностью независимый временной домен вам придется передавать управление, а это несколько все усложняет). Я бы работал в такой последовательности (я посмотрел даташит и представляю времянку процесса):
1. Просто защелкивать данные на такт позже: у второго Циклона время вывода (от триггера до лапы) 2,8ns, время ввода (от лапы до триггера) 1,2ns, и время выборки памяти 10 ns. Итого 14ns. В принципе с учетом немалого времени удержания (hold) памяти в 3ns можно успеть.
2. Защелкивать данные по падающему фронту, то есть через полтора такта.
Костян
Не могу разобраться в потоковой записи.
Кристалл: AS7C34098A
Время доступа 10нс.

Классическая временная диаграмма записи:

При цикле записи 10нс согласно даташиту на данную SRAM активный уровень nCS и nWE должен быть не менее 8нс. Т.е между циклами записи на nCS и nWE нужно подавать 1 на время 2нс ! Обязательно ли поднимать в единицу (в неактивное состояние) эти сигналы ? Или достаточно менять адресс ? Не будет ли в этом случае ошибочных записей в другие адресса в связи с немгновенной установкой всех битов addr в новое значение ?
aaarrr
Поднимать обязательно. Это только при чтении можно обойтись перебором адреса.
Костян
QUOTE (aaarrr @ Nov 26 2011, 13:00) *
Поднимать обязательно. Это только при чтении можно обойтись перебором адреса.

спасибо. но в даташите нигде не описывается минимальное время неактивного состояния nCS и nWE между циклами записи. Достаточно ли на 2нс поднять в 1 эти сигналы перед следующим циклом записи ?
Иными словами , возможна ли запись в асинхронную память x16 с 10нс временм доступа потока данных 16x100Мбит/с ?

aaarrr
Цитата(Костян @ Nov 26 2011, 19:27) *
спасибо. но в даташите нигде не описывается минимальное время неактивного состояния nCS и nWE между циклами записи. Достаточно ли на 2нс поднять в 1 эти сигналы перед следующим циклом записи ?

Насколько я понимаю, минимальная длительность цикла nWE составляет 17нс (tWP1 + tWP2).

Цитата(Костян @ Nov 26 2011, 19:27) *
Иными словами , возможна ли запись в асинхронную память x16 с 10нс временм доступа потока данных 16x100Мбит/с ?

Нельзя. Даже чтение требует большего времени: tAA = 10ns max.
Костян
QUOTE (aaarrr @ Nov 26 2011, 13:40) *
Насколько я понимаю, минимальная длительность цикла nWE составляет 17нс (tWP1 + tWP2).

Очень надеюсь, что Вы ошибаетесь. Не совсем понятно, почему сложили tWP1 и tWP2.

Судя по модели, которые представлены на сайте, nCs и nWE действительно можно поднять на 2нс в 1 состояние. См аттач.



QUOTE
Нельзя. Даже чтение требует большего времени: tAA = 10ns max.

Дык 10нс и есть 16х100Мбит/с
aaarrr
Цитата(Костян @ Nov 26 2011, 20:06) *
Очень надеюсь, что Вы ошибаетесь. Не совсем понятно, почему сложили tWP1 и tWP2.

Хм, а что с ними еще можно сделать?

Цитата(Костян @ Nov 26 2011, 20:06) *
Судя по модели, которые представлены на сайте, nCs и nWE действительно можно поднять на 2нс в 1 состояние. См аттач.

Модель моделью, а вот в реальной жизни 2нс - это весьма мало. Даже если сформируете такую "иголку", боюсь, памяти она не понравится.

Цитата(Костян @ Nov 26 2011, 20:06) *
Дык 10нс и есть 16х100Мбит/с

Через 10нс после установки адреса данные только появятся, а работать по краю без минимального запаса я бы не стал.
Костян
QUOTE (aaarrr @ Nov 26 2011, 14:25) *
Модель моделью, а вот в реальной жизни 2нс - это весьма мало. Даже если сформируете такую "иголку", боюсь, памяти она не понравится.

Такс, разобрался.
В даташите указано
"Input Rise and Fall Times 1.5ns"
Поднимать сигнал nCE и nWE в 1 нужно лишь для того, чтобы при изменении addr не было ложной записи в неправильный адрес. Минимальный активный уровень для nCS составляет 8нс. Итого минимальный цикл записи будет равен: 8+1.5(rise)+1.5(fall)=11нс. Итого получаем скорость 1/11нс * 16 бит/с ~ 16x90Мбит/с

aaarrr
Да, наврал я про WP, конечно. CE и OE попутал.

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