Инструкции отправляются из ОЗУ для выполнения процессором.

Обновлено: 21.11.2024

ЦП

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

Слова могут использоваться для хранения данных или инструкций. Программа состоит из последовательности слов, каждое из которых представляет одну «инструкцию», соответствующую одной элементарной операции, которую ЦП может выполнить с помощью исполнительного модуля (например, целочисленного модуля, модуля с плавающей запятой, модуля ветвления).

Как ЦП определяет одну конкретную инструкцию? Он отправляет адрес в память (помещая требуемое значение на адресную шину). Это двоичное число — последовательность битов, каждый из которых равен 0 или 1, — которая представляет собой последовательность низкого и высокого напряжения на наборе проводов, соединяющих ЦП с памятью программ.

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

Регистр, в котором хранится адрес следующей инструкции, называется программным счетчиком. Обычно после выполнения каждой инструкции программный счетчик увеличивается на единицу (отсюда и использование счетчика слов), так что он содержит адрес следующей инструкции. Следовательно, программа состоит в основном из списка инструкций; а программный счетчик позволяет ЦП проходить по списку, выполняя одну инструкцию за другой. Таким образом, скрытой, но подразумеваемой частью каждой инструкции является изменение программного счетчика, чтобы он содержал адрес следующей инструкции.

Важно различать адрес, по которому хранится инструкция, и содержимое этого адреса.

Регистры

ЦП также содержит регистры в целочисленном блоке, которые можно считывать и записывать. Они называются регистрами общего назначения.

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

Счетчик программ ПК (указывает на следующую инструкцию)
IR Instruction Rgeister ("Значение" текущей инструкции)
Регистр состояния SR (флаги состояния после выполнения инструкций)
SP Stack Указатель (указывает на следующее свободное место в стеке)
Кадр стека SF (используется для поиска переменных программы)

Счетчик программ

ЦП содержит ряд регистров специального назначения; самый важный из них называется программным счетчиком. Счетчик программ содержит адрес следующей инструкции.

Счетчик программ обычно имеет такую ​​же ширину (количество битов), что и адресная шина. В компьютерных системах довольно часто имеется больше памяти, чем фактической памяти. Если бы использовались только 13 бит, память могла бы содержать 8 КБ инструкций. Если бы использовались 24 бита, можно было бы адресовать 16 МБ памяти.

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

Помимо памяти, в которой хранятся инструкции (память программ), есть также память, в которой хранятся данные. Память данных обычно представляет собой оперативную память (RAM) (или иногда RWM, память для чтения/записи), в отличие от памяти программ, которая может быть либо RAM, либо ROM.

Самый распространенный способ выполнения программы — от одной инструкции к другой в памяти.

Счетчик программ автоматически увеличивается на единицу после каждой инструкции, чтобы можно было загрузить следующую инструкцию. Однако бывают ситуации, когда вы хотите перенести выполнение программы куда-то еще. Например, если вы хотите для какой-то цели создать бесконечный цикл, в котором компьютер многократно выполняет один и тот же набор инструкций, вы захотите вернуться к началу. Это означает загрузку счетчика программ чем-то другим. Мы рассмотрим различные способы управления следующей инструкцией; то есть управление потоком программы.

Чтение и письмо

Если ЦП выдает адрес, а затем содержимое этого адреса появляется в строках данных (например, в виде инструкции), это операция чтения. (Примечание. В гарвардской архитектуре инструкции в памяти программ можно только читать, они не могут быть записаны; эта память фактически является ПЗУ — памятью только для чтения.)

Возможны два вида операций; чтение, при котором ЦП указывает адрес в памяти данных, устанавливает провод управления чтением/записью в положение «чтение», и данные по этому адресу появляются на шине данных.

