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

pipeline_design Design Compiler

Имеется два вопроса по логическому синтезу.

 

1. В версии DC E-2010.12 поддерживается команда pipeline_design, которая позволяет "взять" комбинационную схему и "положить" ее на цепочку регистров, обеспечив необходимую частоту работы. В версии DC J-2014.09 такой команды я не обнаружил. Есть ли какая-либо альтернатива?

 

2. Существует ли команда (подход), которая позволяет сделать нечто подобное из последовательностной схемы? Что есть: триггер 1 - логика - триггер 2. Хочу получить триггер 1 - логика - триггер 3* - логика - триггер 2.

 

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


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

Называется ретайминг. Работает, к примеру, так - на выход комбинационной схемы ставите несколько последовательно включенных флопов, разрешаете ретайминг, зажимаете частоту и запускаете синтез. В результате, флопы переместятся по логике влево - ровно на столько, чтобы обеспечить fmax. Разумеется, число регистров изменится, поскольку ширина комбинационной схемы в разных разрезах разная. В реальных проектах это не используется, поскольку метод ну очень топорный. Грамотный инженер сам разместит флопы там где они нужны. Но для пристрелки/оценки метод вполне годится. Не забывайте запускать LEC, поскольку тул изредка сбивается во время ретайминга, и результат может отличаться от исходника.

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


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

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

Ретайминг поправит частоты исходя из исходной длинны пайплайна.

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


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

Интересное утверждение, не согласен. Как триггер может сломать логику, обьясните. Добавление стадий в конвейер должно отразиться только на лэтенси (в тактах), но никак не на функции. Если функция таки изменилась, это ошибка работы тула(вполне вероятный сценарий), которая ловится прогоном LEC, я об этом писал.LEC вообще обязательная процедура после ретайминга, если в коде присутствуют fsm, умножения через * и прочие вещи, которые синтезатор может исполнить неоднозначно.

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


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

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

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


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

Ретайминг сам не добавляет стадии в конвейер, их может добавить только инженер. Тул способен лишь перетрясти логику в стадиях. В этом плане летенси конвейера остается без изменений, как и состояния автоматов в дизайне. Поэтому я и писал - чтобы исполнить хотелку ТС номер 2, надо руками дорисовать третью стадию (флоп) в конвейер (добавить в код), и разрешить ретайминг в синтезаторе.

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


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

Я как бы и не спорю, про 3й регистр относится к самому первому сообщению, если речь идет про "просто" добавить.

Иногда люди не понимают этого

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


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

On 12/8/2018 at 10:33 AM, Aleх said:

Называется ретайминг. Работает, к примеру, так - на выход комбинационной схемы ставите несколько последовательно включенных флопов, разрешаете ретайминг, зажимаете частоту и запускаете синтез. В результате, флопы переместятся по логике влево - ровно на столько, чтобы обеспечить fmax. Разумеется, число регистров изменится, поскольку ширина комбинационной схемы в разных разрезах разная. В реальных проектах это не используется, поскольку метод ну очень топорный. Грамотный инженер сам разместит флопы там где они нужны. Но для пристрелки/оценки метод вполне годится. Не забывайте запускать LEC, поскольку тул изредка сбивается во время ретайминга, и результат может отличаться от исходника.

Да спасибо, дошел до этого, опробовал. Не понравилось. Поправил verilog описание и уложился в частоту. Однако ведь можно столкнуться с задачей, когда необходимо разложить по триггерам БОЛЬШОЙ дешифратор, который описан с помощью case. Переписать его как-то алгоритмически не представляется возможным. Как быть в такой ситуации, не сталкивались?

Изменено пользователем Dantist2k17

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


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

У Синопсиса есть pipelined DesignWare blocks (попробовать их использовать в RTL):

The DesignWare library supports many pipelined arithmetic components.
Most of the DesignWare pipelined components have the optimize_registers command in the synthesis model. During synthesis, it enables DC-Ultra's retiming feature to find the optimal register location. The following list of DesignWare components uses the DC-Ultra's retiming feature.

DesignWare Building Blocks

  DW_div_pipe               Stallable Pipelined Divider
  DW02_mult_2_stage         Two-Stage Pipelined Multiplier
  DW02_mult_3_stage         Three-Stage Pipelined Multiplier
  DW02_mult_4_stage         Four-Stage Pipelined Multiplier
  DW02_mult_5_stage         Five-Stage Pipelined Multiplier
  DW02_mult_6_stage         Six-Stage Pipelined Multiplier
  DW_prod_sum_pipe          Stallable Pipelined Generalized Sum of Products
  DW_sqrt_pipe              Stallable Pipelined Square Root

 

Либо, в RTL вставлять перед выходными (например) портами дополнительную стадию, и надеяться, что optimize_registers справится с таймингом.

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


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

Синопсис не рекомендует напрямую указывать designware компоненты. Лучше правильно описать и потом он сам их раскидает как нужно (не перемудрите с разрядностью). Почитайте про QoR  функцию, там все просто описано.

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


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

Это, да, напрямую лучше не инстанциировать, но нам же нужно pipelined mult, а не простой. Так, что придется как-то это специфицировать.

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


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

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

Большой дешифратор можно разбить руками, уменьшив разрядность, вставить флопы, использовать в коде pragma вроде full_case parallel_case.

Изменено пользователем Aleх

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


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

А по мне прямой вывоз инстансов избыточен. Теряется логика и читабельность кода. И потом: Synopsys, по возможности, не рекомендует использовать прямой вызов designware компонентов. Пишите код в соответствие с иерархией и все будет хорошо.

См. Coding Guidelines for Datapath Synthesis, part 11.

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


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

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

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

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

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

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

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

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

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

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