Уменьшить количество мультиплексоров после синтеза VHDL

Я пишу проект на VHDL и после синтеза заметил, что количество используемых мультиплексоров (выделенных) велико. В моем коде много операторов if-else, так что это кажется логичным.

Но я хочу знать, можно ли реализовать if-else (или аналогичные инструкции) по-другому, чтобы уменьшить количество используемых ресурсов мультиплексоров.

Спасибо!


person ferdepe    schedule 26.10.2016    source источник
comment
Иногда вы можете реструктурировать операторы if-else как операторы case. И иногда операторы case могут быть реализованы в виде таблиц поиска. Или иногда вы можете реализовать таблицу поиска напрямую, как постоянный массив, который вы индексируете, используя любое количество, которое вы проверили в операторе if. Применимо ли это к вашему делу, зависит от контекста, о котором вы нам не сказали.   -  person user_1818839    schedule 26.10.2016
comment
Когда вы говорите о мультиплексорах, вы имеете в виду выделенный ресурс мультиплексора или просто мультиплексоры различного размера, реализованные с использованием LUT? У вас заканчивается определенный ресурс?   -  person scary_jeff    schedule 26.10.2016
comment
@scary_jeff выделенные ресурсы   -  person ferdepe    schedule 26.10.2016
comment
Подразумевается, что у вас много широких мультиплексоров. В таком случае я не вижу, что вы могли бы сделать, чтобы уменьшить использование мультиплексора; вам, возможно, придется переосмыслить те части вашего проекта, которые создают множество мультиплексоров, или перейти к более крупной части.   -  person scary_jeff    schedule 26.10.2016


Ответы (1)


Вы можете попробовать использовать простые логические элементы, такие как and или or. Например:

if (a and b) = '1' then
   out_0 <= '1';
else
   out_0 <= '0';
end if;

if (c or d) = '1' then
   out_1 <= '1';
else
   out_1 <= '0';
end if;

Эту конструкцию можно заменить следующей:

out_0 <= a and b;
out_1 <= c or d;

И так далее...

person Roman    schedule 03.03.2017