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

Микроконтроллеры C28x

ИСР AVR Studio


· Обзор

Это дешевый 32-разрядный цифровой сигнальный контроллер (DSC – Digital Signal Controller) с фиксированной точкой. В нем использована система команд RISC (с интуитивно понятными одноцикловыми командами), модифицированная гарвардская архитектура и циклическая адресация.

Высокоуровневая концептуальная модель включает:

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

· Эмуляционную логику, которая наблюдает за и управляет функциональностью DSC, а также выполняет тестирование.

· Блок схема C28x

Использует гарвардскую архитектуру с раздельными шинами программ и данных. Система команд – RISC (Reduced Instructions Set Computing).

Содержит компоненты:

· Ядро C28x – 32-битный DSP, производительность 100-150 MIPS (миллионов инструкций в секунду).

· ПЗУ загрузчика (Boot ROM)

· ОЗУ до 40 Кбайт (RAM).

· Память программ ПЗУ до 256 Кбайт, либо перезагружаемое (Flash), либо программируемое на заводе (ROM).

· Блок управления прерываниями (Interrupt Management).

· Шина данных (Memory Bus).Периферийная шина (Peripheral Bus).

· 2 блока управления событиями (Event Manager A, B).

· Встроенный 12-разрядный аналого-цифровой преобразователь (ADC).

· Сторожевой таймер (Watchdog). Он для защиты от сбоев делает сброс программы через определенные интервалы времени.

· Многоканальный буферизированный интерфейс c последовательным портом McBSP ( Multichannel Buffered Serial Port).

· Интерфейс c коммуникационным портом I2C. Используется всего 2 линии – данные и синхронизация. К интерфейсу подключается любой уникально адресуемый источник.

· Интерфейсы c сетевым контроллером CAN (Control Area Network). Связывает множество клиентов общей сетью, использует буферы, фильтры данных и поддерживает работу с приоритетами.

· Масштабируемый когерентный интерфейс c коммуникационным портом SCI (Scalable Coherent Interface), обмен 16-битными словами.

· Последовательный периферийный интерфейс SPI (Serial Peripherial Interface). Надежный обмен данными по индивидуальным для каждого направления линиям.

Ядро C28x содержит:

· Умножитель 32х32 (Multiplier).

· 32-битные таймеры.

· Встроенный модуль отладки (JTAG реального времени).

· Атомарное АЛУ, выполняющее одновременно считывание, перемножение и запись результата.

· Регистровый файл с комплектом регистров.

В DSC используются регистры (находятся или в регистровом файле, или в других модулях):

· ACC – аккумулятор, 32 бита. Находится в АЛУ.

· AH – старшая часть ACC, 16 бит.

· AL – младшая часть ACC, 16 бит.

· P – произведение, 32 бита. Находится в умножителе.

· PH – старшая часть P, 16 бит.

· PL – младшая часть P, 16 бит.

· XT – регистр сомножителя, 32 бит Находится в умножителе.

· XAR0 – XAR7 – дополнительные регистры, 32 бита. Находятся в регистровом файле.

· AR – старшая часть XAR, 16 бит.

· PC - программный счетчик, 22 бита. Находится в ядре.

· RPC – возврат программного счетчика, 22 бита. Находится в ядре.

· DP – указатель на страницу данных, 16 бит. Находится в ядре.

· SP – указатель стека, 16 бит. Находится в ядре.

· STO0 –STO1 – статусные регистры, 16 бит. Находятся в ядре.

· IER – разрешение прерываний, 16 бит. Находится в ядре.

· IFR - флаг прерываний, 16 бит. Находится в ядре.

Главные особенности CPU:

· Поддерживается 8-ступенчатый конвейер, который предотвращает запись или чтение по одному и тому же адресу в неправильном порядке.

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

· 32-разрядное арифметико-логическое устройство (АЛУ), выполняет арифметику в дополнительном коде и логические операции.

· Арифметический модуль адресного регистра (Address register arithmetic unit - ARAU). Он работает параллельно с АЛУ, генерирует адреса памяти и увеличивает или уменьшает указатели.

· Циклический сдвигатель (Barrel shifter). Осуществляет сдвиги данных влево или вправо на 1-16 бит.

· Умножитель (Multiplier). Реализован аппаратно, выполняет умножение 32х32 в дополнительном коде с 64-разрядным результатом. Сомножители могут быть как знаковые, так и без знака.

Главные особенности эмуляционной логики:

· Прямой доступ к памяти в отладочном и тестовом режимах (Debug-and-test direct memory access - DT-DMA).

· Запрос данных.

· Счетчик для реализации закладок.

· События отладки. Следующие события вызывают сброс устройства: команды ESTOP0 и ESTOP1, обращение к определенной области памяти программ или памяти данных, запрос от внешнего устройства. Когда событие возникает, CPU переходит в режим ожидания.

· Работа в режиме реального времени.

Главные сигналы CPU:

· Интерфейс с памятью. Они используются для передачи данных между CPU, памятью и периферией, индицируют доступ к памяти программ и памяти данных. Возможен доступ в режимах 16 или 32 бита.

· Тактовый и управляющий сигналы. Обеспечивают тактирование CPU и эмуляционной логики, а также используются при контроле и управлении CPU.

· Сигналы сброса и прерываний. Осуществляют аппаратный сброс или обращение к процедуре обработки прерывания, а также для контроля статуса прерывания.

· Эмуляционные сигналы используются при отладке и тестировании.

· Карта памяти

В C28x используется память из 16-разрядных слов. На кристалле находятся:

Память программ. Адрес задается 22-разрядным регистром программного счетчика (Program Counter - PC). Это позволяет иметь в памяти программ 4М слов (слово = 16 бит). По нижним 2К адресам $0000…$7FF определены 2 блока по 1К: блок векторов прерываний VMAP=0 (адреса $000…$3FF), блок M1 для кода программы (адреса $400…$7FF). Адреса $800…$9FF зарезервированы. По адресам $1000…$3FFFFF расположена область памяти и периферия. Верхние 64К (адреса $3F0000…$3FFFFF) этой области занимает сегмент, совместимый с режимом C2xLP. В нем по верхним адресам имеется блок VMAP=1 векторов прерываний.

Память данных. Использует страничную организацию, номер страницы хранится в 16-разрядном регистре (Data Page Pointer – DP), всего страниц 64К=216. Размер страницы 64К. Всего память данных может содержать до 4Г=64К*64К слов (слово = 16 бит). Нижние 64К (адреса $0000…$A000) этой области занимает сегмент, совместимый с режимом C2xLP. По нижним 2К адресам $0000…$7FF определены 2 блока по 1К: блок векторов прерываний VMAP=0 (адреса $000…$3FF), блок M1 для данных (адреса $400…$7FF). Адреса $800…$9FF зарезервированы. По адресам $1000…$FFFFFFFF расположена область памяти и периферия.

Память имеет отдельные шины для пространства программ и пространства данных. Это означает, что инструкция может быть вызвана, когда данные уже готовы. Возможен доступ к данным размером 16 и 32 бита. Имеются также инструкции доступа к младшему или старшему байту слова данных. Имеются 3 адресные шины:

· PAB (Program address bus) - шина адреса памяти программ для выборки кода программы.

· DRAB (Data-read address bus) - шина адреса памяти даных для чтения данных.

· DWAB (Data-write address bus) - шина адреса памяти данных для записи данных.

Имеются 3 шины данных:

· PRDB (Program-read data bus). Шина, на которую считывается код из памяти программ.

· DRDB (Data-read data bus). Шина, на которую считываются данные из памяти данных

· DWDB (Data-write data bus). Шина, с которой данные записываются в память данных или в память программ.

Для временного хранения данных предусмотрена стековая память, организованная по правилу «последним пришел первым ушел» (Last In First Out - LIFO). . Доступ к стеку через указатель стека (Stack Pointer – SP). Его содержимое – адрес верхушка стека.

Стек SP размещается в памяти данных. Стек растет в сторону увеличения адреса. Указатель стека SP хранит адрес верхушки стека. SP имеет 16 разрядов, поэтому максимальный адрес в SP равен $FFFF и размер стека не может превышать этого значения. Стек может использовать адреса в диапазоне от $0000 до $FFFF.

Когда 32-разрядное значение сохраняется в стеке, то сначала сохраняется старшая часть, а по следующему адресу – младшая часть.

· Методы адресации

Поддерживаются 4 метода адресации:

· Прямая. Использует 16-разрядный DP (Data Page) регистр. Его содержимое – начальный адрес сегмента памяти. В инструкциях для адресации в пределах сегмента добавляется поле смещения (6 или 7 бит). Используется для адресации к структурам.

· Стековая. Использует 16-разрядный регистр указателя стека (Stack Pointer – SP). Его содержимое – адрес верхушка стека. В инструкциях для адресации в пределах стека добавляется поле смещения (6 бит), которое вычитается из адреса верхушки стека. Используется для адресации к стековой памяти.

· Косвенная (не прямая). Использует 32-разрядныевспомогательные регистры XAR0…XAR7 в качестве указателей памяти данных. В инструкциях можно прямо использовать содержимое выбранного регистра с полем смещения (3-битовая константа или содержиое 16-разрядного регистра). Альтернатива - пост-инкремент, пред/пост-декремент для автоматического изменения адреса.

· Регистровая. Использует пару регистров, один источник данных, другой приемник.

· Концептуальная блок-схема CPU

На схеме представлены::

· 32-разрядная шина считываемых команд. На нее считываются команды из памяти программ.

· 22-разряднаяадресная шина команд.

· 32-разрядная адресная шина считываемых данных.

· 32-разрядная шина считываемых данных. На нее считываются данные из памяти данных.

· Буфер считываемых данных. Это регистр для хранения считанных данных. Его выход передается на шину операндов, либо на генератор адреса памяти программ, если данные - это адрес стека. Это первый операнд при выполнении команды.

· Шина операндов. На ней находится первый операнд при выполнении команды.

· Шина результата операции в исполнительном устройстве.

· Буфер записываемых данных. Это регистр данных, записываемых в память данных. Он загружается с шины результатов операции Result Bus.

· Логика управления командами. Декодирует считанную команду и передает данные исполнительным устройствам.

· Логика генерации адресов команд.

· Арифметический модуль адресного регистра ARAU. Вычисляет адреса для регистрового файла и адресной шины считываемых данных.

· Регистровый файл, который содержит набор регистров (системные и общего назначения).

· Исполняющее устройство, включает - умножитель, параллельный сдвигатель, АЛУ. Умножитель реализован аппаратно, выполняет умножение 32х32 или два умножения 16х16.

· Исполнительное устройство

· Основные регистры

Определен комплект регистров. Основные регистры:

Регистр Размер бит Описание
ACC Аккумулятор
AH Старшая часть ACC
AL Младшая часть ACC
XAR0 Дополнительный регистр 0
XAR1 Дополнительный регистр 1
XAR2 Дополнительный регистр 2
XAR3 Дополнительный регистр 3
XAR4 Дополнительный регистр 4
XAR5 Дополнительный регистр 5
XAR6 Дополнительный регистр 6
XAR7 Дополнительный регистр 7
AR0 Младшая часть XAR0
AR1 Младшая часть XAR1
AR2 Младшая часть XAR2
AR3 Младшая часть XAR3
AR4 Младшая часть XAR4
AR5 Младшая часть XAR5
AR6 Младшая часть XAR6
AR7 Младшая часть XAR7
DP Указатель на страницу памяти данных
IFR Регистр флагов прерывания
IER Регистр разрешения прерывания
DBGIER Регистр разрешения прерывания при отладке
P Регистр произведения
PH Старшая часть P
PL Младшая часть P
PC Программный счетчик
RPC Возврат значения программного счетчика
SP Указатель стека
ST0 Статусный регистр ST0
ST1 Статусный регистр ST1
XT Регистр сомножителя
T Старшая часть XT
TL Младшая часть XT

