31 июля 2016 - Исследование разводки старого GPU

Совсем недавно мы полчили снимки кристаллов GPU:

http://forum.emu-russia.net/viewtopic.php?p=25278#p25278

В связи с этим я сделал то, что давно хотел сделать.

Поскольку сервисных мануалов на материнские платы PU-7 (и аналогичные им старые PU-8) у нас нет, я провел небольшое исследование как соединяются между собой все части старого GPU:

 

(чтобы увидеть полный масштаб откройте картинку в новой вкладке).

Как и предполагалось, старый GPU состоящий из двух чипов (CXD 8514Q/2923AR) работает следующим образом:

  • - Интерфейс между GPU и CPU не претерпел изменений в последующих версиях.
  • - Большая микросхема CXD 8514Q (160 контактов) занимается отрисовкой примитивов в специальную двух-портовую DRAM. Соответственно она также содержит DRAM Refresh логику. Картина немного усложняется тем, что VRAM поделена на два банка (2 микросхемы).
  • - Маленькая микросхема CXD 2923AR (64 контакта) занимается выборкой пикселей из VRAM и представляет собой RGB DAC. Однако выборка пикселей (установка адреса, режим цветности 15/24 bpp) происходит под управлением большой микросхемы. Для этого 2923AR имеет 4 специальных управляющих входа, функция которых пока неизвестна.
  • - Выходные значения RGB с CXD 2923AR, а также сигналы Subcarrier и Colorburst SYNC генерируемые CXD 8514Q подаются на RGB Encoder IC501, после чего видеосигнал уходит потребителю.

 

Фотографии материнских плат с демонтированными компонентами находятся тут: http://siliconpr0n.org/map/sony/pu-8_1-658-467-11/

 


16 января 2016 - Карта ячеек

В утилиту patterns была добавлена возможность выгружать ячейки в векторном формате.

В результате обработки данных была получена тепловая карта ячеек, чтобы вы могли оценить масштаб:

Данная карта позволяет примерно прикинуть области, занимаемые теми или иными частями процессора, путём подсветки типов ячеек:

Как видно, слева вверху располагается уже разобранный умножитель (MAC) MDEC. Кроме этого в нижнем левом куске находится ещё один огромный MAC, без сомнения принадлежащий GTE.

Всю правую часть занимает ядро CPU, где пока находится больше всего неидентифицированных ячеек.


14 января 2016 - Deroute

Завершена разработка утилиты для распутывания проводов: Deroute

Более подробное описание находится в Wiki: http://wiki.psxdev.ru/index.php/Deroute

Утилита разрабатывалась с учётом работы на планшетах, с минимум 1 Гб RAM.

Со временем в утилиту будут добавлены новые возможности, ускоряющие процесс реверса.

Следующий этап - экспорт ячеек, полученных при работе с утилитой Patterns. После чего можно будет совместить векторные данные и получить полную картину связей.


15 декабря 2015 - 3-XOR

Попалась 3-XOR.

 

 

Пока реверсил дико накаляли направления транзисторов. При одном положении они формировали подобие DFF, при другом вообще ставили схему раком.

Недавно выяснилось, что современные тех. процессы обычно не позволяют делать двунаправленные MOSFET-ы. Технология приводит к тому, что на затворе формируется своего рода диод.

Поэтому в большинстве случаев MOSFET-ы направлены всегда в одну сторону. Этим и объясняется их однонаправленность в программе Logisim.

Однако в некоторых случаях двунаправленные MOSFET-ы всё же появляются. Обычно это MOSFET N-MOS, которые используются в качестве Tristate. Их можно встретить в кастомной ("рукодельной") логике, которая применяется для создания SRAM и регистров, размещаемых на чипе в виде Custom-блоков (мы их называем Units).


09 декабря 2015 - Новые ячейки

Отреверсил несколько ячеек: MUX, HA2, BUF6X. Схемы не добавляю, потому что реверсил в дороге и в тетради 

В заначке ещё находится порядка 15 новых ячеек, которые нужно отреверсить. Это последние неисследованные ячейки процессора PSX, поскольку все они уже посчитаны.

Да, как-то забыл добавить на сайт новость, что все ячейки были предварительно идентифицированы. Общее количество ячеек составляет примерно 37600 штук.

Более точные цифры будут получены после повторной сверки мест, где много грязи и добавлении оставшихся неисследованных ячеек, которые встретились на этапе предварительной идентификации.


09 июля 2015 - BIOS / Kernel Reversing

В вики размещена информация о работе PlayStation BIOS и Kernel : http://wiki.psxdev.ru/index.php/BIOS

Все исходники и проект для IDA 6.5 добавлены в Github. Проект включает в себе три отдельных секции, соответствующие стадиям работы PS OS : BIOS, Kernel и Shell.

Большинство вызовов имеют имена, поэтому ориентироваться в коде достаточно просто. Большой пробел находится в Shell, в которой находится много библиотечных вызовов PsyQ, одна из библиотек (libgte) уже найдена.


08 июня 2015 - Первоначальный подсчёт ячеек GTE

После получения фотографии ранней архитектуры процессора стало совершенно понятно, что нижний левый кусок занимает GTE.

Был произведен предварительный подсчёт ячеек куска 02 :

Всего тут находится примерно 6600 ячеек. Точное количество будет установлено позже, после идентификации ячеек (на снимках в некоторых местах присутствует мусор, который можно разрешить по фотографиям М1).

Также было найдено порядка 10 новых ячеек, которые также будут отреверсены.

Я ещё не очень хорошо представляю как работать с таким огромным куском чипа. Ведь кроме ячеек нужно сделать ещё дероутинг, а держать весь кусок в фотошопе не представляется возможным.

Скорее всего самым оптимальным решением будет поочередно проследить соединения между всеми ячейками, а потом проанализировать полученный network соединений.


25 мая 2015 - Старая архитектура процессора PSX

