Счётчик команд (ProgramCounter)

Входы (Inputs)

ПинТипОписание
ClockbitТактовый сигнал — срабатывание по фронту (0→1)
ResetbitСброс счётчика в 0 (высший приоритет)
LoadbitЗагрузка адреса Addr в счётчик (средний приоритет)
Addrbus8Адрес для загрузки (используется командами JMP, JZ, JN)
Incbus8Шаг инкремента (по умолчанию 1, если пин не подключён)

Выходы (Outputs)

ПинТипОписание
Qbus8Текущий адрес команды (0–255)

Логика работы

Представь указку учителя на строчке задачи: пока она не сдвинулась, класс читает одну и ту же строку. Счётчик команд PC — указка процессора: в нём лежит адрес байта в ROM, который будет исполнен следующим. Именно он превращает россыпь байтов в программу с порядком выполнения.

По каждому фронту Clock срабатывает одно из трёх действий по старшинству: Reset = 1 — сброс в 0; Load = 1 — загрузка адреса Addr (так работают JMP, JZ и JN); иначе Q увеличивается на Inc, а если Inc не подключён — на 1. Пример: программа с адреса 0 идёт 0 → 1 → 2 → 3, встречает JMP 20 — и следующий такт даёт Q = 20.

Нюанс уровня 19: команда занимает два байта — код операции и операнд. С шагом по умолчанию процессор свалился бы в середину команды, поэтому Inc подключают к константе 2: PC перескакивает через байт операнда. А на границе памяти 255 + 1 = 0 — счёт замыкается по кругу.

Примеры (последовательность тактов)

СитуацияResetLoadAddrQ после фронта
Перезапуск программы10—0
Обычное выполнение (Inc = 1)00—Q + 1 (например, 3 → 4)
JMP 20012020
Шаг PC+2, уровень 19 (Inc = 2)00—Q + 2 (например, 4 → 6)

Первая строка главнее остальных: Reset перекрывает и загрузку, и инкремент.

Применение

PC строится на уровне 14 и с уровня 16 живёт в каждом процессоре курса (уровни 16–29). Классическая обвязка: Q идёт на адресный вход ROM, операнд команды — на Addr, а сигналы дешифратора JumpUncond и JumpCond через флаги управляют Load.

Конкретное применение — все циклы и ветвления: JZ и JN с адресом назад превращают повтор в цикл, JMP на начало игрового цикла не даёт программе «убежать» в пустую память, а Reset перезапускает Змейку с чистого листа.

Собери это сам →

Смежные компоненты

Статьи по теме

Частые вопросы

Что делает счётчик команд?

Хранит адрес текущей команды и увеличивается каждый такт — процессор выполняет программу по порядку.

Зачем нужен вход +Inc?

Чтобы команды переходов могли сдвигать адрес сразу на несколько позиций.

Что произойдёт на адресе 255?

Следующий фронт даст 255 + 1 = 0: счётчик замкнёт по кругу, и процессор продолжит читать программу с начала памяти.

Почему на уровне 19 шаг равен двум?

Потому что команда занимает два байта: код операции и операнд. Шаг 2 переносит PC сразу на начало следующей команды.