CPU CELLS

From PSXDEV
Jump to: navigation, search

PSX CPU построен на базе стандартных ячеек.

Стандартные ячейки идут рядами, а соединения между ними осуществляются посредством двух слоев металла.

При этом M1 идёт параллельно рядам ячеек, а M2 (верхний слой) - перпендикулярно. (иногда автоматический трассировщик проводит route прямо по площади ячейки, если металл соотв. уровня в ней нигде не пересекается)

Питание и земля подаются на ячейки также посредством M1.

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

Ячейки под микроскопом выглядят примерно так:
600px

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

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

Contents

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

Процессор PSX построен по технологии CMOS. P и N канальные транзисторы отличаются размером (P в 1.3-1.5 раза больше). Диффузия отображается желтым цветом, а полисиликон - фиолетовым. Диффузия P-типа обычно "толще" диффузии N-типа и находится ближе к питанию. Соответственно диффузия N-типа находится обычно рядом с землей.

Кроме стандартных NAND, NOR и пр. современная логика включает в свой состав такие элементы как AO, AOI, OA и OAI. Это вариации операций And/Or, с дополнительной инверсией результата (I). Примеры :

  • 22-AOI : Y = ~ (AB | CD)
  • 33-OA : Y = ( (A|B|C) & (D|E|F) )

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

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

Cell types.jpg

В настоящий момент произведена идентификация практически всех ячеек. Всего процессор содержит порядка 37600 ячеек, 150 разных видов.

Тепловая карта ячеек:

Psxcpu cells map sm.jpg

Ячейки по категориям

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

Лямбда параметры ячеек

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

За единицу лямбды принимается толщина самого тонкого элемента, в нашем случае - это толщина полисилконовых дорожек.

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

Вначале находим толщину полисиликона, средним аримфметическим:

Lambda avg poly.jpg

Потом меряем ширину разных частей ячейки и делим на толщину полисиликона. Получаем лямбда значения:

Lamda parts.jpg

  • Ширина P-диффузии 13 лямбда
  • Ширина промежутка (gap) 7 лямбда
  • Ширина N-диффузии 11 лямбда

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

Алгоритм поиска ячеек

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

Cell000.jpg

  • Мы начинаем сканировать строки пикселей с верха ячейки (ну или если она повернута на 180 градусов, то это будет её низ). Как найти начало ячейки чуть дальше.
  • После выборки строки пикселей мы начинаем сканирование её пикселей. Наша задача - определить к какому типу топологии относится выбранный пиксель. Из топологии нас интересует только диффузия (P или N), полисиликон (S) и подложка (B). Например при сканировании первой строки инвертора мы получаем последовательность пикселей : BBBBPPPPPPPPPPBBBBBBBBBNNNNNNNNNBBBB (вначале идёт диффузия P-типа, потом подложка (B), потом диффузия N-типа). Подложку с левой и правой стороны мы игнорируем (она всегда там есть).
  • Повторяющиеся точки мы "сворачиваем", на приведенном выше примере строка сожмется как : PBN
  • Повторяющиеся строки мы тоже "сворачиваем".
  • В результате сканирования на примере инвертора мы получим набор строк: PBN SPBSBN PSN PBSBN PBN
  • Если у нас очередная строка получилась BBBBBBBBB (B), то это значит что мы нашли конец ячейки и автоматически начало следующей
  • Склеиваем все подстроки и получаем строку, которая однозначно идентифицирует инвертор: PBNSPBSBNPSNPBSBNPBN. Profit!

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

Причём масштаб ячейки не имеет значения.