ЦП также может записывать данные в память данных; в этом случае ЦП указывает как адрес, так и данные, и устанавливает провод управления чтением/записью на «запись», после чего данные записываются по указанному адресу. (Чтение данных соответствует активации вывода разрешения на трехуровневом выходе ЦП, подключенном к шине данных; запись данных соответствует активации защелки.

Гарвард и Архитектура фон Неймана

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

Память программ и память данных могут быть совершенно отдельными (они могут даже использовать ОЗУ с разной шириной, например, 14 бит для программных инструкций и 8 бит для данных) и с разным общим количеством адресов. Это пример гарвардской архитектуры. Он используется в основном процессорами микроконтроллеров.

Другой базовый способ проектирования компьютера, и на сегодняшний день наиболее распространенный, заключается в использовании единой системы памяти как для программы, так и для данных. Система адресации используется как для инструкций (хранящихся в виде одного или двух 16-битных чисел), образующих программу, так и для данных различного типа (8-битные байты или более длинные слова). Это называется архитектурой фон Неймана .

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

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

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

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

Архитектура фон Неймана используется для большинства компьютеров; он позволяет хранить и запускать различные программы. Гарвардская архитектура больше подходит для микроконтроллера; при использовании он будет запускать только одну программу, которая будет храниться в ПЗУ в его программной памяти. Кроме того, в некоторых случаях может оказаться полезной дополнительная скорость без сложного сложного контроллера кэша.

Для ускорения работы процессора многие компьютеры используют так называемую "конвейерную систему". Это означает, что вы делите операцию инструкции на отдельные части, которые должны выполняться одна за другой; но вы договариваетесь, что пока выполняется одна часть одной инструкции, выполняются более ранние части более поздних инструкций. Например, рассмотрим четырехступенчатый конвейер; если каждый этап занимает 100 нс, то для полной обработки инструкции требуется всего 400 нс; но на самом деле производительность машины может составлять одну инструкцию каждые 100 нсек, поскольку четыре разные части четырех разных инструкций выполняются одновременно.

Итак, пока выполняется одна инструкция, другая запрашивает исходные данные, результаты предыдущей операции записываются обратно, а еще одна новая инструкция извлекается.


Процессоры RISC и CISC

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

В процессоре CISC одна инструкция может выполнять целую последовательность операций, например, вы можете умножить два числа с плавающей запятой и добавить третье (a + b*c) в одной инструкции; другие процессоры выполняют еще более сложные действия за одну инструкцию.

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

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

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

На уровне машинного языка работа ЦП довольно проста (хотя и очень сложна в деталях). ЦП выполняет программу, которая хранится в основной памяти в виде последовательности инструкций машинного языка. Он делает это, многократно считывая или извлекая инструкцию из памяти, а затем выполняя или выполняя эту инструкцию. Этот процесс — выборка инструкции, ее выполнение, выборка другой инструкции, ее выполнение и так далее до бесконечности — называется циклом выборки-и-выполнения. За одним исключением, которое будет рассмотрено в следующем разделе, это все, что когда-либо делал ЦП. (На самом деле все это несколько сложнее в современных компьютерах. Типичный процессорный чип в наши дни содержит несколько «ядер» ЦП, что позволяет ему выполнять несколько инструкций одновременно. А доступ к основной памяти ускоряется за счет «кэшей» памяти, которые могут доступ к ним осуществляется быстрее, чем к основной памяти, и они предназначены для хранения данных и инструкций, которые, вероятно, скоро потребуются ЦП. Однако эти сложности не меняют основной операции.)

ЦП содержит арифметико-логическое устройство или АЛУ, которое является частью процессора и выполняет такие операции, как сложение и вычитание. Он также содержит небольшое количество регистров, которые представляют собой небольшие блоки памяти, способные хранить одно число. Типичный ЦП может иметь 16 или 32 регистра «общего назначения», в которых хранятся значения данных, которые сразу доступны для обработки, и многие инструкции машинного языка ссылаются на эти регистры. Например, может быть инструкция, которая берет два числа из двух указанных регистров, складывает эти числа (используя АЛУ) и сохраняет результат обратно в регистр. И могут быть инструкции для копирования значения данных из основной памяти в регистр или из регистра в основную память.

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

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

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

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

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

Доступ к регистру инструкций к регистру состояния позволяет выполнять условные переходы или условные подпрограммы.

Связанные термины:

Скачать в формате PDF

Об этой странице

Простые встроенные процессоры

8.3.3 Регистр инструкций

Регистр инструкций (IR) имеет те же часы и сигналы сброса, что и ПК, а также тот же интерфейс к шине (IR_bus), определенный как std_logic_vector типа INOUT. IR также имеет еще два управляющих сигнала, первый из которых представляет собой команду на загрузку регистра команд (IR_load), а второй — на загрузку требуемого адреса на системную шину (IR_address). Последнее соединение — это декодированный код операции, который должен быть отправлен на системный контроллер. Это определяется как простое целое число без знака того же размера, что и основная системная шина. Базовый VHDL для объекта IR задается следующим образом:

2 используйте ieee . стандартная_логика_1164 . все;

3 использовать работу. процессор_функции . все;

6 clk : в std_logic;

7 nrst : в std_logic;

8 ir_load : в std_logic;

9 ir_valid : в std_logic;

10 ir_address : в std_logic;

11 ir_opcode : выходной код операции;

12 ir_bus : inout std_logic_vector (n −1 до 0)

14 конечных объектов ir;

Функция IR состоит в том, чтобы декодировать код операции в двоичной форме и затем передать его блоку управления. Если IR_valid низкий, значение шины должно быть установлено на Z для всех битов. Если сигнал сброса (nsrt) низкий, то внутреннее значение регистра должно быть установлено на все 0.

1 архитектура rtl –

3 signal ir_internal : std_logic_vector (n −1 до 0);

6, когда ir_valid = 1, иначе (другие => z);

8 процесс (clk, nrst)

10, если nrst = 0, то

11 ir_internal 0);

