Практический подход к реализации системной шины 60х
для процессоров PowerPC
Игорь КАУРАНЕН Александр ПОПОВИЧ
popovich@bae-radhard.ru
Доступные для отечественных разработчиков бортовой аппаратуры космических аппаратов радиационно-стойкие процессоры семейства RAD750 являются характерными представителями архитектуры PowerPC. При практическом применении этих процессоров неизбежно возникает проблема их стыковки с «внешним миром», которая должна осуществляться в соответствии со стандартом шины 60х. В отличие от «обычного» микропроцессора, RAD750 не имеет собственного интерфейса памяти и портов ввода/ вывода. Насколько велика эта проблема?
Процессоры семейства PowerPC, начиная с PowerPC 601, начали применяться в рабочих станциях IBM RS/6000 и компьютерах Apple Power Macintosh c 1994 года. Позднее, на основе нового процессора PowerPC 750 были построены компьютеры Apple iMac и Power Macintosh G3. В 2001 году BAE Systems представила первый радиационно-стойкий процессор RAD750, выполненный по технологии R25. К настоящему времени семейство
процессоров RAD750 заслуженно занимает свое место среди наиболее востребованных электронных компонентов для космического приборостроения благодаря высокой надежности и производительности, что было доказано в многочисленных космических миссиях с 2005 года, например, таких как полеты автоматических аппаратов на Марс. Активное развитие семейства в направлении повышения производительности и снижения тепловыделения позволяет предсказать
благоприятные перспективы его применения на ближайшие 10-15 лет.
В ходе развития линейки PowerPC 601 — PowerPC 750 поддерживалась совместимость внешнего интерфейса — системной шины; с момента появления PowerPC 601 в 1993 г. эта шина имеет обозначение 60x. Заложенные в стандарт 60х возможности позволяют ему до сих пор оставаться актуальным для космического приборостроения, спустя почти два десятилетия. Так, например, уже в процессоре PowerPC 601 были заложены возможности построения мультипроцессорных систем [3]. В качестве примера таких систем можно привести упомянутые рабочие станции IBM RS/6000. Об опыте лётной эксплуатации подобных систем на борту космических аппаратов пока ничего не известно.
Процессор PowerPC 750 и, соответственно, RAD750 включает в себя [1] следующие основные узлы (рис. 1):
• устройство выборки (Instruction Prefetcher);
• диспетчер инструкций (Dispatch Unit);
• процессор обработки ветвлений (Branch Processing Unit);
• два процессора целочисленных операций (Integer Unit 1, 2);
• процессор операций с плавающей точкой (Floating Point Unit);
• модуль загрузки и сохранения (Load/store Unit);
• модуль системных регистров;
• диспетчер памяти (Memory Management Unit, MMU);
• кэш-память первого уровня, отдельно для команд и данных (I-cache, D-cache);
• контроллер кэш-памяти второго уровня L2;
• контроллер системного интерфейса 60x. Первые пять модулей будем называть процессорным ядром [3].
Процессоры
арифметики
Интерфейс кэша L2
Устройство
выборки
команд
Диспетчер
инструкций
Сопроцессор с «плавающей точкой»
PowerPC 750
Процессор
ветвлений
Диспетчер памяти О Регистры
t к
У г
Система Кэш L1
кэширования 32K+32R
Системный
интерфейс
бОх
Внешняя шина 60х
Рис. 1. Структурная схема процессоров PowerPC 750
Арбитраж
адреса
Начало
транзакции
Шина
адреса
Атрибуты
транзакции
Окончание
транзакции
Арбитраж
данных
Шина
данных
Управление
передачей
данных
Кэш L2
адрес
данные
Кэш L2 управление
Прерывание
Управление
процессором
Управление
тактовыми
сигналами
]
Отладка
Задача любого процессора — извлекать инструкции из памяти, декодировать и исполнять их. Рассмотрим процесс выполнения программы в процессоре архитектуры PowerPC. Каждая инструкция имеет длину 32 бита. Модуль выборки извлекает каждую последующую инструкцию из памяти, передавая каждый адрес диспетчеру памяти (Memory Management Unit, MMU). MMU получает адрес и транслирует его в соответствующий физический адрес. Если относящиеся к данному адресу код или данные находятся в кэш-памяти, то они возвращаются модулю, запросившему данные. Если запрашиваемые данные или инструкции не находятся в кэше, и область памяти помечена как кэшируемая, то контроллер кэш-памяти обращается к системному интерфейсу (шине 60x) для чтения этого участка из внешней памяти и наполнения кэша. Если область памяти помечена как не кэшируемая (или если в системе отсутствует кэш-память), то запрос данных идет от блока MMU напрямую к контроллеру системного интерфейса, минуя контроллер кэша [3, Chapter 3, Processor Microarchitecture Overview].
Итак, все обращения процессора, не попадающие в кэш-память, приводят к циклу обращения (транзакции) на шине. При этом контроллер кэш-памяти и контроллер шины 60x, как было отмечено выше, тесно связаны.
Приведем характеристики шины 60x применительно к процессору RAD750:
• Тактовая частота — 33 или 66 МГц.
• Ширина шины адреса — 32 разряда.
• Ширина шины данных — 64 или 32 разряда.
В реализации 60х для RAD750 (рис. 2) заключены следующие возможности [5]:
• Поддержка мультипроцессорности (в [3] описано подключение двух процессоров PowerPC 601).
• Раздельные транзакции адреса и данных.
• Конвейеризация, при которой новая транзакция адреса может начаться до завершения очередного цикла данных (подробнее будет рассмотрена ниже).
• Поддержание когерентности (целостности) памяти и кэша.
Таким образом, системная шина 60x, включающая в себя сигналы адреса, данных и управления, позволяет извлекать из внешней памяти программный код, данные, а также производить обращения к внешним устройствам. Забегая вперед, отметим, что среди внешних устройств могут быть контроллеры RS-232, таймеры, такие сложные устройства, как контроллеры SpaceWire и Mil-Std-1553, а также мост PCI для реализации компьютера с интерфейсом PCI (например, в формате CompactPCI).
Задача сопряжения шины 60x и блоков памяти, внешних контроллеров, моста PCI ложится на так называемый чип-компаньон. При реализации компьютера с шиной PCI задача моста PCI в составе чипа-компаньона
Рис. 2. Внешние сигналы процессора RAD750
заключается в следующем. Если обращение процессора на шине 60x происходит к области памяти, относящейся к шине PCI, то мост «захватывает» PCI-шину и начинает пересылку на шине. Если на PCI-шине со стороны какого-либо «мастера» шины возникает запрос, относящийся к памяти процессора, то мост транслирует это обращение и производит его на шине памяти. Важным и сложным моментом здесь является то, что возникает необходимость поддержания когерентности (целостности) памяти и кэша.
Производители процессоров нередко предлагают свои решения, такие как IBM CPC710 [6] или Motorola MPC107 [7], собственное изделие предлагает и BAE Systems — это микросхема PowerPCI. Радиационно-стойкий чип-компаньон от BAE включает в себя контроллер шины 60x, контроллер памяти, мост PCI и логику, необходимую для реализации «центрального ресурса» PCI, то есть построения компьютера с интерфейсом PCI. Также PowerPCI включает в себя UART, контроллеры JTAG и вспомогательный микроконтроллер (Embedded micro-controller, EMC). Существуют также реализации PowerPCI с двумя шинами PCI и со встроенным роутером SpaceWire.
Несмотря на существование готовых чипов-компаньонов, реализация собственной системы на кристалле на ПЛИС имеет
ряд преимуществ. Так, пользователь получает возможность реализовать набор функций, отвечающих нуждам его контроллеров (SpaceWire, Mil-Std-1553 и других), реализовать систему коррекции ошибок памяти (и систему банков памяти), заложить возможности резервирования на основе собственных наработок в этой области.
Кроме того, следует отметить, что СБИС чипов-компаньонов выпускаются ограниченными сериями и несут в себе наборы контроллеров, оптимальные для бортовых компьютеров космических аппаратов, выпускаемых самой корпорацией BAE Systems.
Рассмотрим основные проблемы, встающие перед разработчиком собственного чипа-компаньона на основе радиационно-стойких ПЛИС (например, Actel RTAX). Итак, процессорная шина 60x не поддерживает прямое подключение памяти или периферийных устройств. Также шина имеет отмеченные выше особенности (раздельные транзакции адреса и данных, конвейеризация), направленные на повышение производительности. Самые большие сложности возникают при реализации многопроцессорных систем [3, Chapter 2, PowerPC System Overview] и реализации стандартной основной шины, такой как PCI (последнее в ряде случаев приводит к необходимости синхронизации кэш-памяти и основной памяти). Наконец,
Банки памяти Процессор PowerPC 750
Система на кристалле
Контроллер
Контроллер < ► шины 60х
памяти
( ОСМ master)
I
Шина ОСМ (32 разряда)
1
( ОСМ master) С ОСМ slave ) Контроллер UART С ОСМ slave ) Контроллер таймера (ОСМ master) ( ОСМ slave ) Контроллер SpaceWire ( ОСМ slave ) Контроллер Mil-Std-1553
і к. і і і і
> 1 Интерфейсы > '
Рис. 3. Структурная схема системы на кристалле чипа-компаньона
описание протокола работы шины занимает пугающе большой объем [5]. Однако если мы остановимся на построении однопроцессорной системы без реализации стандартной основной шины, задача значительно упрощается.
Рассмотрим однопроцессорный бортовой компьютер на базе PowerPC 750 более подробно. Отметим, что в этом случае сразу отпадает необходимость в реализации арбитра, который нужен только в многопроцессорной системе.
В качестве примера возьмем простейший компьютер, который был описан в [4].
В предлагаемом варианте используется память SRAM объемом 8 (16) Мбайт, халькогенидная энергонезависимая память C-RAM объемом 2 (4) Мбайт и загрузочная память (также C-RAM или Antifuse PROM). Поскольку процессор, как было отмечено, не включает в себя ни контроллер памяти, ни какие-либо интерфейсы ввода/вывода, реализация данных функций ложится на ПЛИС. Мы имеем, помимо процессора, всего одну микросхему, внутри которой реализуется вся логика работы системы. Поскольку вся логика работы шины 60х в таком подходе описывается на языках HDL (VHDL или Verilog), а процессор PowerPC может быть легко заменен поведенческой моделью, появляется уникальная возможность проверки на модели функциональности вычислительной системы в целом. Виртуальное тестирование компьютера может быть выполнено при помощи современных средств симуляции, таких как ModelSim.
Отметим также, что при использовании в целевой аппаратуре дорогостоящей радиационно-стойкой элементной базы
есть возможность построить аппаратуру-прототип на гораздо более дешевых коммерческих компонентах.
Система на кристалле (SOC) обычно разделена на несколько функциональных блоков (контроллеров) (рис. 3), обмен между которыми происходит по внутренней шине OCM (on-chip micro-controller bus). В SOC, помимо контроллера шины 60x и контроллера памяти, могут быть реализованы и другие устройства, например: контроллер UART, контроллер таймера, контроллер SpaceWire и контроллер Mil-Std-1553. Каждому контроллеру в таком случае должна быть отведена собственная область в адресном пространстве процессора.
Каждый контроллер, имеющий интерфейс «мастер OCM», получает возможность начать обращение к другим контроллерам. Таким образом, через интерфейсы UART и SpaceWire можно организовать программирование энергонезависимой памяти C-RAM без участия процессора.
Остановимся подробно на работе контроллера шины 60x.
Транзакция шины 60x начинается с того, что процессор выставляет сигнал TS (transaction start) длительностью 1 такт, который стробирует текущий адрес A [0:31] и сигналы управления типом транзакции — TT (transfer
type), Burst, Tsize. Здесь необходимо отметить, что только по типу транзакции TT шина PowerPC 750 поддерживает 19 типов обращений, однако и здесь при реализации однопроцессорной системы необходима поддержка лишь части обращений.
Области памяти, отведенные контроллерам внутри SOC, являются не кэшируемыми, таким образом, к ним приходят только одиночные (single-beat) обращения.
Контроллер памяти, в свою очередь, должен поддерживать как одиночные (single-beat), так и пакетные (burst) обращения. Часть типов обращений использует только одиночные, часть — только пакетные, часть — оба типа (например, Read atomic и Write-with-flush). Следующей важной задачей контроллера памяти является отслеживание всех возможных «невыровненных» обращений (Table 8-5 в [1]) и преобразование их в соответствующие циклы памяти, в которых задействованы только нужные данные. Обращение будет являться невыровненным, если адрес не кратен размерности данных. Байтовые обращения всегда считаются выровненными.
В таблице приведены примеры выровненных и невыровненных обращений. Используя сигналы TSIZ [0:2] и младшие разряды шины адреса A [29:31], контроллер памяти решает, какие байты задействованы в текущем обращении. При этом TSIZ [0:2] служит индикатором размера пересылки — 4 байта в первом случае, 3 байта во втором, 1 байт в третьем.
Адресная фаза транзакции заканчивается тем, что контроллер выставляет сигнал «подтверждения адреса» AACK. После этого начинается фаза данных.
Контроллер памяти выставляет данные при чтении, стробируя их сигналом TA (transfer acknowledge), или принимает данные при записи, подтверждая их тем же сигналом TA. При частоте системной шины RAD750, равной 33 МГц, это позволяет обрабатывать пакетные обращения, используя статическую память со временем цикла не хуже 20 нс (например, SRAM BAE Millennium, BAE Monolithic) без введения тактов ожидания. Пакетные обращения возможны только к кэшируемой памяти и всегда имеют длину 4 слова. Для более медленной памяти C-RAM происходит «затягивание» шинных циклов при помощи сигнала TA. Характерной особенностью работы шины PowerPC является конвейеризация, то есть новая транзакция адреса может начаться до завершения оче-
Таблица. Выровненные и невыровненные обращения
Обращение TSIZ[0:2] A[29:31] байт
0 2 3 4 5 6 7
Выровненное 1OO OOO A A A A - - - -
Невыровненное O11 OO1 - A A A - - - -
Байтовое OO1 1OO - - - - A - - -
Примечание. A — баИт задействован; «—» — баИт не задействован
CLK
TS_PPC
AACK_PPC
TBST_PPC
TA_PPC
DH_PPC
DL_PPC
ADDR_PPC
TSIZ_PPC
TT PPC
MEM_ADDR
MEM_DAT
MEM_CE
MEM_OE
MEM_WE[0]
MEM_WE[1]
MEM_WE[2]
MEM_WE[3]
MEM_WE[4]
MEM_WE[5]
MEM_WE[6]
MEM_WE[7]
Л _П_П_П_ иіги LTLTLTl ллти “LTLTLT LTLTLTl Л_П_П_ 1ТЛ
_І _l
1 1 l_l
1 Г
1 I 1
(000С JUUU 100(11 І0...І0. .10...! HU
її 100000 4000.. Л 0001 0000 40000008 I 0000000
0 2 10 2 K(
00 06 100 Oe X( 3
_00 юо [ 10001 ко. -Ю.-ІП- KCL, 00006 1 10001 10 ■X0.j0...)(00 105
(0000 ..10..J0..J <oT.I obzP
1 I-
1 I-
J I Ln J U L XLTL
U I _n J U U _n_n_
J I LTl J U L _TLTL
U I Ln J U U гии
Рис. 4. Временная диаграмма пакетной записи и пакетного чтения
CLK
TS_PPC
ААСК_РРС
TBST_PPC
ТА_РРС
DH_PPC
DL_PPC
ADDR_PPC
TSIZ_PPC
TT PPC
FLTLTLгПГІГ LTLTLTL ЛЛ_П_
MEM_ADDR
MEM_DAT
MEM_CE
MEM_OE
MEM_WE[0]
MEM_WE[1]
MEM_WE[2]
MEM_WE[3]
MEM_WE[4]
MEM_WE[5]
MEM_WE[6]
MEM_WE[7]
1 1 LJ 1
_l 1 1
l_l (ooooo..^ 1 1
Г=1
\Q^j
0... 1400000 )0 I 0000000 о о о о 100 1000000 >о 1
0 12 10 12 № 1
00 102 100 На Ї00 1
00001 100000 I 10001 100000 Ю0001
IQW \ 1
1 г
1
LT
LT
l_l I—I I_______ГI____I L_
Рис. Б. Временная диаграмма одиночной записи и одиночного чтения
редного цикла данных. Таким образом, увеличивается пропускная способность шины.
На рис. 4 приведена диаграмма пакетной записи (тип — write-with-kill) и пакетного чтения (тип — read-with-intent-to-modify) одних и тех же ячеек статической памяти (для примера). Адресная фаза началась с того, что процессором были выставлены:
• сигнал TS_PPC (transfer start);
• адрес (ADDR_PPC);
• признак пакетного обмена TBST_PPC (burst);
• тип транзакции TT_PPC (transfer type, значение Gx6, Table 7-1 в [1]);
• размер TSIZ_PPC (для пакетного обмена, при котором выставлен сигнал TBST_PPC, это всегда значение Gx2).
Контроллером шины 6Gx, в свою очередь,
был выставлен сигнал «подтверждения адреса» AACK_PPC. При готовности контроллера
памяти начать записывать данные в память, контроллер шины 6Gx выставил для процессора сигнал TA (transfer acknowledge). В этот момент процессор начал выдачу четырех 64-разрядных слов.
Далее мы можем видеть, что происходило на шине памяти. Младшая часть декодированного адреса была транслирована на шину адреса статической памяти, сигнал MEM_CS (chip select) стал активен. Отметим, что процессором был выставлен только начальный адрес, поэтому при записи каждого нового значения из четырех адрес автоматически инкрементировался контроллером памяти. Каждый такт на шину данных памяти транслировались данные с шины 6Gx. По сигналам записи в память MEM_WE мы видим, что записывались все 8 байт в 64-разрядном слове.
Начало транзакции чтения, которое следует дальше, выглядит так же, с тем отличием,
что тип транзакции имеет значение GxE (read-with-intent-to-modify, см. Table 7-1 в [1]). Когда контроллер памяти готов выдавать данные для процессора, контроллер шины 6Gx, как и ранее, выставляет для процессора сигнал TA (transfer acknowledge). Мы снова видим автоматический инкремент адреса на шине памяти. Данные на этот раз транслируются с шины памяти на шину 6Gx.
На рис. 5 приведены диаграммы одиночной (single-beat) записи (тип — write-with-kill) и одиночного чтения (тип — read-atomic). В начале адресной фазы мы видим то отличие, что не выставлен сигнал TBST_PPC — это означает одиночное обращение. Размер TSIZ, так же как и в предыдущем случае, имеет значение Gx2, но на сей раз это означает размер пересылки 2 байта (Table 7-3 в [1]), поскольку не выставлен сигнал пакетного обращения TBST_PPC. Используя три младших бита шины данных, мы получаем информацию, к каким именно байтам происходит обращение (Table 8-5 в [1]). В нашем случае обращение происходит к двум младшим байтам. На шине статической памяти мы видим сигнал записи MEM_WE, в котором активно только два сигнала из восьми.
Далее при чтении read-atomic мы видим тип обращения TT_PPC, имеющий значение Gx1A, и такой же размер пересылки TSIZ_PPC Gx2. Это означает, что процессору требуется прочитать два байта. Правильные данные на шине 6Gx, как и в случае пакетной пересылки, подтверждаются сигналом TA_PPC.
Несмотря на кажущуюся сложность и трудоемкость реализации шинного интерфейса 6Gx, ее практическая реализация для однопроцессорного компьютера не превышает нескольких десятков тысяч вентилей и может быть выполнена квалифицированным разработчиком ПЛИС в краткие сроки.
В заключение отметим, что одна из крупных компаний, специализирующихся на разработке IP, — Eureka Technology — предлагает готовое решение для построения контроллера шины 6Gx — ядро EP1GG PowerPC Bus Slave. Ш
Литература
1. PowerPC 75G User Manual, IBM, Poughkeepsie. NY, 1999.
2. Sivarama P. Dandamudi. Guide to RISC Processors for Programmers and Engineers, Springer, 2GG5.
3. Shanley T. PowerPC System Architecture, Mindshare Inc. Addison-Wesley Publishing, 1995.
4. Попович А. Сделай сам бортовой вычислитель для полета на Сатурн // Компоненты и технологии. 2G1G. № 1.
5. PowerPC Microprocessor Family: The Bus Interface for 32-it Microprocessors. IBM, Motorola, 1997.
6. CPC71G PCI Bridge and Memory Controller. IBM, 2GG3.
7. MPC1G7 PCI Bridge/Memory Controller User’s Manual. Motorola, 2GGG.