|
Парсер языка Verilog |
|
|
|
 |
Ответов
|
Jan 8 2017, 12:39
|
Частый гость
 
Группа: Свой
Сообщений: 80
Регистрация: 21-10-11
Пользователь №: 67 894

|
Тем временем прошло 2 года с того момента, как я задал вопрос на этом форуме... Я написал парсер нетлистов и функционал по его обработке за последние несколько месяцев. И хотел бы поделиться опытом. К сожалению выложить парсер не могу (т.к. права принадлежат работе) и рассказать зачем он нужен тоже. Это был очень интересный для меня опыт разработки. Разработка самого парсера оказалась самой простой задачей. Самое сложное для меня было разработать структуры, которые хранят информацию о нетлисте, и функции, которые в дальнейшем обрабатывают нетлист. Сложность также была из-за того, что я старался разработать структуры, которые в будущем можно было бы использовать для хранения информации о более сложных конструкциях verilog. Для разработки парсера использовались следующие средства: flex, bison, c++. Итак, если кто-нибудь захочет написать verilog-парсер вот несколько советов: 1) В стандарте верилог очень хорошо описан формальный синтаксис в виде БНФ, который практически в готовом виде копируется (с небольшими доработками) во flex и bison файлы. Только нужно удалить неиспользуемые конструкции (как в моем случае мне нужно было только подмножество для описания нетлиста). Так как bison генерирует LR-парсеры, представленную в стандарте грамматику БНФ нет необходимости дорабатывать. 2) flex и bison поставляются с очень хорошими мануалами. Их надо прочесть в первую очередь. Кроме того мне очень помогла книжка "Ахо А.-Компиляторы_ принципы, технологии и инструментарий". В ней можно найти описание структур и описание процесса генерации кода. Читать следует java-версию книжки. Описаные принципы подходят и для с++ программ. Также парсер можно написать полностью на java, спасибо bison-у, который поддерживает язык Java. Я выбрал C++, т.к. считаю его более универсальным и прозводительным. 3) Читайте код открытых проектов verilator и yosys. Оттуда можно почерпнуть многие идеи. На изучение кода данных проектов может уйти уйма времени. Для меня было проще написать свой парсер, чем разобраться как все устроено в данных проектах, т.к. кода в них очень много, комментариев практически нет, код читабельностью не блещет. Я потратил небольшое время на изучение кода и некоторые идеи из данных проектов мне показались очень полезными. Кстати, оба проекта также используют flex и bison.
Что касается нетлиста, если он получен с помощью DC, готовтесь к разбору следующих конструкций: не-ANSI заголовок модуля, сам модуль, экземпляры модулей, конкатенации, assign, объявления скалярных и векторные wire и портов, escaped идентификаторы, ссылки на диапазон линий портов и wire и т.д. Если нетлист получен с помощью Precision, все может быть сложнее. Кроме того нужно взять откуда-нибудь описание элементов. Например, мой парсер выдает ошибку, если встречает неизвестный элемент или неизвестный порт элемента. Информацию об элементах можнно взять, например, из Liberty файла, или библиотеки элементов моделирования ПЛИС или ASIC, или создать свой файл с описанием и т.д. Если у кого-нибудь возникли вопросы, могу попытаться на них ответить.
|
|
|
|
|
Jan 8 2017, 20:12
|
Частый гость
 
Группа: Свой
Сообщений: 80
Регистрация: 21-10-11
Пользователь №: 67 894

|
Цитата(AVR @ Jan 8 2017, 20:20)  В Воронеже пошли по пути задействования Quartus для парсинга, подмосковный Миландр задействовали Yosis. У меня теплится надежда, что Ваш работодатель в тайне пилит российскую ПЛИС  Хотя быть может оба примера не подходят, им ведь главное не парсинг для анализа, а передача дальше по цепочке своих САПР... Не угадали, у меня задача была совсем другая, не берите в голову. Я сам был бы рад, если бы с российскими ПЛИС и их средами разработки было бы все хорошо и с удовольствием поучаствовал бы в создании какой-нибудь российской САПР. Потому что сейчас приходится работать с БМК, для которых софт не очень. В настоящее время должны допиливать ковчег. Вообще, я слышал многие САПР синтеза и моделирования используют библиотеку verific (QuestaSim, VCS, Design Compiler, RTL Compiler, Synplify, and Precision) для парсинга SystemVerilog. Возможно нашим мешают санкции купить данную библиотеку, а возможно новый ковчег как раз будет ее и использовать. Конечно, парсер это только часть задачи, есть еще куча других задач, но начать с чего-то надо. Кстати, когда тестил свой парсер, хотел синтезнуть сдвигающий регист, состоящий из более 100000 триггеров. DC и Precision не справились с задачей, просто вылетали с ошибкой. Так что у них там тоже не все так хорошо на больших проектах. Моя программа хоть и не синтезирует код, но нетлисты такого размера и более обрабатывает, хотя памяти жрет дофига, поэтому есть желание использовать базу данных для хранения информации о нетлисте.
|
|
|
|
|
May 17 2018, 13:22
|

Участник

Группа: Участник
Сообщений: 17
Регистрация: 17-05-18
Пользователь №: 104 304

