Метапрограммирование в Verilog - PullRequest
0 голосов
/ 31 августа 2018

Я хотел бы сгенерировать некоторую комбинаторную логику, и я хотел бы использовать для этого рекурсивные функции (с предопределенными аргументами препроцессора, конечно).

Простой пример: Факторная функция

У меня есть reg [10: 0] число; , и я хочу иметь логику для подсчета его факториала, но я хочу, чтобы некоторая предопределенная переменная msb определяла MSB и иметь число [msb: 0] в качестве начального номера, и далее оттуда.

И модуль получит число и вызовет fact_func (число), которое вычислит факториал, но только сокращенный.

Возможно ли что-то подобное в Verilog? Функции генерируют логику?

1 Ответ

0 голосов
/ 31 августа 2018

Я не совсем уверен, что вы спрашиваете, но построение логики с рекурсивными вызовами функций очень возможно в Verilog. Вам нужно будет создать параметризованный модуль, который включает в себя генерирующий блок, создающий экземпляр себя с постепенно уменьшающимся (или большим) значением параметра, пока не дойдете до базового варианта.

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

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

...