Урок 1. АЛУ и регистр A: калькулятор на тумблерах

В картинках

После этого урока у тебя будет сердце процессора карты: тумблерами выбираешь операцию и число, нажимаешь кнопку — и регистр A складывает, вычитает, сравнивает. Это калькулятор, только операции у него — команды процессора.


1.1. Идея: одно действие за такт

Процессор карты за один такт делает одно действие: A ← A (операция) B.

  • A — аккумулятор: регистр на 8 бит, в нём живёт результат;
  • B — число: сейчас с тумблеров, потом из программы или памяти;
  • операция — код из 4 бит: тот же, что потом будет в слове программы.

Такт — кнопка CLK: нажал — выполнилась одна операция, A запомнил результат.

тумблеры кодаir12–ir15тумблеры числаB = bv0–bv7Aрегистр, 8 битDEC16oLD … oCMPАЛУ+ − И ИЛИ XORкакая операцияAрезультат → в A по фронту CLK= 0?OR8 + NOTZнольперенос coutCперенос
Урок 1 целиком: код операции зажигает один провод дешифратора, АЛУ делает с A и B эту операцию, результат по фронту CLK возвращается в A. Флаг Z — «результат = 0» (проверка всех 8 бит), флаг C — отдельный выход АЛУ: перенос из старшего разряда, в 8-битном результате его нет. Оба запоминаются тем же фронтом CLK.

1.2. Идея: один сумматор на четыре операции

Сложение, сложение с переносом, вычитание и сравнение делает один сумматор из восьми FA:

  • вычитание — это сложение с перевёрнутым числом и единицей: A − B = A + НЕ B + 1;
  • XOR с сигналом sub переворачивает биты B, единица приходит переносом в младший разряд;
  • CMP — это SUB, после которого A не записывается: остаются только флаги.
A − B = A + НЕ B + 1A00101101= 45B00101101= 45НЕ B11010010= 210+100000001= 1= A − B00000000= 0XOR(B, sub)sub = 1 → бит переворачивается+1 приходит переносом cinв младший разряд
Вычитать отдельной схемой не нужно: 45 − 45 = 45 + (НЕ 45) + 1 = 256 → в 8 битах 0, и перенос C = 1 («заёма не было»). Поэтому SUB и CMP — тот же сумматор, что ADD.

1.3. Идея: флаги — память о результате

Два триггера помнят, каким был результат: Z — «получился ноль», C — «был перенос из старшего разряда» (у вычитания C = 1 значит «заёма не было», A ≥ B). По флагам программа потом будет решать, куда идти дальше.

1.4. Сборка

Новый проект. Нужны вентили NOT, NAND, NOR, AND, OR, XOR:

  • уже есть в библиотеке — бери;
  • собрать с нуля из транзисторов — урок 0;
  • сразу к делу — вставь урок 0 (Cmd+I, только определения чипов).
Кодir15…ir12ОперацияЧто делает
00000LDA ← B
10001STзаписать A в память (урок 3)
20010ADDA ← A + B
30011ADCA ← A + B + C
40100SUBA ← A − B
50101ANDA ← A И B
60110ORA ← A ИЛИ B
70111XORA ← A ИСКЛ-ИЛИ B
81000CMPкак SUB, A не меняется
9–151001–1111переходыурок 2 и 4

Два флага помнят, каким был результат: Z — ноль, C — перенос из старшего разряда.

Шаг 1. Чип SRLatch — защёлка: два NOR крест-накрест

Если SRLatch уже есть в библиотеке (из «Фрактальной машины» или «Памяти на транзисторах») — шаг пропусти.

ДетальНогаМетка
Порт входавыходR
Порт входавыходS
Порт выходавходQ
Порт выходавходnQ
NORI0
I1
O0
R
nQ
Q
NORI0
I1
O0
S
Q
nQ

Ctrl+G → имя SRLatch. Ноги: входы R, S; выходы Q, nQ.

Шаг 2. Чип DLatch — защёлка с разрешением: EN = 1 — Q повторяет D

Если DLatch уже есть в библиотеке (из «Фрактальной машины» или «Памяти на транзисторах») — шаг пропусти.

