Урок 1. Ячейка и строка: слово из 4 бит

В картинках

В процессоре Game & Watch вся память — примитив ram: поставил, настроил, и он помнит. Как он устроен внутри, не видно. В этом наборе мы соберём память сами — из тех же защёлок, что в первом наборе держали цифры часов. После этого урока у вас будет строка памяти WORD4: она запоминает 4 бита по кнопке и выдаёт их, когда её спросят.


1.1. Идея: память — это много защёлок

Один бит умеет хранить защёлка DLatch (первый набор, урок 2): пока на входе EN единица, её выход Q повторяет вход D; убрали единицу — Q держит последнее значение сколько угодно.

Память на 256 ячеек — это тысяча таких защёлок и способ выбрать нужные. Сначала научим одну защёлку двум вещам, которые понадобятся в большой памяти:

  • «запиши» — защёлка берёт новое значение, только когда ей разрешили (W = 1);
  • «выдай» — защёлка выпускает свой бит наружу, только когда её выбрали (R = 1), а в остальное время на выходе ноль.

Зачем второе: в следующем уроке выходы шестнадцати строк сойдутся в одну точку. Если невыбранные строки дают нули, их можно просто сложить вентилем ИЛИ — останется бит выбранной.

1.2. Ячейка: защёлка и «кран»

DW«запиши»DLatchD · EN → QDENQхранит битR«выбрана ли строка»OR = 1 → O = QR = 0 → O = 0
Одна ячейка памяти — один бит. Защёлка из первого набора хранит бит Q: пока W = 1, она повторяет D, отпустил W — держит. Вентиль AND на выходе — «кран»: выпускает Q наружу, только когда строку выбрали (R = 1), иначе на выходе 0.

«Кран» — обычный AND: O = Q · R. Когда R = 0, на выходе 0, что бы ни хранила защёлка.

DWQROзаписьD меняется — Q держитR = 1: Q выходит
Ячейка во времени. Пока W = 1 (подсвечено), Q повторяет D и запоминает 1. Потом D прыгает как угодно — Q держит. Наружу (O) бит выходит, только пока R = 1.

1.3. Строка: 4 ячейки с общими проводами

Процессор работает словами по 4 бита, поэтому ячейки ставим по четыре. У каждой свой бит данных D и свой выход O, а «запиши» W и «выдай» R — общие на всю строку.

WRD0DLatchq0O0D1DLatchq1O1D2DLatchq2O2D3DLatchq3O3одна кнопка W пишет все 4 бита сразу, один провод R выпускает все 4
Строка WORD4 — слово из 4 бит. Четыре ячейки стоят рядом: у каждой свой бит данных D и свой выход O, а «запиши» W и «выдай» R у них общие. Поэтому слово пишется и читается целиком.
  • W = 1 — все четыре защёлки открыты, слово D3 D2 D1 D0 записывается целиком;
  • R = 1 — все четыре «крана» открыты, слово выходит на O3 O2 O1 O0.

1.4. Сборка

Ставить в новый пустой проект: у стенда свои тумблеры и питание. Нужны чипы первого набора NOT, AND, NOR, SRLatch, DLatch.

Шаг 1. Чип WORD4

Что собираем. Строку памяти: четыре защёлки и четыре «крана».

ПОРТЫ-ВХОДЫ: D0, D1, D2, D3, W, R · ПОРТЫ-ВЫХОДЫ: O0, O1, O2, O3

ЭлементНогаНаправлениеМетка
DLatchDвходD0
DLatchENвходW
DLatchQвыходq0
DLatchDвходD1
DLatchENвходW
DLatchQвыходq1
DLatchDвходD2
DLatchENвходW
DLatchQвыходq2
DLatchDвходD3
DLatchENвходW
DLatchQвыходq3
ANDI0входq0
ANDI1входR
ANDO0выходO0
ANDI0входq1
ANDI1входR
ANDO0выходO1
ANDI0входq2
ANDI1входR
ANDO0выходO2
ANDI0входq3
ANDI1входR
ANDO0выходO3

Выделить всё → Ctrl+G → в библиотеке двойной клик по имени чипа → WORD4.

Шаг 2. Стенд

Что собираем. Пульт для проверки: четыре тумблера данных, тумблер «выдай» R, кнопка «запиши» W и два табло — что на тумблерах и что выдаёт строка.

ЭлементНогаНаправлениеМетка
poweroutвыходVCC
groundoutвыходGND
inputOutвыходwD0
inputOutвыходwD1
inputOutвыходwD2
inputOutвыходwD3
inputOutвыходwR
buttonoutвыходwW
WORD4D0входwD0
WORD4D1входwD1
WORD4D2входwD2
WORD4D3входwD3
WORD4WвходwW
WORD4RвходwR
WORD4O0выходwO0
WORD4O1выходwO1
WORD4O2выходwO2
WORD4O3выходwO3

Оба табло: ⚙ — ширина 4, вид HEX; источник — шина wD (тумблеры) и wO (выход строки). Стенд в чип не сворачивать.

1.5. Проверка

Тумблеры wD0–wD3 — двоичное число справа налево: wD0 — младший бит. 5 = 0101 (включены wD0 и wD2).

№Что делаешьТумблерыТабло wO
1R выключенлюбые0«кран» закрыт
2набрать 5, нажать и отпустить W,
включить R
01015записали 5 и выпустили наружу
3набрать A (W не трогать)10105тумблеры поменялись — память нет
4выключить R10100
5включить R101055 никуда не делась
6держать W и щёлкать тумблерамилюбые= тумблерыпока W нажата, защёлки открыты —
так и должно быть
7отпустить Wлюбыепоследнеезапомнилось то, что было в
момент отпускания

Сразу после включения, пока ничего не записано, при R = 1 табло wO пустое или оранжевое (в Fast — F): защёлки ещё ничего не хранят. Так и должно быть — настоящая память при включении тоже содержит «что попало».

Если не так:

ВидноГде смотреть
wO всегда 0R: тумблер wR → нога R чипа; внутри AND второй вход
= R (у всех четырёх одна метка R)
запоминается не всё словоW на EN у всех четырёх DLatch
один бит не тотD и O этого бита: D0 → защёлка → q0 → AND → O0

Частая ошибка. При копировании метки редактор дописывает к имени номер: R → R1, R2. Метки с разными именами — разные провода. Если «кран» открывается только у одного бита — проверьте имена меток R и W внутри WORD4.

Вставка урока 1 (Cmd+I)

В новый проект с чипами первого набора.

# Урок 1 — ячейка и строка памяти: чип WORD4 + стенд.# Вставка: Cmd+I в новый проект (нужны NOT, AND, NOR, SRLatch, DLatch первого набора). # ---------- строка памяти: 4 бита ----------# W = 1 — запомнить D0–D3; R = 1 — выдать хранимое на O0–O3 (R = 0 — там нули)chip WORD4 {  portIn(D0)  portIn(D1)  portIn(D2)  portIn(D3)  portIn(W)  portIn(R)  portOut(O0)  portOut(O1)  portOut(O2)  portOut(O3)  DLatch(D=D0, EN=W, Q=q0)  DLatch(D=D1, EN=W, Q=q1)  DLatch(D=D2, EN=W, Q=q2)  DLatch(D=D3, EN=W, Q=q3)  AND(q0, R, O0)  AND(q1, R, O1)  AND(q2, R, O2)  AND(q3, R, O3)} # ---------- стенд ----------power(VCC)ground(GND)# данные (4 тумблера), «выдай» (тумблер), «запиши» (кнопка: держишь — пишется)input(Out=wD0)input(Out=wD1)input(Out=wD2)input(Out=wD3)input(Out=wR)button{label="W", hostKey="KeyW"}(wW)WORD4(D0=wD0, D1=wD1, D2=wD2, D3=wD3, W=wW, R=wR, O0=wO0, O1=wO1, O2=wO2, O3=wO3)# табло: что на тумблерах данных и что выдаёт строкаdisplay{bits=4, base="HEX", busSource="wD"}()display{bits=4, base="HEX", busSource="wO"}()

Не получается? Что-то не работает →