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

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

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

Сигналы [ править ]

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

лицо  ALU  является порт  (  - АЛУ подключение к внешней схеме:  : в подписанном ( 7 Downto 0 ); - операнд А Б : В подписан ( 7 Downto 0 ); - операнд B OP : в беззнаковом ( 2 Downto 0 ); - код операции Y : без подписи ( 7 вниз до 0 )); - результат операции end alu ;                            архитектура  поведенческого  из  АЛУ  является начинают  случай  ОП  это  - расшифровывает код операции и выполнить операцию:  когда  «000»  =>  Y  <=  + B ; - добавить, когда "001" => Y <= A - B ; - вычесть, когда «010» => Y <= A - 1 ; - уменьшение при "011" => Y <= A + 1 ; - приращение                               когда  "100"  =>  Y  <=  не  A ;  - дополнение до 1,  когда  "101"  =>  Y  <=  A  и  B ;  - побитовое И,  когда  "110"  =>  Y  <=  A  или  B ;  - поразрядное ИЛИ,  когда  "111"  =>  Y  <=  A  xor  B ;  - поразрядный XOR,  когда  другие  =>  Y  <=  ( others  =>  'X' ); конец  корпуса ; конец  поведенческий ;

История [ править ]

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

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

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

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

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

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

См. Также [ править ]

  • Сумматор (электроника)
  • Блок генерации адресов
  • Загрузка – магазин
  • Двоичный множитель
  • Блок исполнения

Ссылки [ править ]

  1. ^ а б А.П. Годсе; ДАГодсе (2009). «3». Цифровой логический дизайн . Технические публикации. С. 9–3. ISBN 978-81-8431-738-1.
  2. ^ a b Обучение и тренинг лидерства (LET) 2: Программный текст . Штаб, Управление армии. 2001. С. 371–.
  3. ^ а б А.П. Годсе; ДАГодсе (2009). «Приложение». Цифровые логические схемы . Технические публикации. стр. C – 1. ISBN 978-81-8431-650-6.
  4. ^ «1. Введение в компьютерную архитектуру - проектирование встроенного оборудования, 2-е издание [книга]» . www.oreilly.com . Проверено 3 сентября 2020 .
  5. ^ Горовиц, Пол ; Уинфилд Хилл (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), Мейерс, Роберт А. (редактор), «Механические вычисления: вычислительная сложность физических устройств» , Энциклопедия сложности и системной науки , Нью-Йорк, Нью-Йорк: Springer, стр. 5466– 5482, DOI : 10.1007 / 978-0-387-30440-3_325 , ISBN 978-0-387-30440-3, получено 2020-09-03
  10. ^ Линь, Чунь-Лян; Куо, Тинг-Ю; Ли, Вэй-Сянь (2018-08-14). «Синтез блока управления биокомпьютером будущего» . Журнал биологической инженерии . 12 (1): 14. DOI : 10,1186 / s13036-018-0109-4 . ISSN 1754-1611 . PMC 6092829 . PMID 30127848 .   
  11. ^ Герд Hg Moe-Behrens. «Биологический микропроцессор, или как построить компьютер с биологическими частями» .
  12. ^ Дас, Биплаб; Пол, Авиджит Кумар; Де, Дебашис (2019-08-16). «Нетрадиционный дизайн и вычисления логической арифметической единицы в квантовых клеточных автоматах Actin» . Микросистемные технологии . DOI : 10.1007 / s00542-019-04590-1 . ISSN 1432-1858 . 

Дальнейшее чтение [ править ]

  • Хван, Енох (2006). Цифровая логика и дизайн микропроцессора с VHDL . Томсон. ISBN 0-534-46593-5.
  • Столлингс, Уильям (2006). Компьютерная организация и архитектура: проектирование для производительности (7-е изд.). Пирсон Прентис Холл. ISBN 0-13-185644-8.

Внешние ссылки [ править ]