Арифметико-логический блок

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

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

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

Содержание

  • 1 Сигналы
    • 1.1 Данные
    • 1.2 Код операции
    • 1.3 Состояние
      • 1.3.1 Выходы
      • 1.3.2 Входы
  • 2 Работа контура
  • 3 Функции
    • 3.1 Арифметические операции
    • 3.2 Побитовые логические операции
    • 3.3 Операции сдвига бит
  • 4 Приложения
    • 4.1 Арифметика с множественной точностью
    • 4.2 Сложные операции
  • 5 Реализация
  • 6 История
  • 7 См. также
  • 8 Ссылки
  • 9 Дополнительная литература
  • 10 Внешние ссылки

Сигналы

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

Данные

Базовый ALU имеет три параллельных шины данных , состоящих из двух входных операндов (A и 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, и, поскольку операция ALU завершена, входы ALU могут быть настроены для следующей операции ALU.

Функции

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

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

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

Поразрядные логические операции

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

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

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

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

Приложения

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

В целочисленных арифметических вычислениях арифметика с высокой точностью является алгоритмом который работает с целыми числами, превышающими размер слова ALU. Для этого алгоритм обрабатывает каждый операнд как упорядоченный набор фрагментов размера ALU, упорядоченных от наиболее значимого (MS) к наименее значимому (LS) или наоборот. Например, в случае 8-битного ALU 24-битное целое число 0x123456будет обрабатываться как совокупность трех 8-битных фрагментов: 0x12(MS), 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:

объект alu is port (- соединения alu с внешней схемой: A: подписано (7 вниз до 0); - - операнд AB: со знаком (от 7 до 0); - операнд B OP: без знака (от 2 до 0); - код операции Y: со знаком (от 7 до 0)); - результат операции end alu; архитектура поведения alu is begin case OP is - декодировать код операции и выполнять операцию: when "000" =>Y <= A + B; -- add when "001" =>Y <= A - B; -- subtract when "010" =>Y <= A - 1; -- decrement when "011" =>Y <= A + 1; -- increment when "100" =>Y <= not A; -- 1's complement when "101" =>Y <= A and B; -- bitwise AND when "110" =>Y <= A or B; -- bitwise OR when "111" =>Y <= A xor B; -- bitwise XOR when others =>Y <= (others =>'X'); конец корпуса; конец поведенческий;

История

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

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

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

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

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

ALU могут быть реализованы в виде механических, электромеханических или электронных схем, и в последние годы были проведены исследования в области биологических ALU. out (например, на основе актина ).

См. также

Ссылки

Дополнительная литература

Внешние ссылки

На Викискладе есть носители, относящиеся к Арифметико-логическим устройствам.
Последняя правка сделана 2021-06-11 16:15:28
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте