MickeyMouse 0 14 марта, 2019 Опубликовано 14 марта, 2019 · Жалоба Всем привет! Кто-нибудь сталкивался с такой проблемой? В дизайне есть N-штук одинаковых модулей, как указать генусу рассматривать их как один модуль инстанцируемый N-раз? По умолчанию генус делает uniquify, в результате имеем N разных модулей - для каждой инстанции свой модуль, а хотелось бы N-инстанций и один модуль( конечно с осознанием того что нетлист уже не уникальный). Есть крыжик minimize_uniquify но он не работает, кроме того по описанию не должен работать на 100%. По сути задача крайне стандартная. Исходя из принципа сквозного маршрута каденса, должен быть какой-то способ делать нормальный партишининг для модулей-клонов в генусе чтобы передать это в инновус. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Avex 1 14 марта, 2019 Опубликовано 14 марта, 2019 (изменено) · Жалоба Первое что приходит в голову - отдельно констрейните-синтезируете этот модуль, получаете нетлист, потом подгружаете его в большой проект, накладываете на этот модуль атрибут preserve=true, и пускаете синтез. Альтернатива - можно дополнительно этот модуль довести до конца в инновусе, отдельно от проекта, выписать либу и использовать ее в синтезе большого проекта. А в P&R использовать ILM модель + LEF модуля. Изменено 14 марта, 2019 пользователем Aleх Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MickeyMouse 0 15 марта, 2019 Опубликовано 15 марта, 2019 (изменено) · Жалоба 12 часов назад, Aleх сказал: Первое что приходит в голову - отдельно констрейните-синтезируете этот модуль, получаете нетлист, потом подгружаете его в большой проект, накладываете на этот модуль атрибут preserve=true, и пускаете синтез. Альтернатива - можно дополнительно этот модуль довести до конца в инновусе, отдельно от проекта, выписать либу и использовать ее в синтезе большого проекта. А в P&R использовать ILM модель + LEF модуля. Да не, это не то. Не хочется дополнительный маршрут и макро делать, у меня их и так уже больше чем звезд на небе. Сейчас нащупал вариант, синтезировать все а потом выполнять change_link(меняет модуль инстанции), но нужны видимо доп констрейны из-за разных нагрузок на порты клонов. Изменено 15 марта, 2019 пользователем MickeyMouse Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dantist2k17 0 29 марта, 2019 Опубликовано 29 марта, 2019 (изменено) · Жалоба On 3/14/2019 at 5:25 PM, MickeyMouse said: Всем привет! Кто-нибудь сталкивался с такой проблемой? В дизайне есть N-штук одинаковых модулей, как указать генусу рассматривать их как один модуль инстанцируемый N-раз? По умолчанию генус делает uniquify, в результате имеем N разных модулей - для каждой инстанции свой модуль, а хотелось бы N-инстанций и один модуль( конечно с осознанием того что нетлист уже не уникальный). Есть крыжик minimize_uniquify но он не работает, кроме того по описанию не должен работать на 100%. По сути задача крайне стандартная. Исходя из принципа сквозного маршрута каденса, должен быть какой-то способ делать нормальный партишининг для модулей-клонов в генусе чтобы передать это в инновус. Насчет Genus не скажу, в DC делал следующим образом: #register_write current_design register_data characterize reg_dev_low current_design register_write compile_ultra -no_autoungroup #register_data current_design $top_level current_design mem characterize gen_reg[0].register_data current_design register_data set_dont_touch {reg_dev_low reg_dev_most} compile_ultra -no_autoungroup #MEM current_design mem set_dont_touch {gen_reg[*].register_data} compile_ultra -no_autoungroup #fdt current_design $top_level characterize gen_fdt[0].fdt current_design fdt compile_ultra -no_autoungroup #register_synch_negedge current_design $top_level current_design spi characterize synch_ncs current_design register_synch_negedge compile_ultra -no_autoungroup current_design $top_level set_dont_touch {spi/synch_ncs spi/synch_sclk gen_fdt[*].fdt mem} compile_ultra -no_autoungroup Т.е. изначально характеризуем модуль ссылаясь на любой instance, затем делаем этот модуль текущим дизайном и компилируем. А перед синтезом верхнего уровня ставим dont touch. В принципе это тоже самое что посоветовал Alex. Я делал это процессе, не напрягало. Однако, encounter вероятней всего выдаст сообщение о том что netlist не уникален. Изменено 29 марта, 2019 пользователем Dantist2k17 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Avex 1 29 марта, 2019 Опубликовано 29 марта, 2019 · Жалоба Добавлю только, что при такой характеризации блока лучше дампить sdc файл, чуть поджимать констрейнты на интерфейсы и затем обратно зачитывать - получается запас. Если же из блока выходит сорс-синхронный интерфейс, то надо довести этот блок до лейаута, выписать либу и уже ее использовать в синтезе верхнего уровня - так синтезатор учтет летенси клока внутри блока, и синтез будет более корректный. Хотя если грубо, то лейаут можно не делать, а летенси клока задать констрейнтами (характеризация этого сама не сделает). Что касается p&r тулов, то по понятным причинам они требуют унифицированный нетлист. Исключение - когда повторяемый блок был сделан отдельно, и присутствует в проекте в виде леф/либ/ilm. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lexx 0 31 марта, 2019 Опубликовано 31 марта, 2019 · Жалоба To Dantist Зачем делать characterize блока до полного синтеза, информации по окружению ещё нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dantist2k17 0 1 апреля, 2019 Опубликовано 1 апреля, 2019 · Жалоба 11 hours ago, lexx said: To Dantist Зачем делать characterize блока до полного синтеза, информации по окружению ещё нет. В моем случае была "свой атмосфера" схема описывалась на verilog, при этом разводилась руками. Была необходимость не плодить модули, а всегда обращаться к одному. О том, что нет информации по окружению пока не сделан полный синтез, я тогда по правде сказать и не задумывался. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MickeyMouse 0 8 апреля, 2019 Опубликовано 8 апреля, 2019 (изменено) · Жалоба Вообще если говорить все-таки про genus, то получилось 2 способа решения проблемы: 1) Как предложил Alex, делать отдельный маршрут с последующим донттатчем 2) Использовать маршрут партишининга(derive_environment/geterate_ilm/read_ilm/design_assemble) Второй способ как-то не очень прошел(тайминги хуже получаются, но возможно я еще его не до конца вкурил) А указать тулу, как это можно сделать в innovus, через master/clone (т.е. не унифицировать модули) так и не удалось. Скорее всего этого сделать нельзя... Но и первый способ с подводными камнями: почему-то в финальном нетлисте остаются процедуры assign(remove_assign не работает, возможно это из-за неуникальность нетлиста). Это можно поправить на бэкэнде. Изменено 8 апреля, 2019 пользователем MickeyMouse Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться