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

Обработка нетлиста на Си

Привет! Не нашел, куда лучше приткнуть тему, но думаю что здесь я скорее получу ответ.

Есть задача - сильно менять нетлист. Прежде всего, его нужно зачитать, представить как набор объектов, а затем править: удалять/добавлять порты, элементы, цепи и ассайны, делать переподключения. Все это хочется делать на Си. Если кто с подобным работал, есть такая библиотека Verilog-Perl. Вот, хочется ровно то же самое, но лучше. Perl устраивает, но производительности не хватает - нужен компилятор, а не интерпретатор.

Т.е. что я ищу: Библиотека должна содержать функции чтения и записи нетлиста, создания базы объектов, и должна предоставлять простые функции: соединять/удалять/создавать и т.д. И все это под линукс.

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


Ссылка на сообщение
Поделиться на другие сайты
Была еще библиотека nldb - на яве, которую можно использовать из C/C++. Это, вроде, более высокая степень компилированности, чем perl. Но я не знаю, померла, или нет...

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


Ссылка на сообщение
Поделиться на другие сайты
Вы могли бы уточнить, почему вас не устраивают средства, предоставляемые синтезаторами. Например, весь описанный вами функционал есть в DC и в RC. Средствами встроенного TCL всё прекрасно читается, меняется и записывается. Плюс: не будет сомнений в валидности инструментария.

Кстати, если не секрет, как для такого сильно модифицированного нетлиста сделать функциональную верификацию?

Цитата(Shivers @ Feb 13 2015, 06:34) <{POST_SNAPBACK}>
Есть задача - сильно менять нетлист. Прежде всего, его нужно зачитать, представить как набор объектов, а затем править: удалять/добавлять порты, элементы, цепи и ассайны, делать переподключения. Все это хочется делать на Си. Если кто с подобным работал, есть такая библиотека Verilog-Perl. Вот, хочется ровно то же самое, но лучше. Perl устраивает, но производительности не хватает - нужен компилятор, а не интерпретатор.

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


Ссылка на сообщение
Поделиться на другие сайты
Цитата(SM @ Feb 13 2015, 09:59) <{POST_SNAPBACK}>
Была еще библиотека nldb - на яве, которую можно использовать из C/C++. Это, вроде, более высокая степень компилированности, чем perl. Но я не знаю, померла, или нет...

Спасибо! Яву пока использовать не хочется, надеюсь найти чистые Си-шные либы.

Цитата(Fat Robot @ Feb 13 2015, 17:42) <{POST_SNAPBACK}>
Вы могли бы уточнить, почему вас не устраивают средства, предоставляемые синтезаторами. Например, весь описанный вами функционал есть в DC и в RC. Средствами встроенного TCL всё прекрасно читается, меняется и записывается. Плюс: не будет сомнений в валидности инструментария.

Жутко тормозной интерпретатор. По моему опыту, интерпретатор perl обрабатывает нетлист в 20 раз быстрее, чем DC справляется с теми же алгоритмами на TCL. Хотя, работать с командами DC (конкретно - с коллекциями) намного удобнее. imho
Про RC ничего не знаю, но думаю что то же самое.
Из интерпретаторов вряд ли что нибудь сравнится с perl. Быстрее - только под компилятор писать. Да и с защитой авторских прав, компилятор лучше. Код на перле я пока не знаю как защитить (впрочем, особо этот вопрос пока не изучал, надеюсь переписать все на Си).

Цитата(Fat Robot @ Feb 13 2015, 17:42) <{POST_SNAPBACK}>
Кстати, если не секрет, как для такого сильно модифицированного нетлиста сделать функциональную верификацию?

Только моделирование, ничего другого я не знаю. И еще DFT для проверки на фабе/плате.

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


Ссылка на сообщение
Поделиться на другие сайты
Цитата(Shivers @ Feb 13 2015, 17:20) <{POST_SNAPBACK}>
Из интерпретаторов вряд ли что нибудь сравнится с perl.

Возможно, ruby будет быстрее, вместе с вериложным gem

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


Ссылка на сообщение
Поделиться на другие сайты
Цитата(SM @ Feb 13 2015, 18:26) <{POST_SNAPBACK}>
Возможно, ruby будет быстрее, вместе с вериложным gem

Спасибо! Про такое я вообще не слышал.

На Verilog-Perl больше всего не хватает команд вроде all_fanin/all_fanout, да и вообще там нет связей между объектами. Т.е. есть объекты - селл, пин, ассайн, нет. Пин связан с селлом, нет с пином. Но вот в обратную эти связи не работают, и получить что то вроде all_connected для цепи нельзя, надо создавать собственные массивы из связей. Переподключение пина выливается в его полное удаление, а затем создание нового. В общем, Verilog-Perl далек от идеала. Почитаю про ruby-gem, что умеет.

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


Ссылка на сообщение
Поделиться на другие сайты
Цитата(Shivers @ Feb 13 2015, 17:33) <{POST_SNAPBACK}>
Спасибо!

Не за что. Я сам про это только слышал, но не видел, и на что оно способно, не знаю.

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


Ссылка на сообщение
Поделиться на другие сайты
вот наткнулся случайно:
https://github.com/verilog-to-routing/vtr-v.../master/ODIN_II
Tool for converting a subset of the Verilog Hardware Description Language (HDL) into a BLIF netlist.

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

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


Ссылка на сообщение
Поделиться на другие сайты
Для аналоговых парсеров нетлистов типа spice, spectre, eldo движок у меня есть.
Если нужно написать какую-либо программу на C - обращайтесь.

Если нужен бесплатный вариант - в PDK Микрона был файл calibre2spectre, написанный на перле моим коллегой
для post layout simulation.

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация