Арифметико-логическое устройство - Arithmetic logic unit

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

В вычисление, арифметико-логическое устройство (ALU) - это комбинационный цифровая схема который выполняет арифметика и побитовые операции на целое число двоичные числа.[1][2][3] Это в отличие от блок с плавающей запятой (FPU), который работает на плавающая точка числа. Это фундаментальный строительный блок многих типов вычислительных схем, включая центральное процессорное устройство (CPU) компьютеров, FPU и графические процессоры (GPU).[4]

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

Сигналы

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

Данные

Базовый ALU имеет три параллельных данных автобусов состоящий из двух входов операнды (А и B) и вывод результата (Y). Каждая шина данных представляет собой группу сигналов, передающих одно целое двоичное число. Обычно ширина шины A, B и Y (количество сигналов, составляющих каждую шину) идентична и соответствует исходной размер слова внешних схем (например, инкапсулирующего ЦП или другого процессора).

Код операции

В код операции вход представляет собой параллельную шину, которая передает в АЛУ код выбора операции, который представляет собой пронумерованное значение, определяющее желаемую арифметическую или логическую операцию, которая должна выполняться АЛУ. Размер кода операции (его ширина шины) определяет максимальное количество различных операций, которые может выполнять ALU; например, четырехбитовый код операции может определять до шестнадцати различных операций ALU. Как правило, код операции ALU не совпадает с код операции на машинном языке, хотя в некоторых случаях он может быть напрямую закодирован как битовое поле в коде операции машинного языка.

Положение дел

Выходы

Выходы состояния - это различные отдельные сигналы, которые передают дополнительную информацию о результате текущей операции ALU. У ALU общего назначения обычно есть такие сигналы состояния, как:

  • Исполняйте, который передает нести в результате операции сложения, заимствования в результате операции вычитания или бит переполнения в результате операции двоичного сдвига.
  • Нуль, что указывает на то, что все биты Y равны логическому нулю.
  • Отрицательный, что указывает на отрицательный результат арифметической операции.
  • Переполнение, который указывает, что результат арифметической операции превышает числовой диапазон Y.
  • Паритет, который указывает, является ли четное или нечетное количество битов в Y логической единицей.

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

Входы

Входы состояния позволяют сделать доступной дополнительную информацию для ALU при выполнении операции. Обычно это единственный бит переноса, который является сохраненным переносом из предыдущей операции ALU.

Схема работы

В комбинационная логика схема 74181 интегральная схема, представляющая собой простой четырехразрядный АЛУ

ALU - это комбинационная логика цепи, что означает, что ее выходы будут изменяться асинхронно в ответ на изменения входных данных. При нормальной работе стабильные сигналы подаются на все входы ALU и, когда достаточно времени (известный как "Задержка распространения ") прошел, чтобы сигналы распространялись через схему ALU, результат работы ALU появляется на выходах ALU. Внешняя схема, подключенная к ALU, отвечает за обеспечение стабильности входных сигналов ALU на протяжении всей операции и за разрешение время, достаточное для прохождения сигналов через ALU перед выборкой результата ALU.

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

Например, ЦП начинает операцию сложения ALU, направляя операнды из их источников (которые обычно являются регистрами) на входы операндов ALU, в то время как устройство управления одновременно применяет значение ко входу кода операции ALU, настраивая его для выполнения сложения. В то же время ЦП также направляет вывод результата ALU в регистр назначения, который получит сумму. Входные сигналы ALU, которые остаются стабильными до следующих часов, могут распространяться через ALU и в регистр назначения, в то время как CPU ожидает следующих часов. Когда приходят следующие часы, регистр назначения сохраняет результат ALU, и, поскольку операция ALU завершена, входы ALU могут быть настроены для следующей операции ALU.

Функции

ALU обычно поддерживает ряд основных арифметических и побитовых логических функций. Базовые ALU общего назначения обычно включают в свой репертуар следующие операции:[1][2][3][5]