В этом документе, за авторством Кена Кутараги (http://www.hotchips.org/wp-content/uploads/hc_archives/hc11/2_Mon/hc99.k1.kutaragi.pdf) показана старая архитектура в сравнении с той, которую мы изучаем (правда вторая картинка лежит на правом боку :))

Из картинки можно сделать приблизительные выводы о расположении основных компонентов (положения MDEC и кеша инструкций точно совпадает).

Также там содержатся данные о количестве транзисторов - 850к (2 слоя Al, 350 nm). Немного отличается от наших предыдущих оценок (300к транзисторов, 800 nm).

Старая архитектура содержит 1000к транзисторов и 3 слоя металла.


25 мая 2015 - Изменения в нумерации ячеек

После недолгого совещания было решено немного поменять адресацию между ячейками :

http://wiki.psxdev.ru/index.php/CELL_ADDRESS

Раньше перекрестием считалось пересечение линий питания и специального шланга (предположительно главного тактового сигнала mclk), теперь перекрестием считается пересечение линий питания.

mclk отмечен зеленым на схеме.

Количество рядов после изменения нумерации не изменилось - их ровно 310.

Ещё одно важное изменение : для удобства соответствия ряды куска 02 считаются начиная с 16, чтобы их нумерация соответствовала продолжению рядов из куска 00.

Любые изменения в адресации топологии очень важны, поэтому я решил написать об этом в новостях. Международным коллективам по изучению процессора PSX просьба обновить свои данные 

Все последние изменения в проекте (утилита Patterns, Cell Datbase) связаны с финальным штурмом на стандартные ячейки.


25 мая 2015 - Patterns : ускорение OpenGL

Для скачивания доступна обновленная утилита Patterns.

Теперь рендеринг производится с помощью OpenGL.

http://psxdev.ru/files/patterns_002.zip

В архив включена документация на английском и русском, а также демонстрационный проект (sample).


22 марта 2015 - Guthub

Переехали на Github : https://github.com/ogamespec/psxdev

 

EDIT: Проект на Google Code больше не обновляется !


22 марта 2015 - Новая утилита: Patterns

Подходит к завершению разработка новой утилиты для поиска стандартных ячеек - Patterns.

Принцип работы программы следующий :

По исходной картинке (микрофотографии) производится поиск подходящих ячеек из базы. Результат работы сохраняется в удобном виде, в формате TXT, для дальнейшего использования.

На данный момент доступна ознакомительная Alpha-версия : 

http://breaknes.com/files/patterns_tool_pre-alpha.zip

Мануал на русском : http://breaknes.com/files/manual_russian.odt

Последние обновления всегда доступны на Google Code (который к сожалению скоро закроется) : https://code.google.com/p/psxdev/source/browse/#svn/trunk/tools/patterns


06 января 2015 - Сшитый металл М1

Закачал на Google Drive полный сет сшитого металла М1.

Напоминаю, что микрофотографии делал человек с кодовым именем "второй американский декапер". Он использовал механизированную площадку для автоматического позиционирования и съемки слайдов.

Стачивание верхнего слоя металла (М2) производилось шлифовкой. Всего было сделано 2 стадии шлифовки (lap1 и lap2). Связано это с тем, что выровнять кристалл горизонтально к поверхности очень трудно и один край будет всегда стачиваться быстрее. Поэтому вначале был сточен один край (lap1), оцифрован, а затем был сделан второй проход (lap2). При этом предыдущий край сточился "в мясо", до подложки 

Чтобы вам не заморачиваться, где какой lap и не искать, я сделал комбинированное "сшивание" М1 из обеих lap-ов. На этом набор исходных данных (топология чипа) является полным. 

Скачать: https://drive.google.com/file/d/0B0xV_NJcfKCYMnh2NVdFUTNsY2M/view?usp=sharing


17 августа 2014 - Ещё немного кастомной CMOS

При разборе работы DCache удалось найти RS-триггер по спадающему фронту, выполненный в кастомной логике.

Очень интересно было получить месиво транзисторов и разобраться как оно работает. Разработчикам респект за головоломку

Транзисторная схема:

И логическая схема propagation-части триггера (out потом идёт на защелку):

 


03 августа 2014 - CMOS State of Art

Найдена огроменная ячейка, которая выполняет роль 8-MUX:

http://psxdev.ru/cells/99

 PS. Один из контактов шины DD (DD5/CPU) дополнительно "заворачивает" на такую ячейку. В остальном он повторяет входные схемы.


02 августа 2014 - Разводка шины DD

На улице стало холодать, короткое русское лето движется к зиме. Мозги немного остыли и стали думать.

После непродолжительного совещания мне было поручено разобраться куда приходят входы и откуда выходят выходы у шины DD.

Шина DD - это 32-разрядная шина данных, которая соединяет центральный процессор с оперативной памятью (DRAM).

Как и все контакты шины данных - контакты шины DD двунаправленные. Внутренне каждый контакт разводится на два провода: входной (DD/CPU) и выходной (CPU/DD). Про устройство контактной площадки (там используется кастомная CMOS-логика) можно почитать тут : http://wiki.psxdev.ru/index.php/CPU_PADS_BUSES#DD

Далее. Я проследил куда идут все провода и получилась такая картина:


Выходы на шину DD идут с обычных защёлок: http://psxdev.ru/cells/63 , разбросанных вперемешку внутри схемы MDEC RLE и других схем.

Входные пути идут на более хитрую схему, которая как я подозреваю работает следующим образом:

То есть если управляющая линия каскада активна, то входные данные загружаются на входной DFF, а линия DD "обрывается" с помощью tri-state, чтобы данные не уходили на другие схемы.

Каких-то чётких границ у схем нет, более того часть выходной схемы вылазиет вообще за пределы куска 00 (в кусок 02).


02 июля 2014 - Сложная составная ячейка

Найдена необычная ячейка, которая выполняет функцию y = ~ ( (a&b) & (c|d) ).

Так как под стандартные названия эта операция не подходит, пришлось придумывать собственное название 

В итоге получилась 22-AAOI (22-and-and-or-inverted).

http://psxdev.ru/cells/50

 


07 июня 2014 - Усиленная версия Full Adder

Найдена усиленная версия Full Adder: 

 


08 мая 2014 - Первая BigData

Завершено прочтение большого среза, который включает в себя порядка 3000 ячеек:

При этом ячейки не просто читаются с фотографий активного слоя, сделанного Михаилом, но параллельно сверяются со снимками М1, полученными от второго американского декапера. Найденный М1 сразу добавляется в нашу базу ячеек: http://psxdev.ru/cells

Hires прочитанной области можно скачать с SVN: https://code.google.com/p/psxdev/source/browse/trunk/active/psxcpu_active_00_04.png

В дальнейших планах прочитать все остальные ячейки куска 00 и всех остальных кусков.


06 мая 2014 - DFF по переднему фронту (/DFF)

Тщательно перепроверив схему, которая значилась как /SR и при этом была очень похожа на найденный недавно /DFFR, оказалось что это никакой не регистр сдвига, а обычный DFF, только срабатываемый по переднему фронту (когда CLK меняет значение с 1 на 0).

Среди этого "рогатого" семейства ячеек есть ещё несколько похожих, отличающихся незначительными деталями. Скорее всего они также являются вариациями /DFF


01 мая 2014 - Не пойми что

Нашли какую-то непонятную штуку, которая по идее должна быть ячейкой, но из диффузии только небольшие площадки для питания и земли:

EDIT: после некоторых раздумий было решено считать эту штуку обычным заполнителем (FILLER), который резервирует место для возможной ячейки.


28 апреля 2014 - Еще один способ сдампить SUB-CPU ROM

Мартину Корту удалось сдампить ROM SUB-CPU, используя процедуру самодампа SELF-TEST ROM. Для этого потребовалось припаяться к выводам микросхемы и разобраться в протоколе обмена. Таким способом удалось уже сдампить 2 ROM.

Подробности: http://www.psxdev.net/forum/viewtopic.php?f=47&t=557

 


26 апреля 2014 - Триггеры по спадающему фронту

Найден первый триггер, который открывается по спадающему фронту (когда тактовый импульс меняется с 1 на 0):

 

До этого момента все известные триггеры работали только по нарастающему фронту.

Что это означает? А это означает то, что логика процессора несколько усложняется. Используя оба типа триггеров он может за один такт делать сразу 2 действия.


23 апреля 2014 - Ячейки-перевертыши

Нашли интересную особенность: длинные ячейки могут быть "перевернуты" вверх ногами, в результате чего схема получается такая же, но например вход, который был раньше вверху ячейки - теперь становится внизу. Скорее всего это нужно для оптимизации роутинга, чтобы проводка по М1 "удобнее" ложилась.

Пока такая особенность была замечена только у триггеров (DFF, DFFR):

На картинке справа обычный триггер со сбросом (DFFR), только перевернутый на 180 градусов и "флипнутый" по горизонтали (чтобы питание/земля соответствовали схеме). А слева новая найденная ячейка-перевертыш. Схематически это получается такой-же DFFR (за исключением выходного инвертора, в котором вместо одного транзитора - три параллельных).


18 февраля 2014 - Новый инструмент работы с ячейками

У нас набралось достаточно статистики и опыта работы со стандартными ячейками, но не было удобного способа "каталогизировать" их все в одном месте, чтобы быстро искать их по форме, читать краткое описание и хранить картинки ячеек.

Я немного поднатужился и добавил на сайт такую базу. Попасть туда можно через кнопку в правом верхнем углу сайта.

Вкратце об устройстве базы:

  • - Каждая ячейка хранится как одна запись (ID) и имеет собственную галерею с картинками и описанием. В галерее есть одна специальная картинка в формате PNG для хранения векторной маски.
  • - Все ячейки могут иметь один или более "отличительных признаков" (в форме девятки, с "ушками" итп.). Также ячейки могут быть отсортированы по размеру (маленькая, средняя, большая), общему количеству входов/выходов или по количеству спаренных транзисторов (например это актуально для инверторов).

 
Потихоньку я буду перетаскивать туда все ячейки, а также делать для них точные маски, которые кроме диффузии и полисиликона содержат также точную трассировку M1:

каркасное изображение М1

Мы называем разводку М1 внутри ячейки "каркасом". Каркасный М1 одинаковый для всех ячеек, но входные площадки могут соединяться как с М2, так и сливаться с М1, внутри ряда ячеек.

Общее количество найденных ячеек сейчас составляет примерно 110 штук. Примерно, потому что ещё не вся поверхность процессора была "прочитана" и переведена в векторный формат. Время от времени находятся новые ячейки, но это происходит всё реже и реже.


27 января 2014 - RSS

Добавлена поддержка RSS.

Как оказалось большинство браузеров выпилили иконку RSS в адресной строке, теперь её можно включить только через расширения:

https://chrome.google.com/extensions/detail/nlbjncdgjeocebhnmkbbbdekmmmcbfjd

https://addons.mozilla.org/en-US/firefox/addon/rss-icon/


24 января 2014 - Симуляция схемы умножения MDEC IDCT

Мне удалось составить схему всего прохода MDEC IDCT pass1:

 

Самая сложная часть - дерево умножителя. Пока не понятно к какому типу оно относится Wallace или Dadda, а может это вообще какой-то их собственный алгоритм умножения. Я не специалист по таким сложным вопросам  Я просто сделал схему дерева :

И начал тыркать клок IDCT_CLK, предварительно установив входы. Схема что-то делает, но я не могу оценить правильно или нет. Андрюха скажет больше 

Вполне возможно что где-то прячутся ошибки, поэтому всю схему нужно перепроверить.

Схема лежит на нашем SVN : https://code.google.com/p/psxdev/source/browse/trunk/CIRCUIT_002/IDCT.circ (открывать с помощью Logisim)


21 января 2014 - Чем ещё отличается человеческий мозг от компьютерных алгоритмов

После обнаружения ячейки OR_NOR во времена, когда у нас ещё не было фотографий М1, сразу возник вопрос - нахрена из одной ячейки выходит как OR так и NOR. До сегодняшнего дня я был уверен на 100%, что это какая-то фрикнутая идея разработчиков 

Но после того, как мы получили М1 и стали перепроверять все ячейки, я заметил, что OR_NOR подозрительно похож на ячейку OR, но только немного "усиленную" диффузией, как это бывает:

 (слева OR)

Кроме того стали поступать сведения, что выход "nor" никогда не используется  У нас разгорелся спор, я был уверен что видел кусок схемы, где используется выход "nor", бил пяткой в грудь и пр. Короче решено было проверить ещё раз тот участок.

Как оказалось пути М1 неисповедимы, и никакого выхода "nor" на том участке не было )))

