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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



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

Рис. 18.31. Блок микропрограммного управления

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

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

Рис. 18.32. Алгоритм микропрограммы операционного блока

Возникает вопрос — как же реализовать эти ветви алгоритма на одном ПЗУ? Для каждой из ветвей микропрограммы можно выделить отдельную область адресов ПЗУ, кратную двоичному числу, и тогда для перехода в эту область достаточно записать в счетчик старшие биты адреса. В младшие биты адреса при этом записываются нулевые значения. Обычно старшие разряды адреса микрокоманды совпадают с кодом команды микропроцессора, как это показано на рис. 18.33, и тогда для перехода на свою ветвь микропрограммы в счетчик можно записать непосредственно код команды микропроцессора из регистра команды RI.

Рис. 18.33. Размещение микропрограмм в ПЗУ

Для изменения содержимого счетчика можно использовать дополнительный бит, записанный в ПЗУ. Этот сигнал соединяется с входом параллельной записи двоичного счетчика с предварительной записью. Для того чтобы вернуться в начало микропрограммы, достаточно подать сигнал на вход сброса счетчика в исходное состояние ‘R’. В результате описанных действий разрядность микрокоманды увеличивается на два бита, и кроме битов, управляющих операционным блоком, появляются биты, управляющие самим блоком микропрограммного управления. Усовершенствованный блок микропрограммного управления приведен на рис. 18.34. В этой схеме биты, управляющие блоком микропрограммного управления, передаются по отдельным одноразрядным линиям.

Рис. 18.34. Усовершенствованный блок микропрограммного управления

Существует ряд команд микропроцессора, которые должны выполняться только при каком-либо условии. Например, при установленном признаке переноса ‘C’. Такие команды обычно реализуют условный переход на заданный адрес программы. Алгоритм выполнения команды условного перехода приведен на рис. 18.35.

Рис. 18.35. Алгоритм условного перехода.

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

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

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

6 бит 4 бит 1 бит 1 бит 8 бит 1 бит 1 бит 6 бит 1бит 1бит 1бит 1бит 1бит 1бит
АЛУ Адр. RG tmp1 tmp2 Const BUFin BUFout adr С N OV Z Jmp R
Управление операционным блоком Управление БМУ

Рис. 18.36. Формат микрокоманды микропроцессора

Структурная схема блока микропрограммного управления тоже изменится, и теперь она будет выглядеть так, как это показано на рис. 18.37.

Рис. 18.37. Структурная схема блока микропрограммного управления

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

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

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

Микропрограммирование

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

При изучении принципов работы ОЗУ и ПЗУ приводились временные диаграммы, которые необходимо сформировать, для того, чтобы записать или прочитать необходимые данные. Любую временную диаграмму, как это уже обсуждалось в предыдущей главе, формирует микропроцессор. Устройство микросхемы, на примере которой мы будем рассматривать формирование необходимых сигналов, было проанализировано при обсуждении операционного блока. По его структурной схеме (см. рис. 18.28) можно определить формат микрокоманды, управляющей этим блоком. Ее полный формат приведен на рис. 18.36. Для того чтобы разобраться в приводимых далее участках микропрограммы, желательно постоянно иметь перед собой временную диаграмму считывания команды микропроцессора, формат микрокоманды, схему операционного блока и список команд арифметического устройства.

Работа любого цифрового устройства начинается с заранее заданных начальных условий. Эти начальные условия в микропроцессоре устанавливаются специальным сигналом RESET (сброс), который формируется после подачи питания. Договоримся, что сигнал сброса микропроцессора будет записывать в регистр программного счетчика (PC) нулевое значение. Это условие справедливо не для всех микропроцессоров. Например, IBM-совместимые микропроцессоры при сбросе микросхемы записывают в свой программный счетчик значение F0000h, а процессоры 68HC11 фирмы freescale заносят в него содержимое ячейки памяти с адресом FFFFh.

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

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

Рис. 18.38. Временные диаграммы сигналов считывания однобайтных команд из памяти

Для того чтобы считать код операции из памяти, сначала необходимо адрес этой команды выставить на шине адреса системной шины микропроцессорной системы. Этот адрес хранится в счетчике команд (PC) микропроцессора. После сигнала сброса микропроцессора RESET в регистрах программного счетчика хранится нулевое значение. Скопируем его содержимое в регистр адреса (RA), выходы которого подключены к шине адреса. Так как его выходы подключены к выводам шины адреса микропроцессора, то на шине адреса появится именно этот адрес.

Листинг участка микропрограммы, который обеспечивает выдачу адреса из программного счетчика на шину адреса микропроцессорной системы, приведен в листинге 18.5.

Листинг 18.5 Копирование содержимого программного счетчика в регистр адреса

  Поля микрокоманды операционного блока
Описание АЛУ Адр. RG TMP1 TMP2 Константа BUF in BUF out
1) PCH -> TMP1 1111 1 1       1111 1111    
2) TMP1-> RAH 1000 1 0       1111 1111    
3) PCL -> TMP1 1111 1 1       1111 1111    
4) TMP1-> RAL 1000 1 0       1111 1111    

