ProgramCounter (Счётчик команд)
Входы (Inputs)
| Пин | Тип | Описание |
|---|---|---|
| Clock | bit | Тактовый сигнал — срабатывание по фронту (0→1) |
| Reset | bit | Сброс счётчика в 0 (высший приоритет) |
| Load | bit | Загрузка адреса Addr в счётчик (средний приоритет) |
| Addr | bus8 | Адрес для загрузки (используется командами JMP, JZ, JN) |
| Inc | bus8 | Шаг инкремента (по умолчанию 1, если пин не подключён) |
Выходы (Outputs)
| Пин | Тип | Описание |
|---|---|---|
| Q | bus8 | Текущий адрес команды (0–255) |
Логика работы
ProgramCounter — ключевой элемент процессора, хранящий адрес текущей выполняемой инструкции. По каждому фронту Clock (переход 0→1) выполняется одно из трёх действий, в порядке приоритета:
- Reset = 1 (высший приоритет): Q сбрасывается в 0. Addr и Load игнорируются.
- Load = 1 (средний приоритет): Q принимает значение Addr. Используется командами JMP (безусловный переход), JZ и JN (условные переходы) для изменения потока выполнения.
- Иначе (низший приоритет): Q увеличивается на Inc. Это обеспечивает последовательное выполнение программы.
Важно: если пин Inc не подключён, ProgramCounter использует значение по умолчанию 1 (определяется через isInputConnected). Это значит, что при обычной работе (без переходов) счётчик инкрементируется на 1 каждый такт, переходя к следующей инструкции в ROM.
Счётчик работает в диапазоне 0–255. При переполнении (255 + 1) значение сбрасывается в 0.
Применение
Используется на уровнях 16, 18–29. ProgramCounter — обязательный компонент любого процессора. Типичная схема подключения:
- Q → ROM (Address): выход счётчика подключён к адресному входу ROM. ROM по этому адресу выдаёт байт инструкции.
- JMP/JZ/JN → Load + Addr: сигналы условного и безусловного переходов от Decoder подключаются к Load, а младшие 4 бита инструкции (адрес перехода) — к Addr.
- Reset: обычно подключается к кнопке сброса или сигналу начальной инициализации.
- Inc: как правило, оставляется неподключённым (по умолчанию 1). Может использоваться для пропуска инструкций (скип).
Без ProgramCounter процессор не сможет последовательно читать команды из ROM.