Арифметические операции

  • Добавлять: A и B суммируются, и сумма появляется в Y и переносится.
  • Добавить с переносом: A, B и вынос суммируются, и сумма появляется в Y и переносе.
  • Вычесть: B вычитается из A (или наоборот), а разница появляется в Y и переносе. Для этой функции выполнение фактически является индикатором «заимствования». Эта операция также может использоваться для сравнения величин A и B; в таких случаях выход Y может игнорироваться процессором, который интересуется только битами состояния (в частности, нулевым и отрицательным), которые возникают в результате операции.
  • Вычесть с заимствованием: B вычитается из A (или наоборот) с заимствованием (переносом), а разница появляется в Y и переносе (заимствовании).
  • Дополнение до двух (отрицание): A (или B) вычитается из нуля, и разница появляется в Y.
  • Приращение: A (или B) увеличивается на единицу, и результирующее значение появляется в Y.
  • Декремент: A (или B) уменьшается на единицу, и результирующее значение появляется в Y.
  • Пройти через: все биты A (или B) появляются без изменений в Y. Эта операция обычно используется для определения четности операнда, равно нулю или отрицательности, или для загрузки операнда в регистр процессора.

Побитовые логические операции

  • И: побитовое И для A и B появляется в Y.
  • ИЛИ ЖЕ: побитовое ИЛИ A и B появляется в Y.
  • Эксклюзивный или: побитовое исключающее ИЛИ A и B появляется в Y.
  • Дополнение: все биты A (или B) инвертируются и появляются в Y.

Операции битового сдвига

Примеры битового сдвига для восьмиразрядного ALU
ТипОставилиПравильно
Арифметический сдвигЛогический поворот влево. SvgПовернуть вправо арифметически. Svg
Логический сдвигЛогический поворот влево. SvgЛогический поворот вправо. Svg
ПовернутьПовернуть left.svgПовернуть вправо. Svg
Повернуть через переносПовернуть влево через carry.svgПовернуть вправо через carry.svg

Операции сдвига ALU заставляют операнд A (или B) сдвигаться влево или вправо (в зависимости от кода операции), и смещенный операнд появляется в Y. Простые ALU обычно могут сдвигать операнд только на одну битовую позицию, тогда как более сложные ALU используют баррель шифтеры которые позволяют им сдвигать операнд на произвольное количество бит за одну операцию. Во всех операциях однобитового сдвига бит, смещенный из операнда, появляется при выполнении; значение сдвигаемого в операнд бита зависит от типа сдвига.

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

Приложения

Арифметика с высокой точностью

В целочисленных арифметических вычислениях арифметика с высокой точностью - это алгоритм, работающий с целыми числами, превышающими размер слова ALU. Для этого алгоритм обрабатывает каждый операнд как упорядоченный набор фрагментов размера ALU, упорядоченных от наиболее значимого (MS) к наименее значимому (LS) или наоборот. Например, в случае 8-битного ALU 24-битное целое число 0x123456 будет рассматриваться как набор из трех 8-битных фрагментов: 0x12 (РС), 0x34, и 0x56 (LS). Поскольку размер фрагмента точно соответствует размеру слова ALU, ALU может напрямую работать с этой «частью» операнда.

Алгоритм использует ALU для непосредственной работы с конкретными фрагментами операндов и, таким образом, генерирует соответствующий фрагмент («частичный») результата с множественной точностью. Каждый фрагмент, когда он сгенерирован, записывается в связанную область памяти, которая была назначена для результата с множественной точностью. Этот процесс повторяется для всех фрагментов операнда, чтобы сгенерировать полную коллекцию партиалов, которая является результатом операции с множественной точностью.

В арифметических операциях (например, сложение, вычитание) алгоритм начинается с вызова операции ALU над LS-фрагментами операндов, тем самым создавая как частичный LS, так и бит выполнения. Алгоритм записывает часть в указанное хранилище, тогда как конечный автомат процессора обычно сохраняет бит выполнения в регистре состояния ALU. Затем алгоритм переходит к следующему фрагменту коллекции каждого операнда и вызывает операцию ALU с этими фрагментами вместе с сохраненным битом переноса из предыдущей операции ALU, тем самым создавая другой (более значимый) частичный бит и бит переноса. Как и раньше, бит переноса сохраняется в регистре состояния, а часть записывается в назначенное хранилище. Этот процесс повторяется до тех пор, пока все фрагменты операндов не будут обработаны, в результате чего будет получен полный набор частичных данных в хранилище, которые составляют арифметический результат с высокой точностью.

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

