реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Synopsys DC, characterize
lexx
сообщение Dec 9 2016, 15:06
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 118
Регистрация: 25-06-04
Пользователь №: 186



Никто не работал с characterize для design compiler. Есть желание поиграться со bottom-up стратегией для синтеза при помощи characterize блоков нижнего уровня. А именно:
*** первоначальный синтез -> характеризация -> пост синтез с новыми констрейнами.
- для первоначального синтеза sub-blocks какие констрейны выбрать, наиболее ближние (что логично) или что-то еще;
- каким образом проходит характеризация, если мы просто собираем нетлист саб-блоков и код топ уровня (включая констрейны топа), то у топ уровня еще нет таймингов, только базовые ячейки;
- как лучше вывести и повторно использовать значения после characterize, поскольку на выходе много каши из виртуальных клоков и входные/выходные задержки выше чем тактовый сигнал (что-то где-то не так).

Мануала на это катастрофически мало, точнее его там просто нет, только простейшее описание. Создавать топик у синопсиса пока нет желания, поскольку думаю есть недопонимание на базовом уровне.
Go to the top of the page
 
+Quote Post
Shivers
сообщение Dec 9 2016, 18:56
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 680
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950



Да все эту функцию используют, любой мало-мальский SoC удобнее синтезировать bottom-up, особенно когда еще меняется RTL. Другое дело, что в некоторых случаях проще констрейнты на блок руками написать, чем использовать characterize.

А маршрут очень простой: загружаете RTL всего проекта, накладываете констрейнты, потом characterize, а потом write_sdc. И еще полезно слегка поджать то, что выпишется в sdc. Затем синтезируете каждый блок отдельно (можно даже сделать layout) и потом выписываете .lib/.db И, наконец, грузите RTL верхнего уровня + .db на блоки и пускаете синтез. Для отладки скриптов рекомендую потренироваться на кошечках: взять, к примеру, процессор из DC/DV-туториала, и синтезнуть его поблочно.
Go to the top of the page
 
+Quote Post
lexx
сообщение Dec 11 2016, 07:54
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 118
Регистрация: 25-06-04
Пользователь №: 186



Руками проще, но когда портов много затруднительно по всем писать, тем более если порты многобитовые (не все биты имеют одинаковый констрейн).

т.е. characterize на загруженный код + elaborate -> вывод sdf.
Насколько я читал, там используется уже готовый нетлист блков нижнего уровня, потом их ресинтез и далее синтез топа.
Go to the top of the page
 
+Quote Post
Shivers
сообщение Dec 11 2016, 19:10
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 680
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950



Не sdf, а sdc
Нетлист блоков получать не обязательно, достаточно просто RTL загрузить.
И, как уже писал, очень желательно потом руками пожать в выписанных констрейнтах запас по интерфейсам. Удобно это делать скриптом, к примеру на perl - ужимать все на 10-15%, скажем.
Go to the top of the page
 
+Quote Post
sleep
сообщение Dec 27 2016, 13:16
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 77
Регистрация: 21-09-06
Из: msk
Пользователь №: 20 563



Попробуйте
set_top_implementation_options -block_references ...
Или
create_block_abstraction
Особенно хорошо, если используете топо режим.
Go to the top of the page
 
+Quote Post
lexx
сообщение Dec 30 2016, 13:50
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 118
Регистрация: 25-06-04
Пользователь №: 186



Cинтез только до pre-netlist. Далее уже другие работают.

Каким образом DC определяет констрейны если это только начальная стадия. Причем для части блоков нижнего уровня необходимо еще и перейти на микс из RVT/LVT, а по таймингам они значительно отличаются.
Go to the top of the page
 
+Quote Post
lexx
сообщение Feb 12 2017, 05:15
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 118
Регистрация: 25-06-04
Пользователь №: 186



Краткий итог - не работает. Возможно использовать только как поправки к уже имеющимся констрейнам.
Новые, даже если выводить из рабочего проекта приводят к плохим таймингам, возможно черезчур сложный проект для анализа.
Go to the top of the page
 
+Quote Post
Shivers
сообщение Feb 13 2017, 06:41
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 680
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950



В блоки обычно выделяются модули иерархии с унифицированными интерфейсами - APB/AHB/AXI и т.д. Подразумевается, что нагрузка на эти интерфейсы небольшая, и для них можно писать констрейнты с некоторым запасом. Запас потом съедается при сборке верхнего уровня.
Если же в блок выделен модуль, у которого интерфейс и так перегружен (о чем косвенно свидетельствуют большие input/output delay после характеризации), то ничего хорошего Вы не получите, тайминг будет только хуже. Т.е. самая критичная по таймингу часть должна оставаться внутри блоков, наружу ее выносить - себе дороже.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th June 2025 - 06:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.01445 секунд с 7
ELECTRONIX ©2004-2016