Оптимизация мультиплексора для улучшения производительности

В настоящее время я работаю над школьным проектом, который является симулятором цепи. Одним из компонентов этой схемы может быть мультиплексор, который имеет n входов, селекторы log2(n) и 1 выход.

Чтобы определить, какой вывод необходим, выполните следующие действия: сгенерируйте (число селекторов) битовую таблицу кодов серого цвета, выполните цикл по таблице и сравните ее со значениями селекторов. Независимо от того, какая строка совпадает, необходим выход.

Однако для больших мультиплексоров (16:1, 32:1) это становится довольно медленным. Есть ли более эффективный способ получения необходимого результата без необходимости сравнивать все возможные варианты серого кода?

1 ответ

Таким образом, вы хотите построить уникальное число в диапазоне [0, 2n) (индекс выбранного входа) из n входов (сигналов селектора), которые находятся в диапазоне [0, 1].

Это двоичный код!

Присвойте одному из сигналов селектора значение 1, следующему - значение 2, затем 4 и т. Д. Добавьте их вместе. Выберите соответствующий пронумерованный вход.

unsigned selectedInput = 0;
if (selector1) selectedInput += 1; /* or |= */
if (selector2) selectedInput += 2;
if (selector3) selectedInput += 4;

И так далее. В общем случае:

unsigned selectedInput = 0;
for (int i = 0; i < selectorCount; ++i)
    if (selectors[i]) selectedInput |= 1u << i;
Другие вопросы по тегам