Тема 07. Классификация и типовая структура микропроцессоров
Дисциплина: «ОП.02 Архитектура аппаратных средств» | Раздел 3. Архитектура и принципы работы основных логических блоков системы (§2.2 с.8 программы).
Введение: Понятие микропроцессора и архитектурные границы
Микропроцессор (ЦПУ / CPU — Central Processing Unit) — функционально законченное программно-управляемое электронное устройство, выполненное на одном или нескольких полупроводниковых кристаллах (СБИС/СнК), предназначенное для считывания, декодирования и синхронного исполнения последовательности машинных команд, а также координации всех системных компонентов ЭВМ.
Принципиальное разделение понятий:
ISA (Instruction Set Architecture — Архитектура набора команд): логическая модель процессора, видимая программисту на ассемблере и компилятору (состав регистров, форматы команд, режимы адресации, типы данных, обработка прерываний). Примеры: x86-64, ARMv9-A, RISC-V (RV64GC).
Микроархитектура (Microarchitecture): конкретная аппаратная реализация ISA на кремнии (число стадий конвейера, объем и организация кэшей, количество исполнительных портов, методы предсказания переходов). Примеры: Intel Golden Cove, AMD Zen 4, ARM Cortex-A715. Разные микроархитектуры могут безукоризненно исполнять одну и ту же ISA!
1. Внутренняя типовая структура процессорного ядра
Независимо от поколения и назначения, любое процессорное ядро классической структуры включает четыре фундаментальные подсистемы:
Арифметико-логическое устройство (ALU),
Устройство управления (Control Unit),
Внутреннюю регистровую память (Register File) и
Подсистему кэш-памяти первого уровня (L1 Cache).
1.1. Арифметико-логическое устройство (ALU)
ALU выполняет фундаментальные преобразования информации:
Арифметические действия: двоичное сложение и вычитание (через сумматор в дополнительном коде), умножение и целочисленное деление;
Сдвиговые операции: логический, арифметический и циклический сдвиг на произвольное количество разрядов с использованием схемы матричного сдвигателя (Barrel Shifter).
1.2. Устройство управления (Control Unit / CU)
Устройство управления формирует координирующие потенциалы и импульсы для всех узлов процессора на каждом такте генератора:
Обеспечивает считывание команды из памяти/кэша в регистр инструкций (IR);
Осуществляет дешифрацию опкода (Operation Code) с помощью комбинационных дешифраторов либо микропрограммного управления (Microcode ROM);
Формирует управляющие сигналы переключения мультиплексоров, чтения/записи регистров и выбора функции ALU;
Отрабатывает аппаратные и программные прерывания (Interrupt Handling), изменяя ход выполнения потока команд.
1.3. Регистровый файл и специализированные регистры
Регистры представляют собой сверхоперативную память (SRAM-ячейки), работающую на полной тактовой частоте ядра без задержек ожидания шины:
Регистры общего назначения (РОН / GPR): служат для хранения промежуточных переменных. В современных архитектурах x86-64 их 16 (RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP, R8–R15). В RISC-архитектурах (ARM, RISC-V) их число увеличено до 32 (x0–x31 в RISC-V, причем x0 всегда аппаратно равен 0).
Счетчик команд (PC — Program Counter / RIP — Instruction Pointer): 64-битный регистр, указывающий виртуальный адрес байта следующей машинной инструкции. При выполнении обычных команд инкрементируется на длину текущей инструкции, а при выполнении переходов (CALL, JMP, RET) принудительно перезаписывается новым целевым адресом.
Указатель стека (SP — Stack Pointer / RSP): хранит адрес вершины стека вызовов в оперативной памяти (организация LIFO). При команде PUSH уменьшается (в архитектурах с растущим вниз стеком), при POP увеличивается.
Регистр флагов (FLAGS / EFLAGS / RFLAGS): набор отдельных битовых триггеров состояния, отражающих результат последней операции ALU:
ZF (Zero Flag): равен 1, если результат равен нулю;
CF (Carry Flag): флаг переноса из старшего разряда (при беззнаковом переполнении);
OF (Overflow Flag): флаг знакового арифметического переполнения;
SF (Sign Flag): равен знаковому биту результата (1 для отрицательных чисел).
1.4. Иерархия кэш-памяти: L1, L2, L3
Проблема разрыва в скорости (Memory Wall) между тактовой частотой CPU (3–5 ГГц) и латентностью оперативной памяти DRAM (50–80 нс, что эквивалентно 200–300 тактам простоя ядра) решается многоуровневым статическим кэшированием:
L1i и L1d (Уровень 1): Гарвардская организация прямо в ядре. Кэш инструкций L1i питает конвейер декодера, кэш данных L1d обслуживает блок Load/Store. Объем: 32–64 КБ на ядро, латентность 4–5 тактов.
L2 (Уровень 2): индивидуальный для каждого ядра объединенный кэш (Unified). Объем: 512 КБ – 2 МБ, латентность 12–14 тактов.
L3 (Уровень 3): разделяемый между всеми ядрами кристалла кэш (LLC — Last Level Cache). Объем: 16–96+ МБ, латентность 35–45 тактов.
Философия проектирования процессоров исторически разделилась на три ключевые парадигмы, определяющие баланс между сложностью аппаратного кремния и интеллектом программного компилятора.
Критерий
CISC (x86, x86-64)
RISC (ARM, RISC-V, MIPS)
VLIW (Эльбрус, TI C6000)
Полное наименование
Complex Instruction Set Computer
Reduced Instruction Set Computer
Very Long Instruction Word
Формат и длина инструкций
Переменная (1–15 байт в x86)
Строго фиксированная (32 бита; 16 бит в C-extension)
Широкие связки (128–512 бит) из нескольких микроопераций
Архитектура работы с памятью
«Регистр — Память»: операции могут напрямую адресовать ОЗУ
Строгая «Load-Store»: математика только в регистрах; память — через LOAD/STORE
«Load-Store» с параллельной адресацией нескольких каналов памяти
Декодирование команд
Сложный многоступенчатый аппаратный декодер + Microcode ROM
Простой, сверхбыстрый комбинационный декодер прямого действия
Аппаратный декодер отсутствует: слоты связки напрямую коммутируются на АЛУ
Цифровая обработка сигналов (DSP), военные и защищенные спецсистемы
Микрокод против аппаратного декодера
В современных процессорах x86 (Intel Core, AMD Ryzen) внешняя архитектура является CISC, но внутренняя микроархитектура — RISC-подобной.
Аппаратные декодеры инструкций на лету расщепляют сложные команды x86 на простые микрооперации (μops / uops).
Простые инструкции декодируются за 1 такт аппаратно, а комплексные инструкции (например, ENTER, LEAVE, STRING COPY) считывают цепочки микрокоманд из специального внутреннего постоянного запоминающего устройства — Microcode ROM.
Базовый цикл выполнения инструкции в процессоре традиционно делится на 5 стадий:
IF (Instruction Fetch — Выборка команды): считывание 32-битного машинного слова из кэша L1i по адресу регистра PC. Инкремент PC.
ID (Instruction Decode & Reg Read — Декодирование и чтение регистров): распознавание кода операции (opcode), извлечение номеров исходных регистров и одновременное чтение операндов из регистрового файла.
EX (Execute / Address Calculation — Выполнение): математическая операция в ALU либо вычисление эффективного адреса памяти.
MEM (Memory Access — Обращение к памяти): чтение или запись данных в кэш L1d (только для команд Load / Store). Для остальных инструкций стадия пропускается.
WB (Write-Back — Обратная запись): помещение вычисленного результата из ALU или считанного из памяти слова в целевой регистр РОН.
4. Вопросы и задания для самопроверки
1. В чем заключается главное различие между архитектурой набора команд (ISA) и аппаратной микроархитектурой процессора?
Показать правильный ответ
Ответ: ISA — это логический интерфейс и спецификация (контракт между процессором и программистом), определяющий состав регистров, формат опкодов и режимы адресации. Микроархитектура — это физическое кремниевое воплощение ISA (число конвейеров, размер кэшей, алгоритмы предсказания ветвлений, схемотехника декодеров). Разные микроархитектуры могут исполнять один и тот же бинарный код ISA без модификации.
2. Почему кэш-память первого уровня (L1) физически разделена на L1i и L1d, тогда как L2 и L3 объединены?
Показать правильный ответ
Ответ: Разделение L1 на L1i (команды) и L1d (данные) реализует Гарвардский принцип внутри ядра. Это исключает структурные конфликты на шине: стадия выборки команд (Fetch) может непрерывно считывать следующий код из L1i, в то время как стадия работы с памятью (MEM) параллельно читает или пишет операнды в L1d. Кэши L2 и L3 объединены для упрощения когерентности и гибкого динамического перераспределения полезного объема между кодом и данными.
3. Какую роль играет регистр флагов (FLAGS) при выполнении условных переходов в программах?
Показать правильный ответ
Ответ: Инструкции сравнения (CMP) или арифметики (SUB) воздействуют на битовые флаги ALU (ZF — нулевой результат, SF — отрицательный, OF — переполнение, CF — перенос). Последующая инструкция условного перехода (например, JE — Jump if Equal проверяет флаг ZF=1, а JL — Jump if Less проверяет SF≠OF) считывает состояние флага и либо модифицирует регистр PC целевым адресом, либо оставляет управление линейным.
4. Почему архитектура RISC получила подавляющее доминирование в смартфонах и встраиваемой электронике?
Показать правильный ответ
Ответ: Благодаря фиксированной длине команд и философии Load-Store аппаратный декодер RISC-процессоров предельно прост, занимает малую площадь кристалла и потребляет минимум энергии. Отсутствие сложного транслятора микрокода и огромного перечня legacy-режимов позволяет направить энергетический бюджет процессора на полезные вычисления и автономность аккумулятора.