Так что ещё один вопрос решён и все OR-ы приведены в порядок. Всего мы нашли 3 версии OR:

Or small.jpg Or2x.jpg Or3x.jpg

Каждая последующая версия "сильнее" предыдущей, либо путём увеличения площади диффузии, либо путём увеличения параллельно соединенных транзисторов на выходном инверторе.

Есть ещё один способ "усиления" схемы: это её зеркальное дублирование и соединение выходов двух зеркальных половинок. Но такой версии OR мы пока не встречали.


19 января 2014 - D-триггер со сбросом

Разобрана работа специальной версии DFF с дополнительным входом /RES

Кроме того, что когда /RES = 0 на выходе триггера всегда 0, он ничем больше не отличается от обычного DFF.

Я так насобачился читать транзисторные CMOS-схемы, что теперь вижу логические вентили внутри месива транзисторов  Например, вот логическая схема свеженайденной DFF-со-сбросом:

Применяются такие триггеры например в счётчиках, а вход /RES используется когда нужно сброить счётчик (установить его в 0).


14 января 2014 - Unit-01: промежуточные результаты MDEC IDCT

Мы догадывались как работает этот блок памяти, но разобрать его всё таки было нужно, для полноты картины.

Это обычная память, организованная в виде 16 13-разрядных слов, но с одной особенностью: ячейки имеют разделенный ввод/вывод. То есть для входа может быть выбрана одна ячейка, а для выхода - другая. Это нужно для того чтобы организовать распределенное умножение IDCT в 2 прохода. Пока один проход использует один промежуточный результат (8 значений), второй проход использует другой (другие 8 значений).

Поэтому используется 2 декодера 4-в-16: один для выходного значения, другой для входного.


12 января 2014 - Прогресс по MDEC IDCT

В общих чертах разобрались как работает IDCT преобразование в MDEC. Матричное умножение еще предстоит симулировать чтобы понять его досконально. но кое-какие результаты уже есть.

Преобразование осуществляется за 2 прохода:

1) На первом проходе осуществляется умножение результата RLE декомпрессии и Scale Table Matrix хранящейся в UNIT 00. Она хранится в виде 32 записей по 26 бит. После выхода данные попарно поступают на мультиплексоры где выбирается какие 13 бит использовать.



Входы:
 - RLE вход: 12 бит
 - Scale Table Matrix вход: 13 бит
 - Сумма предыдущего этапа вычисления: 17 бит

Схема сразу умножает 2 входа и суммирует умножение с результатом предыдущего шага вычисления. 17 бит результата вновь подается на схему.

В конце вычисления старшие 13 бит результата сохраняются в UNIT 01, который, по всей видимости, представляет из себя двухпортовую память. то есть на вход и выход которой могут подаватся разные значения.

2) На втором проходе перемножается уже 13 бит результата первого прохода и 12 верхних бит Scale Table Matrix.



Входы:
 - Результат первого прохода: 13 бит
 - Scale Table Matrix вход: верхние 12 бит
 - Сумма предыдущего этапа вычисления: 17 бит

Схема вновь умножает 2 входа и суммирует умножение с результатом предыдущего шага вычисления. 17 бит результата вновь подается на схему.

В конце вычисления старшие 10 бит результата передаются на схему знакового деления на 2 с клампингом -128, 127. На выходе мы получаем 8 бит со знаком.


10 января 2014 - Алгоритмы

Само по себе изучение схем является интересным занятием, но иногда скучным и монотонным. Связано это с тем, что разработка схем является сильно автоматизированным процессом: стандартные ячейки генерируются на базе HDL, а разводка соединений производится автоматическим "укладчиком" (роутером).

Естественно возникает желание как-то автоматизировать и процесс обратной разработки 

Первый объект пристального внимания - это стандартные ячейки. Само название намекает, что если они "стандартные", значит они одинаковые и их можно искать по фотографиям, используя некоторые шаблоны или маски. Затрудняет поиск ячеек грязь и плохая фокусировка микроскопа, из-за чего часть ячейки может быть скрыта для программы поиска.

Но тут можно применять полуавтоматизированный процесс: восстанавливать тополгию ячеек руками (то есть превращать фотографии ячеек в картинки с четкими масками ячеек). Такой процесс мы называем "векторизация". Затем можно производить поиск ячеек по полученным векторизованным данным. Я немного покурил бамбука и придумал адекватный алгоритм для поиска, без всяких edge detection и тому подобных техник. Почитать идею алгоритма можно тут: Алгоритм поиска ячеек.

Вторым объектом являются провода. Весь процессор это гигантская тарелка с дошираком  Я долго искал в интернете какой же алгоритм использовали разработчики для своего укладчика проводов и думаю что наконец-то нашёл подходящий алгоритм: http://en.wikipedia.org/wiki/Channel_router . Так называемый "Канальный укладчик" широко применялся в конце 80-х до середины 90-х в CMOS микросхемах с двумя слоями металла (как и у нашего процессора). Стандартные ячейки укладываются рядами, а между ними образуются как раз те самые "каналы", по которым укладчик аккуратно укладывает лапшичку  Я даже нашёл исходники реализации этого алгоритма (программа YACR2). А что если мы расставим ячейки, натравим на них укладчик YACR и он выдаст нам укладку точь в точь повторяющую разводку металла ? Главное точно попасть в "клеточки" сетки укладчика.

Но где бы взять столько времени, чтобы реализовать эти алгоритмы в виде утилит, ума не приложу  Каждая программа как минимум тянет на тему дипломной работы в российских ВУЗах.


10 января 2014 - ScaleTableMatrix (Unit-00)

Полностью разобраны все типовые элементы блока ScaleTableMatrix (64 x 13bit words):

Схема декодера практически полностью повторяет схему декодера предыдущего блока (2-to-4 decoders + ANDs).

Интересным решением разработчиков является альтернативная разводка схемы IO Enable: часть tri-state буферов используется для разводки управляющих сигналов OE/IE, которые разрешают чтение/запись.

Вся схема была полностью симулирована в программе Logisim, чтобы проверить её производительность. Программа достойно справилась с заданием, но возникли некоторые проблемы с симуляцией бистабильных защёлок (aka cross-coupled inverters), они никак не хотели "расщелкиваться" и я заменил их на стандартные защелки из библиотеки компонентов. Поэтому я написал разработчику Logisim Карлу Буршу с просьбой о помощи 

Скачать схему можно тут : https://code.google.com/p/psxdev/source/browse/trunk/Unit-00-01/unit00.circ , а почитать про устройство компонентов этого блока можно в нашей Wiki : http://wiki.psxdev.ru/index.php/CPU_UNITS#Constant_table_memory

Эти же типовые компоненты используются во множестве других блоков процессора, которые ещё предстоит разобрать.


07 января 2014 - Vias madness

Я просто не могу не показать это.. При разборе tri-state буферов Unit00 я чуть не кончился 

Черными точками помечены контакты M2-M1, а оранжевыми M1-силикон. Всё бы ничего, но контакты расположены настолько плотно друг над другом, что понять что с чем соединяется было крайне трудно.

По середине картинки находится виас M2-M1 который.. просто виас) То есть М2 соединяется с кружочком М1 и всё.

Также фирменным трюком разработчиков являются "хвостики", когда М2 соединяется с силиконом через еле заметный отрезок М1 :

При этом на крохотном участке М1 находятся сразу 2 типа контактов. И такой трюк можно увидеть в разных местах процессора, включая стандартные ячейки.

Визуально отличить типы контактов можно следующим образом : у контактов М2-М1 немного "чётче" контур.


07 января 2014 - Ячейки памяти Unit00 и Unit01

Эти 2 блока находятся рядом со схемой умножения MDEC. 

Unit00 организован как 32 спаренных слова по 13 разрядов (итого получается 64 13-разрядных слова), а Unit01 просто хранит 16 13-разрядных слов.

Размер слова в 13 разрядов выбран не спроста, именно такая разрядность используется для Scale Table в умножении IDCT. Эта табличка нужна для того, чтобы ускорить умножение констант, которые участвуют в IDCT. Значения загружаются перед началом работы MDEC декомпрессора через DMA.

После некоторых манипуляций с исходными данными (пришлось сшить блоки из исходных слайдов и отцентрировать 2 слоя) была получена схема ячейки памяти этих блоков.

Ничего необычного - опять спаренный инвертор и управляющие транзисторы для чтения/записи.

Однако сами блоки таят в себе некоторые интересные особенности, которые будут известны после получения остальных частей схемы.


05 января 2014 - Склееные фотографии активного слоя

В раздел Скачать выложены склееные фотографии активного слоя PSX CPU. Исходные 9 ГБ ужались до 220 МБ 

Теперь работать со стандартными ячейками стало гораздо удобнее.

Следующей задачей является идентификация всех ячеек, параллельно ведется подсчёт их количества. В результате всего массив данных ужмется ещё сильнее и составит каких-то 100 КБ текста (тип ячейки + координаты) из которого можно будет сгенерировать любой участок процессора.

Пример идентификации ячеек можно посмотреть тут : http://psxdev.ru/files/IC103/psxcpu_active_03_06.svg (загружается не сразу!). Видно, что не все области хорошо просматриваются за пятнами грязи, эти участки мы восстановим потом, на базе фотографий М1 (которые тоже ещё предстоит сшить).


04 января 2014 - Проверка DFF и DLATCH

В набор стандартных ячеек входят триггеры, срабатываемые по фронту (DFF) и защелки, срабатываемые по уровню (DLATCH).

О принципах их работы было известно давно, но проверить долго не получалось. Сегодня я наткнулся на прикольную программу, под названием Logisim. Особенность программы заключается в том, что она заточена исключительно под цифровые схемы и поддерживает симуляцию с учетом задержки распространения (propagation delay). Есть возможность имитировать схемы на транзисторном уровне. Короче то что нам нужно, для проверки логики работы DFF / DLATCH.

Быстренько сварганив схемы, выяснилось, что логика работы DFF / DLATCH полностью соответствует ожиданиям 

  


03 января 2014 - Контакты DD

Обычно изучение микросхем начинается с контактов. Первым делом смотрим куда идёт CLK и как его внутренние модификации разводятся по схеме. Потом смотрятся различные шины и прочие управляющие контакты. У нас всё наоборот  Вначале мы делаем адовую схему умножения MDEC, а между делом изучаем такую чепуху как контакты 

На самом деле в новогодние каникулы так в лом что-то делать, но организм требует еще наркоты, поэтому усидеть невозможно))) Вот я и решил "добить" контакты шины DD. Из нашего дата сета я выбрал нужные слайды, склеил, оттрассировал и вот что получилось:

Это схема управления контактом шины DD, которая соединяет CPU и DRAM. Ничего особо интересного, обычная схема для CMOS I/O. Единственная непонятная вещь - это внутренние линии E и F, которые соединяют все контакты шины по цепочке. При этом E = NAND(D, F) и этот результат идёт на вход F следующего разряда.

Более подробно можно почитать тут : http://wiki.psxdev.ru/index.php/CPU_PADS_BUSES#DD


28 декабря 2013 - Новейшие находки по второй схеме.

Мы уже почти со 100% уверенностью можем сказать что этот кусок это часть MDEC декодера.

1) Scale Table Matrix хранится в нулевом Юните. Она хранится в виде 32 записей по 26 бит. После выхода данные попарно поступают на мультиплексоры где выбирается какие 13 бит использовать. (внизу картинки).

2) Результат всех этих вычислений 17битный. Он снова подается на эту же схему вычислений справа. Паралельно 13 бит этого результата сохраняются в первый юнит. Это единственный результат вычислений который покидает пределы схемы.

3) Помимо Scale Table Matrix и результат вычислений есть еще 6 входных бит. Но откуда они берутся пока неясно.

4) Выходы нулевого юнита помимо этой схемы идут куда-то еще. Пока непонятно куда



Полная версия тут http://wiki.psxdev.ru/images/4/4f/Circuit002_logic.jpg


26 декабря 2013 - Юнит 24 завершен

Завершен разбор логики работы блока, под кодовым названием "Unit-24". Оказалось это 16-разрядные dual port регистры. Они позволяют одновременно записать в два разных регистра, а также выдать значение двух любых регистров на 2 разных выхода, за один такт (а точнее за одно действие, вполне возможно что схема будет успевать срабатывать по обеим фронтам).

Разбор этого блока помог мне сориентироваться как нужно разбирать кастомную CMOS логику, так что теперь препятствий для восстановления остальных блоков нет.

Всего таких блоков в процессоре 4, расположены они в левом нижнем углу. В каждом блоке по 16 регистров. Для чего нужна такая организация регистров мы можем пока только догадываться, потому что прилегающие схемы ещё никто толком не смотрел.

Подробности в нашей вики : http://wiki.psxdev.ru/index.php/CPU_UNITS


26 декабря 2013 - Составные ячейки

Немного обескураживающим оказался факт существования "нестандартных ячеек". Разработчики не гнушались делать такие элементы, как например Y = NAND(a,b) & XOR(c,d):

Ничего странного в этом нет. Если какая-то комбинация операций встречается достаточно часто, то эффективней реализовать её в виде ячейки.

Но это ещё пол беды. Мы обнаружили ячейку, в состав которой входят 3 мультиплексора и операция XNOR, результат которой является селектирующим входом для встроенного мультиплексора. Функционально мы понимаем как работает эта ячейка, но вот для чего это нужно и как вообще назвать такую смесь бульдога с носорогом мы пока не знаем.


19 декабря 2013 - Юнит 24

С появлением качественных фотографий М1 мы потихоньку начали исследовать "юниты" - блоки кастомной логики, расположенные по краям чипа. 

По своей природе это буферы памяти или регистровые файлы.

На этот раз под поле зрения попали Unit-ы 22-24, которые очень похожи на набор регистров GTE. На данный момент уже понятно как работают ячейки памяти этого блока, организованные в виде матрицы 16x16 :

Особенность работы ячеек заключается в том, что у них селективный вход (2-на-1) и селективный выход (1-на-2), для быстрого копирования значений.

Транзисторная схема ячейки:


Асимметричный инвертор компенсируется широким затвором, это хорошо видно на картинке топологии (толстые фиолетовые лапы).


19 декабря 2013 - Второй проход полировки M1

Второй американский декапер выложил второй проход полировки))

Теперь стало хорошо видно М1 и в левой части процессора:

Google Drive, 2900 слайдов: https://drive.google.com/file/d/0B0xV_NJcfKCYOE0wSk5OLXBnS3M/edit?usp=sharing


18 декабря 2013 - Заглушка

Найдена интересная ячейка, которая имеет всего один вход :)

Сама ячейка представляет собой latch, но без выхода. Скорее всего такие ячейки используются в качестве "заглушек".

EDIT: на самом деле это вход/выход)

EDIT2: Спасибо HardWareMan, подсказал что это за штука. Это Bus keeper:

BUS keeper is to keep last state on the bus, basically, it's flipflop constructed by two inverter, but its output drive ability is limited. its output is connected on bus. in normal operation, it take no effect on normal logic level, but when bus is into tristate, the last logic level is keeped by bus keeper to prevent bus from floating.


17 декабря 2013 - SRAM cells

Удалось восстановить логику ячеек памяти кеша данных (DCache) и инструкций (ICache):

