Jump to content

    

Пользовательский препроцессор для Verilog'а

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

Поясню мысль. Например, вам просто хочется сгенерировать меандр длиной N импульсов, и частотой в 5 раз меньше тактовой. Какие варианты?

Первый: написать руками на 2х счётчиках - не бог весть как сложно, но, блин, сколько ж можно.

Второй: использовать готовый модуль, написанный на стороне, или заложенный, например, в Квартусовские шаблоны. Свои плюсы и минусы.

А третий - просто написать  repeat (N)  #5 a = !a; - но это не синтезируемая конструкция. Но, в обычном программинге сплошь и рядом сейчас используются пользовательские конструкции. Перед тем, как скормить код компилятору, код прогоняется через "кастомный" препроцессор, к-рый эти конструкции заменяет на понятное компилятору. В нашем случае, заменить это repeat на некий модуль - элементарно. Вот, ну наверняка же есть уже что-то (полу)готовое?

Edited by Kluwer

Share this post


Link to post
Share on other sites

Leka делал подобное)

Share this post


Link to post
Share on other sites
2 minutes ago, des00 said:

Leka делал подобное)

Спасибо, что хоть кто-то ответил :) Leka, я так понимаю, один из форумчан?

Share this post


Link to post
Share on other sites

Приветствую!

2 hours ago, Kluwer said:

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

...  Вот, ну наверняка же есть уже что-то (полу)готовое?

IMHO тупиковый путь - не синтезируемые конструкции на то и НЕ синтезируемые что нет однозначного способа отобразить эту конструкцию в железо. Поэтому препроцессор будет всегда требовать специфичного синтаксиса/ограничений для использования этих конструкций.  В чем тогда будет выгода?

Удачи! Rob. 

 

Share this post


Link to post
Share on other sites

в свое время был очень доволен verilog-mode - это плагин для emacs писанный на лиспе. имхо, функции полезнее приведенного примера.

https://www.veripool.org/projects/verilog-mode/wiki/Examples

можно взять любой препроцессор - тот же m4 - труЪ подход (когда-то я таким маялся, например, генерация документации, С кода (хидера) и верилога для интерфейсных регистров у IP), да и питон есть, в конце концов.

для VHDL есть такая хрень в GRLIBe - там всякие xconfig и т.п. в стиле олдскульных линуксных конфигураторов

но стоит ли ...

Share this post


Link to post
Share on other sites
1 hour ago, RobFPGA said:

Приветствую!

IMHO тупиковый путь - не синтезируемые конструкции на то и НЕ синтезируемые что нет однозначного способа отобразить эту конструкцию в железо. Поэтому препроцессор будет всегда требовать специфичного синтаксиса/ограничений для использования этих конструкций.  В чем тогда будет выгода?

Удачи! Rob. 

 

Коллега, я извиняюсь, но мой пост был не с целью обсудить "выгоду". Я просто написал, что существует такой способ, точка. И хотелось бы понять есть ли какие-то инструменты для реализации данного способа. Если у вас есть что на примете - буду благодарен, а обсуждать "да зачем оно нужно..." я не намерен.

Share this post


Link to post
Share on other sites

Приветствую!

35 minutes ago, Kluwer said:

Коллега, я извиняюсь, но мой пост был не с целью обсудить "выгоду". Я просто написал, что существует такой способ, точка. И хотелось бы понять есть ли какие-то инструменты для реализации данного способа. Если у вас есть что на примете - буду благодарен, а обсуждать "да зачем оно нужно..." я не намерен.

Да на здоровье. Я как раз вам и ответил что НЕТ инструмента для конверсии не синтезируемых стандартных конструкций языка в синтезируемые. Окромя  написания собственного полноценного синтезатора со всеми вытекающими. 

 

Ну а для пре-процессинга собственных макросов можно и на `define много чего наваять.

 

Удачи! Rob.

Share this post


Link to post
Share on other sites
17 часов назад, yes сказал:

да и питон есть

Не препроцессор, но генератор кода: COG

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this