До 1945 года электронные вычислители (ENIAC, Z3, Harvard Mark I) проектировались для жестко заданных математических задач либо перепрограммировались вручную перекоммутацией сотен кабелей и тумблеров.
• Для смены расчетной баллистической таблицы инженеры вручную переставляли сотни штекеров и реле в течение нескольких дней.
• Программа являлась физической конфигурацией проводов.
• Электронный вычислитель должен быть аппаратно неизменным универсальным процессором.
• Алгоритм задачи кодируется в виде последовательности числовых инструкций, хранящихся в общей памяти.
+-----------------------------------------------------------+
| ЦЕНТРАЛЬНЫЙ ПРОЦЕССОР (CPU) |
| +--------------------+ +-----------------------+ |
| | Устройство | | Арифметико-логическое| |
| | управления (УУ / | <-----> | устройство (АЛУ / | |
| | Control Unit, CU) | | ALU) + Регистры (AX) | |
| +---------+----------+ +-----------+-----------+ |
+------------|--------------------------------|-------------+
| СИСТЕМНАЯ МАГИСТРАЛЬ|
| Шина адреса (Address Bus, AB) | (однонаправленная CPU->MEM)
|================================+=============+
| Шина данных (Data Bus, DB) | (двунаправленная CPU<=>MEM/IO)
|================================+=============+
| Шина управления (Control Bus) | (стробы MREAD, MWRITE, CLK...)
|================================+=============+
| |
+----------+---------+ +---------+-------------+
| Запоминающее | | Устройства ввода- |
| устройство (ЗУ/RAM)| | вывода (УВВ / IO) |
+--------------------+ +-----------------------+
Все функциональные модули связываются между собой через общую системную шину (магистрально-модульный принцип).
• Передает двоичный номер адресуемой ячейки памяти или номер порта ввода-вывода.
• Строго однонаправленная: сигнал генерирует процессор (Master) и принимает контроллер памяти или периферии (Slave).
Разрядность шины $N$ бит определяет предел физической адресации:
$$V_{max} = 2^N \text{ байт}$$
| Поколение процессора | Разрядность шины адреса | Максимальный объем адресуемого ОЗУ |
|---|---|---|
| Intel 8086 (1978 г.) | 20 бит | $2^{20}$ байт = 1 МБ |
| Intel 80386 (1985 г.) | 32 бита | $2^{32}$ байт = 4 ГБ |
| Современные x86-64 (AMD64 / Intel 64) | 48 бит / 57 бит (5-level paging) | 256 Терабайт / 128 Петабайт |
• Двунаправленная: пересылает коды команд и числовые операнды между CPU, RAM и IO.
• Разрядность (8, 16, 32, 64 бита) определяет ширину машинного слова, передаваемого за один такт шины.
• Использует тристабильные буферы (Hi-Z) для предотвращения коротких замыканий неактивных модулей.
• Передает управляющие стробы и синхронизирующие импульсы:
#MEMR — строб чтения из памяти;
#MEMW — строб записи в память;
CLK — тактовый генератор частоты;
READY / WAIT — такт подтверждения готовности;
RESET — сброс процессора в исходное состояние;
INTR / #INTA — запрос и подтверждение прерывания.
1. Адрес команды из счетчика PC (IP) передается в регистр адреса MAR.
2. Значение MAR выставляется на шину адреса, активируется строб #MEMR = 0.
3. ОЗУ считывает байты инструкции и передает их по шине данных в регистр MDR.
4. Опкод инструкции перемещается в регистр команд IR.
5. Счетчик команд PC автоматически увеличивается на длину выбранной инструкции.
1. Опкод из IR поступает в аппаратный дешифратор команд устройства управления (УУ).
2. УУ распознает тип операции (пересылка, сложение, логика, переход).
3. Определяются адреса операндов (регистровые, непосредственные, прямые по ОЗУ).
4. Генерируется микропрограмма управляющих импульсов для АЛУ и шин.
• Арифметико-логическое устройство (АЛУ) производит требуемую математическую или логическую операцию над операндами.
• Если команда требует чтения операнда из ОЗУ (например, [1000h]), генерируется дополнительный шинный цикл чтения памяти.
• При командах перехода (JMP, JNZ) в этой фазе вычисляется новый целевой адрес счетчика команд PC.
• Результат операции фиксируется в целевом регистре процессора (AX, BX и т.д.) либо записывается в ОЗУ через MAR и MDR по стробу #MEMW.
• Обновляются флаги в регистре состояния FLAGS:
ZF (Zero Flag) — равен ли результат нулю;
CF (Carry Flag) — возник ли арифметический перенос;
SF (Sign Flag) — знак полученного числа (старший бит).
| Регистр | Полное название | Функциональная роль в цикле команды |
|---|---|---|
| PC / IP | Program Counter / Instruction Pointer | Указывает адрес следующей инструкции в ОЗУ. Инкрементируется автоматически в фазе Fetch. |
| MAR | Memory Address Register | Буфер адреса. Напрямую соединен с внешней системной шиной адреса (AB). |
| MDR | Memory Data Register | Двунаправленный буфер данных. Соединен с внешней системной шиной данных (DB). |
| IR | Instruction Register | Регистр команд. Удерживает машинный код инструкции во время фазы декодирования. |
| FLAGS / PSW | Program Status Word | Фиксирует признаки результата последней операции АЛУ (ZF, CF, SF, OF) для условных переходов. |
Пример выполнения команды загрузки слова из памяти в регистр аккумулятора AX:
| Такт | Фаза | Шина адреса (AB) | Шина данных (DB) | Шина управления (CB) | Действие узлов CPU |
|---|---|---|---|---|---|
| T1 | Fetch (1) | 0100h (из PC) | Hi-Z (ожидание) | #MEMR = 0 (чтение) | PC → MAR, отправка адреса |
| T2 | Fetch (2) | 0100h | Опкод MOV AX,[..] | #MEMR = 0, READY=1 | DB → MDR → IR, инкремент PC |
| T3 | Decode | 1000h (операнд) | Hi-Z | Неактивна | Дешифрация опкода, адрес → MAR |
| T4 | Execute | 1000h | Hi-Z → Слово данных | #MEMR = 0 (чтение ОЗУ) | Память считывает ячейку 1000h |
| T5 | Writeback | Снят | Значение ячейки | #MEMR = 1 (деактивация) | MDR → Регистр AX. Команда завершена. |
• При прямом обращении к ОЗУ процессор вынужден простаивать до 200–300 тактов (такты ожидания, wait states / memory stalls).
• Общая шина для команд и данных физически не способна одновременно передавать инструкцию и операнд.
• Многоуровневый кэш (L1, L2, L3) на кристалле процессора (SRAM со временем доступа 1–10 тактов).
• Аппаратный конвейер команд (Instruction Pipeline).
• Предсказание ветвлений (Branch Prediction) и спекулятивная предвыборка (Prefetch).
• Единое адресное пространство для команд и данных.
• Одна общая шина адреса и шина данных.
• Простота разводки чипа, но последовательный доступ.
• Применение: Системная шина ПК и серверов.
• Физически раздельная память программ (Flash) и данных (SRAM).
• Две независимые шинные пары: шина инструкций и шина данных.
• Полная одновременность: выборка команды параллельна чтению операнда.
• Применение: Микроконтроллеры (AVR, PIC, STM32), DSP.
| Критерий сравнения | Фон-неймановская (Принстонская) | Гарвардская архитектура |
|---|---|---|
| Параллелизм шины | Низкий (поочередный доступ к командам и данным) | Высокий (одновременная выборка команды и операнда) |
| Гибкость памяти | Максимальная: свободный баланс между кодом и данными | Жесткая: фиксированный объем Flash под код и SRAM под данные |
| Аппаратная сложность | Минимальное число выводов микросхемы | Удвоенное число проводников и выводов кристалла |
| Детерминизм времени | Сложно предсказуем из-за очередей шины и кэш-промахов | Высокий детерминизм (жесткое реальное время) |
| Целевой класс ЭВМ | ПК, серверы, рабочие станции, мобильные SoC | Встраиваемые микроконтроллеры, DSP, контроллеры приводов |