12 elsif Rising_Edge (clk), затем

13, если ir_load = 1, то

18-конечная архитектура rtl;

Обратите внимание, что в этом VHDL мы использовали предопределенную функцию Decode из ранее определенного пакета processing_functions. Это рассмотрит верхние 4 бита адреса, переданного IR, и декодирует соответствующий код операции для передачи контроллеру.

Архитектура PIC

5.2.2 Выполнение инструкции

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

Если, например, используется инструкция MOVLW (переместить литерал в W), линии управления будут настроены на передачу литерального операнда в W через литеральную шину данных в мультиплексор и АЛУ. Если указана инструкция MOVWF, управляющие линии будут настроены на копирование содержимого W в указанный файловый регистр через внутреннюю шину данных. Операндом будет требуемый адрес файлового регистра (от 00 до 4F). Если мы посмотрим на коды инструкций «перемещения», приведенные в наборе инструкций, мы увидим разницу в структуре кода для трех инструкций перемещения:

MOVLW k = 11 00xx кккк кккк

MOVWF f = 00 0000 1ffff ffff

MOVF f,d = 00 1000 dfff ffff

Как работают микрокомпьютеры

Блок управления

ЦП также имеет несколько других регистров, в том числе регистр инструкций (IR); счетчик программ (ПК), также называемый счетчиком команд; и адресный регистр памяти (MAR), также называемый адресным буфером.

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

ПК на самом деле является счетчиком и регистром. Он хранит двоичное слово, которое используется в качестве адреса для доступа к инструкциям в программе. Если программа начинается с инструкции, хранящейся в ячейке памяти 43, ПК сначала загружается с адресом 43. Адрес в ПК применяется к памяти, вызывая выборку и выполнение инструкции в ячейке 43. После того, как инструкция выполнена, ПК увеличивается (добавляется 1) к следующему адресу в последовательности, или 44. Инструкции в программе хранятся в последовательных ячейках памяти.

MAR или буфер адресов также хранит адрес, который ссылается на память. Этот регистр напрямую управляет адресной шиной и декодером адреса памяти в ОЗУ или ПЗУ. MAR получает ввод от ПК, когда требуется доступ к инструкции (см. рис. 6.7). MAR также может быть загружен с адресом, который используется для доступа к словам данных, хранящимся в памяти. Чтобы получить слово данных, используемое в арифметической операции, MAR загружается двоичным словом, которое указывает на расположение этого слова в ОЗУ. Этот адрес часто является частью инструкции.

Рисунок 6.7. Счетчик программ определяет адрес в памяти, к которому осуществляется доступ.

Важно отметить, что ПК и MAR (адресный буфер) имеют фиксированную длину в определенное количество битов. И это ограничивает объем памяти, к которой можно получить доступ. Например, при 16-битном адресном регистре адресная шина имеет 16 бит для адресации ОЗУ и ПЗУ. С 16 битами можно адресовать максимум 2 16 = 65 536 слов.

Стековый регистр — это 16-разрядный или более крупный регистр, используемый для адресации выбранной области ОЗУ, известной как стек. Эта память используется для хранения содержимого регистров и информации о состоянии при использовании подпрограмм и прерываний.

Работа микроконтроллера

2.1.3 Регистр инструкций и декодер