ДетальНогаМетка
Порт входавыходD
Порт входавыходEN
Порт выходавходQ
Порт выходавходnQ
NOTI0
O0
D
nD
ANDI0
I1
O0
D
EN
setD
ANDI0
I1
O0
nD
EN
rstD
SRLatchS
R
Q
nQ
setD
rstD
Q
nQ

Ctrl+G → имя DLatch. Ноги: входы D, EN; выходы Q, nQ.

Шаг 3. Чип DFF — триггер: запоминает D в момент, когда CLK 0 → 1

Если DFF уже есть в библиотеке (из «Фрактальной машины») — шаг пропусти.

ДетальНогаМетка
Порт входавыходD
Порт входавыходCLK
Порт выходавходQ
Порт выходавходnQ
NOTI0
O0
CLK
nCLK
DLatchD
EN
Q
D
nCLK
mid
DLatchD
EN
Q
nQ
mid
CLK
Q
nQ

Ctrl+G → имя DFF. Ноги: входы D, CLK; выходы Q, nQ.

Шаг 4. Чип MUX2 — выбор из двух: S = 0 → A, S = 1 → B

Если MUX2 уже есть в библиотеке (из «Часов и игры») — шаг пропусти.

ДетальНогаМетка
Порт входавыходA
Порт входавыходB
Порт входавыходS
Порт выходавходY
NOTI0
O0
S
nS
NANDI0
I1
O0
A
nS
na
NANDI0
I1
O0
B
S
nb
NANDI0
I1
O0
na
nb
Y

Ctrl+G → имя MUX2. Ноги: входы A, B, S; выходы Y.

Шаг 5. Чип RBIT — бит регистра: LD = 1 — запомнить D на фронте, nR = 0 — запомнить 0

ДетальНогаМетка
Порт входавыходD
Порт входавыходLD
Порт входавыходnR
Порт входавыходCLK
Порт выходавходQ
MUX2A
B
S
Y
Q
D
LD
m
ANDI0
I1
O0
m
nR
d
DFFD
CLK
Q
d
CLK
Q

Ctrl+G → имя RBIT. Ноги: входы D, LD, nR, CLK; выходы Q.

Шаг 6. Чип FA — полный сумматор одного разряда

Если FA уже есть в библиотеке (из «Как считает процессор» или «Часов и игры») — шаг пропусти.

ДетальНогаМетка
Порт входавыходA
Порт входавыходB
Порт входавыходCI
Порт выходавходS
Порт выходавходCO
XORI0
I1
O0
A
B
p
XORI0
I1
O0
p
CI
S
ANDI0
I1
O0
A
B
g
ANDI0
I1
O0
p
CI
pc
ORI0
I1
O0
g
pc
CO

Ctrl+G → имя FA. Ноги: входы A, B, CI; выходы S, CO.

Шаг 7. Чип AND4 — И на 4 входа

Если AND4 уже есть в библиотеке (из «Часов и игры») — шаг пропусти.

ДетальНогаМетка
Порт входавыходA
Порт входавыходB
Порт входавыходC
Порт входавыходD
Порт выходавходY
ANDI0
I1
O0
A
B
ab
ANDI0
I1
O0
ab
C
abc
ANDI0
I1
O0
abc
D
Y

Ctrl+G → имя AND4. Ноги: входы A, B, C, D; выходы Y.

Шаг 8. Чип OR4 — ИЛИ на 4 входа

Если OR4 уже есть в библиотеке (из «Своего процессора…») — шаг пропусти.

ДетальНогаМетка
Порт входавыходA
Порт входавыходB
Порт входавыходC
Порт входавыходD
Порт выходавходY
ORI0
I1
O0
A
B
ab
ORI0
I1
O0
C
D
cd
ORI0
I1
O0
ab
cd
Y

Ctrl+G → имя OR4. Ноги: входы A, B, C, D; выходы Y.

Шаг 9. Чип OR8 — ИЛИ на 8 входов

ДетальНогаМетка
Порт входавыходA
Порт входавыходB
Порт входавыходC
Порт входавыходD
Порт входавыходE
Порт входавыходF
Порт входавыходG
Порт входавыходH
Порт выходавходY
OR4A
B
C
D
Y
A
B
C
D
lo
OR4A
B
C
D
Y
E
F
G
H
hi
ORI0
I1
O0
lo
hi
Y

Ctrl+G → имя OR8. Ноги: входы A, B, C, D, E, F, G, H; выходы Y.

Шаг 10. Чип DEC16 — дешифратор 4 → 16: горит ровно один провод

Если DEC16 уже есть в библиотеке (из «Своего процессора…») — шаг пропусти.

ДетальНогаМетка
Порт входавыходI0
Порт входавыходI1
Порт входавыходI2
Порт входавыходI3
Порт выходавходY0
Порт выходавходY1
Порт выходавходY2
Порт выходавходY3
Порт выходавходY4
Порт выходавходY5
Порт выходавходY6
Порт выходавходY7
Порт выходавходY8
Порт выходавходY9
Порт выходавходY10
Порт выходавходY11
Порт выходавходY12
Порт выходавходY13
Порт выходавходY14
Порт выходавходY15
NOTI0
O0
I0
n0
NOTI0
O0
I1
n1
NOTI0
O0
I2
n2
NOTI0
O0
I3
n3
AND4A
B
C
D
Y
n3
n2
n1
n0
Y0
AND4A
B
C
D
Y
n3
n2
n1
I0
Y1
AND4A
B
C
D
Y
n3
n2
I1
n0
Y2
AND4A
B
C
D
Y
n3
n2
I1
I0
Y3
AND4A
B
C
D
Y
n3
I2
n1
n0
Y4
AND4A
B
C
D
Y
n3
I2
n1
I0
Y5
AND4A
B
C
D
Y
n3
I2
I1
n0
Y6
AND4A
B
C
D
Y
n3
I2
I1
I0
Y7
AND4A
B
C
D
Y
I3
n2
n1
n0
Y8
AND4A
B
C
D
Y
I3
n2
n1
I0
Y9
AND4A
B
C
D
Y
I3
n2
I1
n0
Y10
AND4A
B
C
D
Y
I3
n2
I1
I0
Y11
AND4A
B
C
D
Y
I3
I2
n1
n0
Y12
AND4A
B
C
D
Y
I3
I2
n1
I0
Y13
AND4A
B
C
D
Y
I3
I2
I1
n0
Y14
AND4A
B
C
D
Y
I3
I2
I1
I0
Y15

Ctrl+G → имя DEC16. Ноги: входы I0, I1, I2, I3; выходы Y0, Y1, Y2, Y3, Y4, Y5, Y6, Y7, Y8, Y9, Y10, Y11, Y12, Y13, Y14, Y15.

Шаг 11. Пульт: код операции, число, такт, сброс

Четыре тумблера ir12–ir15 — код операции (как будет в слове ПЗУ), восемь bv0–bv7 — число. Кнопка CLK — такт: нажал — выполнилась одна операция. Тумблер RST — сброс: пока включён, нажатие CLK кладёт 0 в A, C, Z.

ДетальНогаМетка
PowerвыходVCC
GroundвыходGND
Input (тумблер)выходir12
Input (тумблер)выходir13
Input (тумблер)выходir14
Input (тумблер)выходir15
Input (тумблер)выходbv0
Input (тумблер)выходbv1
Input (тумблер)выходbv2
Input (тумблер)выходbv3
Input (тумблер)выходbv4
Input (тумблер)выходbv5
Input (тумблер)выходbv6
Input (тумблер)выходbv7
Button (кнопка)выходCLK
Input (тумблер)выходRST
NOTI0
O0
RST
nR

Шаг 12. Дешифратор и управление

DEC16 зажигает провод операции. Дальше — кто что пишет: wA — пишется A (коды 0–7, кроме ST); wZ — флаг Z (они же и CMP); wC — флаг C (сложения, вычитание, CMP); sub — вычитание (SUB, CMP).

