« Архитектура PlayStation (index)

Архитектура PlayStation

Chapter 3: Процессор


Содержание

  1. Истоки
    1. Немного истории
    2. MIPS и Sony
    3. LSI и заказы
  2. Предложение
  3. В обход CPU
  4. Дополняя ядро
    1. System Control Coprocessor
    2. Geometry Transformation Engine
    3. Motion Decoder
  5. Ничего не пропустили?
  6. Изобилие задержек

В этом разделе рассматривается чип Sony CXD8530BQ, один из двух больших чипов, установленных в этой консоли. Сегодня это то, что мы бы назвали "Системой-на-Кристале" (System-on-Chip, SoC).

Истоки

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

Немного истории

Image
Macintosh Quadra 700 рядом с картой расширения PowerPC. 90-е заставили многих пользователей Motorola 68k сделать необходимый шаг в сторону RISC-процессоров (PowerPC в случае Apple).

Начало 90-х годов ознаменовалось изменением судеб многих популярных процессоров. Некогда лидирующие 8-битные процессоры, такие как Z80 и 6502, уже давно не рассматривались, а знаменитый Motorola 68000, наряду с другими 16-битными разработками, которые пользовались успехом в конце 80-х годов, стали кандидатами на замену. Даже в мире ПК в это время Таненбаум в своем знаменитом споре с Торвальдсом только дал архитектуре x86 от Intel ещё пять лет до её ухода с домашнего рынка.

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

Все эти процессоры имели нечто общее: они следовали принципам Reduced Instruction Set Computer (RISC), которые радикально изменили подход к проектированию и программированию этих чипов. Одно из правил RISC-процессоров гласило, что одна инструкция не может сочетать в себе операции с памятью и регистрами. Это позволило разработчикам аппаратного обеспечения упростить схему, выполняющую инструкции... а затем усовершенствовать её с помощью методов параллелизма.

MIPS и Sony

Image
SGI Iris 4D/80, мощная рабочая станция, состоящая из двух башен. Линейка 4D обозначила начало использования процессоров MIPS в компьютерах SGI, а конкретно эта модель поставлялась с R2000 . Данное фото было сделано в Computer History Museum (Сан-Хосе, Калифорния) во время моего визита в июне 2019 года.

MIPS Computer Systems возникла из желания её основателей (Стэнфордского факультета) воплотить свои исследования в физический процессор, во что венчурные капиталисты Кремниевой Долины 80-х не очень хотели вкладываться . Их дебютный процессор "MIPS R2000" считается первым коммерческим ЦП, реализовавшим модель RISC. Этот процессор хорошо себя зарекомендовал во многих рабочих станциях UNIX.

Однако только в 1987 процессоры MIPS стали предметом обсуждения после того, как их приняла (а затем и приобрела) компания Silicon Graphics Incorporated (SGI) для встраивания в своё оборудование. SGI была влиятельным новатором на рынке компьютерной графики, особенно в разработке аппаратно-ускоренных вершинных конвейеров, задача которых изначально выполнялась программно (в рамках центрального процессора). После приобретения SGI заняла лидирующие позиции как в сфере процессоров, так и в сфере графики.

До начала разработки PlayStation MIPS перешла на бизнес-модель на основе лицензирования интеллектуальной собственности, в которой их проекты ЦП продавались в виде лицензий, а лицензиаты могли свободно их менять и производить. Одним из их предложений был процессор R3000A, находящийся в их бюджетном каталоге. Следовательно, серия R3000A не была частью флагманской линейки (в отличие от R4000, которую позже выберут другие), но она была привлекательной инвестицией с точки зрения стоимости.

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

LSI и заказы

В то же время компания LSI Logic (производитель полупроводников) была лицензиатом MIPS, который предоставлял бизнесу программу "сборки собственного процессора". Эта услуга называлась CoreWare, и она позволяла клиентам создавать свои собственные процессоры, выбирая серию строительных блоков . Библиотека CoreWare включала в себя блок "CW33300". Это было процессорное ядро, основанное на LSI LR33300 - готовом чипе, который компания LSI также продавала.

