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

Партишининг идентичных инстанций в GENUS

Всем привет!

Кто-нибудь сталкивался с такой проблемой? В дизайне есть N-штук одинаковых модулей, как указать генусу рассматривать их как один модуль инстанцируемый N-раз?

По умолчанию генус делает uniquify, в результате имеем N разных модулей - для каждой инстанции свой модуль, а хотелось бы N-инстанций и один модуль( конечно с осознанием того что нетлист уже не уникальный).

Есть крыжик minimize_uniquify но он не работает, кроме того по описанию не должен работать на 100%.

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

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


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

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

Альтернатива - можно дополнительно этот модуль довести до конца в инновусе, отдельно от проекта, выписать либу и использовать ее в синтезе большого проекта. А в P&R использовать ILM модель + LEF модуля.

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

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


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

12 часов назад, Aleх сказал:

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

Альтернатива - можно дополнительно этот модуль довести до конца в инновусе, отдельно от проекта, выписать либу и использовать ее в синтезе большого проекта. А в P&R использовать ILM модель + LEF модуля.

 

Да не, это не то. Не хочется дополнительный маршрут и макро делать, у  меня их и так уже больше чем звезд на небе.

Сейчас нащупал вариант, синтезировать все а потом выполнять change_link(меняет модуль инстанции), но нужны видимо доп констрейны из-за разных нагрузок на порты клонов.

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

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


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

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 не уникален.

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

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


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

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

Что касается p&r тулов, то по понятным причинам они требуют унифицированный нетлист. Исключение - когда повторяемый блок был сделан отдельно, и присутствует в проекте в виде леф/либ/ilm. 

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


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

11 hours ago, lexx said:

To Dantist

Зачем делать characterize блока до полного синтеза,  информации по окружению ещё нет.

В моем случае была "свой атмосфера" схема описывалась на verilog, при этом разводилась руками. Была необходимость не плодить модули, а всегда обращаться к одному.

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

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


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

Вообще если говорить все-таки про genus, то получилось 2 способа решения проблемы:

1) Как предложил Alex, делать отдельный маршрут с последующим донттатчем

2) Использовать маршрут партишининга(derive_environment/geterate_ilm/read_ilm/design_assemble)

Второй способ как-то не очень прошел(тайминги хуже получаются, но возможно я еще его не до конца вкурил)

А указать тулу, как это можно сделать в innovus, через master/clone (т.е. не унифицировать модули) так и не удалось. Скорее всего этого сделать нельзя...

Но и первый способ с подводными камнями: почему-то в финальном нетлисте остаются процедуры assign(remove_assign не работает, возможно это из-за неуникальность нетлиста). Это можно поправить на бэкэнде.

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

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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