Сообщение от
Titus
Главное, чтобы при таком упрощении и приведении к общему виду, не потерялась изюминка изначальной схемы (какой-нибудь фирменный глюк или же еще какая-то особенность).
Поясню на примере, что можно упростить в Z80 для повышения наглядности.
Есть провод, указывающий, какие биты опкода брать для получения номера регистра
Код:
assign w185 = ~(~(w[40] | w[45]) & (w210 | ~w[47]));
куча инверсий упрощается до вполне понятной логики "A or B or C"
Код:
assign w185 = w[40] | w[45] | (w[47] & ~T2);
Потом мультиплексор, но его выходы также инвертированы
Код:
assign w3[351] = w185 ? ~cmd[0] : ~cmd[3];
assign w3[357] = w185 ? ~cmd[1] : ~cmd[4];
assign w3[361] = w185 ? ~cmd[2] : ~cmd[5];
Дальше бардак
Код:
assign w3[355] = ~(w3[357] | w3[361]);
... (w3[351] | w3[355]) ... // это обращение к каким регистрам?
... ~(w3[351] | w3[355]) ...
который с учётом инверсии выходов мультиплексора приводится к
Код:
assign w3[355] = (cmdmux1 & cmdmux2); // =1 при обращении к регистру 6 или 7 (SP/[HL]/A)
... (~cmdmux0 | (cmdmux1 & cmdmux2)) ... // =1 - обращение к регистру 0 2 4 6 7 (B D H [HL] A)
... ~(~cmdmux0 | (cmdmux1 & cmdmux2)) ... // =1 - обращение к регистру 1 3 5 (C E L)
или даже
Код:
(cmdmux[0]==0) | (cmdmux==7) // любой старший регистр или аккумулятор
причём w3[355] больше нигде не используется, его можно убрать.
Мне кажется в 580ВМ80 логику И-НЕ / ИЛИ-НЕ так же можно будет сильно упростить при переводе на HDL, а инкремент/декремент со всеми ускоренными переносами вообще привести к одной строчке
Или оставлять как есть?