ДетальНогаМетка
DEC16I0
I1
I2
I3
Y0
Y1
Y2
Y3
Y4
Y5
Y6
Y7
Y8
Y9
Y10
Y11
Y12
Y13
Y14
Y15
ir12
ir13
ir14
ir15
oLD
oST
oADD
oADC
oSUB
oAND
oOR
oXOR
oCMP
oJMP
oJZ
oJNZ
oJC
oJNC
oCALL
oRET
NORI0
I1
O0
ir15
oST
wA
ORI0
I1
O0
wA
oCMP
wZ
OR4A
B
C
D
Y
oADD
oADC
oSUB
oCMP
wC
ORI0
I1
O0
oSUB
oCMP
sub

Шаг 13. Сумматор: ADD, ADC, SUB, CMP

Вычитание — сложение с перевёрнутым числом и единицей: A + НЕ B + 1. XOR с sub переворачивает биты, единица приходит переносом cin. ADC прибавляет перенос прошлой операции (fC).

ДетальНогаМетка
XORI0
I1
O0
bv0
sub
bx0
XORI0
I1
O0
bv1
sub
bx1
XORI0
I1
O0
bv2
sub
bx2
XORI0
I1
O0
bv3
sub
bx3
XORI0
I1
O0
bv4
sub
bx4
XORI0
I1
O0
bv5
sub
bx5
XORI0
I1
O0
bv6
sub
bx6
XORI0
I1
O0
bv7
sub
bx7
ANDI0
I1
O0
oADC
fC
adcC
ORI0
I1
O0
sub
adcC
cin
FAA
B
CI
S
CO
acc0
bx0
cin
sm0
c1
FAA
B
CI
S
CO
acc1
bx1
c1
sm1
c2
FAA
B
CI
S
CO
acc2
bx2
c2
sm2
c3
FAA
B
CI
S
CO
acc3
bx3
c3
sm3
c4
FAA
B
CI
S
CO
acc4
bx4
c4
sm4
c5
FAA
B
CI
S
CO
acc5
bx5
c5
sm5
c6
FAA
B
CI
S
CO
acc6
bx6
c6
sm6
c7
FAA
B
CI
S
CO
acc7
bx7
c7
sm7
cout

Шаг 14. Логика: AND, OR, XOR

ДетальНогаМетка
ANDI0
I1
O0
acc0
bv0
la0
ANDI0
I1
O0
acc1
bv1
la1
ANDI0
I1
O0
acc2
bv2
la2
ANDI0
I1
O0
acc3
bv3
la3
ANDI0
I1
O0
acc4
bv4
la4
ANDI0
I1
O0
acc5
bv5
la5
ANDI0
I1
O0
acc6
bv6
la6
ANDI0
I1
O0
acc7
bv7
la7
ORI0
I1
O0
acc0
bv0
lo0
ORI0
I1
O0
acc1
bv1
lo1
ORI0
I1
O0
acc2
bv2
lo2
ORI0
I1
O0
acc3
bv3
lo3
ORI0
I1
O0
acc4
bv4
lo4
ORI0
I1
O0
acc5
bv5
lo5
ORI0
I1
O0
acc6
bv6
lo6
ORI0
I1
O0
acc7
bv7
lo7
XORI0
I1
O0
acc0
bv0
lx0
XORI0
I1
O0
acc1
bv1
lx1
XORI0
I1
O0
acc2
bv2
lx2
XORI0
I1
O0
acc3
bv3
lx3
XORI0
I1
O0
acc4
bv4
lx4
XORI0
I1
O0
acc5
bv5
lx5
XORI0
I1
O0
acc6
bv6
lx6
XORI0
I1
O0
acc7
bv7
lx7

Шаг 15. Выбор результата

Цепочка выборов: сумма → XOR → OR → AND → число как есть (LD). Горит провод операции — её результат проходит дальше, остальные — мимо.