В первой микрокоманде АЛУ операционного блока микропроцессора не участвует, поэтому в соответствующее поле можно занести любой код. В примере, для определенности, в это поле записаны все единицы. Следующее поле микрокоманды определяет адрес регистра сверхоперативного запоминающего устройства, откуда будет осуществляться копирование информации. Ранее мы договорились, что в качестве старшего байта программного счетчика PCH мы будем использовать его девятый регистр. Именно этот адрес и записан в этом поле микрокоманды. В двоичном коде число девять записывается как 1001. Единица в поле TMP1 означает, что запись кода с выхода сверхоперативного запоминающего устройства осуществляется именно в этот регистр. Регистр TMP2 в данной микрокоманде не используется. Для этого мы записываем в соответствующее поле микрокоманды значение логического нуля. Константа в первой микрокоманде тоже не нужна и, так как мультиплексор подключен к девятому регистру, а, следовательно, вход константы отключен, то мы можем записать в поле константы что угодно. Для определенности заносим в это поле микрокоманды все единицы. Последние два бита микрокоманды закрывают шинный формирователь BUF.

В следующей микрокоманде осуществляется обратная операция. Теперь содержимое временного регистра TMP1 копируется в сверхоперативное запоминающее устройство, поэтому в данной операции участвует АЛУ. Для определения команд АЛУ используется таблица 18.2. В этой таблице передаче двоичной информации с входа A на выход АЛУ соответствует управляющий код 10001. Именно он и заносится в поле микрокоманды АЛУ. Старший байт регистра адреса является четырнадцатым регистром сверхоперативного запоминающего устройства, поэтому в поле Адр. RG занесено число четырнадцать — 1110. Операция записи в регистр сверхоперативного запоминающего устройства выбирается комбинацией бит TMP1 и TMP2, равной 00.

Третья и четвертая микрокоманды практически совпадают с первой и второй. Отличие заключается только в адресах регистров сверхоперативного запоминающего устройства. Здесь использованы младший регистр программного счетчика PCL (номер десять) — 1010 и младший регистр адреса RAL (номер тринадцать) — 1101.

Теперь на выводах шины адреса микропроцессора появился адрес текущей команды. Судя по временной диаграмме, приведенной на рис. 18.38, после выдачи адресной информации требуется сформировать нулевой потенциал на выводе сигнала чтения RD. Для этого в регистр управления CNTR запишем константу 1111 1101 (см. формат регистра управления CNTR, приведенный на рис. 18.27).

Листинг 18.6 Формирование нулевого потенциала на выводе микропроцессора RD

  Поля микрокоманды операционного блока
Описание АЛУ Адр. RG TMP1 TMP2 Константа BUF in BUF out
5) 11111101 -> TMP1 1111 1 1       1111 1101    
6) TMP1-> CNTR 1000 1 0       1111 1111    

После выполнения пятой и шестой микрокоманд, на временной диаграмме, приведенной на рис. 18.38, сигнал чтения системной памяти RD примет нулевое значение. В этом можно убедиться при помощи осциллографа. В пятой микрокоманде используется константа 1111 1101, которую необходимо записать в регистр управления. В качестве адреса регистра сверхоперативного запоминающего устройства в данной микрокоманде используется адрес константы (пятнадцать) — 1111.

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

Листинг 18.7 Чтение кода операции с шины данных микропроцессора

  Поля микрокоманды операционного блока
Описание АЛУ Адр. RG TMP1 TMP2 Константа BUF in BUF out
7) data -> RI 1111 1 1       1111 1111    

В седьмой микрокоманде открывается буфер шинного формирователя битом микрокоманды BUF in. Учитывая, что для выполнения операции копирования АЛУ на этот раз не требуется, то можно сразу же выбрать адрес назначения RI — двенадцать (1100). Операция записи в регистр сверхоперативного запоминающего устройства выбирается комбинацией бит TMP1 и TMP2, равной 00. Поля константы и управления АЛУ в данной микрокоманде не требуются, поэтому запишем в них единичные значения (хотя если записать туда другие значения, то действие микрокоманды от этого не изменится).

После запоминания кода операции в регистре RI, необходимо снять сигнал чтения с системной шины (выставить на этом выводе микропроцессора единичный потенциал). Для этого в регистр управления CNTR снова запишем константу 1111 1111.

Листинг 18.8 Формирование единичного потенциала на выводе микропроцессора RD

  Поля микрокоманды операционного блока
Описание АЛУ Адр. RG TMP1 TMP2 Константа BUF in BUF out
8) 11111111 -> TMP1 1111 1 1       1111 1111    
9) TMP1-> CNTR 1000 1 0       1111 1111    

Действие и формат этих микрокоманд практически не отличается от микрокоманд 5 и 6, поэтому назначение их полей приводиться не будет.