Для выполнения инструкции процессор копирует код инструкции из памяти программ в регистр инструкций (IR). Затем он может быть декодирован (интерпретирован) декодером команд, который представляет собой комбинационный логический блок, который настраивает линии управления процессором по мере необходимости. Эти линии управления не показаны явно на блок-схеме, так как они идут ко всем частям микросхемы и сделали бы ее слишком сложной. В PIC код инструкции включает операнд (рабочие данные), который может быть буквальным значением или адресом регистра. Например, если литерал (число), указанный в инструкции, должен быть загружен в рабочий регистр (W), он помещается на внутреннюю шину данных, а линии разрешения защелки регистра W активируются синхронизацией и логикой управления.Внутреннюю шину данных можно увидеть на блок-схеме производителя ( рис. 1-1 в техпаспорте PIC 16F84A).

Компьютерный дизайн

5.4.3 Работа простой машины

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

Фаза 1 – выборка инструкции

Блок управления генерирует управляющие сигналы, которые копируют байт инструкции из памяти в регистр инструкций, IR. Адрес этой инструкции находится в Счетчике программ, ПК.

Фаза 2. Выполнение инструкции

8 бит в IR подключаются к блоку управления. Эти 8 бит определяют последовательность управляющих сигналов, которые генерирует блок управления. Последовательность управляющих сигналов, генерируемых блоком управления, вызывает выполнение инструкции. Последовательность заканчивается запуском фазы 1, поэтому следующая инструкция загружается в IR.

Блок управления представляет собой сложную последовательную схему, имеющую входы от ИК, которые определяют последовательность управляющих сигналов, генерируемых блоком управления. Системный тактовый сигнал определяет синхронизацию всех этих управляющих сигналов. Существует большое количество управляющих сигналов. Таким образом, будет сигнал управления, подключенный к входу разрешения буфера с тремя состояниями, который соединяет регистр с шиной. Будут другие сигналы, которые подключены к входу загрузки каждого регистра, что приведет к загрузке этого регистра с шины. Еще другие сигналы будут поступать в сигналы управления ALU_mode ALU, заставляя ALU быть настроенным на выполнение конкретной арифметической или логической операции. Другой управляющий сигнал подключается к входу WriteEnable памяти, определяя, будет ли память читать или писать.

Эти сигналы будут устанавливаться один за другим, создавая таким образом последовательность управляющих сигналов, которые вызывают выборку инструкции в IR и ее последующее выполнение. Например, если набор битов в IR представляет собой инструкцию по копированию данных из одного регистра в другой, последовательность управляющих сигналов будет аналогична описанной в разделе 5.3.

Блок управления — самый сложный из основных компонентов вычислительной машины. Мы рассмотрим его конструкцию в главе 13.

Микропроцессоры

15.4.3.2 Регистр инструкций

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

Блок управления

13.7.2 Выбор последовательности

Последовательность CROM, необходимая для выполнения такой инструкции, как ld a ,( hl ), определяется кодом операции, хранящимся в регистре инструкций IR компьютера. Очевидной возможностью является использование содержимого IR в качестве адреса CROM, с которого начинается последовательность управляющих сигналов для этой инструкции. То есть загружаем МАШИНУ с ИК. Сразу распознаем проблему: два кода операции могут отличаться численно на единицу. Таким образом, 0×57 и 0×58 оба могут быть допустимыми кодами операций в компьютере, поэтому последовательность для выполнения инструкции с кодом операции 0×57 должна занимать только одно место в CROM. Существует простое решение: ячейка CROM 0×57 будет содержать следующий адрес, который ссылается на неиспользуемую ячейку в CROM, где может быть размещена последовательность любой длины. Мы примем это решение. Теперь возникает вопрос, как реализовать фазу выборки инструкций компьютерной операции?

Например, мы разработаем содержимое CROM таким образом, чтобы последовательность выборки инструкций занимала ячейки CROM 0×1E и 0×1F. Предполагается, что эта последовательность управляющих сигналов копирует следующий код операции из ОЗУ в регистр инструкций и в адресный регистр CROM. В конце каждой последовательности выполнения поле «Следующий адрес» будет иметь значение 0×1E, так что начнется последовательность для получения кода операции следующей инструкции. Эта схема показана на рис. 13.9. Для простоты предполагается, что существует только четыре кода операции, от 0×00 до 0×03.

Рисунок 13.9. Содержимое CROM для микропрограммного контроллера