ДетальНогаМетка
MUX2A
B
S
Y
sm0
lx0
oXOR
r1_0
MUX2A
B
S
Y
sm1
lx1
oXOR
r1_1
MUX2A
B
S
Y
sm2
lx2
oXOR
r1_2
MUX2A
B
S
Y
sm3
lx3
oXOR
r1_3
MUX2A
B
S
Y
sm4
lx4
oXOR
r1_4
MUX2A
B
S
Y
sm5
lx5
oXOR
r1_5
MUX2A
B
S
Y
sm6
lx6
oXOR
r1_6
MUX2A
B
S
Y
sm7
lx7
oXOR
r1_7
MUX2A
B
S
Y
r1_0
lo0
oOR
r2_0
MUX2A
B
S
Y
r1_1
lo1
oOR
r2_1
MUX2A
B
S
Y
r1_2
lo2
oOR
r2_2
MUX2A
B
S
Y
r1_3
lo3
oOR
r2_3
MUX2A
B
S
Y
r1_4
lo4
oOR
r2_4
MUX2A
B
S
Y
r1_5
lo5
oOR
r2_5
MUX2A
B
S
Y
r1_6
lo6
oOR
r2_6
MUX2A
B
S
Y
r1_7
lo7
oOR
r2_7
MUX2A
B
S
Y
r2_0
la0
oAND
r3_0
MUX2A
B
S
Y
r2_1
la1
oAND
r3_1
MUX2A
B
S
Y
r2_2
la2
oAND
r3_2
MUX2A
B
S
Y
r2_3
la3
oAND
r3_3
MUX2A
B
S
Y
r2_4
la4
oAND
r3_4
MUX2A
B
S
Y
r2_5
la5
oAND
r3_5
MUX2A
B
S
Y
r2_6
la6
oAND
r3_6
MUX2A
B
S
Y
r2_7
la7
oAND
r3_7
MUX2A
B
S
Y
r3_0
bv0
oLD
res0
MUX2A
B
S
Y
r3_1
bv1
oLD
res1
MUX2A
B
S
Y
r3_2
bv2
oLD
res2
MUX2A
B
S
Y
r3_3
bv3
oLD
res3
MUX2A
B
S
Y
r3_4
bv4
oLD
res4
MUX2A
B
S
Y
r3_5
bv5
oLD
res5
MUX2A
B
S
Y
r3_6
bv6
oLD
res6
MUX2A
B
S
Y
r3_7
bv7
oLD
res7

Шаг 16. Регистр A и флаги Z, C

Z — «результат ноль»: ИЛИ всех 8 бит, перевёрнутое. C — перенос из старшего разряда (у вычитания: 1 = «не было заёма», A ≥ B).

ДетальНогаМетка
RBITD
LD
nR
CLK
Q
res0
wA
nR
CLK
acc0
RBITD
LD
nR
CLK
Q
res1
wA
nR
CLK
acc1
RBITD
LD
nR
CLK
Q
res2
wA
nR
CLK
acc2
RBITD
LD
nR
CLK
Q
res3
wA
nR
CLK
acc3
RBITD
LD
nR
CLK
Q
res4
wA
nR
CLK
acc4
RBITD
LD
nR
CLK
Q
res5
wA
nR
CLK
acc5
RBITD
LD
nR
CLK
Q
res6
wA
nR
CLK
acc6
RBITD
LD
nR
CLK
Q
res7
wA
nR
CLK
acc7
OR8A
B
C
D
E
F
G
H
Y
res0
res1
res2
res3
res4
res5
res6
res7
nz
NOTI0
O0
nz
zr
RBITD
LD
nR
CLK
Q
zr
wZ
nR
CLK
fZ
RBITD
LD
nR
CLK
Q
cout
wC
nR
CLK
fC

Шаг 17. Табло и лампы

Табло показывает A (0–255). Лампы — флаги Z и C.

ДетальНогаМетка
Display⚙ширина 8, DEC, шина acc
LEDвходfZ
LEDвходfC

1.5. Проверка

Операцияir15…ir12bv7…bv0 (число)Табло ACZЧто видно
сброс——000RST включён, нажать CLK, RST выключить
LD00001100 1000 (200)20000взять число
ADD00100110 0100 (100)4410200 + 100 = 300 — не влезает в 8 бит: 300 − 256 = 44, C = 1
ADC00110000 0000 (0)450044 + 0 + C = 45: перенос прибавился
SUB01000010 1101 (45)01145 − 45 = 0 → Z = 1; C = 1: заёма не было
SUB01000000 0001 (1)255000 − 1 = 255: заём, C = 0
CMP10001111 1111 (255)25511как SUB, но A не меняется: 255 − 255 = 0 → Z = 1
AND01010000 1111 (15)1510оставить младшие 4 бита
OR01101111 0000 (240)25510включить старшие 4 бита
XOR01111010 1010 (170)8510перевернуть биты 1010 1010
ST00010000 0111 (7)8510ST (код 1) A не трогает
LD00000000 0000 (0)011LD 0 → Z = 1; C не меняется