|
Цитата(Fitc @ Jan 9 2017, 03:12)  Потому что сейчас приходится работать с БМК, для которых софт не очень. В настоящее время должны допиливать ковчег. Здравствуйте, я честно говоря, не совсем уверена не фотоп ли, но мне попалась под руку эта ветка и я смело спрошу у вас. Как можно перевести Verilog в форму логической схемы как в Ковчеге? Оставить в Veriloge не вариант, т.к. я пишу диплом и руководитель скорее всего захочет большую и красивую логическую схему. Открытые проекты, которые нашла в интернете в основном в формате кода, по крайней мере форматы схем мне ещё не встретились. Извините если вопрос глупый, я если честно пока плохо понимаю во что ввязалась. Надеюсь что вы мне ответите и заранее спасибо. ^_^
|
|
|
|
|
May 17 2018, 15:40
|
Участник

Группа: Участник
Сообщений: 38
Регистрация: 8-05-18
Пользователь №: 103 834

|
Цитата(Ergond @ May 17 2018, 14:22)  Как можно перевести Verilog в форму логической схемы как в Ковчеге? Оставить в Veriloge не вариант, т.к. я пишу диплом и руководитель скорее всего захочет большую и красивую логическую схему..... Извините если вопрос глупый, я если честно пока плохо понимаю во что ввязалась. Надеюсь что вы мне ответите и заранее спасибо. ^_^ Вам также, как представляет свой код ТС в этой ветке, нужно?
--------------------
-- С наилучшими пожеланиями, Marat.
|
|
|
|
|
May 17 2018, 16:28
|

Участник

Группа: Участник
Сообщений: 17
Регистрация: 17-05-18
Пользователь №: 104 304

|
Цитата(Marat Zuev @ May 17 2018, 22:40)  Вам также, как представляет свой код ТС в этой ветке, нужно? В целом да, мне нужна логическая схема на уровне триггеров и базовых элиментов вроде инверторов и разного рода исключающих или. Короче я картинку сделала того что есть в его библиотеках. Цитата(Nieve @ May 17 2018, 22:44)  Как вариант сделать синтез в ISE / Quartus. САПР сам соберет схему. Спасибо, ушла гуглить.
Эскизы прикрепленных изображений
|
|
|
|
Сообщений в этой теме
Fitc Парсер языка Verilog May 28 2015, 11:06 dvladim Посмотрите открытые проекты.
Например Icarus Veril... May 29 2015, 15:58 Fitc Цитата(dvladim @ May 29 2015, 18:58) Посм... May 29 2015, 18:02 krux распарсить верилог - относительно несложно.
вопрос... May 29 2015, 18:12 Fitc Цитата(krux @ May 29 2015, 21:12) распарс... May 29 2015, 18:23 krux т.е. вам нужно неким образом обрабатывать синтезир... May 29 2015, 18:26 Fitc Цитата(krux @ May 29 2015, 21:26) т.е. ва... May 29 2015, 18:43 krux то, что после синтеза, обычно называют gate-level ... May 29 2015, 18:53 Fitc Цитата(krux @ May 29 2015, 21:53) то, что... May 29 2015, 21:00  Shivers Цитата(Fitc @ May 30 2015, 00:00) Есть ли... May 31 2015, 07:49   Fitc Цитата(Shivers @ May 31 2015, 10:49) А вы... May 31 2015, 13:45    Shivers Цитата(Fitc @ May 31 2015, 16:45) Пока Ve... May 31 2015, 20:10     Fitc Цитата(Shivers @ May 31 2015, 23:10) Ваш ... Jun 1 2015, 17:50      krux Цитата(Fitc @ Jun 1 2015, 20:50) А почему... Jun 1 2015, 18:21      Shivers Работа с нетлистом подразумевает разработку для AS... Jun 1 2015, 18:34       krux Цитата(Shivers @ Jun 1 2015, 21:34) Работ... Jun 1 2015, 18:42 Golikov A. Дико любопытно, а зачем это все надо? Не слишком л... Jun 1 2015, 18:15 dvladim 2 TC У альтеры есть университетская программа (QUI... Jun 2 2015, 17:32   AVR Цитата(Fitc @ Jan 8 2017, 23:12) многие С... Jan 9 2017, 06:18    Nieve Как вариант сделать синтез в ISE / Quartus. САПР с... May 17 2018, 15:44   AVR Цитата(Fitc @ Jan 8 2017, 23:12) а возмож... May 18 2018, 13:01    Marat Zuev Цитата(AVR @ May 18 2018, 13:01) О каком ... May 18 2018, 13:09 Flood Достаточно редкая задача, написание такого парсера... Jan 8 2017, 12:59 Fitc Цитата(Flood @ Jan 8 2017, 15:59) Достато... Jan 8 2017, 13:41 Shivers Спасибо за отзыв, очень любопытно!
По собстве... Jan 8 2017, 21:14 Fitc Цитата(Shivers @ Jan 9 2017, 00:14) Спаси... Jan 9 2017, 20:42 Flip-fl0p ЦитатаОставить в Veriloge не вариант, т.к. я пишу ... May 17 2018, 17:04 andrew_b Цитата(Flip-fl0p @ May 17 2018, 20:0... May 17 2018, 17:46
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|