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

[полу]авто-ClockGating в ASIC

1. раньше ClockGating вставляли ручками, получалось коряво, но худо-бедно работало, напр:

 

`ifdef FPGA
  BUFGCE (.I(clk_in), .O(clk_out), .CE(enable));
   // or use:
   // assign clk_out = clk_in;
`else
   CLNGTX1 (.ci(clk_in), .co(clk_out), .e(enable), .te(test_en));
`endif

 

- таким образом вставляются обычно технологозависимые штуки, некий workaround для того, чтобы синтезировать под разные технологии (ПЛИС/СБИС) но неудобно - смешивается технологозависимая и технологонезависимая части РТЛ, не очень с точки зрения методологии.

 

2. потом появилась автоматическая вставка ClockGating, когда тул синтеза сам анализирует конструкции наподобие таких:

 

reg [31:0] a;
always @(posedge clk)
if (rst)
  a <= 0;
else if (enable)
  a <= b;

 

- отличный подход, поскольку в проекте таких мест может быть достаточно много, чтобы делать это ручками, притом РТЛ-код остается технологонезависимым.

 

3. Мой случай:

есть память, реализованная на россыпи триггеров (достаточно маленькая, чтобы делать ее как HardMacro)

алгоритм работы таков: в память производится запись (один раз за всё время работы), после чего эта память используется на чтение 5тактов в алгоритме, цикл которого 100 тактов, есть желание всё остальное время эти триггеры выключать, однако автоматически это сделать проблематично: из-за того что синтезатор не понимает как быть с сигналом записи памяти - он приходит в абсолютно произвольный момент (по его анализу), т.е. авто-ClockGating по понятной причине не срабатывает, а вручную (как в пп.1) ставить ячейки клог-гейта не хочется, поэтому вопрос:

 

 

может появилось какое-то средство/директива/прагма/команда/проч. для гайда синтезатору:

мол, эта группа регистров должна гейтиться по клоку этим сигналом?

Мне это нужно только для целевой технологии (ASIC), в ПЛИС и поведенческой симуляции этого не надо, поэтому реализовать такое в скрипте синтеза под ASIC было бы оптимальным решением.

PS: Если говорить про конкретный синтез, то интересует как это делается средствами RC/Женуса

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


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

Различают архитектурный клок-гейтинг (тот что ручками вставляется дизайнером ртл), и как элемент техники лоу пауер. Новых тенденций тут нет уже лет 15 как, используют и тот и другой подход, смотря что хочется получить на выходе.

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

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

 

Советую почитать учебники по лоу пауер, там много полезного есть и для просто разработчиков rtl (не вникая в физ дизайн).

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


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

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

да, есть такое в Генусе, спасибо.

 

Советую почитать учебники по лоу пауер, там много полезного есть и для просто разработчиков rtl (не вникая в физ дизайн).

а есть что-то помимо LPMM от Синопсис?

 

Раньше в RC делалось так. В мануалах можно уточнить.

 

Спасибо!

Заметил, что в нетлист попадают технолого-зависимые примитивы ICG уже на этапе генерик-синтеза, что как-то странно - они там единственные из технологозависимых примитивов

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


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

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

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

Почему не ставит в конкретном случае - трудно сказать без RTL

 

 

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


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

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

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

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

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

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

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

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

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

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