Потихоньку разрисовал схему формирования циклов и тактов. Достаточно запутанная, надо будет изучать на модели. Осталось разобрать примерно 15 процентов - схему управления АЛУ и блоком регистров.
Вид для печати
Потихоньку разрисовал схему формирования циклов и тактов. Достаточно запутанная, надо будет изучать на модели. Осталось разобрать примерно 15 процентов - схему управления АЛУ и блоком регистров.
Это не слухи, это правда. У меня проц нормально работал, когда +5 вместо +12, и Gnd вместо -5. Только тактовая должна быть ниже максимальной, в ЮТ используется 1,78мГц, на этой частоте при одном питании +5 заработали все имеющиеся у меня ВМ80А разных годов и производств. А вот ИК80 не завелись....
Кажется накопал странное - флажки состояния для схемы анализа переходов транслируются через шину данных в определенном такте. Думал ошибка, но никуда больше выходы триггеров с флажками не подключаются. Также накопал еще триггер скрытого временного флага - используется временно во всяких операциях АЛУ.
Еще есть странное место - затвор одного транзистора постоянно подключен к +5В (топологию перепроверил, вроде так) транзистор все время открыт, часть логической схемы (7-8 транзисторов) при этом не используется. То ли исправленный баг, то ли фокус какой, уже на моделировании буду разбираться.
Все транзисторы импортированы в схему. Получилось 4756 штук. Примерно 800 болтаются пока неприкаянными, это схема управления блоком регистров, там тупо канонические деревья - инструкция/цикл/такт, кое-где латчи внутрь встроены, муторно рисовать. Как будем Verilog модель делать? "Честную" с описанием латчей на затворах, или сразу введем общую тактовую, а F1/F2 как разрешения тактирования? Это удобно в FPGA засунуть потом.
Я думаю можно сделать просто тактовую. Привязанную к фронтам, т.к. даже на латчах изменение происходит во время фронта. А вот последовательность двухфазовая, ага.
Не всегда оно по фронту. Фиксация входных сигналов (данных с шины, например), происходит в момент спадания сигнала разрешения латча, а не по фронту. Поэтому предалагаю сделать одну глобальную тактовую, а F1 и F2 использовать как разрешения. Для моделирования-то можно и "честные" латчи сделать, но для FPGA все равно потом переписывать.
Ну фронты бывают разные: передние и задние. И, хотя, правильнее говорить фронт и спад, в моем посте я употребил "фронт" в качестве "перепад".
Если сделать F1 и F2 как ENA, тогда их действие будет практически как обычный латч, который поквантован на изначальную тактовую частоту (скажем 50МГц). На общее поведение модели это не скажется.
Очень прикольная новость. Накопал триггер, который инвертируется по определенному сигналу. А вот начальной установки у него никакой, то есть как при включении питания "Бог пошлет", такое значение и примет, от RESET и прочего никак не зависит. Ну, само по себе ерунда, обычный делитель частоты, бывает. А потом оказалось что выходы триггера рулят стробами в блоке регистров. Получается что каким именно регистром отрулится - непонятно, долго искал ошибку, думал что неправильно разобрал топологию. Потом дело дошло до входа этого триггера, а это такт T2 инструкции XCHG (по факту цикла М1 следующей команды). И выходит интересная вещь - регистры DE и HL переименовываются! И этот загадоный триггер содержит индекс регистровой пары которая в данный момент играет роль HL. Я еще ломал голову как это XCHG выполняется за 4 такта если архитектура мультиплексора такое не позволяет - физически обменять содержимое регистровых пар, а тут вон оно как - трюк переименования регистров, примененный уже в 1974-ом году.
Вот откуда уши у команд обмена регистровых файлов у Z80. С другой стороны все предельно логично. Я бы именно так и поступил.
Переименование - это и логично и понятно.
А не нашлось ли при раскопке каких-либо недокументированных ранее возможностей, режимов или глюков?