В вычислении, арифметико-логический блок (ALU ) является комбинационным цифровая схема, которая выполняет арифметические и побитовые операции с целым двоичными числами. В этом отличие от модуля с плавающей запятой (FPU), который работает с числами с плавающей запятой . Это фундаментальный строительный блок многих типов вычислительных схем, включая центральный процессор (ЦП) компьютеров, FPU и графические процессоры (GPU).
Входными данными для ALU являются данные, с которыми нужно работать, называемые операндами, и код, указывающий операцию, которая должна быть выполнена; выход ALU - результат выполненной операции. Во многих проектах ALU также имеет входы или выходы состояния, или и то, и другое, которые передают информацию о предыдущей или текущей операции, соответственно, между ALU и внешними регистрами состояния.
ALU имеет множество входных и выходных цепей, которые являются используемыми электрическими проводниками для передачи цифровых сигналов между ALU и внешней схемой. Когда ALU работает, внешние схемы подают сигналы на входы ALU, и в ответ ALU вырабатывает и передает сигналы во внешние схемы через свои выходы.
Базовый ALU имеет три параллельных шины данных , состоящих из двух входных операндов (A и B) и вывода результата (Y). Каждая шина данных представляет собой группу сигналов, передающих одно целое двоичное число. Обычно ширина шины A, B и Y (количество сигналов, составляющих каждую шину) идентична и соответствует собственному размеру слова внешней схемы (например, инкапсулирующего ЦП или другого процессора).
Входной код операции - это параллельная шина, которая передает в АЛУ код выбора операции, который представляет собой пронумерованное значение, указывающее желаемую арифметическую или логическую операцию, которая должна выполняться АЛУ. Размер кода операции (его ширина шины) определяет максимальное количество различных операций, которые может выполнять ALU; например, четырехбитовый код операции может определять до шестнадцати различных операций ALU. Как правило, код операции ALU отличается от кода операции машинного языка, хотя в некоторых случаях он может быть напрямую закодирован как битовое поле внутри кода операции машинного языка.
Выходы состояния - это различные индивидуальные сигналы, передающие дополнительную информацию о результате текущей операции ALU. У ALU общего назначения обычно есть сигналы состояния, такие как:
В конце каждой операции ALU выходные сигналы состояния обычно хранятся во внешних регистрах, чтобы сделать их доступными для будущих операций ALU (например, для реализации арифметики с множественной точностью ) или для управления условным ветвлением. Набор битовых регистров, в которых хранятся выходные данные состояния, часто рассматривается как один многобитовый регистр, который называется «регистром состояния» или «регистром кода состояния».
Входы состояния позволяют сделать дополнительную информацию доступной для ALU при выполнении операции. Обычно это единственный бит переноса, который является сохраненным переносом из предыдущей операции ALU.
АЛУ - это схема комбинационной логики, означающая, что ее выходы будут изменяться асинхронно в ответ на изменения входа. В нормальном режиме работы стабильные сигналы подаются на все входы ALU и, когда проходит достаточно времени (известное как «задержка распространения ») для распространения сигналов через схему 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. Простые 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 обычно реализуется либо как автономная интегральная схема (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 (например, на основе актина ).
На Викискладе есть носители, относящиеся к Арифметико-логическим устройствам. |