Dantist2k17 0 7 декабря, 2018 Опубликовано 7 декабря, 2018 · Жалоба Имеется два вопроса по логическому синтезу. 1. В версии DC E-2010.12 поддерживается команда pipeline_design, которая позволяет "взять" комбинационную схему и "положить" ее на цепочку регистров, обеспечив необходимую частоту работы. В версии DC J-2014.09 такой команды я не обнаружил. Есть ли какая-либо альтернатива? 2. Существует ли команда (подход), которая позволяет сделать нечто подобное из последовательностной схемы? Что есть: триггер 1 - логика - триггер 2. Хочу получить триггер 1 - логика - триггер 3* - логика - триггер 2. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Avex 1 8 декабря, 2018 Опубликовано 8 декабря, 2018 · Жалоба Называется ретайминг. Работает, к примеру, так - на выход комбинационной схемы ставите несколько последовательно включенных флопов, разрешаете ретайминг, зажимаете частоту и запускаете синтез. В результате, флопы переместятся по логике влево - ровно на столько, чтобы обеспечить fmax. Разумеется, число регистров изменится, поскольку ширина комбинационной схемы в разных разрезах разная. В реальных проектах это не используется, поскольку метод ну очень топорный. Грамотный инженер сам разместит флопы там где они нужны. Но для пристрелки/оценки метод вполне годится. Не забывайте запускать LEC, поскольку тул изредка сбивается во время ретайминга, и результат может отличаться от исходника. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lexx 0 8 декабря, 2018 Опубликовано 8 декабря, 2018 · Жалоба 3-й триггер сломает логику. Результат на выходе отличается от исходного кода. Ретайминг поправит частоты исходя из исходной длинны пайплайна. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Avex 1 8 декабря, 2018 Опубликовано 8 декабря, 2018 · Жалоба Интересное утверждение, не согласен. Как триггер может сломать логику, обьясните. Добавление стадий в конвейер должно отразиться только на лэтенси (в тактах), но никак не на функции. Если функция таки изменилась, это ошибка работы тула(вполне вероятный сценарий), которая ловится прогоном LEC, я об этом писал.LEC вообще обязательная процедура после ретайминга, если в коде присутствуют fsm, умножения через * и прочие вещи, которые синтезатор может исполнить неоднозначно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lexx 0 8 декабря, 2018 Опубликовано 8 декабря, 2018 · Жалоба Если параллельно исполняется несколько процессов, то изменение длинны пайплайна одного из них приведет к тому, что результат на выходе отличается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Avex 1 8 декабря, 2018 Опубликовано 8 декабря, 2018 · Жалоба Ретайминг сам не добавляет стадии в конвейер, их может добавить только инженер. Тул способен лишь перетрясти логику в стадиях. В этом плане летенси конвейера остается без изменений, как и состояния автоматов в дизайне. Поэтому я и писал - чтобы исполнить хотелку ТС номер 2, надо руками дорисовать третью стадию (флоп) в конвейер (добавить в код), и разрешить ретайминг в синтезаторе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lexx 0 8 декабря, 2018 Опубликовано 8 декабря, 2018 · Жалоба Я как бы и не спорю, про 3й регистр относится к самому первому сообщению, если речь идет про "просто" добавить. Иногда люди не понимают этого Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dantist2k17 0 10 декабря, 2018 Опубликовано 10 декабря, 2018 (изменено) · Жалоба On 12/8/2018 at 10:33 AM, Aleх said: Называется ретайминг. Работает, к примеру, так - на выход комбинационной схемы ставите несколько последовательно включенных флопов, разрешаете ретайминг, зажимаете частоту и запускаете синтез. В результате, флопы переместятся по логике влево - ровно на столько, чтобы обеспечить fmax. Разумеется, число регистров изменится, поскольку ширина комбинационной схемы в разных разрезах разная. В реальных проектах это не используется, поскольку метод ну очень топорный. Грамотный инженер сам разместит флопы там где они нужны. Но для пристрелки/оценки метод вполне годится. Не забывайте запускать LEC, поскольку тул изредка сбивается во время ретайминга, и результат может отличаться от исходника. Да спасибо, дошел до этого, опробовал. Не понравилось. Поправил verilog описание и уложился в частоту. Однако ведь можно столкнуться с задачей, когда необходимо разложить по триггерам БОЛЬШОЙ дешифратор, который описан с помощью case. Переписать его как-то алгоритмически не представляется возможным. Как быть в такой ситуации, не сталкивались? Изменено 10 декабря, 2018 пользователем Dantist2k17 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
oratie 0 10 декабря, 2018 Опубликовано 10 декабря, 2018 · Жалоба У Синопсиса есть 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 справится с таймингом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lexx 0 10 декабря, 2018 Опубликовано 10 декабря, 2018 · Жалоба Синопсис не рекомендует напрямую указывать designware компоненты. Лучше правильно описать и потом он сам их раскидает как нужно (не перемудрите с разрядностью). Почитайте про QoR функцию, там все просто описано. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
oratie 0 10 декабря, 2018 Опубликовано 10 декабря, 2018 · Жалоба Это, да, напрямую лучше не инстанциировать, но нам же нужно pipelined mult, а не простой. Так, что придется как-то это специфицировать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lexx 0 10 декабря, 2018 Опубликовано 10 декабря, 2018 · Жалоба Можно из simulation model посмотреть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Avex 1 11 декабря, 2018 Опубликовано 11 декабря, 2018 (изменено) · Жалоба Поддерживаю, designware - отличная штука. Если подходит под задачу :-) На мой взгляд, такие вещи надо руками вписывать в код, прямо вызовы инстансов. Для их симуляции есть верилог-модельки, которые, кажется, даже синтезируемые (можно в ПЛИС запихнуть). Большой дешифратор можно разбить руками, уменьшив разрядность, вставить флопы, использовать в коде pragma вроде full_case parallel_case. Изменено 11 декабря, 2018 пользователем Aleх Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lexx 0 11 декабря, 2018 Опубликовано 11 декабря, 2018 · Жалоба А по мне прямой вывоз инстансов избыточен. Теряется логика и читабельность кода. И потом: Synopsys, по возможности, не рекомендует использовать прямой вызов designware компонентов. Пишите код в соответствие с иерархией и все будет хорошо. См. Coding Guidelines for Datapath Synthesis, part 11. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться