Уровень 22: Конфликт на шине

Открыть уровень →

Задание

Исправьте конфликт на шине данных: RAM и Gamepad одновременно выдают данные. Добавьте AddrDecoder и BusAND для гейтирования RAM.

Когда на шине данных встречаются два устройства (RAM и Gamepad), возникает КОНФЛИКТ: оба пытаются выдать данные одновременно.

Материалы по теме

Решение

Шина данных — это пучок медных проводов, по которым одновременно может «кричать» только одно устройство. Если RAM и геймпад выдают данные одновременно — это короткое замыкание: сигналы физически дерутся на проводах. BusAND решает проблему электрически: он «заглушает» неактивное устройство, умножая его данные на нулевую маску, — на шину выходит тишина.

AddrDecoder решает эту проблему: - Адреса 0–223 (0x00–0xDF) → RAM (RAM_SEL=1) - Адреса 224–255 (0xE0–0xFF) → I/O устройства (IO_SEL=1)

AddrDecoder выдаёт два сигнала: - RAM_SEL8 (bus8) — маска для данных RAM (0xFF когда RAM, 0x00 когда I/O) - IO_SEL (bit) — флаг обращения к порту ввода-вывода

Задачи: 1. BusConstant = 2 → PC.Inc. 2. ROM#1 → RAM.Addr. 3. ROM#1 → AddrDecoder.Addr (чтобы декодер знал, к чему обращается инструкция). 4. Подключите шину данных к ALU8.B: RAM.DataOut → BusAND.A, AddrDecoder.RAM_SEL8 → BusAND.B, затем BusAND.Q → BusOR, и далее к ALU8.B.

Этот каскад (RAM → BusAND → BusOR) маскирует данные RAM, когда адрес принадлежит I/O-устройству — разрешая конфликт на шине.

Схема решения уровня 22 — Конфликт на шине
Авторское решение уровня 22 в симуляторе (тёмная тема)