Давайте розглянемо алгоритм у питанні:
[(a + b) + abs(b - a)]/2
Це має етапи додавання і віднімання, які потім подаються на додавання другої стадії. Поділ на 2 є тривіальним у апаратному забезпеченні, це можна зробити, видаливши LSB. Однак двоступеневий повний суматор / віднімання досить повільний і затягує ворота, особливо якщо ви каскадуєте декілька капарізонів, як ви.
Виходячи з відповіді Вутера ван Ойєна, узагальнена структура - це цифровий компаратор, що подає вибраний сигнал муксу:
імітувати цю схему - Схематично створено за допомогою CircuitLab
Наведена схема є для:
(A > B) ? A : B
але зауважте, що його можна легко налаштувати для будь-якого порівняння між двома входами, зробивши різні логічні з'єднання між виходами компаратора та вибору mux.
Отже, якщо ми знаємо, як сформулювати три виходи з компаратора, ми можемо здійснити будь-яке порівняння в апаратному забезпеченні. Компаратор логік добре описаний тут . Щоб оптимізувати обладнання, ми просто видалимо логіку, що керує невикористаними виходами компаратора.
Але врешті-решт, якщо йдеться про апаратне забезпечення, воно має пройти синтез. Таким чином, ви не повинні одержими, яка схема на рівні воріт є оптимальною. Натомість оптимізуйте свій код та алгоритми, щоб ви принаймні не змушували синтезатор давати неефективний результат. "За допомогою певного хитрування перевірка бітових пар може поєднуватися з муксером для однієї і тієї ж бітової пари", і найпростіший спосіб здійснити цю оптимізацію - це синтез.