Память: SRAM и первая программа руками
Паспорт модуля
| Параметр | Значение |
|---|---|
| Аудитория | 🟡🔴; 🟢 — экскурс «записать и прочитать байт» на занятии 2; пройдены М7–М8 |
| Аутентичная задача | собрать модуль памяти с ручным программированием и вписать в неё первую программу процессора байт за байтом — как это делали на первых ЭВМ |
| Объём | 4 занятия × 90 мин |
| Оборудование | SRAM 32К×8 (62256/CY62256-класс; используем младшие 256 адресов), 74HC173 ×2 (MAR), 74HC245, DIP ×2, кнопка WRITE с антидребезгом (М5!), тумблер RUN/PROG, RP2350-монитор |
| Ограничения | 5 В; SRAM энергозависима — «программа живёт, пока есть питание» проговаривается явно |
Аутентичная задача. После модуля обучающиеся смогут: вручную записать в RAM программу из М13 (машинные коды из таблицы Я74-ISA) и прочитать её обратно без ошибок — навык, который делает осмысленным и ассемблер (М14), и загрузчик (М17).
Цели
| № | Обучающиеся … | Блум—Андерсон | Миллер | Проверка |
|---|---|---|---|---|
| 1 | объясняют роль сигналов /CE, /OE, /WE и цикл записи | понимать | знает | квиз + временная диаграмма от руки |
| 2 | собирают тракт MAR→RAM→шина в дисциплине М7 | применять | показывает как | приёмка узла |
| 3 | записывают и верифицируют 16-байтовую последовательность | применять | показывает как | верификация RP2350 |
| 4 | диагностируют типовые сбои памяти (перепутанные адресные линии, «затирание») | анализировать | показывает как | дебаг-кейс |
Оценивание
| Занятие | Цель | Средство | Тип |
|---|---|---|---|
| 2 | 1, 2 | приёмка: чтение возвращает записанное по трём произвольным адресам | формирующее |
| 3 | 3 | «золотой дамп»: 16 байт записаны, RP2350 читает и сравнивает — 0 расхождений | формирующее |
| 4 | 4 | дебаг-кейс: заложены обмен A0↔A3 и /WE без антидребезга; протокол локализации | итоговое |
Путь и разборы
| № | Тема | Разминка | Ядро |
|---|---|---|---|
| 1 | Устройство SRAM | сценарии PC (М8) | worked example: матрица ячеек-защёлок (мост к М5!), дешифратор адреса (мост к М2!) — память «собрана» из уже пройденного; сигналы /CE, /OE, /WE и почему /OE и /WE не бывают активны одновременно |
| 2 | MAR и тракт | 3 вопроса зан. 1 | регистр адреса MAR слушает шину (MI); данные RAM ходят в шину через 245 (RO) и из шины при записи (RI) |
| 3 | Ручное программирование | временная диаграмма записи | режим PROG: адрес и байт с DIP, короткий /WE кнопкой (антидребезг из М5 — иначе «одна запись» затирает соседние такты); запись контрольного паттерна 0x00,0xFF,0xAA,0x55 + адресный марш |
| 4 | Дебаг памяти | кумулятивный квиз М7–М9 | кейс: почему паттерн 0xAA/0x55 и адресный марш ловят замыкания соседних линий данных и обмен адресных линий |
flowchart LR
BUS(("ШИНА")) -- MI --> MAR[MAR 8 бит]
MAR --> ADDR[A0..A7 SRAM\nA8..A14 = GND]
BUS -- RI --> DIN[Данные записи]
DIN --> RAM[(SRAM 32К×8)]
RAM -- RO --> BUS
CTRL["/CE /OE /WE\nот тумблера PROG или УУ"] --> RAM
Почему тестовые паттерны именно такие: 0xAA/0x55 — шахматка соседних бит, ловит замыкания линий данных; адресный марш «записать в адрес N его номер, потом проверить всё» ловит перепутанные/закороченные адресные линии (два адреса «смотрят» в одну ячейку). Это настоящая производственная методика самотестирования памяти, доступная на макетке.
Типичные ошибки: /WE дребезжит — одна «запись» портит несколько ячеек (симптом: сосед по адресу изменился); чтение при активном /WE — конфликт на линиях данных; неиспользуемые старшие адреса A8–A14 висят — «программа исчезает» при касании платы (строго на GND); выключили питание «на минутку» — SRAM всё забыла (это не ошибка, это физика: обсудить FRAM как современную альтернативу).
Уровни
Записать и прочитать свой байт по своему адресу; объяснить, «где он лежал».
Полный модуль памяти с режимом PROG и золотым дампом; дебаг-кейс.
Написать на бумаге полный марш-тест (March C− как идея), оценить время теста 256 байт при частоте узла CLK; задача о минимальном числе паттернов для обнаружения обмена k адресных линий.