Оптимизация мультиплексора для улучшения производительности
В настоящее время я работаю над школьным проектом, который является симулятором цепи. Одним из компонентов этой схемы может быть мультиплексор, который имеет 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;