Срисовываю z80, есть вопрос
Автор |
Сообщение |
13 апр 2014, 11:05 |
|
Зарегистрирован: 28 июн 2013, 20:42 Сообщения: 17
|
Здравствуйте. Срисовываю z80, перевожу на Verilog. В процессе наткнулся на интересную вещь. Вложение:
m5t5_20140413_0412_src.jpg [ 23.69 КБ | Просмотров: 17247 ]
Вложение:
m5t5_20140413_0412.jpg [ 26.24 КБ | Просмотров: 17247 ]
Цвета на картинке: диффузия - голубой, поликремний - фиолетовый, металлизация - зелёный (сигналы) и синий (GND). Голубой проводник в левом верхнем углу подключен к Vdd. Фиолетовый поликремний пересекает голубую диффузию - транзистор. Получаем элемент 3-3И-2ИЛИ-НЕ из 7 транзисторов, в левом верхнем углу большой квадратный транзистор "подтяжки" выхода к Vcc. Верхний из 6 транзисторов, затвор которого подключен ко второму справа зелёному сигнальному проводнику, совершенно не вписывается в логику работы. Совсем он её не портит, но влияет. Возник вопрос, может ли такое пересечение НЕ БЫТЬ транзистором, и, кажется, на этом форуме уже нашёл ответ viewtopic.php?p=19699#p19699 org писал(а): -- 24 фев 2013, 18:32 --
В процессе стрима, в реальном времени связались с Quietust'ом и выяснили, что не всякое пересечение полисиликона по диффузии формирует транзистор. Иногда получается так, что полисиликон проходит по диффузии безо всякого эффекта.
Это хорошо видно на картинке, которую прислал Q, там помечены места, где пересечение полисиликона формирует транзистор. Какой при это происходит тех-процесс - не понятно. Возможно дополнительно индуцируется слой изоляции, который не даёт формироваться транзистору. Внешне, глядя на картинку, это никак не обнаружить. Q сказал что есть специальные "химикаты", которые позволяют явно проявить места, где транзисторы формируются, а где нет =) Срисовано и разобрано уже пол-процессора, но такой "лишний" транзистор первый. Если это действительно так, и в остальной схеме я нигде не ошибся (а проверил уже много раз), то это вполне может быть той "закладкой" для защиты от копирования, про которую много слухов. Кто-нибудь может прокомментировать?
|
|
15 апр 2014, 18:42 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Привет. Очень похоже на обычный NAND & NAND, только левый верхний транс больше похож на depletion load. Посмотри на этот кусок без металла, там вполне может быть так, что "зарытый" контакт совмещен с виасом.
Если левый верхний транс - это не "резистор" подтяжки, то я хз что это получается)))
Вообще неплохо было бы глянуть на delayer этого участка (у меня даже где-то валялся z80 без металла).
Вложения:
nand_and_nand_33.jpg [ 75.87 КБ | Просмотров: 17180 ]
|
|
15 апр 2014, 21:59 |
|
Зарегистрирован: 28 июн 2013, 20:42 Сообщения: 17
|
Не-не-не, не этот, там всё нормально, и виас есть. "Верхний из шести", который "a" обозначен, вот он лишний. Если он есть - появляются дополнительные такты в некоторых инструкциях, если его убрать или он всё время открыт, как depletion - всё соответствует документации. Без металла у меня нет, только вот такая полупрозрачная. На картинке жёлтым отмечено, где это находится.
Вложения:
m5t5_20140413_0412_src_all.jpg [ 33.05 КБ | Просмотров: 17167 ]
|
|
15 апр 2014, 23:24 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
вот тут есть все слои : http://uxul.org/~noname/visual6502/z80/(там 4 разных степени "окисления", склееные панорамы называются stitch.png) По поводу того куска - там действительно виас и зарытый контакт рядом стоят (но это я для себя, убедиться). Ну а по поводу того, который обозначен как "a" - там может быть и depleted и enhanced. Если depleted, то такой транзистор всегда открыт, наподобии depletion load трансов, которые выполняют роль резисторов. Ну или как в barrel shifter-е NES APU. По картинке отличить depleted транзистор от enhanced никак не получится, только если логически додуматься Мне кажется что все 6 трансов (a-f) - это enhanced транзисторы (то есть обычные), но вам виднее )
Вложения:
buried+vias.jpg [ 36.22 КБ | Просмотров: 17161 ]
|
|
16 апр 2014, 01:13 |
|
Зарегистрирован: 28 июн 2013, 20:42 Сообщения: 17
|
То есть "подтяжечные" транзисторы depletion mode, и сделать ещё один такой транзистор было несложно?
Сейчас присмотрелся и показалось что поликремниевый проводник под металлизацией как бы перерезан. Но тогда вообще бред - затвор висит в воздухе и транзистор открывается-закрывается как хочет, а это тоже как-то неправильно.
Выполнение операции состоит из нескольких M-циклов, каждый цикл из нескольких тактов. От этого транзистора зависит 5 или 6 тактов будет в M-цикле, 3- и 4-тактовые циклы остаются без изменений. Корректность выполнения инструкций пострадать не должна, потому что T6 (6-й такт M-цикла) никуда не заведён и вроде как "холостой", но кто его знает...
|
|
16 апр 2014, 09:07 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Если затвор висит в воздухе, а там перерезано, то тут уже начинаются аналоговые эффекты - если потенциала будет достаточно чтобы открыть транзистор через перерезанную щель, то он откроется. Если не хватит, то так и останется закрытым, а нижние 2 транса тоже никогда не откроются, потому что земля будет отрезана. А такое поведение маловероятно)
А когда получаются M-циклы из шести T-state?
|
|
16 апр 2014, 09:23 |
|
Зарегистрирован: 28 июн 2013, 20:42 Сообщения: 17
|
"Нормальные" 6 тактов в add HL,RR и ещё какой-то, ex [SP],HL кажется. "Ненормальные" появляются с этим транзистором в относительных переходах и, по идее, во всех IX+nn и IY+nn вместо 5 тактов, инструкции будут выполняться на 1 такт дольше. Префиксные пока не разбирал, поэтому вывод чисто теоретический.
Посмотрел в записи. "Нормальные" 6 тактов в inc/dec RR и ld SP,HL. add HL,RR это 4+4+3 такта.
|
|
16 апр 2014, 09:42 |
|
Зарегистрирован: 28 ноя 2012, 17:56 Сообщения: 63
|
|
|
16 апр 2014, 10:23 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Чтобы однозначно сказать надо разбирать всю state logic. Кстати - чип вверх ногами у вас получается) В те времена логику и декодер инструкций было принято размещать вверху, а регистры и АЛУ внизу чипа)
|
|
16 апр 2014, 10:40 |
|
Зарегистрирован: 28 июн 2013, 20:42 Сообщения: 17
|
Ну а я чем занимаюсь? Я эту state logic и разбираю Мне вообще показалось что регистры должны быть справа внизу, то есть кристалл "боком". Тогда нумерация шин и вся логика от УУ через декодер к регистрам и АЛУ идёт слева направо, все управляющие выводы тоже слева, адресные выходы справа, регистры расположены сверху вниз и декодер инструкций получается как бы от простых сверху к сложным снизу. GND внизу, +5 вверху. Но воспринимать логику кристалла для меня оказалось проще именно так, "вверх ногами".
|
|
22 май 2014, 12:48 |
|
Зарегистрирован: 28 июн 2013, 20:42 Сообщения: 17
|
http://yadi.sk/d/pDm0-qI6QxwdW// что есть в этом файле: // регистр текущей инструкции, декодер инструкций, группировка инструкций, прочая логика декодера // логика условных инструкций (переходы, возвраты, ldir/lddr) // счётчик M-циклов и T-тактов (почти рабочий) // управление коммутаторами внутренней шины данных // входы INT и NMI, выход HALT (частично) TODO // вход BUSRQ и выход BUSACK (частично) TODO // выходы M1, REFRESH, MREQ, IORQ, RD, WR // формирование сигналов управления АЛУ (частично) // формирование сигналов управления блоком регистров: выбор регистров, управление буферами чтения-записи // todo и ошибки // чего нет в этом файле: // регистров // АЛУ, формирования флагов // внутренних шин, коммутаторов на шинах // внешних шин (адреса, данных) // прочей управляющей логики (обмен регистров, префиксы, прерывания и т.п.)
|
|
27 май 2014, 09:39 |
|
Зарегистрирован: 28 июн 2013, 20:42 Сообщения: 17
|
В общем, для меня основная проблема на данный момент это реализация внутренних шин на Verilog. Шина данных состоит из четырёх частей, в каждой части есть свои драйвера, части между собой коммутируются транзисторами, то есть можно соединить в одну большую длинную шину. Как это описать?
|
|
28 май 2014, 12:52 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Если имеются ввиду pass-gate транзисторы, то иначе как tristate-логикой их не определить. Такие транзисторы это просто tristate-буферы.
|
|
28 май 2014, 17:17 |
|
Зарегистрирован: 28 июн 2013, 20:42 Сообщения: 17
|
Ага, только двунаправленные и ещё надо учесть сохранение заряда в проводниках когда шиной никто не управляет.
|
|
28 май 2014, 20:04 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Аа, если те которые соединяют шину с шиной, то это "tran": Цитата: The tran and rtran devices have terminal lists containing two bidirectional terminals. А плавающую шину обычно подкрепляют bus keeper-ом) http://en.wikipedia.org/wiki/Bus-holderОбычно разработчики стараются избегать плавающей шины, чтобы не было undefined результатов.
|
|
28 май 2014, 20:22 |
|
Зарегистрирован: 28 июн 2013, 20:42 Сообщения: 17
|
Про tran читал, пробовал, но что-то мне не понравилось, не помню что. В плавающей шине, хранящей предущее значение, как раз вся фишка 3-го и 5-го битов регистра флагов Я сейчас обнаружил две вещи: 1. Все шины и регистры читаются-пишутся по уровню, а не по перепаду, при этом всё работает за счёт задержек сигналов в управляющей логике. Даже есть "линия задержки" на нескольких последовательно соединённых инверторах с последующим сложением с исходным сигналом. При описании этого "в лоб" на Verilog симулятор выдаёт полную чушь, а пробовать запускать такое в ПЛИС по-моему вообще бесполезно. 2. Все действия с шиной имеют какую-то систему, которую я пока не постиг, но, кажется, система хорошо переведётся на синхронную логику. -- 28 май 2014, 20:32 -- Я боюсь что при описании "как есть" с использованием tran и плавающих/подкреплённых шин, в реальной ПЛИС, внутри которой нет конденсаторов, резисторов и z-состояний, это всё разложится не совсем корректно и вылезет куча гонок и иголок, которые всё испортят.
|
|
29 май 2014, 12:35 |
|
Зарегистрирован: 28 июн 2013, 20:42 Сообщения: 17
|
Вопрос знатокам. Какую задержку может дать транзистор или логический элемент в nMOS? Сколько нс сигнал будет идти из одного угла кристалла в другой через 5-10 логических элементов?
|
|
29 май 2014, 15:17 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Перерыл инет, нашёл задержку только для CMOS-инвертора: порядка 100 пикосекунд.
|
|
29 май 2014, 23:48 |
|
Зарегистрирован: 28 июн 2013, 20:42 Сообщения: 17
|
И то хорошо, хотя это же для современных...
Я к чему спрашиваю. При перепаде CLK 1->0 изменяется состояние счётчика циклов-тактов, всё это проходит через огромные комбинационные схемы, а выходы схем синхронизируются по CLK=1 (триггер по уровню). Так вот если за время нахождения CLK в 0 всё успеет устаканиться - замечательно, можно упрощать и схему, и Verilog. По идее оно так и должно быть, но я пока не уверен.
|
|
31 май 2014, 11:56 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
У меня тоже был вопрос - успеет ли схема устаканиться и не разрядятся ли статические латчи, если их периодически не рефрешить. В общем к такому сценарию могут привести только работа процессора с недокументированными инструкциями. Точнее говоря с инструкциями, на которые разработчики положили болт и не стали париться как будут работать резервированные опкоды)
В NMOS очень сложно найти триггеры по фронту, например в 6502 есть один такой, который ловит фронт прерывания NMI, так вот там такая мешанина..)) Чтобы сказать точно - нужно вначале найти триггеры по фронту, они наверняка там есть в небольшом количестве.
|
|
|
Кто сейчас на конференции |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1 |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения
|
|