SPU (Sound Processing Unit) воспроизводит звук. SPU использует специальный формат ADPCM-компресии, для хранения звуковых данных (похожий на формат XA-ADPCM).
Звуковая подсистема PSX представляет собой связку микросхем для работы с CD-ROM (в которую входят CD-декодер, CD DSP и SUB-CPU), непосредственно SPU и выходного ЦАП.
Аппаратная реализация всех частей звуковой подсистемы менялась в разных версиях материнских плат.
Тут мы будем рассматривать непосредственно SPU, когда он был реализован в виде отдельной микросхемы IC308
(CXD2922Q/CXD2925Q).
Микрофотография кристалла CXD2925Q (увеличение 4X), с размеченными доменами ячеек и юнитами:
Технология: 3 слоя металла, стандартные ячейки и кастомные блоки (внутренняя память, регистры).
2 верхних слоя металла используются для разводки (Channel router). М1 используется для схемотехники стандартных ячеек и внутренних блоков.
SPU содержит 24 звуковых канала (voice). Источником звука являются данные из памяти SPU (512 KB), в формате ADPCM. Есть возможность вместо ADPCM подавать на вход шум (noise) с подстраиваемой частотой.
Над ADPCM можно делать тональную модуляцию (pitch), над шумом нельзя. Примером эффекта pitch является изменение тональности голоса, после вдыхания гелия 😃
Затем входные данные подаются на генератор ADSR-огибающей и далее на общий микшер.
Как видно к звуку 24 каналов дополнительно подмешивается звук с CD-ROM.
Есть возможность добавить эффекты реверберации (эхо и пр.).
Громкость регулируется для: звуковых каналов (отдельно для L/R), входных данных с CD-ROM, реверберации, а также есть общий регулятор громкости.
Обмен данными между памятью SPU и CPU RAM происходит посредством DMA, при этом работа SPU (звучание) не прерывается.
Выходной цифровой звук подается на ЦАП.
Ниже приведена картинка из сервисного мануала с выводами SPU и соединением его с памятью SPU и другими устройствами:
Картинка актуальна только для материнок PU-18 и ниже, так как в более новых поменялась компоновка микросхем.
Описание терминалов:
- Слева находятся контакты для подачи потоковых аудио данных с CD-ROM декодера: DTIA, LRIA, BCIA.
- Выходной цифровой звук (в последовательной форме) через контакты DATO, LRCO, BCKO подается на ЦАП. На ЦАП также подается тактовая частота XCK.
- Дополнительно на вход SPU может быть подмешано потоковое аудио с параллельного порта (PIO), через контакт DTIB. При этом частота сэмплирования такая же, как и у выходного звука. При этом BCIB почему-то заведен на землю, а LRIB идёт на контакт CD-DSP LRCK.
- Ниже находятся контакты для работы с памятью SPU: XOE0 (включить обмен), XWE0 (write enable), MA (адресная шина, используется только 9 бит), MD (шина данных, 16 бит), XCAS/XRAS для рефреша DRAM. Заметим, что есть также XWE1 и XOE1, возможно для дополнительной памяти SPU. Особенность памяти SPU в том, что обмен происходит 16-разрядными словами (16-битная память). Поэтому выходной адрес с контактов SPU умножается на 2 (выходной контакт D0 заведён на контакт памяти D1 и так далее) и получается "индекс" ячейки памяти.
- Главный тактовый сигнал для подсистемы PSX: SYSCK
- Тестовые сигналы TEST и TES2
- Сигнал сброса XRST заведен через конденсаторы на VSS, чтобы обеспечить время для сброса после включения питания
- Интерфейс для взаимодействия с CPU: HD (host data, шина данных, 16 бит), HA (host address, шина адреса, 9 бит), XCS (выбор чипа), XRD/XWR (read/write), DACK/DREQ (DMA acknowledge/request), XIRQ (прерывание SPU). Обмен по внешней шине также происходит 16-разрядными словами, с умножением адреса на 2.
- Cигнал MUTE (?)
Сокращения: BC,BCK - bit clock, LR,LRC - left/right clock, DAT,DT - data. Что всё это значит? Эти три сигнала представляют собой последовательный интерфейс для передачи стереозвука: bit clock - это тактовая частота, по которой передаются данные (data). LRC - это частота, которая разделяет пачку бит на левый и правый каналы. Когда LRC=1 - на вход подаются биты для левого канала, когда LRC=0 соответственно для правого.
Сигналы, названия которых начинаются с "X", имеют инверсную логику (active low).
Как уже говорилось, особенностью памяти SPU является её 16-разрядная "слотовость". Поэтому вместо термина "адрес", тут лучше применять термин "индекс".
Объем памяти - 512 KB.
Память SPU используется для хранения ADPCM-семплов для воспроизведения и таблиц для эффектов реверберации.
Также SPU складирует в специальные "круговые" буферы некоторые данные, которые он воспроизводит, чтобы центральный процессор мог использовать их в своих целях.
Карта памяти SPU:
00000h-003FFh CD Audio left (1Kbyte) ;\CD Audio after Volume processing
00400h-007FFh CD Audio right (1Kbyte) ;/signed 16bit samples at 44.1kHz
00800h-00BFFh Voice 1 mono (1Kbyte) ;\Voice 1 and 3 after ADSR processing
00C00h-00FFFh Voice 3 mono (1Kbyte) ;/signed 16bit samples at 44.1kHz
01000h-xxxxxh ADPCM Samples (first 16bytes usually contain a Sine wave)
xxxxxh-7FFFFh Reverb work area
Складируются только входные данные с CD и каналы 1 и 3 (почему именно 1 и 3 - так решили инженеры Sony 😃)
Обмен данными между памятью SPU и памятью CPU происходит через DMA, параллельно воспроизведению звука.
Изменение CD/Audio системы произошло в материнках начиная серии SCPH-7500 (PU-22). Схема из сервисного мануала:
SPU теперь стал входить в состав большой микросхемы с индексом IC732, в виде Audio DSP. Наиболее заметные изменения:
- Они зачем-то добавили на картинку интерфейс с SUB-CPU, пока непонятно зачем. Возможно более новые версии SUB-CPU содержат новую версию ROM, которая управляет работой Audio DSP. А может чтобы показать, что CD-декодер управляется центральным процессором через Host interface, который передает управление далее по цепочке, в SUB-CPU interface.
- ЦАП теперь стал входить в состав микросхемы. По этой причине старые версии PSX больше ценятся аудиофилами, из-за больших возможностей моддинга. Во времена когда SPU был в виде отдельной микросхемы выход (в виде последовательных данных) подавался на ЦАП производства Asahi Kasei.
ЦАП выглядит следующим образом:
Datasheet доступен: Datasheet
На вход поступают 1-bit последовательные данные от SPU (LRCK, BICK, SDATA), внутри ЦАП содержится много интерполяторов и прочих непонятных девайсов, в результате на выходе мы получаем перфектный аналоговый стерео-сигнал (AOUTL, AOUTR).
Как и у любого ЦАП тут используются 2 цепи питания - цифровая (DVDD,DVSS) и аналоговая (AVDD,AVSS). Напряжения VREFL и VREFH задают соответственно нижнюю и верхнюю границу напряжения аналогового сигнала (обычно VREFH=AVDD, VREFL=AVSS).
Выходной контакт DZF устанавливается если на входе слишком долго не было никакого звука (SDATA=0), сбрасывается автоматически.
Формат сэмплов - 16-бит со знаком.