Перейти к содержанию
    

про мелкую блочную память из latch'ей

Пишу тут обертки для блочной памяти, для выбора наиболее оптимального варианта (регистры, 128x8, 2048x8) по площади. И вот возникает вопрос -- а почему, собственно, память на регистрах делают из D flip-flop'ов? Почему-то ни разу не встречал варианта, сделанного из latch'ей, хотя они по быстродействию и площади вроде бы гораздо предпочтительнее обычных триггеров. Да, как минимум на входы надо будет поставить DFF, но это ж мелочи (по сравнению с массивом).

Так почему ее не делают из защелок? Сложности в статическом анализе таймингов?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну вообщето делают специальными тулами (мемори генератор, регистр-файл генератор) на основе латчей (точнее 6-Т cell, что собственно латч и есть - закольцованые два инвертора) из-за того, что ячейки упакованы в структуру у них отсутствуют промежутки для трассировки и т.п. получается гораздо меньше чем набирать из стандарт целов

а в логику, то есть заменить регистры в RTL латчами нельзя из-за таймингов (с некоторыми условиями можно, и даже лучше может получиться см. time borrowing, но очень много трудностей). не только анализа, но и вообще работы. ходят слухи, что какие-то особенно критические пути (конвеер) в интелях и АМД сделан на латчах, но как оно на самом деле - хз

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На латчах вполне себе делают блоки и памяти и фифо, да и автоматы, и просто в дизайне используют. Латчи занимают в два раза меньше места, поэтому  для заказных ИС использовать латчи выгодно. Скорость у них та же самая, но площадь и ликедж лучше. Из минусов - больше дерево клоков, и еще с латчами сложнее в STA работать. Другой важный момент, следует помнить что в большинстве ПЛИС (которые часто используют для макетирования на пол пути к эсику) защелок какбы и нет физически, а вот массив флопов часто можно смэпить во внутренний массив памяти, что удобно. Поэтому ленивые все делают на фопах - так проще.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С латчами одна проблема - они не скан пригодны.

Т.е. DFT их автоматом не протестит. Но кто мешает функционально как и память?

STA  хавает без проблем по дефолту. Можно тайминги расслабить (time borrowing). Никаких проблем с клок три итп. 

-----

В тест енкаунтере вроде есть поддержка теста латчей... но это не совсем автоматом - надо специальный импульс наружу выводить.

У меня чёт не вышло латчи в енкаунтере покрыть ATPGми. Если у кого вышло - научите.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как раз для больших компаний увеличение площади не критично, гораздо более важен стабильный результат. А 128 и 2048 х8 оптимальны для SRAM, и не нужно городить ничего лишнего.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

на всякий случай, проблема с латчами - это петли обратной связи (feedback loop). что, например, будет если между входом и выходом латча будет инвертор? ну или xor или любая другая логика, куда заведены выходы...

поэтому их и не любят :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 hours ago, topor_topor said:

С латчами одна проблема - они не скан пригодны.

а зачем блочную память (даже набранную из триггеров) включать в скан-цепочку? Почему ее обычными BIST не тестировать?

21 minutes ago, yes said:

на всякий случай, проблема с латчами - это петли обратной связи (feedback loop)

я ж предлагаю по границе памяти поставить обычные триггеры. Понятно, что латчи требуют повышенной аккуратности.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Абсолютно нормальный вариант. Особенно когда компилятора памяти нет, либо он стоит слишком дорого. Создать массив латчей, дешифратор адреса, и т.д. - можно аккуратно все расплейсить и развести даже в P&R туле. Встречал полукастомные блоки памяти и вовсе на флопах - когда процесс нестабилен, параметры транзисторов плывут от партии к партии, и надо сделать максимально кандово. Потому что иначе просто работать не будет. За давностью лет могу даже назвать эту фабрику - Зеленоградский Микрон :-) Не знаю как у них сейчас, а раньше совсем беда была, годами не могли процесс настроить, вывести на серию

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 hours ago, yes said:

на всякий случай, проблема с латчами - это петли обратной связи (feedback loop). что, например, будет если между входом и выходом латча будет инвертор? ну или xor или любая другая логика, куда заведены выходы...

поэтому их и не любят :)

Ту не вопросс любви а просто SDC: set_disable_timing

Если латч имеется ввиду два гейта а не нормальній латч....

10 hours ago, demidrol said:

а зачем блочную память (даже набранную из триггеров) включать в скан-цепочку? Почему ее обычными BIST не тестировать?

я ж предлагаю по границе памяти поставить обычные триггеры. Понятно, что латчи требуют повышенной аккуратности.

1) Мы же вроде хотим маленькую память с набора тригеров так? А размер BIST контроллерра он какой по сравнению с маленькой памятью? Всё тут относительно конечно.

2) Не поможет. STA на feedback loop будет шипко ругаться на латч в виде двух гейтов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Лупам неоткуда взяться, если не делать асинхронный автомат записи/чтения. Просто, блок латчей, дешифратор адреса, регистры(латчи) по входу адреса и данных, можно еще по выходу поставить регистры (латчи). Все синхронно, и нет здесь никаких лупов.

Другое дело, если вы хотите асинхронную память сделать (где из фронта сигнала записи делается импульс, к примеру). Но ведь и здесь никто не мешает автомат на флопах спроектировать, а сам массив памяти - на латчах.

Что касается BIST, то для такой памяти он не обязателен. Это ведь не та память, что делается на пределе DRC норм (или даже по особым правилам, недоступным разработчикам), это ведь обычные штатные латчи, обычныая логика. Если чип не содержит DFT, то и BIST для такой памяти делать нет резона.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

22 hours ago, topor_topor said:

Ту не вопросс любви а просто SDC: set_disable_timing

мне казалось, что clock констрейн (период) работает с латчами.

нужно будет проверить. я тоже исключениями пользовался, но для пары латчей можно, по-моему...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, yes said:

мне казалось, что clock констрейн (период) работает с латчами.

Надо определится что мы называем латчем.

Если это асинхронный RS-тригер на 2-х перекрученных NAND (для памяти чёбы не использовать?), то будут лупы.

Если это латч в смысле тригер управляемый уровнем а не еджем - то STA по дефолту хавает. Ну можно тайм боровинг задать ещё.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Латч, по опредлению, это бистабильный триггер, управляемый уровнем. Класическая схема  - два инвертора во встречном включении, плюс управление (вспоминаем 6Т память), но может быть вырожден в RS триггер на двух NAND/NOR или во что то другое, в примеру - в синхронный латч, о которых здесь идет речь. Синхронный латч как правило имеет один вход управления, а его тайминг-модель содержит синхронные арки. Поэтому он подходит для STA. А вот, к примеру, модель RS-латча не имеет синхронных арок, и для классического STA не подходит.

Далее. Если замкнуть два синхронных латча с разнополярным управлением в кольцо, то действительно получается луп. Просто потому, что фазы клока немного расходятся, и образуется окно времени, где оба латча открыты. Это классическое нарушение Hold. Однако на практике, задержки цепей и логических элементов (представим, что между латчами есть логика) это нарушение исправляют - переходной процесс посто не успевает добежать с выхода одного латча до входа другого. Из чего следует, что луп из двух латчей с разнополярным управлением - уже вовсе не луп, и разрывать его с помощью disable_timing не нужно. Если STA показывает нарушение холд в такой схеме, просто добавьте буферов :-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 hours ago, topor_topor said:

Надо определится что мы называем латчем.

d-latch, половинка триггера. схема на 6-ти транзисторах (условно) - то есть входы GATE и DATA, ну и выход, соответственно.

always @(gate or data) if (gate) q<=data;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...