Итак, к чему я всё это говорю? Оказывается, что LR33300 и CW33300 от LSI - бинарно-совместимые версии чипов линейки MIPS R3000A. Их архитектуры немного отличаются в некоторых областях, но интерфейс программирования (набор инструкций MIPS I) остаётся одинаковым.

В конечном итоге Sony поручила LSI создать свой процессор. Они выбрали CW33000, изменили некоторые биты и объединили его с другими блоками, чтобы сформировать чип, который можно найти на материнской плате PlayStation.

Предложение

Image
Чип SoC на материнской плате PlayStation, который содержит ядра на основе MIPS R3000A.

Полученное ядро процессора работает на частоте 33.87 МГц и имеет следующие характеристики:

Чтобы сделать хоть что-нибудь полезное, Sony добавила 2 МБ оперативной памяти для общего использования. Любопытно, что они установили на материнской плате чипы Extended Data Out (EDO). Они немного более эффективны, чем обычная память DRAM, и обеспечивают меньшую задержку.

В обход CPU

Рано или поздно любая подсистема, будь то графическая, аудио или CD, потребует большие фрагменты данных на большой скорости. Однако ЦП не всегда может поспевать за спросом.

По этой причине контроллеры CD-ROM, MDEC, GPU, SPU и параллельного порта имеют прямой доступ к контроллеру DMA, когда это им необходимо. DMA берёт на себя управление главной шиной и осуществляет передачу данных. Таким образом мы получаем высокую скорость, которую невозможно достичь используя только процессор, хотя он всё ещё нужен для настройки передачи DMA.

Также стоит учесть, что как только DMA примется за работу, ЦП больше не сможет обратиться к главной шине. А значит, процессор будет находиться в ожидании, если только у него нет чего-нибудь, что можно сделать в Scratchpad!

Дополняя ядро

Как и другие процессоры, основанные на MIPS R3000, CW33000 поддерживал конфигурацию с 4 сопроцессорами. Sony добавила три чипа:

System Control Coprocessor

Обозначенный как "CP0", System Control Coprocessor (Сопроцессор Управления Системой) является типичным блоком, находящимся в процессорах MIPS. В системах на основе R3000, подобных этой, CP0 управляет реализацией кэша. То есть он разрешает прямой доступ к кэшу данных (в форме "Scratchpad") и кэшу инструкций (используя "изоляцию кэша"). Сопроцессор управления также отвечает за обработку прерываний, исключений и точек останова, полезных во время отладки.

Погодите, разве сопроцессоры не должны только расширять функционал ЦП? Почему CP0 так тесно связан с центральным процессором?

И действительно, ядра R3000 зависят от сопроцессора управления системой для использования многих компонентов, но "законно" ли так делать или нет сводится к интерпретации слова "сопроцессор". Согласно MIPS, сопроцессор не обязан быть строго дополнением к ЦП, он также может командовать его окружением (кэш, прерывания и т.д.). То есть сопроцессор может быть неотъемлемой частью системы. Это всего лишь то, что нужно иметь в виду, когда речь идёт о системах MIPS.

Позже системы на основе R4000 встроили в этот блок Memory Management Unit (MMU, блок управления памятью) и Translation Lookaside Buffer (TLB, буфер ассоциативной трансляции), тем самым расширив его возможности и предоставив ему новые роли.

Geometry Transformation Engine

"CP2" или Geometry Transformation Engine (GTE, Движок Преобразования Геометрии) — это специальный математический процессор, который ускоряет векторные и матричные вычисления.

Хоть GTE и работает только с числами с фиксированной точкой, он всё ещё предоставляет полезные операции с 3D графикой, такие как:

Вам не нужно помнить всё это, чтобы понимать следующие главы этой статьи! Просто имейте в виду, что GTE позаботится о первых этапах графического конвейера, таких как 3D проекция, освещение и отсечение. Это поможет сгенерировать необходимые данные, которые будут переданы ГП для рендеринга.

Motion Decoder