Это оказалась традиционная CMOS SRAM, основанная на 6-транзисторных ячейках:

 

Смысл работы такой, что когда row = 0, то весь ряд отсоединён и защелки находятся в бистабильных состояниях (хранят заряд).

Когда row=1 (выбирается текущий ряд), значение ячейки обновляется. Причём обновляется только ячейка в текущей колонке (col не равно Z). Для всех остальных колонок значения col будут равны Z (отсоединены) и эти ячейки не будут обновлены новым значением.

Адресацию [row, col] производит специальный декодер адреса, который мы ещё не разобрали.


17 декабря 2013 - Охота за ячейками 2

Поскольку одной из моих задач в проекте является восстановление библиотеки стандартных ячеек, мне нужно было найти место где их много и они все разные. И такое место нашлось:

Провозившись пол дня со своенравным Hugin (и обматюкав его на чем свет) мне удалось склеить нужный кусок М1 без искажений :

В этой области очень хорошо видно М1, поэтому "хакать" ячейки проще пареной репы))

За прогрессом в этой области можно следить через Wiki: http://wiki.psxdev.ru/index.php/CPU_CIRCUIT_004

Или через SVN: https://code.google.com/p/psxdev/source/browse/#svn%2Ftrunk%2FCIRCUIT_004

На рыбалку вышел поздно, поэтому сегодня только одна "рыбка" - 6-NAND:


16 декабря 2013 - M1 50x

Второй американский декапер снял часть М1 в увеличении 50x.

https://drive.google.com/file/d/0B0xV_NJcfKCYVzVFREtxZDVvSDg/edit?usp=sharing

Получилось примерно 2100 слайдов. Превью что получилось (в оригинальном разрешении) :

Также я перезалил фотки активной области, которые делал Михаил, пережав их. В итоге получился архив примерно 1.5 Гб (вместо 9 Гб, который был до этого).

https://drive.google.com/file/d/0B0xV_NJcfKCYTkFWWlQweVBkLTA/edit?usp=sharing

 


15 декабря 2013 - Статус полировки М1

Когда мне встречается слово "полировка", то сразу вспоминается серия из Южного Парка)))

Второй американский декапер оценил состояние полировки. В красной рамке находится хорошо отполированная часть. Естественно, что равномерно снять М2 сразу по всему чипу не получится, слишком большая поверхность. Поэтому из-за перекоса одна часть сточилась хорошо, а другая не очень.

Сейчас делается скан в 50х хорошо отполированной части. Потом будет второй раунд полировки, чтобы отполировать левую половину чипа. При этом правая половина может вообще уничтожиться. Крайние правые ячейки уже сточились до диффузии:


15 декабря 2013 - Понеслась

После получения первых результатов М1 ячейки посыпались как из ведра:

При этом не приходится догадываться как идёт М1, его непосредственно видно на картинке) Правда качество местами так себе, мы попросили второго американского декапера повторить подвиг Михаила и снять процессор в увеличении 50x (но теперь М1). У него есть оборудование, которое делает съемку в автоматическом режиме, поэтому будем надеяться что обойдется без психических травм :)

Общий статус в исследовании ячеек получается примерно 50 из 110 (50 известно, 110 всего). Некоторые непонятки возникли с DFF-ами, такое впечатление что они срабатывают по обеим фронтам.


15 декабря 2013 - M1

Второй американский декапер сделал первый lap M1!

https://drive.google.com/file/d/0B0xV_NJcfKCYRHlIUlZhRkVfNmc/edit?usp=sharing

Полировка получилась неравномерная и местами очень плохо разобрать детали (особенно соединения М1 между стандартными ячейками), однако это существенный прогресс! Теперь можно узнать работу всех стандартных ячеек (там где полировка М1 получилась хорошей) и соединения М1 между рядами ячеек теперь отлично видно.

 


15 декабря 2013 - Детектор уровня

Как известно в Verilog есть два типа чувствительных блоков : always @ (posedge/negedge CLK) срабататывают по фронту и always @ (CLK) срабатывают по уровню. Процессор PlayStation использует оба метода.

С блоками, которые срабатывают по фронту всё понятно: они завязаны на гроздь DFF, которые дальше уже рулят всей схемой.

Но как быть, если нам необходимо вначале сделать действие по фронту CLK, а за ним сделать действие по уровню CLK? Ведь нам необходимо расставить приоритеты, чтобы схема по уровню сработала позже, чем схема по фронту.

В этом нам помогают "детекторы уровня" :

Эта стандартная ячейка гарантирует, что фронт CLK "не пролезет" в схему (причем не только передний, но и задний), а пролезет только уровень. Реализуется этот механизм путём эксплуатирования propagation delay, при этом CLK превращается в "спайк" (короткий импульс), который возникает по середине уровня:

Таким образом процессор PSX уже в 1995 году использовал как фронт CLK, так и его уровень, предвосхитив повсевместное использование этого трюка. Примером устройств, использующих такую же логику является память DDR.


13 декабря 2013 - Regate

Начата разработка утилитки, специально заточенной для трассировки PSX CPU - Regate (долго думал над названием) :

Основные возможности (планируется):

  • - Рендеринг на OpenGL
  • - Хранение векторизованных данных в XML
  • - Web-based RPC (удаленное выполнение команд рисования) для совместного реверсинга
  • - Библиотека стандартных ячеек (при нажатии в отдельном окне отображается основная информация по ячейке)
  • - Виасы расставляются одним нажатием кнопки V (вставляется по текущим координатам мышки)
  • - Рисование М1 / M2 производится нажатием кнопок 1 и 2. При этом после нажатия фиксируется начало рисования провода, мышкой наводится его конец и повторным нажатием на 1/2 завершается рисование
  • - Zoom колесиком мышки / pan правой кнопкой
  • - Левая кнопка мыши выделяет перетаскивает компоненты
  • - Выделенные элементы можно удалять кнопкой DEL
  • - Основные слои в порядке увеличения приоритета : картинки (привязка производится по ссылке), ячейки, М1, M2, виасы, текстовые пометки

09 декабря 2013 - Verilike

Начата разработка скриптового HDL - Verilike.

За основу взят Verilog, выпилено всё лишнее и архитектура языка подогнана под нужды симуляции.

Основа среды исполнения - это контекст, в котором хранятся провода (wire) и регистры (reg). Исполнение производится исключительно регистровыми передачами, которые формируют дерево. При этом логику работы узлов, роль которых выполняют "стандартные ячейки", возлагается на клиента. Траверс дерева планируется проводить параллельно, возможно используя CUDA / OpenCL. Это становится возможным благодаря тому, что дерево регистровых передач представляет собой реактивную программную модель.

Также заметное отличие от Verilog: фронт сигнала представляет собой полноправные значения - '/' (нарастающий) и '\' (спадающий). Это позволит симулировать сигнал CLK как на реальном железе, путём циклической смены его значений: 0 -> '/' -> 1 -> '\'

http://wiki.psxdev.ru/index.php/Verilike


09 декабря 2013 - Что-то

Нашли крайне непонятную ячейку.


01 декабря 2013 - Пальцем в небо

Очередной раз "тыкнув пальцем в небо" стало совершенно понятно, что наскоком процессор не взять. Ну получили мы нечто похожее на это:

А дальше что?? :0)

Поэтому нужно "уцепляться" за какой-нибудь контакт и плясать от него. Попытки уцепиться за шину данных DRAM и шину данных внутренней кеш-памяти ни к чему хорошему не привели. Не понятно где находится lsb-бит (D31 это или D0?), а также не понятно в какую сторону "гуляет" шина (точнее в некоторых местах понятно, но всё равно не комфортно).

Следовательно нужно взять какой-нибудь "дубовый" однонаправленный контакт и разобрать все схемы задом-наперед, что с ним связаны. Какие есть кандидаты?

Во-первых CLK. Но у процессора их тыща (CRYSTALP, SYSCLK0, SYSCLK1, DSYSCLK) и их назначение мы не совсем понимаем. Поэтому отметаем.

Остаются:

  • - Последовательный интерфейс (SIO)
  • - Контакты группы Chip Select (/CS)
  • - Контакты группы interrupt (/INTIN)
  • - Контроллер RAS/CAS
  • - TCLK0, TCLK1 : входные такты, для счёта пикселей и сканлайнов GPU, вместо стандартного режима счета Root Counters.
  • - Контакты группы DMA (DACK/DREQ)

Из этих контактов нужно выбрать те, которые не приведут в супер-запутанные дебри.