Прежде, чем перейти к дальнейшему выполнению микропрограммы, увеличим содержимое счетчика команд на 1, подготовившись тем самым к выполнению следующей команды микропроцессора.

Листинг 18.9 Увеличение содержимого программного счетчика на 1

  Поля микрокоманды операционного блока
Описание АЛУ Адр. RG TMP1 TMP2 Константа BUF in BUF out  
10) PCL -> TMP1 1111 1 1       1111 1111      
11) TMP1+1 -> PCL 1100 1 0       1111 1111      
12) PCH -> TMP1 1111 1 1       1111 1111      
13) TMP1+С-> PCH 1100 1 0       1111 1111      

До сих пор в листингах приводилось содержимое только той части микрокоманды, которая отвечает за работу операционного блока. Однако 11 и 13 микрокоманды не отличаются друг от друга. Отличие проявляется в части управления блоком микропрограммного управления. В результате по 11 команде на вход переноса PI арифметико-логического блока поступит уровень логической единицы, а в 13 команде к этому же входу будет подключен выход триггера хранения признака переноса, обеспечивая тем самым выполнение операции многоразрядного суммирования.

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

Листинг 18.10 Декодирование команды микропроцессора

  Поля микрокоманды блока микропрограммного управления
Описание Адр. ПЗУ С N OV Z Jmp R  
14) RI -> CT                

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

Теперь остается выполнить данную команду. Например, если это была команда копирования содержимого регистра R0 в аккумулятор A (MOV A,R0), то для ее выполнения будет достаточно буквально двух микрокоманд. Этот участок микропрограммы будет выглядеть так, как это приведено в листинге 18.11. В нем тоже приведена только часть микрокоманды, отвечающая за управление операционным блоком микропроцессора.

Листинг 18.11 Выполнение действия команды микропроцессора

  Поля микрокоманды операционного блока
Описание АЛУ Адр. RG TMP1 TMP2 Константа BUF in BUF out  
15) R0 -> TMP1 1111 1 1       1111 1111      
16) TMP1-> ACC 1000 1 0       1111 1111      

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

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

Рис. 18.39. Временная диаграмма выполнения команды JMP 1234

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

Листинг 18.12 Считывание первого байта адреса перехода

  Поля микрокоманды операционного блока
Описание АЛУ Адр. RG TMP1 TMP2 Константа BUF in BUF out
Выдать адрес первого байта адреса перехода
15) PCH -> TMP1 1111 1 1       1111 1111    
16) TMP1-> RAH 1000 1 0       1111 1111    
17) PCL -> TMP1 1111 1 1       1111 1111    
18) TMP1-> RAL 1000 1 0       1111 1111    
Сформировать низкий уровень сигнала чтения RD
19) 11111101 -> TMP1 1111 1 1       1111 1101    
20) TMP1-> CNTR 1000 1 0       1111 1111    
Запомнить первый байт адреса перехода в регистре TMP2
21) data -> TMP2 1111 1 1       1111 1111    
Сформировать высокий уровень сигнала чтения RD
22) 11111111 -> TMP1 1111 1 1       1111 1111    
23) TMP1-> CNTR 1000 1 0       1111 1111    
Перейти к следующему байту команды
24) PCL -> TMP1 1111 1 1       1111 1111    
25) TMP1+1 -> PCL 1100 1 0       1111 1111    
26) PCH -> TMP1 1111 1 1       1111 1111    
27) TMP1+С-> PCH 1100 1 0       1111 1111    

В результате выполнения этого участка микропрограммы первый байт адреса перехода оказывается запомненным в регистре временного хранения TMP2. Теперь считаем второй байт адреса перехода. Эта операция, а также переход на новый адрес выполняемой команды приведен в листинге 18.13

Листинг 18.13 Считывание второго байта адреса перехода

  Поля микрокоманды операционного блока
Описание АЛУ Адр. RG TMP1 TMP2 Константа BUF in BUF out
Выдать адрес второго байта адреса перехода
28) PCH -> TMP1 1111 1 1       1111 1111    
29) TMP1-> RAH 1000 1 0       1111 1111    
30) PCL -> TMP1 1111 1 1       1111 1111    
31) TMP1-> RAL 1000 1 0       1111 1111    
Сформировать низкий уровень сигнала чтения RD
32) 11111101 -> TMP1 1111 1 1       1111 1101    
33) TMP1-> CNTR 1000 1 0       1111 1111    
Занести второй байт адреса перехода в старший регистр программного счетчика PCH
34) data -> PCH 1111 1 1       1111 1111    
Сформировать высокий уровень сигнала чтения RD
35) 11111111 -> TMP1 1111 1 1       1111 1111    
36) TMP1-> CNTR 1000 1 0       1111 1111    
Занести первый байт адреса перехода в младший регистр программного счетчика PCL
37) TMP2 -> PCL 0001 0 1       1111 1111    

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

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

Итак, подведем итоги

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

 

 



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 949; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.5.239 (0.044 с.)