В побитовых логических операциях (например, логическое И, логическое ИЛИ) фрагменты операндов могут обрабатываться в любом произвольном порядке, поскольку каждая часть зависит только от соответствующих фрагментов операнда (сохраненный бит переноса из предыдущей операции ALU игнорируется).

Сложные операции

Хотя ALU может быть разработан для выполнения сложных функций, в результате более высокая сложность схемы, стоимость, потребляемая мощность и больший размер делают это во многих случаях непрактичным. Следовательно, ALU часто ограничиваются простыми функциями, которые могут выполняться на очень высоких скоростях (то есть с очень короткими задержками распространения), а схема внешнего процессора отвечает за выполнение сложных функций путем организации последовательности более простых операций ALU.

Например, вычисление квадратного корня из числа может быть реализовано различными способами, в зависимости от сложности ALU:

  • Расчет в одиночные часы: очень сложный ALU, который вычисляет квадратный корень за одну операцию.
  • Расчетный конвейер: группа простых ALU, которая вычисляет квадратный корень поэтапно, с промежуточными результатами, передаваемыми через ALU, организованные как фабрика конвейер. Эта схема может принимать новые операнды до завершения предыдущих и выдает результаты так же быстро, как и очень сложный ALU, хотя результаты задерживаются на сумму задержек распространения каскадов ALU. Подробнее читайте в статье о конвейерная обработка инструкций.
  • Итерационный расчет: простой ALU, который вычисляет квадратный корень через несколько шагов в направлении устройство управления.

Приведенные выше реализации переходят от самых быстрых и дорогих к самым медленным и наименее затратным. Квадратный корень вычисляется во всех случаях, но процессорам с простыми ALU потребуется больше времени для выполнения вычисления, потому что необходимо выполнить несколько операций ALU.

Выполнение

ALU обычно реализуется как автономный Интегральная схема (IC), например 74181, или как часть более сложной ИС. В последнем случае экземпляр ALU обычно создается путем его синтеза из описания, написанного на VHDL, Verilog или какой-то другой язык описания оборудования. Например, следующий код VHDL описывает очень простой 8 бит ALU:

юридическое лицо алу являетсяпорт (  - алюминиевые соединения с внешней схемой:  А  : в  подписанный(7 вниз 0);   - операнд A  B  : в  подписанный(7 вниз 0);   - операнд B  OP : в  беззнаковый(2 вниз 0); - код операции  Y  : из подписанный(7 вниз 0));  - результат операцииконец алу;архитектура поведенческий из алу являетсяначинать  дело OP является  - расшифровать код операции и выполнить операцию:    когда "000" =>  Y <= А + B;   -- Добавить    когда "001" =>  Y <= А - B;   - вычесть    когда "010" =>  Y <= А - 1;   - декремент    когда "011" =>  Y <= А + 1;   - приращение    когда "100" =>  Y <= нет А;   - 1 дополнение    когда "101" =>  Y <= А и B; - побитовое И    когда "110" =>  Y <= А или же B;  - побитовое ИЛИ    когда "111" =>  Y <= А xor B; - побитовое XOR    когда другие => Y <= (другие => 'ИКС');  конец дело; конец поведенческий;

История

Математик Джон фон Нейман предложил концепцию ALU в 1945 году в отчете об основах нового компьютера под названием EDVAC.[6]

Стоимость, размер и потребляемая мощность электронных схем были относительно высокими на протяжении всего периода становления. информационный век. Следовательно, все последовательные компьютеры и многие ранние компьютеры, такие как PDP-8, имели простой ALU, который работал с одним битом данных за раз, хотя они часто предоставляли программистам более широкий размер слова. Одним из первых компьютеров с несколькими дискретными однобитными схемами ALU был компьютер 1948 года. Вихрь I, в котором использовалось шестнадцать таких «математических модулей», позволяющих оперировать 16-битными словами.

В 1967 г. Fairchild представила первый ALU, реализованный в виде интегральной схемы, Fairchild 3800, состоящий из восьмиразрядного ALU с аккумулятором.[7] Вскоре появились другие ALU на интегральных схемах, в том числе четырехразрядные ALU, такие как Am2901 и 74181. Эти устройства обычно "кусочек «способный» означает, что у них были сигналы «с упреждением», которые облегчили использование нескольких взаимосвязанных микросхем ALU для создания ALU с более широким размером слова. Эти устройства быстро стали популярными и широко использовались в мини-компьютерах с побитовым срезом.