Запустите программу CROMA.exe и нажмите Включить выборку в меню. Это загрузит в CROM данные, показанные на рис. 13.9, и загрузит адресный регистр CROM со значением 0×1E.Медленно нажмите кнопку «Шаг», чтобы увидеть, как последовательность выборки копирует код операции из ОЗУ, а затем введите соответствующую последовательность выполнения. При желании вы можете изменить программный код в ОЗУ, нажав на ОЗУ в меню. (Помните, что действительными кодами операции являются только от 00 до 03.)

Практический пример: проектирование системы с использованием сердцевины Gumnut

Выполнение инструкции перехода

Процедура выполнения инструкций перехода показана ниже. В случае инструкции jmp процедура просто копирует целевой адрес из регистра инструкций в программный счетчик. В случае инструкции jsb перед обновлением счетчика программ процедура сначала копирует текущее значение счетчика программ в позицию стека, индексированную SP, а затем увеличивает SP. Приращение выполняется с помощью арифметики по модулю. Если вызовы подпрограмм вложены слишком глубоко, более ранний адрес возврата заменяется более поздними адресами. Gumnut не проверяет это, так как не имеет механизма для обработки ошибки. Скорее, он полагается на программиста или компилятора, чтобы избежать ошибки.

процедура Perform_jump

начать

случай IR_jump_fn

когда jump_fn_jmp =>

когда jump_fn_jsb =>

SP := (SP + 1) mod stack_depth;

когда другие =>

отчет «Логическая ошибка программы в интерпретаторе»

серьезный сбой;

конец регистра;

завершить процедуру Perform_jump;

Процессор

ХАРВИ М. ДЕЙТЕЛЬ, БАРБАРА ДЕЙТЕЛЬ, Введение в обработку информации, 1986 г.

Цикл выполнения инструкции

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

Предположим, что счетчик инструкций содержит адрес 5000. Компьютер выбирает команду из ячейки 5000 и помещает ее в другой специальный регистр ЦП, называемый регистром инструкций. Электронные компоненты компьютера сконструированы таким образом, что компьютер может определить, какой тип инструкции находится в регистре команд — сложение, вычитание, операция ввода, операция вывода, операция редактирования, сравнение и т. д. на. Если регистр команд компьютера содержит команду умножения, такую ​​как

Инструкция состоит в том, чтобы умножить 4-байтовое число, начинающееся в ячейке 6000, на 3-байтовое число, начинающееся в ячейке 7500, и поместить результат в 4-байтовое поле по адресу 6000.

ЦП работает следующим образом. Сначала он извлекает 4-байтовое число из ячеек с 6000 по 6003 и загружает его в регистр АЛУ. Затем он извлекает 3-байтовое число из ячеек с 7500 по 7502 и загружает его в другой регистр АЛУ. Произведение двух значений в регистрах АЛУ затем вычисляется и заносится в третий регистр АЛУ. Затем ЦП сохраняет этот результат обратно в 4-байтовое поле, начиная с ячейки 6000. (Если в результате умножения получается число, превышающее четыре байта, произошла ошибка переполнения. Большинство компьютеров завершают программу при возникновении такой серьезной ошибки. . По этой причине переполнение называется фатальной ошибкой).

Короче говоря, большинство компьютеров используют следующую схему:

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

Выберите данные для обработки и поместите их в регистры ALU.

Выполните указанную операцию.

Сохранить результат операции обратно в основное хранилище.

Зачем весь этот обмен инструкциями и данными? Почему бы просто не выполнять расчеты прямо в оперативной памяти компьютера?

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

Аналогичным образом операции с данными могут выполняться только в ЦП, поэтому данные переносятся из основного хранилища в ЦП. Он остается там, пока выполняется операция, и возвращается в основное хранилище после завершения операции. Электроника, необходимая для выполнения операций, загружена почти так же, как и операционная в больнице.

Мы разделим наши микроархитектуры на две взаимодействующие части: путь к данным и элемент управления. Datapath работает со словами данных.Он содержит такие структуры, как память, регистры, АЛУ и мультиплексоры. MIPS — это 32-битная архитектура, поэтому мы будем использовать 32-битный путь данных. Блок управления получает текущую инструкцию от канала данных и сообщает каналу данных, как выполнить эту инструкцию. В частности, блок управления выдает сигналы выбора мультиплексора, включения регистра и записи в память для управления работой тракта данных.

