Як реалізовано непідписане ціле число max в апаратному забезпеченні?


10

Я працюю над дизайном, який передбачає багато макс-функцій (і max функцій як аргументів для інших функцій max).

Прагнучи спростити дизайн апаратури, мені було цікаво, як макс реалізований в апаратному забезпеченні?

Математично Макс (a, b) може бути представлений як [(a + b) + abs (b - a)] / 2.

Це, як це реалізовано в апараті? (тобто поетапно; додавання, поділ бітового зсуву тощо)

Якщо так, то як обчислюється абсолютна різниця?

Відповіді:


10

Дуже простим підходом було б реалізувати (a> b)? A: b. a> b можна реалізувати, починаючи зліва і перевіряти кожну бітну пару (a, b):

  • обидва 0 або обидва 1: продовжуйте наступну нижню пару
  • a дорівнює 1: a є найвищим; b дорівнює 1: b є найвищим

Коли ви знаєте, який з них найвищий, ви можете вибрати його на 2N-> N mux.

За допомогою певного хитрування перевірка бітових пар може поєднуватися з муксером для тієї ж бітової пари.


2

Давайте розглянемо алгоритм у питанні:

[(a + b) + abs(b - a)]/2

Це має етапи додавання і віднімання, які потім подаються на додавання другої стадії. Поділ на 2 є тривіальним у апаратному забезпеченні, це можна зробити, видаливши LSB. Однак двоступеневий повний суматор / віднімання досить повільний і затягує ворота, особливо якщо ви каскадуєте декілька капарізонів, як ви.

Виходячи з відповіді Вутера ван Ойєна, узагальнена структура - це цифровий компаратор, що подає вибраний сигнал муксу:

схематичний

імітувати цю схему - Схематично створено за допомогою CircuitLab

Наведена схема є для:

(A > B) ? A : B

але зауважте, що його можна легко налаштувати для будь-якого порівняння між двома входами, зробивши різні логічні з'єднання між виходами компаратора та вибору mux.

Отже, якщо ми знаємо, як сформулювати три виходи з компаратора, ми можемо здійснити будь-яке порівняння в апаратному забезпеченні. Компаратор логік добре описаний тут . Щоб оптимізувати обладнання, ми просто видалимо логіку, що керує невикористаними виходами компаратора.

Але врешті-решт, якщо йдеться про апаратне забезпечення, воно має пройти синтез. Таким чином, ви не повинні одержими, яка схема на рівні воріт є оптимальною. Натомість оптимізуйте свій код та алгоритми, щоб ви принаймні не змушували синтезатор давати неефективний результат. "За допомогою певного хитрування перевірка бітових пар може поєднуватися з муксером для однієї і тієї ж бітової пари", і найпростіший спосіб здійснити цю оптимізацію - це синтез.


1

Якщо ви дійсно хочете побудувати спеціалізовану схему для обчислення максимуму, можете почати з базового блоку з наступними рівняннями:

Еi,оутЕi,iн¬(аiбi)Li,оут(¬Еi,iнLi,iн)(Еi,iнаi¬бi)ri(¬Еi,iн((Li,iнаi)(¬Li,iнбi)))(Еi,iн(аiбi))

а потім з'єднайте їх із найбільш значущою цифрою, що подає наступну. Критична частина йде від MSB до LSB, тоді як схема, заснована на субстракції, у кращому випадку матиме критичний шлях, що йде від LSB до MSB, а потім назад до LSB.

Це еквівалент присадки для перенесення пульсацій. Якщо ви зацікавлені, ви можете створити еквівалент суматорів для перенесення-збереження або перенесення.

ЕL¬Еа

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.