Контакты RAS/CAS, DMA и CS отметаем, потому что они управляются страшным и ужасным Bus Unit-ом. Прерывания наверняка приведут нас в дебри COP0, где происходит инициация исключения ядра R3000.

TCLK0 и TCLK1 тоже не нравятся.

Остается последовательный интерфейс :) (который кстати почти классический RS-232, точно знаю что с помощью вольт-преобразователей MAX232 можно подключить PSX к последовательному порту COM компьютера)

30 ноября 2013 - Мультиплексор 4 в 1

Неизвестных ячеек становится всё меньше.

Давно были подозрения что это мультиплексор, так как он состоит из инверсного мультиплексора, а то что ниже не удавалось рассмотреть.

Оказалось что внизу - просто ещё 2 мультиплексора (но без выходных инверторов), которые попарно выбирают значения входов 0/1 или 2/3.
А над ними инверсный мультиплексор (чтобы сделать прямым значения входов), который уже выбирает конкретный выход : 0, 1, 2 или 3.


29 ноября 2013 - Фотографии металла М2 PSX CPU в хорошем качестве

Второй американский декапер повторно отснял CDX8530CQ PSX CPU

https://drive.google.com/file/d/0B0xV_NJcfKCYdWdObWZJaG40Q0E/edit?usp=sharing

Качество фотографий претендует на автоматическую векторизацию)


28 ноября 2013 - Сеть регистров сдвига

Рядом с кешем инструкций (I-Cache) была обнаружена небольшая сеть из 8 регистров сдвига + 8 DFF, соединенных с ними по одному CLK.

Сеть не влезала в один тайл, поэтому я составил панораму)))

Смысл новости не показать вам в очередной раз кучу разноцветных квадратиков, а донести, что логические структуры процессора организованы такими вот компактными кучками, наподобии "доменов". Внутри домена все "умные" ячейки связаны одной пуповиной CLK и перемешаны с пассивной логикой.

То есть разбор логики работы сводится к последовательному изучению таких вот доменов.

Обнаружить окончание домена можно по тому факту, что CLK улетает в неведомые дали, а это значит он идёт к другой кучке.

Область занимаемая всеми соучастными ячейками также более-менее прямоугольная)) А то у нас были опасения что синтезатор ложит ячейки тупо зиг-загом от одного края чипа до другого.

А это значит, что при составлении схемы применялась ручная сила: стандартные ячейки расставлял человек (в данном случае скорее всего команда, в которой каждый занимался своим участком). А вот роутинг естественно происходил автоматически, ибо, как мы решили, это было бы слишком ахтунгово))) Хотя может компиляция модулей HDL производилась такими вот компактными кусками, а общий тактовый сигнал - это просто конструкция always @


28 ноября 2013 - NAND / NOR

Наконец-то попались 2 базовые ячейки)

NAND:

NOR:

Наверняка у них присутствуют более "мощные" собратья. Будем искать.

В поиске мелких ячеек существенно помогают так-называемые "лямбда-параметры".

У каждой библиотеки стандартных ячеек есть так-называемые лямбда-параметры. Они определяют в условных единицах соотношение областей ячеек : сколько процентов будет занимать P-диффузия, сколько промежуток между P- и N- областями диффузии, какой размер у проводов и как они могут проходить по ячейке при прокладке роутинга итп.

Примеры лямбда-параметров можно посмотреть тут : http://www.vlsitechnology.org/html/vsc_description.html

Какие лямбда-параметры используются у наших ячеек - пока точно неизвестно. Нужно взять линейку и померить)


28 ноября 2013 - Тотальный реверсинг

Ну вот у меня и набралось достаточно ячеек, чтобы начать делать что-то действительно серьезное. Решил попробовать наобум разобраться что происходит в верхнем левом углу куска 02:

Эта мешанина представляет собой 10 D-триггеров, соединенных с 10 инверсными мультиплексорами. Другими словами - здесь что-то выбирается длиной 10 разрядов :)

Для CLK-подобных сигналов я стал применять желтые провода, чтобы легко найти группу связанных ячеек.

Инверсные мультиплексоры используются по причине того, что выходы с DFF - в инвертированной логике.

Схема довольно путанная, поэтому для разбора в этом случае нужно применять лестницу : ячейки располагаются слоями таким образом, что сверху всегда входы, а снизу - выходы.

Также вместо "японской грамоты" я стал применять прямоугольные блоки (для экономии памяти и размера SVG). Естественно это можно сделать только с известными ячейками.
Желтые блоки - это "пассивная логика", а оранжевые - это более умная (триггеры, регистры сдвига итп., кто используют CLK).

Чуть ниже этого месива находятся кучка XOR/XNOR, но никак не связанных с ним. 

Осталось выяснить как работают куча мелких ячеек, которые невозможно "подглядеть", потому что они обычно спрятаны под M2. Будем надеяться что второй американский декапер запустит в дело свою полировальную машину и отфотает M1 :)

SVG : http://psxdev.ru/files/IC103/svg/c0015_r0013.svg


27 ноября 2013 - Регистр сдвига

Следом за D-latch подоспел и регистр сдвига :

У этой ячейки есть интересные особенности работы : http://wiki.psxdev.ru/index.php/CPU_SHIFT_REGISTER 


26 ноября 2013 - D Latch

Обнаружены D-latches. Существуют два варианта этой стандартной ячейки : /DLATCH срабатывает по отрицательному уровню ENABLE, а DLATCH соответственно по положительному.

Защелки (latches) отличаются от триггеров (flip/flop) тем, что они срабатывают по уровню сигнала, тогда как триггеры - по перепаду (фронту). Схемы триггеров обычно сложнее, так как содержат специальную схему детектирования фронта (PTD - pulse transition detector), которая основана на эффекте задержки распространения сигнала (propagation delay). Поэтому стандартная ячейка D-триггера (DFF) заметно крупнее.

Как ни странно, DFF-ов в процессоре больше, они встречаются буквально на каждом шагу, может это особенность схемотехники CMOS-процессоров?

http://wiki.psxdev.ru/index.php/CPU_LEVEL_TRIGGERED


24 ноября 2013 - Дежавю

Второй американский декапер отснял верхний металл (M2) у CPU CXD8530CQ :

https://drive.google.com/folderview?id=0B0xV_NJcfKCYeGlhWEJWYWM0bzQ&usp=sharing 

Качество фотомастерства американского декапера на высоте (масштаб картинки специально не меняю) :

Поверхность очень чистая, настолько чистая, что наверняка при сшивании придется наступить на те же грабли : область кеша данных и инструкций будет настолько чистой, что программе-сшивателю будет не за что зацепиться (нет соринок) :) Однако фоток вышло меньше, чем у Михаила (всего 562, против примерно 800), но не в ущерб качеству.

Есть кое-какие проблемы с фокусировкой по краям, но американский декапер сказал что он сделает повторные (!) снимки всего чипа с улучшенной фокусировкой.

Я естественно сразу попробовал сверить маски с той версией, что делал Михаил. Во первых татуировки микросхем (слева наша, справа полученная от американского декапера):

 
(по ссылкам находятся картинки в оригинальном качестве)

Затем я решил проверить стандартные ячейки. Я взял маски активной области, которые делал Михаил (предварительно векторизовав диффузию и поликремний), а затем наложил стандартные ячейки на фотографии металла, которые сделал второй американский декапер (масштаб ячеек 30%). Всё подходит тютелька-в-тютельку :

Кстати, количество типов стандартных ячеек уже перевалило за 70 : http://board.psxdev.ru/topic/11/


23 ноября 2013 - Товарищ старший сержант

Эта ячейка отличается от других по характерным "погонам" в звании старшего сержанта))

И она настолько же бессмысленна и беспощадна: это обыкновенный буфер. На выходе у него то же самое, что и на входе.

Может быть в "погонах" есть какой-то смысл, но это не так важно.

EDIT: чем больше "полосок" в погонах, тем сильнее буфер усиляет сигнал.


23 ноября 2013 - XOR/XNOR

Обнаружено целое семейство XOR/XNOR различной степени мощности (drive strength) :

XNOR :

http://wiki.psxdev.ru/index.php/CPU_XOR


21 ноября 2013 - Поход за мелочью

Среди стандартных ячеек полно всякой мелочи, но как ни странно, первыми поддались наиболее "толстые" ячейки ))) Нужно восполнить пробел и пополнить нашу библиотеку дискретной логикой. Первой попалась совмещенная OR/NOR. Зачем надо было совмещать? Ну разработчикам виднее)) Пока не совсем понятно.

