Блок выборки, показанный отдельно наРис. 5.2, предназначен для выборки команд из памяти программ и загрузки их в конвейер. Адрес каждой извлекаемой команды задается счетчиком команд. В свою очередь код операции, выделенный из кода команды, подается на вход дешифратора команд, который активирует в требуемой последовательности соответствующие узлы исполнительного блока.
Память программ
Основным элементом блока выборки является память программ. Программное обеспечение во встраиваемых системах фиксировано, поскольку после включения питания микроконтроллер должен сразу же приступить к выполнению своих задач, не тратя время на загрузку программы. Поэтому память программ, как правило, реализуется в виде ПЗУ какого-либо типа. В большинстве микроконтроллеров РIС используется многократно-программируемое ПЗУ; если в обозначении модели присутствует буква «F», то это FLASН~память.В памяти программ микроконтроллера РIС 16F84 может храниться до 1024 команд, размер каждой из которых составляет 14 бит (см.Рис. 5.1. на стр. 32). В новых микроконтроллерах семейства среднего уровня размер памяти программ колеблется от 1024 (например, Р1С 16F627) до 8192 (Р1С 16F876/7) команд.
Рис. 5.2. Блок выборки PIC16F84
Счетчик команд
Счетчик команд (Ргоgrаm Соuntег — РС) используется для адресации, или указания считываемой из памяти программ команды. Этот 13-битный регистр обычно инкременти-руется после каждой выборки, функционируя как двоичный счетчик. Однако, как мы с вами увидим в следующей главе, существует ряд команд, таких как команда GOTO, выполнение которых вызывает переход к другому месту в памяти программ. Соответственно, нормальное функционирование счетчика команд нарушается. Кроме того, программист может напрямую обращаться к счетчику команд через память данных.
Рис. 5.3. Память программ PIC16F84
Конвейер
Конвейер реализован в виде двух 14-битных регистров. В первом регистре хранится команда, только что считанная из памяти программ по адресу, определяемому значением счетчика команд. Второй регистр подключен к дешифратору команд и соответственно содержит исполняемую в данный момент команду. Такое решение позволяет осуществлять выборку команды одновременно с исполнением команды, выбранной в предыдущем цикле.
Естественно, при этом предполагается, что последовательность выполнения команд имеет линейный характер. Для команд, выполняющих переход к другому месту памяти программ, команда, находящаяся на вершине конвейера, должна быть заменена на другую. Этот процесс называется сбросом конвейера и увеличивает время исполнения команды на один цикл.
Как видно изРис. 5.4, обычно команда выполняется за один машинный цикл.
Рис. 5.4. Фазы машинного цикла
Дешифратор команд
Дешифратор команд представляет собой логическую схему, которая декодирует каждое поле 14-битного слова команды и управляет передачей соответствующих адресов и данных на требуемые входы исполнительного блока, а также конфигурирует АЛУ.
Все модели микроконтроллеров РIС имеют встроенный генератор, задающий последовательность выполнения внутренних микроопераций в соответствии с сигналами, поступающими от дешифратора команд. В качестве времязадающего элемента обычно используется внешний кварцевый резонатор, подключаемый к выводам (Рис. 5.2)OSС1 и OSС2 микроконтроллера.
Именно этот резонатор определяет тактовую частоту микроконтроллераFоsс. Максимальная тактовая частота большинства моделей среднего уровня составляет 20 МГц, однако в некоторых ранних моделях частота не могла превышать 10, а то и 4 МГц. Минимальная тактовая частота ничем не ограничена.
Частота тактового генератора делится на четыре, чтобы получить четыре не перекрывающихся тактовых сигнала. Каждый из этих сигналов используется схемой дешифратора для управления внутренними узлами процессора в требуемой последовательности. Соответственно длительность одного машинного цикла равна четырем периодам внешнего сигнала Fоsс (см.Рис.5.4). Таким образом, при использовании резонатора с частотой 4 МГц частота машинных циклов составляет Fоsс/4, что соответствует периоду машинного цикла, равному 1 мкс.
В зависимости от текущей фазы машинного цикла блок выборки выполняет следующие операции:
Q1: Инкрементирование счетчика команд и выставление его содержимого на шину адреса памяти программ.
Q4: Считывание кода команды с шины данных памяти программ в регистр команд IR1 и одновременно с этим пересылка предыдущей команды по конвейеру в регистр команд IR2, подключенный к дешифратору команд.
Стек
Стек представляет собой отдельный блок из восьми 13-битных регистров, который подключен к счетчику команд. Cтек используется для хранения предыдущего значения счетчика команд, т.е. «запоминает» точку возврата при вызове подпрограммы.
Тактовый генератор
Для синхронизации работы узлов микpоконтpоллеpов семейства PIC возможно использование четыpех типов тактового генеpатоpа:
- XT кваpцевый pезонатоp
- HS высокочастотный кваpцевый pезонатоp
- LP микpопотpебляющий кваpцевый pезонатоp
- RC цепочка
В случае задания ваpиантов XT, HS и LP к микpосхеме подключается pезонатоp, а в случае задания ваpианта RC - pезистоp и конденсатоp. Конечно, кваpцевый pезонатоp значительно точнее и стабильнее, но если высокая точность отсчета вpемени не нужна, использование RC генеpатоpа может уменьшить стоимость и габаpиты устpойства.
Частота тактового генератора определяет машинный цикл работы микроконтроллера. При использовании кварцевого резонатора частотой 4 Мгц машинный цикл составляет 1 мкс.