Про выдачу обратно в шину аж интересно стало, так ли это. Сомневаюсь. Жду продолжения :)
Вид для печати
Про выдачу обратно в шину аж интересно стало, так ли это. Сомневаюсь. Жду продолжения :)
Начал разбирать регистр инструкции. Забавно получается - триггеры постоянно тактируются F2 (если ничего не напутано). Если остановится F2 в низком уровне - регистр инструкции все "забудет". Чем такое обусловлено - непонятно. Несколько транзисторов чтобы такого не было бюджет не разорили бы. Затейники, получается что ВМ80А тоже имеет особенность тактирования как и Z80.
Еще странность - выход на шину данных с блока регистров содержит только нижний транзистор, верхний я пока не нашел, ну не может же оно быть "открытый коллектор", да без "подтяжки".
Разбираю аналогичный узел (внешних D0...D7) Z80 и не даёт мне покоя вот этот триггер, управляемый NET00111 и NET00113. На всякий случай спрошу.
Затворы T225 и T238 точно соединяются с затвором T230? Может с затвором T231? Тогда всё становится больше похоже на в Z80, и даже внутренняя шина относительно внешней инвертирована. В Z80 при ld [HL],const в этом триггере байт с пинов защёлкивается и отправляется обратно, здесь тоже можно, но как-то оно... не так аккуратно, что ли. Можете выложить схему управления этим триггером?
---------- Post added at 10:16 ---------- Previous post was at 10:11 ----------
Тогда ищите precharge - шина в какой-то момент "заряжается", подключаясь напрямую к +5, может даже одновибратором, а потом нужные разряды разряжаются нижними транзисторами. Получается быстрее, чем тянуть её вверх подтяжками.
---------- Post added at 10:34 ---------- Previous post was at 10:16 ----------
Рекомендую начать разбор от регистра инструкции :) пока не трогая внешние пины типа INT, HOLD, READY и прочие. В Z80 в их схемах чёрт ногу сломит, потом оказалось что они вообще как бы сбоку приклеены, из них всего несколько сигналов выходит, не сильно влияющих на работу остальной схемы, а от регистра инструкции просто куча комбинационной логики, которая потом синхронизируется тактовым сигналом чтобы иголок не было и идёт на регистры, АЛУ и остальное.
---------- Post added at 10:42 ---------- Previous post was at 10:34 ----------
Ещё вопрос знатокам. Какую задержку может дать транзистор или логический элемент в nMOS? Сколько нс сигнал будет идти из одного угла кристалла в другой через 5-10 логических элементов?
Да. И еще 7 раз такая же схема для остальных разрядов, ошибка (что я не разглядел цепи) маловероятна.
В последней выложенной схеме есть фрагмент формирования цепи 113.
Это просто инвертированный сигнал с цепи 111.
Пока не нашел. В том то и дело что с других блоков на шину выходят полноценные каскады из двух транзисторов - верхнего и нижнего, а вот с блока регистров непонятка. Пока неясно в чем дело, может распознавания ошибка где. Или BarsMonster нафотошопил фрагмент, чтобы мы запутались :)
Я как акын - что вижу, о том пою :). То есть, что мне ясно - разбираю. Дальше вероятно будет сумматор адреса и блок регистров, а потом - да, пойдет блок декодера. Иначе к АЛУ трудно подобраться.
Схема предзаряда находится на шине данных между регистром инструкции и основными регистрами. Каждый разряд шины через два последовательно соединённых транзистора подключается к +5.
Что такое "сумматор адреса"?
Увы, не подключается. На этом фрагменте сигналы шины данных подключены к затворам, то есть они управляющие и это не может быть схемой "подзаряда".
Схема формирования адреса - блок 16 разрядного сумматора плюс 16 разрядный же мультплексор. Кажется там и PC где-то рядом.
Ну не 16-разрядный сумматор, это как-то совсем круто для такого процессора, а 16-разрядный инкремент/декремент.
Как это к затворам? Снизу идёт +5, через via уходит на полисиликон (голубой), через 16 транзисторов (по 2 на разряд), потом через via в металлизацию, на шину. Затворы транзисторов (фиолетовый) соединяются (8 первых и 8 вторых), одни затворы на тактовый F1, вторые не рассмотрел куда.
Чего-то регистров сильно много, в два раза больше чем нужно, на сдвоенные триггеры срабатывающие по фронту непохоже. Как бы не теневой набор регистров вылазит :)
Не зря я, значит, интуитивно "притормаживаю" ВМ80 в МХ2 на Ф1=0 и Ф2=1 на 1 такт, чтобы получить из 2,5МГц производительности 2МГц производительность (с джиттером на 1 такт частоты 2,5МГц).
А вот про пречердж как раз промелькивало в одной из русских внутренних блок-диаграмм. Вот, у соседей промелькнуло как-то (СЗМ - Схема Заряда Магистрали), кликабельно:
http://savepic.net/5575559.gif
http://savepic.net/5599110.gif
PS А вот и сам док, кому интересно. Страницы с 37 до 66. Попутно, там даны интересные блок-схемы других микросхем комплекта. Есть на что взглянуть.Код:СФС - Схема формирования сброса
ВМД - Внутренняя магистраль данных
СЗМД - Схема заряда магистрали данных
[БА - Буфер адреса]
БА - Буфер адреса
СУпр - Схема управления буфером адреса
[БД - Буфер данных]
БД - Буфер данных
СУБД - Схема управления буфером данных
[БРг - Блок регистров]
СК - Счетчик команд
УС - Указатель стека
RA - Регистр адреса
I/D - Схема инкремента и декремента
М1,2 - 8ми разрядный мультиплексор
М3 - 16ти разрядный мультиплексор
[АЛУ - Арифметико-логическое устройство]
Rn - 8ми разрядный регистр
КП - Кодопреобразователь
СМ - Комбинационный сумматор
А - Аккумулятор
F - Регистр условий
СДК - Схема десятичной коррекции
[СУ - Схема управления]
РК - Регистр команд
ПЛМn - Программируемая матрица декодера
СВР - Схема выборки регистра
САП - Схема анализа переходов
СВС - схема выдачи состояния
СУМЦ - Схема управления машинными циклами
СУМТ - Схема управления машинными тактами
СУПР - Схема управления регистрами
[CC - Схема cинхронизации]
СФМТ - Схема формирования машинных тактов
СФМЦ - Схема формирования машинных циклов
СФС - Схема формирования сигнала Sync
[СУОИ - Схема управления обменом информации]
САПР - Схема анализа прерываний
САЗШ - Схема анализа захвата шины
САГ - Схема анализа готовности
Да нормально там регистров :)
6 16-разрядных чётко видно, может ещё где запрятаны. BC DE HL PC SP что-то еще, на приведённой HardWareMan блок-схеме их 7. Там по два инвертора в кольце должно быть, по 4 транзистора на бит. На каждый 16-разрядный регистр по 32 коммутирующих транзистора (горизонтальные полисиликоновые проводники на фотографии, "перечёркивающие" блок регистров), подсоединяющие этот регистр к 32-проводной шине (прямой и инвертированный бит). С этой шины через схему чтения и два коммутатора (старший и младший байт) данные идут на 8-разрядную ШД. С 8-разрядной ШД через мощные драйверы (по 2 на бит, прямой/инверсный) и коммутаторы (также 2, для каждого байта свой) происходит запись, драйверы "передавливают" инверторы в нужное состояние.
Сужу по Z80, здесь вроде такая же структура просматривается с поправкой на два напряжения питания. Если надо могу что-нибудь для наглядности нарисовать :)
Да, оказалось всего шесть 16-тиразрядных регистров, соединенных общей 16-битной шиной. Возможны побайтные чтение-запись со стороны общей шины 8-битной шины, а также 16-битное чтение-запись со стороны схемы инкремента-декремента. Как работает понятно, но там 1000+ транзисторов, это несколько вечеров рисовать.
А надо ли это всё вырисовывать? Может потом? А пока 8 проводов ШД и 10 проводов управления, остальное - "чёрный ящик".
---------- Post added at 00:29 ---------- Previous post was at 00:23 ----------
То есть оно как бы к другому блоку относится? Но у регистров и правда на чтение только нижний транзистор. Хотя может и этот же precharge использоваться...
Да, надо подумать как это сблокировать. Создать отдельный триггер как встроенный компонент, или, наконец, пришло время разобраться с поддержкой иерархии в PCAD. Ну а так "в лоб" я уже примерно треть блока регистров нарисовал. Дальше будет схема 16-битного инкремента-декремента и от нее и от блока регистров потянется уже управление к декодеру инструкций.
Блок регистров, мултиплексор, буфер адреса, схема инкремента-декремента 16-битного значения. Реализация инкремента-декремента с частичным параллельным переносом, максимальная цепочка последжовательного переноса - 5 стадий. Любопытно что то что инкрементится/декрементится будет попутно попадать на выходы A15-A0. Посмотрим как INX/DCX сделаны, думаю что не на этой схеме, потому что нет выхода на флаги.
Я думаю, что I/D сделан по подобию реверсивного 16ти битного счетчика. Схема простая и обкатанная.
Там не совсем счетчик, триггеров нет. Есть просто комбинационная схема +1/-1, и отдельный регистр. Полностью на параллельный перенос не пошли - транзисторы решили сэкономить, а на самом экономном полностью последовательном переносе. видимо. скорости не хватало. В итоге сделали компромисc - три стадии последовательного переноса, между ними параллельный. Гибрид, в-общем.
Вчера, кажется нарыл, СФМЦ. Забавно, там самих триггеров нет, все на емкостях затворов построено. То есть, по F1 заряжаем затвор тразистора, его выход управляет через ключ включаемый по F2 затвором другого транзистора. Такой себе флип-флоп, всего 4 транзистора на стадию. А на традиционной схеме понадобилось бы 12 или даже более, учитывая входную функцию. Вот так сурово раньше транзисторные бюджеты экономили.
Поясню на примере, что можно упростить в Z80 для повышения наглядности.
Есть провод, указывающий, какие биты опкода брать для получения номера регистра
куча инверсий упрощается до вполне понятной логики "A or B or C"Код:assign w185 = ~(~(w[40] | w[45]) & (w210 | ~w[47]));
Потом мультиплексор, но его выходы также инвертированыКод: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)
причём w3[355] больше нигде не используется, его можно убрать.Код:(cmdmux[0]==0) | (cmdmux==7) // любой старший регистр или аккумулятор
Мне кажется в 580ВМ80 логику И-НЕ / ИЛИ-НЕ так же можно будет сильно упростить при переводе на HDL, а инкремент/декремент со всеми ускоренными переносами вообще привести к одной строчке :)
Или оставлять как есть?
Разобрал декодер инструкций. Ковыряю СФМЦ и СФМТ - достаточно запутанные логически, надо будет помоделировать. Осталось всего разобрать 1871 транзистор. Порядка 3 тысяч разобрано, но они в упорядоченных структурах, поэтому остаток будет разбираться медленее. Есть ошибки переноса топологии, то транзистор забыл врисовать, то затвор не рассмотрелся под металлом, то просто проводник мелкий не провел, но большая часть таких ошибок на этапе перерисовки схемы вылазит, остаток выявит моделирование.
Что такое СФМЦ и СФМТ?
По картинке в этом топике - Схема Формирования Машинных Циклов и Схема Формирования Машинных Тактов
А сколько всего существует разновидностей этого процессора? ВМ80 и ИК80 отличаются только маркировкой, старый/новый стандарт?
Дык я ж и спрашиваю, потому что Z80 сходу попалось 3 фотографии, и они не совсем совпадают, причём не совпадают очень интересно ;)
Дело не в общем виде кристалла и расположении блоков, там то ли закладки от копирования, устранённые в копиях, то ли это ошибки, которые были исправлены.
Очень интересно, нет ли в 580ВМ80 чего-то подобного. Но чтобы это найти моделирования мало, надо "вручную" полностью проследить логику работы процессора.
Расковырялось примерно 3/4 процессора. В приложении текущие варианты декодера и АЛУ. Схема сумматора-кодопреобразователя весьма дивная.
Осталось самая мутная и нерегулярная часть.
Z80 много кто клонировал, так что варианты возможны. А вот 580xx80 - известно только про киевский Микроприбор. ВМ80А это вроде улучшенная версия ИК80 под усовершенствованный техпроцесс, по слухам может работать от одного питания +5V (можно подать вместо +12V) и что ему не надо -5V, а можно "землю". Но мне сомнительно что без смещения подложки оно будет работать, а встроенного генератора смещения не наблюдается.
Я их обоих ковырял - центральный фарш практически один в один, периферия отличается. Техпроцесс чуть-чуть тоньше у ВМ80.
http://zeptobars.ru/ru/read/kr580ik80a
Смещение подложки - по мере совершенствования техпроцесса (уменьшение количества грязи) есть шанс, что оно перестает быть необходимым для NMOS техпроцесса. В журнале Радио писали, что можно так делать у ВМ80, но естественно это нестандартный режим.
Потихоньку разрисовал схему формирования циклов и тактов. Достаточно запутанная, надо будет изучать на модели. Осталось разобрать примерно 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. С другой стороны все предельно логично. Я бы именно так и поступил.
Переименование - это и логично и понятно.
А не нашлось ли при раскопке каких-либо недокументированных ранее возможностей, режимов или глюков?