AddrDecoder (Дешифратор адреса)
Входы (Inputs)
| Пин | Тип | Описание |
|---|---|---|
| Addr | bus8 | Адрес (0–255), поступает от операнда инструкции или индексного регистра |
Выходы (Outputs)
| Пин | Тип | Описание |
|---|---|---|
| RAM_SEL | bit | 1 = активна RAM, 0 = активен I/O |
| RAM_SEL8 | bus8 | 0xFF при RAM, 0x00 при I/O — маска для гейтирования выхода RAM через BusAND |
| IO_SEL | bit | 1 = активно I/O-устройство, 0 = не активно |
| DevAddr | bus8 | Адрес устройства в пространстве I/O (0–31), равен Addr & 0x1F |
Логика работы
AddrDecoder — комбинационная схема, разделяющая единое адресное пространство 0–255 на две зоны: RAM и I/O. Основа Memory-Mapped I/O (отображение устройств ввода-вывода на адресное пространство памяти).
Зона RAM: адреса 0x00–0xDF (0–223)
Когда Addr < 0xE0 (адрес меньше 224):
- RAM_SEL = 1 — RAM активна, можно читать и писать.
- RAM_SEL8 = 0xFF — маска пропускает выход RAM. Подключается к входу BusAND, который стоит между выходом RAM и шиной данных. Когда маска 0xFF — данные из RAM свободно проходят на шину.
- IO_SEL = 0 — I/O-устройства отключены.
- DevAddr = 0 — не используется.
Зона I/O: адреса 0xE0–0xFF (224–255)
Когда Addr ≥ 0xE0 (адрес от 224 до 255):
- RAM_SEL = 0 — RAM отключена.
- RAM_SEL8 = 0x00 — маска глушит выход RAM через BusAND (логическое И с 0x00 даёт 0x00). Это предотвращает конфликт на шине данных между RAM и I/O-устройством.
- IO_SEL = 1 — I/O-устройства активны.
- DevAddr = Addr & 0x1F — адрес устройства (0–31), получается обнулением трёх старших битов адреса. Таким образом, адреса 0xE0–0xFF отображаются на устройства 0x00–0x1F.
Карта устройств I/O
| Адрес | DevAddr | Устройство |
|---|---|---|
| 0xE0 | 0x00 | — (резерв) |
| 0xFA | 0x1A | LFSR (генератор случайных чисел) |
| 0xFC | 0x1C | MatrixDisplay — координата X |
| 0xFD | 0x1D | MatrixDisplay — координата Y |
| 0xFE | 0x1E | Gamepad (геймпад) |
| 0xFF | 0x1F | MatrixDisplay — значение пикселя |
Применение
Используется на уровнях 22–29. AddrDecoder — фундамент Memory-Mapped I/O, без которого процессор не может взаимодействовать с периферией. Типичная схема подключения:
- Addr ← операнд инструкции (биты 3:0) или индексный регистр: адрес, к которому обращается текущая инструкция.
- RAM_SEL → RAM (CS): выбор микросхемы RAM — разрешает чтение/запись только когда адрес в зоне RAM.
- RAM_SEL8 → BusAND (между выходом RAM и шиной данных): гейтирование — при I/O-операциях маска 0x00 глушит выход RAM, предотвращая конфликт на шине.
- IO_SEL → все I/O-устройства: общий сигнал разрешения для периферии.
- DevAddr → все I/O-устройства: какое конкретно устройство выбрано.
Без AddrDecoder процессор сможет работать только с RAM и не сможет читать геймпад, выводить графику на MatrixDisplay или получать случайные числа от LFSR.