Хороший способ спроектировать сложную систему – начать с аппаратного обеспечения, содержащего элементы состояния. Эти элементы включают в себя память и архитектурное состояние (программный счетчик и регистры). Затем добавьте блоки комбинационной логики между элементами состояния, чтобы вычислить новое состояние на основе текущего состояния. Инструкция читается из части памяти; загружать и сохранять инструкции, а затем читать или записывать данные из другой части памяти. Следовательно, часто бывает удобно разделить общую память на две меньшие по размеру области памяти, одна из которых содержит инструкции, а другая — данные. На рис. 7.1 показана блок-схема с четырьмя элементами состояния: программным счетчиком, регистровым файлом и памятью инструкций и данных.

Рисунок 7.1. Элементы состояния процессора MIPS

На рис. 7.1 жирные линии используются для обозначения 32-битных шин данных. Средние строки используются для обозначения более узких шин, таких как 5-битные адресные шины в файле регистров. Узкие синие линии используются для обозначения управляющих сигналов, таких как разрешение записи в регистровый файл. Мы будем использовать это соглашение на протяжении всей главы, чтобы не загромождать диаграммы шириной шины. Кроме того, элементы состояния обычно имеют вход сброса, чтобы перевести их в известное состояние при запуске. Опять же, чтобы не загромождать, этот сброс не отображается.

счетчик программ – это обычный 32-битный регистр. Его вывод, PC, указывает на текущую инструкцию. Его вход, PC′, указывает адрес следующей инструкции.

Память инструкций имеет один порт чтения. 1 Он принимает входной 32-битный адрес инструкции, A, и считывает 32-битные данные (т. е. инструкцию) с этого адреса в выходные данные чтения, RD.

32-элементный × 32-битный регистровый файл имеет два порта чтения и один порт записи. Порты чтения принимают входные 5-битные адреса, A1 и A2, каждый из которых указывает один из 2 5 = 32 регистров в качестве исходных операндов. Они считывают 32-битные значения регистров в выходные данные чтения RD1 и RD2 соответственно. Порт записи принимает входной 5-битный адрес, A3; 32-битный ввод данных для записи, WD; вход разрешения записи, WE3; и часы. Если разрешение записи равно 1, файл регистров записывает данные в указанный регистр по переднему фронту тактового импульса.

У памяти данных есть один порт чтения/записи. Если разрешение записи, WE, равно 1, он записывает данные WD в адрес A по переднему фронту тактового импульса. Если разрешение записи равно 0, адрес A считывается в RD.

Сброс ПК

По крайней мере, программный счетчик должен иметь сигнал сброса, чтобы инициализировать его значение при включении процессора. Процессоры MIPS инициализируют ПК до 0xBFC00000 при сбросе и начинают выполнение кода для запуска операционной системы (ОС). Затем ОС загружает прикладную программу по адресу 0x00400000 и начинает ее выполнение. Для простоты в этой главе мы сбросим ПК на 0x00000000 и поместим туда наши программы.

Память инструкций, регистровый файл и память данных читаются комбинационно. Другими словами, если адрес изменяется, новые данные появляются в RD после некоторой задержки распространения; часы не задействованы. Они пишутся только по переднему фронту часов. Таким образом, состояние системы изменяется только на границе тактовой частоты. Адрес, данные и разрешение на запись должны быть установлены за некоторое время до перепада тактовых импульсов и должны оставаться стабильными до времени удержания после перепада тактовых импульсов.

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

Практический пример: проектирование системы с использованием сердцевины Gumnut

22.1 Обзор Gumnut

22.1.1 Архитектура набора инструкций

В таблице 22.1 приведен полный набор инструкций Gumnut в формате языка ассемблера.В таблице rd и rs — регистры, op2 — регистр ( rs2 ) или непосредственное значение ( immed ), count – это количество позиций, на которые нужно сдвинуть или повернуть, disp – это смещение от адреса следующей инструкции, а addr — целевой адрес перехода.

Таблица 22.1. Набор инструкций Gumnut

< td >jsb addr< tr>

который читает из регистра контроллера ввода-вывода по адресу 156 в r3. Точно так же, если регистр содержит адрес, к которому мы хотим получить доступ, мы можем использовать смещение 0. Опять же, наш ассемблер позволяет нам подразумевать смещение 0 путем пропуска, как в инструкции

