Я тут вот чего подумал - ничего не мешает нам перехлестнуть этот опциональный пятый шаг на начало следующего цикла! Эдакий недо-конвейер получится, когда пятый шаг предыдущего цикла и первый шаг нового цикла будут выполняться одновременно, и все микроинструкции станут кратны 4 тактам!Shaos wrote:... Простые микропрграммы копирующие из регистра в регистр (A,B,L,M,H) должны умещаться в одну микроинструкцию и заканчиваться раньше т.к. вычитка четвёртого байта из памяти микропрограмм будет ненужна - т.е. будет что-то типа такого:По-идее, получается, что следующий цикл может использовать регистры I2 и I3 оставшиеся от предыдущего цикла (в самом начале там должны быть нули), чтобы понять как адресовать память микропрограмм для вычитки следующей микроинструкции...
- прочитать триаду с шины данных (нужный PC к этому моменту уже должен быть подключен к шине адреса) и защёлкнуть её в регистре T0;
- сформировать адрес микропрограммы (в общем случае это O|T0) и защёлкнуть первый байт микроинструкции в регистре I0;
- подключить регистр источник и регистр приёмник к внутренней шине данных и защёлкнуть второй байт микроинструкции в регистре I1;
- осуществить строб записи для сохранения необходимых данных и если надо флагов, а также обновить PC (в общем случае инкрементировать) и защёлкнуть третий байт микроинструкции в регистре I2, сохранив при этом способ перескока для следующего цикла;
- опционально защёлкнуть четвёртый байт микроинструкции в регистре I3, если способ перескока этого требует (иначе этот шаг может быть пропущен).
Итак, получается, что почти все однотриадные инструкции (копирование между регистрами и сдвиги RLA и RRA) занимают одну микроинструкцию, которая выполняется всё также за 4 такта, а вот ADD похоже уходит в 8 тактов (там по ходу надо будет скопировать B в T1 т.к. сумматор всегда складывает A и T1)
2-триадные инструкции:
LAI # - загрузка регистра A следующей триадой - 8 тактов (2 микроинструкции)
ADI # - сложение A со следующей триадой - 12 тактов (3 микроинструкции)
OPA # - унарная троичная операция - 12 тактов (3 микроинструкции)
4-триадные инструкции:
LDI ### - загрузка текущего DP cледующими тремя триадами - 20 тактов (5 микроинструкций)
OPB ### - бинарная троичная операция - 20 тактов (5 микроинструкций)
JMP ### (обычный джамп на положительный адрес) - 20 тактов или больше (больше может потребоваться если исполняется инструкция из системы команд 3niti beta)