· Аккумулятор (ACC)

Главный регистр – аккумулятор (ACC). Он хранит результаты операций в АЛУ. Он поддерживает одноцикловые операции перемещения, сложения, вычитания и сравнения с данными из 32-разрядной памяти данных. Он также принимает 32-разрядный результат от умножителя.

Для ACC возможен доступ и к части его содержимого: AH – старшая часть, AL – младшая часть. Для каждого из них можно получать младший LSB или старший MSB байты.

· Статусный регистр ST0

В нем запоминаются флаги состояния ACC

Флаги (по умолчанию все сброшены):

· Расширение знака (Sign-extension mode - SXM), бит 0. Если SXM=1, то при загрузке 16-разрядного числа со знаком в 32-разрядный ACC оно перед загрузкой расширяется по знаку (пустые биты заполняются битом знака) до 32-разрядного представления.

· Переполнение (Overflow mode -OVM), бит 1. Если OVM = 0 (режим переполнения выключен), то переполнения считаются в поле OVC в ACC. Если OVM = 1 (режим переполнения включен), то переполнения не подсчитываются, в ACC заносятся значения насыщения.

· Флаг теста/контроля (Test/control - TC), бит 2.

· Перенос (Carry - C), бит 3.

· Флаг нуля (Zero flag - Z), бит 4. Если результат операции равен 0, то Z=1.

· Флаг отрицательного значения (Negative - N), бит 5. Если результат операции отрицательное число, то N=1.

· Флаг запрета переполнения (Latched overflow flag - V), бит 6. Если результат операции вызывает переполнения в регистре хранения результата, то V=1 и защелкивается. Если нового переполнения нет, то V не меняется, остается защелкнутым от предыдущего переполнения.

· Поле режима сдвига произведения (Product shift mode bits - PM). Поле в битах 7…9. 3-разрядное значение определяет режим сдвига для значения, получаемого из регистра произведения P. Возможные режимы:.

PM Результат
PM=000 Сдвиг влево на 1, в младший бит заносится 0. Режим по умолчанию.
PM=001 Нет сдвига.
PM=010, 011, 100, 101, 110, 111 Сдвиг вправо на PM-1 бит, младший бит теряется, в старших битах расширение знака.

· Счетчик переполнения операций с числами со знаком (Overflow counter - OVC). Для чисел без знака OVCU. Поле в битах 10…15. Счетчик 6-разрядный со значениями от -32 до 31. При OVC=0 содержимое ACC не меняется. При OVC>0 содержимое ACC = насыщение по максимуму ($7FFFFFFF), OVC = 0. При OVC<0 содержимое ACC = насыщение по минимуму ($8000000), OVC = 0.

· Статусный регистр ST1

В нем запоминаются флаги состояния разных узлов.

Флаги (по умолчанию все сброшены):

· Флаг глобальной маски прерывания (Inerrupt global mask - INTM), бит 0. Если INTM=1, то маскированное прерывание запрещено.

· Флаг массирования отладки (Debag enable maskt -DBGM), бит 1. Если DBGM = 1, то отладка запрещена.

· Флаг режима адресации (PAGE0). Размещен в бите 2. При PAGE0=0 – адресация через стек, при PAGE0=1 – прямая.

· Флаг размещения вектора прерываний (VMAP), бит 3. При VMAP=0 вектор внизу памяти программ (адреса $000000…$000003F), при VMAP=1 вектор вверху памяти программ (адреса $3FFFC0…$3FFFFF).

· Флаг размещения указателя стека (Stack pointer alignment - SPA), бит 4. При SPA=0 указатель стека SP не может занимать четные адреса.

· Статус инструкции цикла (LOOP), бит 5. При LOOP=1 то под операцию LOOP отводится два этапа конвейера.

