Несмотря на то что показанный на Рис. 4.3 счетчик команд является 13-битным регистром, способным адресовать 213 = 8192 команды, в микроконтроллере PIC16F84 задействованы только младшие 10 бит (210 = 1024). Если программа попытается перейти по адресу, находящемуся вне этого диапазона, то адрес «свернется» по границе памяти программ. В любом случае счетчик команд очищается при сбросе микроконтроллера, т. е. первая выполняемая команда всегда располагается по адресу h’000’. Этот адрес называется
Рис. 4.3.
Конвейер
Конвейер реализован в виде двух 14-битных регистров. В первом регистре хранится команда, только что считанная из памяти программ по адресу, определяемому значением счетчика команд. Второй регистр подключен к дешифратору команд и соответственно содержит исполняемую в данный момент команду. Такое решение позволяет осуществлять выборку команды одновременно с исполнением команды, выбранной в предыдущем цикле. Естественно, при этом предполагается, что последовательность выполнения команд имеет линейный характер. Для команд, выполняющих переход к другому месту памяти программ, команда, находящаяся на вершине конвейера, должна быть заменена на другую. Этот процесс называется
Рис. 4.4.
Дешифратор команд
Дешифратор команд представляет собой логическую схему, которая декодирует каждое поле 14-битного слова команды и управляет передачей соответствующих адресов и данных на требуемые входы исполнительного блока, а также конфигурирует АЛУ.
Все модели микроконтроллеров PIC имеют встроенный генератор, задающий последовательность выполнения внутренних микроопераций в соответствии с сигналами, поступающими от дешифратора команд. В качестве времязадающего элемента обычно используется внешний кварцевый резонатор, подключаемый к выводам OSC1 и OSC2 микроконтроллера (Рис. 4.2). Именно этот резонатор определяет тактовую частоту микроконтроллера
Частота тактового генератора делится на четыре с помощью схемы, показанной на Рис. 2.25 (стр. 54), чтобы получить четыре не перекрывающихся тактовых сигнала. Каждый из этих сигналов используется схемой дешифратора для управления внутренними узлами процессора в требуемой последовательности. Соответственно длительность одного
В зависимости от текущей фазы машинного цикла блок выборки выполняет следующие операции:
Q1: Инкрементирование счетчика команд и выставление его содержимого на шину адреса памяти программ.
Q4: Считывание кода команды с шины данных памяти программ в регистр команд IR1 и одновременно с этим пересылка предыдущей команды по конвейеру в регистр команд IR2, подключенный к дешифратору команд.
Стек
Стек представляет собой отдельный блок из восьми 13-битных регистров, который подключен к счетчику команд. В 6-й главе мы увидим, что стек используется для хранения предыдущего значения счетчика команд, т. е. «запоминает» точку возврата при вызове подпрограммы.
Исполнительный блок (Рис. 4.5) осуществляет извлечение данных из памяти данных или непосредственно из кода команды и выполняет обработку этого значения, используя АЛУ. Режим работы АЛУ определяется сигналами, формируемыми дешифратором команд. Результат помещается либо в рабочий регистр W, либо обратно в память данных, перезаписывая исходное значение.
Арифметико-логическое устройство (АЛУ)
Основным элементом исполнительного блока является АЛУ (см. Рис. 2.10 на стр. 39), которое осуществляет обработку данных, поступающих из двух источников. Одним из этих источников является 8-битный рабочий регистр W. В качестве другого источника может выступать:
• Регистр данных, указанный в команде. Например, команда addwf h’20’,f прибавляет содержимое рабочего регистра к содержимому регистра h’20’.
• Константа, являющаяся частью слова команды (см. Рис. 3.6 на стр. 69). К примеру, команда addlw 5 прибавляет число 5 к содержимому рабочего регистра.