Motion Decoder, также известный как "MDEC" или "Macroblock Decoder", это ещё один процессор, живущий по соседству с центральным процессором. На этот раз он распаковывает "макроблоки" (Macroblock) в такой формат, который понимает ГП. Макроблоком называется структура данных, хранящая в себе картинку с кодировкой, аналогичной JPEG.

MDEC распаковывает изображения, составленные из блоков 8 на 8 пикселей с глубиной цвета 24 бит. Руководство по программированию Walker гласит, что MDEC может вычислить до 9000 макроблоков в секунду. Это позволяет достичь стриминга full-motion video (FMV, буквально "полностью подвижное видео") в разрешении 320x240 пикселей в 30 кадрах в секунду.

DMA используется для передачи сжатых данных от CD-ROM в MDEC через ОЗУ. Этот же путь данные проделывают и в обратном направлении, правда на этот раз пунктом назначения является VRAM.

Хотя этот компонент и расположен внутри SoC и разделяет одну шину данных, он не является сопроцессором MIPS, так что ЦП и DMA обращаются к нему через размеченную память (в отличие от перехвата инструкций).

Для получения более подробной информации о блоке MDEC, я советую ознакомиться с ресурсами Sabin и Czekański .

Ничего не пропустили?

Итак, у нас есть "CP0" и "CP2", но где же "CP1"? Ну, это место зарезервировано под Floating Point Unit (FPU, математический сопроцессор) и, боюсь, Sony решили не добавлять его. Это не означает, что процессор не может выполнять вычисления с десятичными числами, это просто будет не так быстро (программная реализация FPU) или не так точно (вычисления с фиксированной точкой).

Игровая логика (включающая физику, обнаружение столкновений и т. д.) все еще может обойтись числами с фиксированной точкой. Формат с фиксированной точкой хранит десятичные числа с неизменным количеством знаков после запятой. Это подразумевает потерю точности после некоторых операций, но помните, что это игровая консоль, а не профессиональный авиа симулятор. Именно поэтому целесообразно пожертвовать точностью ради производительности.

Кстати, если вы хотите вспомнить, что такое "фиксированная точка", "плавающая точка", "десятичные числа" и "целые числа", я рекомендую взглянуть на пост Габриэля Иванческу с кратким обзором этих понятий .

Изобилие задержек

Как мы уже видели ранее, процессор CW33300 реализует вычислительный конвейер, то есть процессор может поставить несколько инструкций в очередь и выполнить их параллельно на разных этапах. Это значительно повышает пропускную способность инструкций, но неправильное управление может привести к конфликтам конвейера и, следовательно, к вычислительным ошибкам.

Архитектура MIPS I подвержена следующим проблемам :

Image
Инструкции из "Spyro The Dragon", отображённые в отладчике NO$PSX. Обратите внимание, что за инструкциями LW (load word from memory), JAL (jump and link) и BNE (branch on not equal) следует слот задержки для предотвращения конфликтов (hazards). Бесполезные инструкции (заполнители) помечены красным. Значимые операции помечены синим.

Следовательно, процессоры MIPS I демонстрируют следующее поведение:

Как мы видим в примере, некоторые слоты задержки заполнены полезными инструкциями, которые выполняют вычисления, не подверженные конфликтам. Так что слоты задержки не всегда подразумевают пустую трату циклов.

После всего вышесказанного вы наверняка задаётесь вопросом о том, как процессор с такими недостатками мог вообще продаваться. Одна из основных идей RISC - это перенос бремени программирования процессора с разработчика на компилятор. MIPS в частности отдавал приоритет производству качественных компиляторов (в том числе ассемблеров) в дополнение к своим новым процессорам . Таким образом, разработчики могли пользоваться языками высокого уровня (например, Си), в то время как инструментарий разбирался с конфликтами (меняя порядок инструкций, чтобы заполнить слоты, или в крайнем случае добавляя бессмысленные инструкции). Так что, хотя я не нахожу приятными процессоры, заполненные "пузырями", мне кажется, что в MIPS очень умно решили эти проблемы.


Previous: 2. Краткое введение

Next: 4. Графика


Rodrigo Copetti © 2026 RSS Feed

Переключиться на современную версию

Домашняя страница · Статьи · Поддержка · Об авторе · О сайте