Основные особенности архитектуры МК 1886ВЕ2У
Высокая эффективность микроконтроллеров 1886ВЕ2У, достигается за счет архитектуры ядра. Подобная архитектура обычно применяется в RISC микропроцессорах.
Основные особенности архитектуры:
· Гарвардская архитектура;
· Длинное слово команды;
· Команда состоит из единственного слова;
· Конвейерная обработка команд;
· Команды выполняются за один машинный цикл;
· Небольшое число команд;
· Файловая структура данных;
· Все команды ортогональны (симметричны).
Гарвардская архитектура – была разработана как альтернатива традиционной архитектуре для повышения производительности МК. В отличие от микроконтроллеров с традиционной архитектурой, где используется общая шина адреса и данных для выборки и обработки команд, гарвардская является более универсальной т.к. использует раздельные шины адреса и данных, что значительно повышает производительность процессора по сравнению с традиционной архитектурой. В гарвардской архитектуре разделена память программ (ПП) и память данных (ПД).
В микроконтроллерах с традиционной архитектурой ядра - команды и данные запрашиваются по одной и той же шине, что значительно снижает их производительность. Чтобы выполнить выборку команды, необходимо сделать несколько запросов по 8-разрядной (или кратной 8 разрядам) шине. Затем (если необходимо) запросить данные, выполнить команду и сохранить результат. Как может быть, замечено шина с традиционной архитектурой ядра значительно загружена.
В микроконтроллерах с гарвардской архитектурой ядра - выборка команды происходит за один цикл. При обращении к памяти программ можно выполнить запись или чтение данных, т.к. память данных подключена к ядру микроконтроллера по отдельной шине. Раздельные шины доступа к памяти программ и к памяти данных позволяют исполнять текущую команду и производить выборку следующей команды, организуя конвейерную обработку команд. Сравнение гарвардской и традиционной архитектуры схематически показано на рис. 27.
Рис. 27 – Сравнение Гарвардской и Традиционной архитектур
Длинное слово команды - несколько больше чем 8-разрядная шина памяти данных. Это стало возможным из-за раздельных шин доступа к памяти программ и к памяти данных. Разделение шин доступа к разным видам памяти, позволяет произвольно выбирать разрядность команд микроконтроллера (не кратное 8-разрядной шине данных), что в свою очередь дает возможность эффективно использовать память программ и оптимизировать разрядность шины программ к архитектурным требованиям микроконтроллера.
Команда состоит из единственного слова - все команды микроконтроллеров однословные. 16 - разрядная шина доступа к памяти программ позволят выполнить выборку 16 - разрядной команды за один машинный цикл микроконтроллера. При использовании однословных команд число слов в памяти программ равняется максимальному числу команд программы микроконтроллера. Это означает, что все ячейки памяти имеют силу команды.
Как правило, в традиционной архитектуре большинство команд многобайтные. Микроконтроллер, имеющий 4к байт памяти, содержит примерно 2к команд. Коэффициент использования памяти примерно равен 2:1 и зависит от конкретного приложения. Поскольку каждая команда может состоять из нескольких байтов, то нет никакой гарантии, что каждая ячейка памяти программ имеет силу команды.
Конвейерная выборка и выполнение команд - состоит из двух стадий: выборка команды из памяти, выполнение команды. Выборка команды происходит в первый машинный цикл TCY, а выполнятся команда во втором машинном цикле TCY. Однако, из-за одновременной выборки текущей команды и выполнения предыдущей в каждом машинном цикле TCY происходит выборка и выполнение команд.
Цикл выполнения команды состоит из четырех тактов Q1, Q2, Q3 и Q4. Выборка следующей команды и выполнение текущей совмещены по времени, таким образом, выполнение команды происходит за один цикл. Если команда изменяет счетчик команд PC (команды ветвления, например GOTO), то необходимо два машинных цикла для выполнения команды.
Цикл выборки команды начинается с приращения счетчика команд PC в такте Q1. Код загруженной команды, помещается в регистр команд на такте Q1. Декодирование и выполнение команды происходит в тактах Q2, Q3 и Q4. Операнд из памяти данных читается в такте Q2, а результат выполнения команды записывается в такте Q4.
На рис. 28. показаны две стадии конвейерной обработки команд для представленной последовательности, а на рис. 29 эти же операции представлены более детально. В цикле TCY0 происходит выборка первой команды из памяти программ. На цикле TCY1 первая команда исполняется, а вторая команда выбирается из памяти программ. В течение цикла TCY2 вторая команда исполняется, а третья выбирается из памяти программ. На цикле TCY3 происходит выборка четвертой команды и выполняется команда третья команда (CALL SUB_1). Когда завершается выполнение третьей команды CPU загружает адрес четвертой команды в вершину стека и изменяет счетчик команд PC на адрес SUB_1. Это означает, что команда, загруженная в цикле TCY3, должна быть удалена из конвейера. В течение цикла TCY4 четвертая команда удаляется из конвейера (выполняется пустой цикл NOP) и происходит выборка команды по адресу SUB_1. В цикле TCY5 выполняется команда пять и выбирается из памяти программ команда с адресом SUB_1 + 1.
Рис. 28 – Выборка и выполнение команд
Рис. 29 – Синхронизации машинных циклов МК
Все команды выполняются за один цикл, кроме команд ветвления. Команды ветвления требуют два машинных цикла, т.к. необходимо удалить предварительно выбранную команду из конвейера. Во время удаления выбирается новая команда, а затем она исполняется в следующем машинном цикле.
Команды выполняются за один машинный цикл - полная выборка команды происходит за один машинный цикл (TCY) из-за того, что шина доступа к памяти программ 16 - разрядная. Каждая команда содержит всю необходимую информацию и выполняется за один машинный цикл. При выполнении команды может возникать задержка в один машинный цикл, если результат команды изменяет содержимое счетчика команд PC. Задержка в один машинный цикл необходима для выборки новой команды, которая должна быть выполнена.
Небольшое число команд – когда система команд хорошо проработана и они ортогональны (симметричны), то требуется меньшее число команд для решения необходимых задач. С меньшим кол-вом команд изучение МК значительно упрощается.
Файловая структура данных – обращение к регистрам памяти данных можно выполнить прямой или косвенной адресацией.
Все команды ортогональны (симметричны) – это даёт возможность выполнить любую операцию с любым регистром памяти данных прямой или косвенной адресацией. В ортогональной системе команд малое количество "специальных команд", что упрощает изучение и программирование микроконтроллеров, не теряя эффективности кода программы.
Организация памяти МК
Как уже было сказано выше, МК имеет память программ (ПП) и память данных (ПД), которые имеют отдельные шины адреса и управления. EEPROM – это третий вид памяти, который можно рассматривать как внешний источник для записи и чтения данных.
Память программ – это изолированный участок памяти, в котором расположены данные о работе МК, а также инструкции кода, помещённые туда пользователем. МК имеют 16 разрядный счётчик команд PC, способный адресовать 32К х 16 слов. Память программ имеет регистры специального назначения, которые условно можно разделить на два типа – регистры контроля и управления, и регистры общего назначения, предназначенные для записи команд программы. Этот важный момент следует пояснить подробнее.
Регистры специального назначения можно условно разделить на два типа – регистры контроля и регистры управления - можно сказать, что регистры управления производят настройку МК, перед выполнением задачи, а регистры контроля показывают, что при этом происходит.
В МК редко можно встретить, чтобы регистр контроля и управления были чётко разделены. В основном все регистры специального назначения совмещают в себе функцию, как управления, так и контроля. Воспринимать данное разделение следует условно, для простоты понимания.
Регистры общего назначения выполнены как статическое ОЗУ, и предназначены для записи кода программы либо данных пользователя.
Память данных – хранит данные МК и программ пользователя. Разделена на 4 Банка, чтобы получить объем памяти более 232 байта.
На рис. 30 – представлена общая схема организации памяти МК, а на рис. 31 регистры общего и специального назначения.
Рис. 30 – Организация памяти МК 1886ВЕ2У
Рис. 31 – Банки памяти в МК 1886ВЕ2У
Каждый регистр специального назначения занимает пространство в памяти данных равное: 8 бит (1 байт) и имеет свою направленность, т.е. создан для того, чтобы производить управление каким-либо периферийным устройством, либо самим МК. Каждый бит регистра является индикатором состояния (флагом). Чтобы настроить компонент МК, необходимо установить требуемый бит или их множество в 0 (как правило, не активное состояние) или 1 (как правило, активное состояние).
Система команд
Система команд – набор команд микроконтроллера, для выполнения базовых операций манипуляции данными.
Команда – инструкция машинного кода, направленная на выполнение определённого вида операции.
Структура системы команд
Система команд МК структурирована для работы с разными видами данных. Различают: байт ориентированные команды, бит ориентированные команды, и команды ориентированные для работы с константами. Такое жёсткое разделение позволило выполнять 16 разрядную команду за один машинный цикл. Команды условия, в которых был получен истинный результат операции, и команды изменяющие значение счётчика команд, являются исключением и выполняются за два машинных цикла.
В общем случае команда состоит из кода операции, определяющего тип команды и двух параметров: указателя на адрес регистра, и указателя адресата результата. Для каждой из трёх разновидностей команд: байт, бит и констант оперированных команд применяется свой формат. Чтобы картина стала яснее, обратимся к рис. 32 - на котором изображён общий формат для байт ориентированных команд, рис.2.10 – где можно увидеть формат для бит ориентированных команд, и соответственно на рис.2.11 – изображён формат для работы с константами. Квадратные скобки на
рисунках применены исключительно для выделения, и в системе команд не применяются. Регистр W – это рабочий регистр (аккумулятор).
Рис. 32 – Формат Байт ориентированной команды
На рис. 33 - символ – f (flag) – обозначает указатель на регистр с данными, а – d (destination) – указатель адресата сохранения результата, который имеет параметры: если d = 0 – результат сохраняется в W (аккумуляторе), если d = 1 – результат сохраняется в регистре, который используется в команде. В качестве примера используется команда сложения – ADDWF регистра W с переменной value.
Рис. 33 – Формат Бит ориентированной команды
На рис. 33 - символ – f (flag) – обозначает указатель на регистр с данными, а – b (bit) – номер бита, указанного в регистре f. В качестве примера представлена команда BSF - установки 3 бита в переменной value.
Рис. 34 – Формат Констант ориентированной команды
На рис. 34 - символ – k (konstant) – обозначает числовую константу. В качестве примера представлена команда MOVLW – загрузки в регистр W (аккумулятор) числа 10 в 16-ричной форме.
На рис. 35 представлена таблица полей кода операции, а на рис. 36 – в общем, форма команд трёх основных групп.
Рис. 35 – Таблица полей Кода Операции
Рис. 36 – Форма команд трёх основных групп
Числовые квалификаторы
По умолчанию в редакторе MPASM установлена 16-ричная система счисления. Хотя в настройках можно поменять на другую советую этот момент оставить без изменений, потому как документация и остальные лабораторные работы для объяснения основного материала будут использовать именно 16-ричную систему счисления.
Порой в самой программе для установки определённых битов портов ввода/вывода намного удобнее применять двоичную систему счисления, а для загрузки данных в переменные, привычную нам - десятичную. Для удобства программиста были разработаны числовые квалификаторы, которые спокойно воспринимаются компилятором MPASM. Ниже представлены примеры их использования:
Формат представления 16-ричной системы счисления:
MOVLW H‘A’ ; W = 10
MOVLW 0xA ; W = 10 (стандартное представление чисел)
Формат представления 10-тичной системы счисления:
MOVLW D‘14’ ; W = 14
MOVLW .10 ; W = 10 (довольно необычно но работает)
Формат представления 8-ричной системы счисления:
MOVLW O‘14’ ; W = 12
Формат представления 2-ичной системы счисления:
MOVLW B‘00110011’ ; W = 51
Формат представления в стиле ASCII:
MOVLW ‘C’ ; W = 67
MOVLW A‘D’ ; W = 68
Формат представления в стиле ASCII рекомендуется использовать только в случаях, когда это необходимо. Если вашу программу будут читать другие люди, то наверняка, если вы представите число 67 в виде буквы С, они не будут испытывать такой же восторг, который был у вас.