Микропроцессоры начали появляться в начале 1970-х годов. Несмотря на то, что транзисторы стали меньше, часто не хватало места на кристалле для ALU полной ширины слова, и, как результат, некоторые ранние микропроцессоры использовали узкий ALU, который требовал нескольких циклов для каждой инструкции машинного языка. Примеры этого включают популярные Зилог Z80, который выполнял восьмибитное сложение с четырехбитным ALU.[8] Со временем геометрия транзисторов еще больше уменьшилась. Закон Мура, и стало возможным создавать более широкие ALU на микропроцессорах.

Транзисторы современных интегральных схем (ИС) на порядки меньше, чем транзисторы ранних микропроцессоров, что позволяет устанавливать очень сложные АЛУ на ИС. Сегодня многие современные ALU имеют большую ширину слова и архитектурные улучшения, такие как баррель шифтеры и двоичные множители которые позволяют им выполнять за один такт операции, которые потребовали бы нескольких операций на более ранних ALU.

ALU могут быть реализованы как механический, электромеханический или же электронный схемы[9][неудачная проверка ] а в последние годы были проведены исследования биологических ALU.[10][11] (например., актин -основан).[12]

Смотрите также

Рекомендации

  1. ^ а б А.П. Годсе; Д.А. Годсе (2009). «3». Цифровой логический дизайн. Технические публикации. С. 9–3. ISBN  978-81-8431-738-1.
  2. ^ а б Обучение и тренинг лидерства (LET) 2: Программный текст. Штаб, Управление армии. 2001. С. 371–.
  3. ^ а б А.П. Годсе; Д.А. Годсе (2009). «Приложение». Цифровые логические схемы. Технические публикации. стр. C – 1. ISBN  978-81-8431-650-6.
  4. ^ «1. Введение в компьютерную архитектуру - проектирование встроенного оборудования, 2-е издание [книга]». www.oreilly.com. Получено 2020-09-03.
  5. ^ Горовиц, Пол; Winfield Hill (1989). "14.1.1". Искусство электроники (2-е изд.). Издательство Кембриджского университета. С. 990-. ISBN  978-0-521-37095-0.
  6. ^ Филип Левис (8 ноября 2004 г.). «Джонатан фон Нейман и EDVAC» (PDF). cs.berkeley.edu. стр. 1, 3. Архивировано с оригинал (PDF ) 23 сентября 2015 г.. Получено 20 января, 2015.
  7. ^ Ли Бойсел (2007-10-12). «Заработай свой первый миллион (и другие советы начинающим предпринимателям)». Презентация EECS США / Записи ЕЭК. Архивировано из оригинал на 2012-11-15.
  8. ^ Кен Ширрифф.«Z-80 имеет 4-битный ALU. Вот как это работает». 2013, righto.com
  9. ^ Рейф, Джон Х. (2009), Мейерс, Роберт А. (ред.), «Механические вычисления: вычислительная сложность физических устройств», Энциклопедия сложности и системологии, New York, NY: Springer, pp. 5466–5482, Дои:10.1007/978-0-387-30440-3_325, ISBN  978-0-387-30440-3, получено 2020-09-03
  10. ^ Линь, Чунь-Лян; Куо, Тинг-Ю; Ли, Вэй-Сянь (2018-08-14). «Синтез блока управления биокомпьютером будущего». Журнал биологической инженерии. 12 (1): 14. Дои:10.1186 / s13036-018-0109-4. ISSN  1754-1611. ЧВК  6092829. PMID  30127848.
  11. ^ Герд Хг Моэ-Беренс. «Биологический микропроцессор, или как построить компьютер из биологических частей».
  12. ^ Дас, Биплаб; Пол, Авиджит Кумар; Де, Дебашис (2019-08-16). «Нетрадиционная разработка и вычисление логических арифметических устройств в квантовых клеточных автоматах Actin». Микросистемные технологии. Дои:10.1007 / s00542-019-04590-1. ISSN  1432-1858.

дальнейшее чтение

внешняя ссылка