· Флаг разрешения эмуляции (EALLOW), бит 6. При EALLOW=1 разрешены эмуляция и доступ к защищенным регистрам.

· Флаг режима только чтение (IDLESTAT), бит 7. Устанавливается IDLESTAT=1 при выполнении инструкции IDLE. Флаг сбрасывается командами, отменяющими этот режим.

· Флаг режима адресации (AMODE), бит 8.

· Флаг совместимости режима (OBJMODE), бит 9. При OBJMODE=0 режим C27x, при OBJMODE=1 режим C28x.

· Флаг размещения M0, M1 (M0M1MAP), бит 11. Для C28x.обязательно M0M1MAP=1.

· Статус выходного сигнала XFS (XF), бит 12. При XF=1 совместимость с C2xLP.

· Указатель на дополнительные регистры (Auxiliary register pointer.- ARP). Поле размещено в битах 13-15. В него заносится 3-разрядный номер регистра (0-7).

· Умножитель

C28x содержит встроенный аппаратный умножитель, выполняющий умножение за 1 такт. Возможны:

· умножение16х16

· умножение16х16 с накоплением MAC

· умножение 32х32

· умножение 32х32 с накоплением DMAC

Концептуальная блок-схема умножителя в режиме 16x16. Умножитель получает 16-разрядные сомножители. Первый заносится в регистр T (старшая часть XT)из памяти данных или регистра. Второй извлекается из мультиплексора MUX, который получает значение из памяти данных или регистра, либо из кода инструкции.

32-разрядное произведение через MUX заносится в регистр произведения P (и может использоваться как операнд) и в аккумулятор ACC (для выполнения операций MAC).

Концептуальная блок-схема умножителя в режиме 32x32. Умножитель получает 32-разрядные сомножители. Первый заносится прямо из памяти данных или регистра Второй извлекается из MUX, который получает значение из памяти программ или регистра XT, который загружается из памяти данных или регистра.

64-разрядное произведение содержит 32-разрядные части (старшую и младшую). Одна из них через MUX и заносится в регистр произведения P.

 

· Сдвигатель

Сдвигатель имеет 64 разряда и поддерживает операции сдвига влево и вправо. Входные операнды могут иметь длину 16, 32 или 64 разряда. Возможные сдвиги:

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

· Логический вправо. Младшие биты теряются, старшие заполняются нулями. Последний выдвигаемый бит заносится в бит переноса С.

· Арифметический вправо. Младшие биты теряются, последний выдвигаемый бит заносится в бит переноса С. В старших расширение бита знака Sign.

· Циклический влево. Старшие биты по цепочке переносятся в младшие (в цепочку входит бит переноса С)аполняются нулями.ряда.га влево и вправо. .

· Циклический вправо. Младшие биты по цепочке переносятся в старшие (в цепочку входит бит переноса С)аполняются нулями.ряда.га влево и вправо. .

· Прерывания и приоритеты

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

Различаются прерывания:

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

· Немасккируемые. Они не могут быть блокированы или отменены другими устройствами.

Обработка прерывания включает 4 фазы:

· Прием запроса прерывания.

· Обработка запроса. Если прерывание маскируемое, то нужно проверить условия разрешения прерывания. Немаскируемое прерывание должно выполняться немедленно.

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

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

C28x поддерживает 32 вектора прерывания : 19 приоритетных прерываний с приоритетами 1…19 (19 – нижний), 12 неприоритетных прерывания пользователя, 1 прерывание при неправильной инструкции. Каждый вектор включает стартовый адрес процедуры обработки прерывания (Interrupt Service Routine - ISR). Он накапливается в двух соседних словах памяти.

· Конвейер

Для повышения производительности C28x использует защищенный 8-уровневый конвейер. На каждом уровне конвейера может быть команда для аппаратного блока ЦП (F1, F2, D1, D2, R1, R2, X, W). Конвейер работает независимо от действий программиста. Он управляется командами, заложенными в ЦП.

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

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