Первая из инструкций перехода, jmp, безоговорочно прерывает последовательный поток выполнения, устанавливая ПК на адрес, указанный в инструкции. Вторая инструкция перехода, jsb, позволяет нам вызывать подпрограмму. Она используется в паре с инструкцией ret, возвращающей из подпрограммы к месту вызова. Инструкция jsb помещает увеличенное значение ПК (адрес возврата) во внутренний стек, а затем обновляет ПК адресом подпрограммы, указанным в инструкции. Команда ret извлекает сохраненный адрес возврата из стека на ПК. Стек адресов возврата может содержать до восьми записей. Инструкции jmp и jsb не влияют на значения битов Z и C.

Остальные прочие инструкции относятся к прерываниям. Команда разрешения прерывания ( enai ) позволяет процессору реагировать на события прерывания, а инструкция отключения прерывания ( disi ) предотвращает ответ процессора.Когда процессор отвечает на событие прерывания, он сохраняет увеличенное значение PC и значения кодов условий Z и C в специальных регистрах, запрещает дальнейшие прерывания, а затем передает управление обработчику прерывания по адресу 1. Обработчик прерывания завершает работу с помощью инструкция возврата из прерывания ( reti ), а не инструкция ret. Команда reti восстанавливает сохраненные значения PC и кода состояния и повторно разрешает прерывания. Команда ожидания приостанавливает выполнение до тех пор, пока не произойдет прерывание, а инструкция ожидания переходит в режим ожидания с низким энергопотреблением до тех пор, пока не произойдет прерывание. Разница в том, что ЦП обычно может немедленно реагировать на прерывание при приостановке с помощью инструкции ожидания, тогда как для включения питания из инструкции ожидания может потребоваться некоторое время. Инструкции этой группы, кроме инструкции reti, не влияют на значения битов Z и C.

Все инструкции в Gumnut имеют длину 18 бит и кодируются в нескольких форматах, как показано на рис. 22.1. Крайние левые биты вместе с кодом функции (fn) образуют код операции. Кодирование, используемое для функциональных кодов, показано в таблице 22.2. Команды, в которых указаны номера регистров, имеют числа, закодированные в 3-битной двоичной форме в полях rd, rs и rs2 слова инструкции. . Точно так же инструкции, которые задают немедленные значения, смещения или смещения, имеют эти значения в двоичном коде в самых правых 8 битах командного слова. Заштрихованные части командного слова в каждом формате представляют биты, которые игнорируются.

Читайте также:

Арифметические и логические инструкции
добавить rd, rs, op2 Добавить rs и op2 , в результате получится rd
addc rd, rs, op2 Добавить rs и op2 с переносом, в результате получится rd
sub < em>rd, rs, op2 Вычесть op2 из rs , результатом будет rd
subc rd, rs, op2 Вычесть op2 из rs с переносом, получится rd
и rd, rs, op2 Логическое И rs и op2 , результат rd
или rd, rs, op2 Логическое ИЛИ rs и op2 , результат rd
xor rd, rs, op2 Логическое исключающее ИЛИ < эм>рс< /em> и op2 , результатом будет rd
mask rd, rs, op2 Логическое И rs и НЕ op2 , приводит к rd< /em>
Инструкции по смене
shl rd , rs, count Сдвинуть значение rs влево на count места, результат rd
shr rd, rs, count Сдвинуть значение rs вправо на количество мест, в результате получится rd
rol rd, rs, count Повернуть значение rs влево количество мест, результат rd
ror rd, rs , count Повернуть значение rs вправо на count места, в результате получится rd
Инструкции по работе с памятью и вводом-выводом
ldm rd, (rsсмещение Загрузить в rd из памяти
stm rd, (rsсмещение < /td>Сохранить в памяти из rd
inp rd, (rsсмещение Ввод в rd из регистра контроллера ввода
out rd, (rsсмещение Вывод в регистр выходного контроллера из rd
Инструкции по ответвлениям
bz ± disp Ветвление, если Z установлено
bnz ± disp Ветвление, если Z не установлено
bc ± disp Переход, если C установлен
bnc ± < em>disp Ветвь, если C не установлена
Инструкции перехода
jmp addr Перейти к addr
Перейти к подпрограмме по адресу addr
< em>Разные инструкции
retВозврат из подпрограммы
retiВозврат из прерывания
enaiВключить прерывания
disiОтключить прерывания
waitЖдать прерывания
stbyВходить в режим ожидания с низким энергопотреблением