Как беззнаковое целое число max реализовано в оборудовании?


10

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

В попытке упростить аппаратный дизайн мне было интересно, как max реализован в аппаратном обеспечении?

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

Это как это реализовано в оборудовании? (т.е. поэтапно; сложение, деление битового сдвига и т. д.)

Если да, то как рассчитывается абсолютная разница?

Ответы:


10

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

  • оба 0 или оба 1: переход к следующей младшей паре
  • а равен 1; а является высшим; б равен 1: б самый высокий

Когда вы знаете, какой из них самый высокий, вы можете выбрать его с помощью 2N-> N мукса.

С некоторым хитрым трюком проверка пар битов может быть объединена с мультиплексором для той же самой пары бит.


2

Давайте посмотрим на алгоритм в вопросе:

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

Это имеет стадии сложения и вычитания, которые затем подают на сложение второй стадии. Разделить на 2 тривиально в аппаратном обеспечении, это можно сделать, удалив LSB. Тем не менее, двухступенчатый полный сумматор / вычитатель довольно медленный и требует больших затрат, особенно если вы каскадируете несколько разностей, как вы.

Основываясь на ответе Ваутера ван Оойена, обобщенная структура представляет собой цифровой компаратор, подающий сигнал выбора мультиплексора:

схематический

смоделировать эту схему - схема, созданная с использованием CircuitLab

Приведенная выше схема предназначена для:

(A > B) ? A : B

но обратите внимание, что он может быть легко перенастроен для любого сравнения между двумя входами путем создания различных логических соединений между выходами компаратора и выбором мультиплексора.

Поэтому, если мы знаем, как сформулировать три выхода компаратора, мы можем реализовать любое сравнение в аппаратном обеспечении. Компаратор логик хорошо описан здесь . Чтобы оптимизировать аппаратное обеспечение, мы просто удалили логику, управляющую неиспользуемыми выходами компаратора.

Но, в конце концов, если оно идет в аппаратное обеспечение, оно должно пройти синтез. Таким образом, вы не должны зацикливаться на том, какая схема уровня шлюза является оптимальной. Вместо этого оптимизируйте свой код и алгоритмы так, чтобы вы по крайней мере не заставляли синтезатор выдавать неэффективный результат. «При некотором умном обмане проверка пар битов может быть совмещена с мультиплексором для одной и той же пары бит», и самый простой способ выполнить эту оптимизацию - синтез.


1

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

Ея,оUTЕя,яN¬(aябя)Lя,оUT(¬Ея,яNLя,яN)(Ея,яNaя¬бя)ря(¬Ея,яN((Lя,яNaя)(¬Lя,яNбя)))(Ея,яN(aябя))

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

Это эквивалент сумматора-переносчика. Если вы заинтересованы, вы можете создать эквивалент сумматоров для переноски, сохранения или переноса.

ЕL¬Еa

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.