Кстати, я теперь буду всегда располагать ячейки так, чтобы слева была диффузия P-типа, а справа N-типа.


20 ноября 2013 - Новые методы

Меня порядком уже задолбало работать с гигапиксельными картинками, да и хранить их (и качать) очень накладно. Поэтому я стал искать способы избавиться от лишнего веса.

Понятное дело нужно использовать векторный формат хранения оттрассированных данных. Поиски векторного редактора привели меня к Inkspace, который работает с SVG. Процесс освоения прошёл быстро (немного непривычно было после фотожопа).

У SVG сплошные преимущества :

- легко парсить, если нужно будет использовать трассировку в каких-нибудь специальных тулзах, которые мы разработаем
- занимает мало место и хорошо сжимается (текстовый формат на базе XML)
- растровый исходник можно "линковать" к SVG-картинке, а потом выкинуть его, когда трассировка будет закончена.

Вообщем теперь всю трассировку буду хранить в SVG.


15 ноября 2013 - Второй американский декапер жжет!

Только что получил от второго американского декапера исходные слайды CXD1815Q и закачал их на свой Drive:

https://googledrive.com/host/0B0xV_NJcfKCYZUhGS1BvMmxyS3M/ (~220 MB, 567 слайдов)

Что это за зверь такой CXD1815Q? Это старая версия GPU с 160 контактами, которая применялась в самых первых версиях PSX (в материнках PU-7 и ранних версиях PU-8).

Чем старая версия GPU отличается от остальных версий с 208 контактами - пока неизвестно.

Предварительные фотографии GPU с маркировкой "ED55" были как раз от этой микросхемы.

Наверное это имя разработчика - Ed :)


14 ноября 2013 - SUB-CPU (L16)

Второй американский декапер сделал верхний металл у SUB-CPU :

Скачать полноразмерную фотку можно в соответствующем разделе.

Логика процессора очень компактная, маркетинговый ход Motorola "high-density" на самом деле был выгодным выбором. Более плотная упаковка логики означает что на вафле будет помещаться больше процессоров, а значит стоимость одного процессора будет ниже.

Естественно ни о каких standard cells тут говорить не приходится, это full custom IC. Поэтому процесс трассировки и разбор логики не будет отличаться от процесса разбора NMOS микросхем типа 6502.


08 ноября 2013 - Board

We have launched board for English-speaking users : http://board.psxdev.ru/


08 ноября 2013 - Push/pull inverter

В этом инверторе ажно 8 пар транзисторов, пока что это самый мощный push/pull инвертор.

Такие инверторы используются для усиления сигнала, для особенно длинных линий.

Подробнее в вики : http://wiki.psxdev.ru/index.php/CPU_NOT


07 ноября 2013 - Конвеер

Раскопали удивительную стандартную ячейку, по всем своим качествам подходящую под конвеер (pipeline) :

Ячейка состоит из 4 этапов (stage) конвеера, каждый этап имеет два входа (1,2) и 1 выход (3). Управляется схема контрольными сигналами C1/C2 и D1/D2 (соединяются они между собой или нет - неизвестно).

Также схема имеет "стартовый" вход - in (для запуска конвеера) и "финиш" (сигнализирующий о том, что конвеер остановился) - out. 

Более подробно в вики : http://wiki.psxdev.ru/index.php/CPU_PIPELINE 


05 ноября 2013 - Half Adder и мультиплексор

Мы раскопали очередную стандартную ячейку! Ей оказался "младший брат" Full adder-а - Half adder:

Подробности в вики : http://wiki.psxdev.ru/index.php/CPU_HALF_ADDER

Вдохновившись полученными результатами был хакнут также мультиплексор 2-в-1 :

http://wiki.psxdev.ru/index.php/CPU_MUX 


31 октября 2013 - Full Adder!

После очередного наскока непонятный элемент оказался обыкновенным Full Adder-ом!

 

in1 in2 bc                   out1 out2
0   0   01   b = 0, c = 1    in2  in3
0   1   10   b = 1, c = 0    in3  !in3
1   0   10   b = 1, c = 0    in3  !in3
1   1   01   b = 0, c = 1    in2  in3 
in1 in2 in3 |   out1 out2
0   0   0   |   0    0   
0   0   1   |   0    1
0   1   0   |   0    1
0   1   1   |   1    0
1   0   0   |   0    1
1   0   1   |   1    0
1   1   0   |   1    0
1   1   1   |   1    1

in1 = a 
in2 = b
in3 = carry_in 
out1 = carry_out 
out2 = sum

Попутно выяснили очень удивительные и непривычные вещи: оказывается входы в CMOS могут идти на диффузию %) После N-MOS это было очень непривычно ))) Но мы справились.

Подробнее в вики : http://wiki.psxdev.ru/index.php/CPU_FULL_ADDER

30 октября 2013 - Первые фотографии GPU!

Беру свои слова назад!

Второй американский декапер показал предварительные фотографии GPU (и CPU). Качество фоток превосходное!

Однако ничего удивительного в GPU нет, как и предполагалось - это один большой кусок логики, организованной рядами стандартных ячеек + кастомные блоки для буферов (semi custom IC, bi-metal CMOS)


Объектив : Митоя 2x / 20x


29 октября 2013 - Бодаемся с очередным блоком

Акари-сан обнаружил что в его куске 00 проглядывается ещё один "динозавр". Мы сделали попытку раскопать его по аналогии с D-триггером, но сходу не получилось :) (по прежнему проблема в плохой видимости М1)

Транзисторная схема "не клеится".

Попробуем уговорить Михаила, чтобы он поплавил под кислотой оставшийся у меня кусок кремния от моих экспериментов)

Забугорные "шлифовальщики" совсем сдулись и ничего не делают.


09 октября 2013 - PSX CPU Bottom layer

Закачал на Google Drive все 2901 фотку, нижнего слоя PSX CPU:

https://plus.google.com/117266572649711510522/posts/XyYdXZFXqvW 

Примечание : Михаил фоткал процессор вверх-ногами, и зигзагом.


07 октября 2013 - Мы знаем, что вы о нас знаете

Наш сайт показали разработчикам процессора PlayStation! Пока никаких комментарий от них не поступало, да мы особо и не надеемся на это. Но имейте ввиду - мы знаем, что вы о нас знаете :)

Тем временем мы потихоньку начали обрабатывать материал, полученный от Михаила :

66 67 68 69 70 71 72 73 74

Это слепки "линеек" стандартных ячеек, согласно условленной схеме :


Скачать материалы можно в разделе Download

21 сентября 2013 - Новости от второго американского декапера

Второй американский декапер сообщил нам, что он получил чипы, которые мы ему отправили.

Морально он уже готов к декапу всего чипсета, потому что к исследованию PSX подключилась команда MAME. Совместными усилиями мы создали для него отличную мотивацию :)

Он также показал своё оборудование, это разрыв. Кроме оборудования по "шлифовке" чипов у него естественно имеется профессиональный микроскоп, а также ограниченный доступ к SEM (сканирующему электронному микроскопу).


17 сентября 2013 - Первая ласточка - D-триггер

После сравнения многочисленных участков, где проглядывался М1, удалось получить схему одной из наиболее часто встречающихся структур, ей оказался тактируемый D-триггер.

Подробнее в вики : http://wiki.psxdev.ru/index.php/CPU_DTRIG 

Аналогичная по функционалу схема эпохи NMOS выглядит так :

О времена, о нравы %)


16 сентября 2013 - Человеческий мозг - лучший прибор

У нас появился существенный шанс восстановить все стандартные ячейки и соединения между ними.

Дело в том, что в некоторых областях очень мало М2, поэтому М1 хорошо проглядывается:

 

Среди нескольких комбинаций можно восстановить полностью все соединения М1 c активным слоем.

А так как выходы у стандартных ячеек находятся в стандартных местах, это значит что и соединения между ячейками внутри блока также можно восстановить.

Мы с оптимизмом смотрим на эту затею и пока наши друзья-декаперы заняты получением снимков М1, мы будем рассматривать эту возможность как запасной вариант.


13 сентября 2013 - Сбор средств в поддержку проекта

Друзья!

Объявляется сбор средств на девайсы и расходные материалы, для дальнейшего исследования микросхем.

Что нам нужно :

  • - Расходные материалы (нано-пудра и пр.), ~10 000 р.
  • - Профессиональный микроскоп, ~30 000 р.
  • - Просто поддержать проект, бесценно.


11 сентября 2013 - Библиотека стандартных ячеек PSX CPU