Каждая строка — поставить тумблеры и один раз нажать CLK. В колонках тумблеров слева — старший, 1 — включён.

  • LD, AND, OR, XOR меняют только Z, лампа C горит как горела — так и должно быть.
  • Коды 9–15 (переходы) пока ничего не делают: им нужен счётчик команд — урок 2.
  • RST не мгновенный: сброс случается по нажатию CLK (сброс синхронный, как у всей карты).

Если не так:

  • A не меняется совсем — проверь LD у RBIT (метка wA) и CLK.
  • Неверны только старшие биты суммы — цепочка переносов: CI каждого FA на метке CO предыдущего (c1…c7).
  • SUB прибавляет вместо вычитания — sub на втором входе XOR и cin.

В чип не сворачивать — дальше к этой схеме добавятся ПЗУ, память и порт.


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

Нужны вентили NOT, NAND, NOR, AND, OR, XOR (урок 0 или его вставка).

# Урок 1 — АЛУ и регистр A: калькулятор на тумблерах.# Вставка: Cmd+I в новый проект, где есть вентили NOT, NAND, NOR, AND, OR, XOR (урок 0 или его вставка).# Если чип уже есть в библиотеке — удали его блок chip из вставки. # ---------- SRLatch ----------chip SRLatch {  portIn(R)  portIn(S)  portOut(Q)  portOut(nQ)  NOR(R, nQ, Q)  NOR(S, Q, nQ)} # ---------- DLatch ----------chip DLatch {  portIn(D)  portIn(EN)  portOut(Q)  portOut(nQ)  NOT(D, nD)  AND(D, EN, setD)  AND(nD, EN, rstD)  SRLatch(S=setD, R=rstD, Q=Q, nQ=nQ)} # ---------- DFF ----------chip DFF {  portIn(D)  portIn(CLK)  portOut(Q)  portOut(nQ)  NOT(CLK, nCLK)  DLatch(D=D, EN=nCLK, Q=mid)  DLatch(D=mid, EN=CLK, Q=Q, nQ=nQ)} # ---------- MUX2 ----------chip MUX2 {  portIn(A)  portIn(B)  portIn(S)  portOut(Y)  NOT(S, nS)  NAND(A, nS, na)  NAND(B, S, nb)  NAND(na, nb, Y)} # ---------- RBIT ----------chip RBIT {  portIn(D)  portIn(LD)  portIn(nR)  portIn(CLK)  portOut(Q)  MUX2(A=Q, B=D, S=LD, Y=m)  AND(m, nR, d)  DFF(D=d, CLK=CLK, Q=Q)} # ---------- FA ----------chip FA {  portIn(A)  portIn(B)  portIn(CI)  portOut(S)  portOut(CO)  XOR(A, B, p)  XOR(p, CI, S)  AND(A, B, g)  AND(p, CI, pc)  OR(g, pc, CO)} # ---------- AND4 ----------chip AND4 {  portIn(A)  portIn(B)  portIn(C)  portIn(D)  portOut(Y)  AND(A, B, ab)  AND(ab, C, abc)  AND(abc, D, Y)} # ---------- OR4 ----------chip OR4 {  portIn(A)  portIn(B)  portIn(C)  portIn(D)  portOut(Y)  OR(A, B, ab)  OR(C, D, cd)  OR(ab, cd, Y)} # ---------- OR8 ----------chip OR8 {  portIn(A)  portIn(B)  portIn(C)  portIn(D)  portIn(E)  portIn(F)  portIn(G)  portIn(H)  portOut(Y)  OR4(A=A, B=B, C=C, D=D, Y=lo)  OR4(A=E, B=F, C=G, D=H, Y=hi)  OR(lo, hi, Y)} # ---------- DEC16 ----------chip DEC16 {  portIn(I0)  portIn(I1)  portIn(I2)  portIn(I3)  portOut(Y0)  portOut(Y1)  portOut(Y2)  portOut(Y3)  portOut(Y4)  portOut(Y5)  portOut(Y6)  portOut(Y7)  portOut(Y8)  portOut(Y9)  portOut(Y10)  portOut(Y11)  portOut(Y12)  portOut(Y13)  portOut(Y14)  portOut(Y15)  NOT(I0, n0)  NOT(I1, n1)  NOT(I2, n2)  NOT(I3, n3)  AND4(n3, n2, n1, n0, Y0)  AND4(n3, n2, n1, I0, Y1)  AND4(n3, n2, I1, n0, Y2)  AND4(n3, n2, I1, I0, Y3)  AND4(n3, I2, n1, n0, Y4)  AND4(n3, I2, n1, I0, Y5)  AND4(n3, I2, I1, n0, Y6)  AND4(n3, I2, I1, I0, Y7)  AND4(I3, n2, n1, n0, Y8)  AND4(I3, n2, n1, I0, Y9)  AND4(I3, n2, I1, n0, Y10)  AND4(I3, n2, I1, I0, Y11)  AND4(I3, I2, n1, n0, Y12)  AND4(I3, I2, n1, I0, Y13)  AND4(I3, I2, I1, n0, Y14)  AND4(I3, I2, I1, I0, Y15)} # ---------- Пульт: код операции, число, такт, сброс ----------power(Out=VCC)ground(Out=GND)input(Out=ir12)input(Out=ir13)input(Out=ir14)input(Out=ir15)input(Out=bv0)input(Out=bv1)input(Out=bv2)input(Out=bv3)input(Out=bv4)input(Out=bv5)input(Out=bv6)input(Out=bv7)button(Out=CLK)input(Out=RST)NOT(RST, nR) # ---------- Дешифратор и управление ----------DEC16(I0=ir12, I1=ir13, I2=ir14, I3=ir15, Y0=oLD, Y1=oST, Y2=oADD, Y3=oADC, Y4=oSUB, Y5=oAND, Y6=oOR, Y7=oXOR, Y8=oCMP, Y9=oJMP, Y10=oJZ, Y11=oJNZ, Y12=oJC, Y13=oJNC, Y14=oCALL, Y15=oRET)NOR(ir15, oST, wA)OR(wA, oCMP, wZ)OR4(A=oADD, B=oADC, C=oSUB, D=oCMP, Y=wC)OR(oSUB, oCMP, sub) # ---------- Сумматор: ADD, ADC, SUB, CMP ----------XOR(bv0, sub, bx0)XOR(bv1, sub, bx1)XOR(bv2, sub, bx2)XOR(bv3, sub, bx3)XOR(bv4, sub, bx4)XOR(bv5, sub, bx5)XOR(bv6, sub, bx6)XOR(bv7, sub, bx7)AND(oADC, fC, adcC)OR(sub, adcC, cin)FA(A=acc0, B=bx0, CI=cin, S=sm0, CO=c1)FA(A=acc1, B=bx1, CI=c1, S=sm1, CO=c2)FA(A=acc2, B=bx2, CI=c2, S=sm2, CO=c3)FA(A=acc3, B=bx3, CI=c3, S=sm3, CO=c4)FA(A=acc4, B=bx4, CI=c4, S=sm4, CO=c5)FA(A=acc5, B=bx5, CI=c5, S=sm5, CO=c6)FA(A=acc6, B=bx6, CI=c6, S=sm6, CO=c7)FA(A=acc7, B=bx7, CI=c7, S=sm7, CO=cout) # ---------- Логика: AND, OR, XOR ----------AND(acc0, bv0, la0)AND(acc1, bv1, la1)AND(acc2, bv2, la2)AND(acc3, bv3, la3)AND(acc4, bv4, la4)AND(acc5, bv5, la5)AND(acc6, bv6, la6)AND(acc7, bv7, la7)OR(acc0, bv0, lo0)OR(acc1, bv1, lo1)OR(acc2, bv2, lo2)OR(acc3, bv3, lo3)OR(acc4, bv4, lo4)OR(acc5, bv5, lo5)OR(acc6, bv6, lo6)OR(acc7, bv7, lo7)XOR(acc0, bv0, lx0)XOR(acc1, bv1, lx1)XOR(acc2, bv2, lx2)XOR(acc3, bv3, lx3)XOR(acc4, bv4, lx4)XOR(acc5, bv5, lx5)XOR(acc6, bv6, lx6)XOR(acc7, bv7, lx7) # ---------- Выбор результата ----------MUX2(A=sm0, B=lx0, S=oXOR, Y=r1_0)MUX2(A=sm1, B=lx1, S=oXOR, Y=r1_1)MUX2(A=sm2, B=lx2, S=oXOR, Y=r1_2)MUX2(A=sm3, B=lx3, S=oXOR, Y=r1_3)MUX2(A=sm4, B=lx4, S=oXOR, Y=r1_4)MUX2(A=sm5, B=lx5, S=oXOR, Y=r1_5)MUX2(A=sm6, B=lx6, S=oXOR, Y=r1_6)MUX2(A=sm7, B=lx7, S=oXOR, Y=r1_7)MUX2(A=r1_0, B=lo0, S=oOR, Y=r2_0)MUX2(A=r1_1, B=lo1, S=oOR, Y=r2_1)MUX2(A=r1_2, B=lo2, S=oOR, Y=r2_2)MUX2(A=r1_3, B=lo3, S=oOR, Y=r2_3)MUX2(A=r1_4, B=lo4, S=oOR, Y=r2_4)MUX2(A=r1_5, B=lo5, S=oOR, Y=r2_5)MUX2(A=r1_6, B=lo6, S=oOR, Y=r2_6)MUX2(A=r1_7, B=lo7, S=oOR, Y=r2_7)MUX2(A=r2_0, B=la0, S=oAND, Y=r3_0)MUX2(A=r2_1, B=la1, S=oAND, Y=r3_1)MUX2(A=r2_2, B=la2, S=oAND, Y=r3_2)MUX2(A=r2_3, B=la3, S=oAND, Y=r3_3)MUX2(A=r2_4, B=la4, S=oAND, Y=r3_4)MUX2(A=r2_5, B=la5, S=oAND, Y=r3_5)MUX2(A=r2_6, B=la6, S=oAND, Y=r3_6)MUX2(A=r2_7, B=la7, S=oAND, Y=r3_7)MUX2(A=r3_0, B=bv0, S=oLD, Y=res0)MUX2(A=r3_1, B=bv1, S=oLD, Y=res1)MUX2(A=r3_2, B=bv2, S=oLD, Y=res2)MUX2(A=r3_3, B=bv3, S=oLD, Y=res3)MUX2(A=r3_4, B=bv4, S=oLD, Y=res4)MUX2(A=r3_5, B=bv5, S=oLD, Y=res5)MUX2(A=r3_6, B=bv6, S=oLD, Y=res6)MUX2(A=r3_7, B=bv7, S=oLD, Y=res7) # ---------- Регистр A и флаги Z, C ----------RBIT(D=res0, LD=wA, nR=nR, CLK=CLK, Q=acc0)RBIT(D=res1, LD=wA, nR=nR, CLK=CLK, Q=acc1)RBIT(D=res2, LD=wA, nR=nR, CLK=CLK, Q=acc2)RBIT(D=res3, LD=wA, nR=nR, CLK=CLK, Q=acc3)RBIT(D=res4, LD=wA, nR=nR, CLK=CLK, Q=acc4)RBIT(D=res5, LD=wA, nR=nR, CLK=CLK, Q=acc5)RBIT(D=res6, LD=wA, nR=nR, CLK=CLK, Q=acc6)RBIT(D=res7, LD=wA, nR=nR, CLK=CLK, Q=acc7)OR8(A=res0, B=res1, C=res2, D=res3, E=res4, F=res5, G=res6, H=res7, Y=nz)NOT(nz, zr)RBIT(D=zr, LD=wZ, nR=nR, CLK=CLK, Q=fZ)RBIT(D=cout, LD=wC, nR=nR, CLK=CLK, Q=fC) # ---------- Табло и лампы ----------display{bits=8, base="DEC", busSource="acc"}()led(fZ)led(fC)

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