Начаты предварительные работы по восстановлению библиотеки стандартных ячеек PSX CPU:



Подробнее в Wiki : http://wiki.psxdev.ru/index.php/CPU_CELLS

10 сентября 2013 - Фотографии PSX CPU без металла

Михаил сообщил, что сделал микрофотографии PSX CPU со снятым металлом (пока не понятно, похоже что металл снят частично). Мы пока не скачали весь архив (8 Гб, 2900 снимков на объективе 40x), но даже на предварительной фотографии видны стройные ряды "standard cells". Просто титанический труд, огромное спасибо Михаилу! =)

Объемы информации, поступающей от Михаила, скоро превысят объемы информации, поступающей с Большого Адронного Коллайдера.

EDIT: К сожалению скачать необработанный архив пока нельзя (8.5 Гб), на нашем хостинге просто нет столько места (лимит в 2 Гб). Но по запросу можем организовать торрент.


05 сентября 2013 - Вторая партия чипов отправлена

Успешно отправлена вторая партия микросхем "второму американскому декаперу" :)

Наибольший приоритет в декапе назначен на IC103 (CPU). Тропинка уже проторенная, пометил, что кислотой слои раздеить не получится, только шлифовкой.

Следом попросил отдекапить GPU, т.к. IC304 мы уже практически получили, а на кристалл GPU ещё никто до нас не смотрел.

org



04 сентября 2013 - Подсистема PSX

Мы полностью разобрались в устройстве подсистемы PSX (PSX subsystem), которая включает в себя CD-декодер и SPU.

Wiki содержит сведения по всем основным компонентам :

Из всего набора микросхем действительно уникальными (эксклюзивными для PSX) являются только CD-контроллер и SPU, поэтому они являются приоритетными для декапа (особенно контроллер). На остальные микросхемы есть мануалы. 

В изучении микрокода SUB-CPU также есть значительный прогресс : были получены практически все ключевые процедуры для взаимодействия SUB-CPU с контроллером и CD-DSP.

31 августа 2013 - Правильный ROM SUB-CPU

Мы получили правильно сдампленный ROM (точнее дамп всей памяти 6805). Предыдущий дамп был с ошибками на контакте D0. Отличная работа, Chris!

Скачать : MC68HC05 ROM

SUB-CPU имеет на борту 2 ROM : первый так-называемый TEST ROM на самом деле является BOOT (загрузочным) и располагается по адресам 0xFE00-0xFFFF. Второй "рабочий" ROM располагается по адресам 0x1000-0x4FFF (16 KB).

Декапер который делал дамп утверждает, что маски ROM используют ионную имплантацию, поэтому разглядеть "биты" на картинке было бы нереально.

В общем теперь у нас есть вся "вкуснятина", а Martin Korth (автор no$psx) уже приступил к дизассемблированию полученного материала :-)

Ещё мы получили предварительные фотографии чипа IC304, но старой ревизии L16, а не той (G6), которую мы отправляли.



Наша Wiki обновлена информацией по подсистеме CD-ROM : Читать

org

27 августа 2013 - Заграница нам поможет 2

Вышли на связь со вторым американским декапером. Он просил себя публично никак не называть, поэтому мы так и будем его звать "второй американский декапер" )

К отправке готова вторая партия чипов из материнки PU-23. Особенность этой материнки в том, что горсть микросхем CD/SPU заменена одной большой блямбой IC732:

Теперь мне надо пошевелить булками и сходить на почту :)

org


26 августа 2013 - Хачим IC304

IC304 (SUB-CPU) представляет собой микроконтроллер, который управляет работой механики CDROM, а также как-то (пока не очень ясно как) управляет SPU.

В состав этой микросхемы входит кастомное ядро процессора M68HC05.

Декапер, которому мы отправили чипы умудрился припаяться к выводам микросхемы и сдампить MASK ROM электрическим способом.

Еще он прислал превьюшку микросхемы, но hires фотки слать почему-то не спешит :/

Ещё он намекает, что неплохо бы подонатить за его работу :) Вот жук.

Однако ROM он нам отправил : MASK ROM IC304  (64 KB)

Подизасмить его можно через IDA или вот через это : http://myweb.tiscali.co.uk/pclare/DASMx/ , однако без знания регистров IC304 этот дамп получается натуральным блекбоксом.

org


08 августа 2013 - Кислота не выход

Наш знакомый товарищ декапер приступил к травлению слоев металла процессора PSX, но как он выразился, результаты оказались весьма "драматичными" :)

Металл стал травиться неравномерно и непредсказуемо, в результате чего кристалл превратился в сплошной треш.

Исследовав вопрос, мы пришли к выводу, что микросхемы такого типа проще шлифовать или как выражаются в армии - "пидорить".

Результаты получаются весьма впечатляющими, вот пример шлифовки трёхслойной микросхемы :



Для послойного шинкования современных микросхем нужно применять специальные суспензии из оксида алюминия, с наночастицами, размером порядка 50-100 нм.

Также мы вышли на буржуйский канал IRC, где тусят забугорные энтузиасты с сайта http://siliconpr0n.org/ и пытаемся найти там дополнительную помощь в декапе/делейере.

И ещё одна новость : теперь на нашем сайте есть WIKI.

org.


31 июля 2013 - Заграница нам поможет

Отправляем на декап (и delayer!) в Америку следующие чипы :

Это то, что осталось от моих первых экспериментов по вскрытию чипов PSX над газовой плитой)))
PSX CPU и CDROM Controller пали жертвой эксперимента, остались только эти.

org


25 июня 2013 - Использование MapTiler

Сегодня попробовал использовать технологии GIS для наших целей. Долго разбирался в хаосе предложенных инструментов и нашёл жемчужину. Речь идёт о программе MapTiler

В описании сказано что программа нарезает исходное изображение на тайлы различного увеличения, для использования в различных map API (Google, OpenLayers итп).

Скачал, установил, но нарезать с первого раза не получилось - картинка заворачивалась по краям как Земля ))

Ниже привожу параметры, которые нужно указывать в визарде, для создания тайлового сета.

- Tile Profiler : Image Based Tiles (Raster)
- Добавляем картинку-кусок, который нужно разрезать на тайлы. Geo-привязку указывать не нужно.
- Координатная система : WGS84 - Latitude and Longitude (geodesic)
- Максимальный и минимальный Zoom обычно выбирается автоматом (достаточно хорошо). Тип картинок - JPEG (тут надо нажать на клавиатуре стрелку вниз, мышкой почему-то не переключается)
- Указывает папку куда будут нарезаться тайлы
- Просмотрщик - OpenLayers

Последние два окошка ничем не примечательны - жмем Render и пьем чай :)

Результат - нарезанные тайлы + готовый сгенерированный HTML для просмотра "карты".

http://psxdev.ru/files/tilemaps/psxcpu_part24/

Сразу напрашивается идея - добавить ещё несколько кнопок редактирования + немного магии AJAX с базой данных и у нас получится готовый онлайн-трассировщик микросхем.
Более того - OpenLayers уже содержит в себе средства для отображения и редактирования векторных слоёв. Осталось только добавить систему аутентификации пользователей, сессию подключения и сохранение векторных масок в БД.

org


21 июня 2013 - Первоначальный netlist куска 2-4

Решил попробовать получить netlist хотя бы части блоков куска 2-4.

Выпустил шланг из правого верхнего квадрата и провел все линии на глубину 2 блока, то есть до блока откуда идёт шланг (помечен стрелкой) и с какими блоками соединяется исходный блок.

Что-то сомнения у меня появились что тут находится GTE :)

Дополнительно вывел наружу все контактные площадки, ни одна из них не участвует в моем куске 2-4.

На контакты шины DD приходит аж 6 проводов. 2 из них это RD и WR (пока неизвестно точно какие их двух), еще 2 провода последовательно соединяет DD0 с DD1, DD1 с DD2 и так далее по цепочке, не понятно зачем.
Остальные 2 провода уходят куда-то наружу и я даже называть их никак не стал.

Отдельно стоит отметить разводку контакта /DCAS3 :D 

Область где находится искажение (белая волнистая черта) была получена из нормального куска, так что провода там идут хоть и криво, но в итоге выходят наружу правильно.

Очень ждём логику) В первую очередь необходимо понять что это за квадратные блоки, потому что на регистры это точно не похоже. 

org


01 июня 2013 - Запуск сайта

Ну вообщем можно зафиксировать дату когда этот сайт был запущен.

Материалов пока немного, но все они уникальные. Так что мы надеемся сайт окажется полезным :)