Адресация регистров в устройстве обработки данных

Реферат

 

Изобретение относится к адресации регистров в устройстве обработки данных и может быть использовано для цифровой обработки сигналов. Техническим результатом является возможность применения команды переопределения только для заранее выбранного количества команд. Устройство обработки данных содержит множество регистров для хранения элементов данных, процессор для обработки команд, блок переопределения регистров для преобразования ссылки на логический регистр в предварительно выбранном наборе команд в ссылку на физический регистр и аппаратное средство осуществления циклов для управления командой повторения. 2 с. и 20 з.п.ф-лы, 7 ил., 60 табл.

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

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

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

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

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

При разработке микропроцессоров, в определенных ситуациях, как известно, используется концепция ссылок на логические регистры, которые затем соответствующим образом отображаются в ссылки на реальные физические регистры. Например, суперскалярные процессоры часто используют переименование регистров, чтобы сделать возможным гипотетическое и нестандартное выполнение команд. Процессор имеет больше регистров, чем предоставляет модель программиста, и для отображения логических регистров в их текущие физические эквиваленты применяется таблица отображения. Когда процессор выполняет команды гипотетически, для размещения результатов он назначает номера физических регистров. Другие команды также гипотетически могут считать эти результаты. Таким образом, параллельно могут выполняться несколько возможных командных "потоков". В некоторой точке процессор определит, какой из многочисленных потоков является корректным, обычно основываясь на результате условного перехода. В этой точке таблица отображения постоянно обновляется, и некорректные версии любых регистров отбрасываются. Целью этого переименования регистров является увеличение количества исполняемых команд при совершенной прозрачности для программиста. Далее будет очевидно, что это не помогает решить вышеупомянутую проблему плотности кода.

Другим примером использования ссылок на логические и физические регистры является микропроцессор Аm29200 фирмы Advanced Micro Devices (AMD), включающий 192 регистра общего назначения. 128 из них обозначены как локальные регистры, а дополнительный регистр обозначен как указатель стека локальных регистров, при этом регистр-указатель стека обеспечивает смещение в 128 локальных регистрах. Следовательно, всякий раз, когда любая команда ссылается на локальный регистр, она использует значение регистра-указателя стека для вычисления абсолютного номера регистра. Таким образом, если, например, команда хочет обратиться к локальному регистру 1 (последовательность локальных регистров начинается с локального регистра 0), а указатель стека указывает на абсолютный номер регистра 131 (в действительности, это 4-й регистр в последовательности из 128 локальных регистров согласно структуре Аm29200), на самом деле команда получит доступ к регистру, идентифицированному абсолютным номером регистра 132.

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

Следовательно, можно видеть, что приведенная выше структура AMD допускает некоторую степень переопределения в случаях, когда требуется повторение команд для ряда различных элементов данных в различных регистрах. Однако она требует подачи отдельной команды для изменения значения регистра-указателя стека каждый раз, когда регистр, идентифицированный в операнде команды, должен быть отображен в другой локальный регистр. Это вызывает значительное увеличение непроизводительных операций в определенных ситуациях, например, когда цикл команд должен быть повторен некоторое число раз для смещенного набора элементов данных, например такого, который является типичным в устройстве цифровой обработки сигналов. Увеличение непроизводительных операций становится особенно неприемлемым в том случае, когда цикл содержит лишь небольшое число команд, так как перед повторением цикла требуется отдельная команда для изменения значения регистра-указателя стека. Следовательно, например, если одиночную команду требуется повторить десять раз для применения ее к элементам данных от 1 до 10, то перед каждым выполнением команды потребуется отдельная команда для изменения значения в регистре-указателе стека. Следовательно, цикл команд, содержащий одну команду, в результате становится циклом, имеющим две команды, и очевидно, что это добавляет большой объем непроизводительных операций при выполнении цикла команд.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Далее, только в качестве примера реализации изобретения, описан вариант изобретения со ссылками на чертежи, на которых представлено следующее: фиг. 1 изображает общую структурную схему устройства цифровой обработки сигнала; фиг.2 изображает входной буфер для структуры регистров сопроцессора; фиг.3 показывает магистраль данных через сопроцессор; фиг.4 изображает схему мультиплексирования для чтения битов старшего или младшего порядка из регистра; фиг. 5 представляет собой блок-схему, иллюстрирующую логику переопределения регистров, используемую сопроцессором в предпочтительных вариантах реализации изобретения; фиг. 6 более подробно изображает логику переопределения регистров, показанную на фиг.5; фиг.7 представляет собой таблицу, иллюстрирующую алгоритм фильтра блока.

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

С учетом вышесказанного, далее следует описание системы цифровой обработки сигнала, основанной на использовании ядра процессора (в данном случае - ядро ARM из семейства микропроцессоров, разработанных фирмой Advanced RISC Machines Limited, Кембридж, Великобритания) работающего во взаимодействии с сопроцессором. Интерфейс микропроцессора и сопроцессора, а также сама архитектура сопроцессора имеют специальную конфигурацию, обеспечивающую функциональные возможности ЦОС. При дальнейших ссылках в тексте ядро микропроцессора будет именоваться ARM, а сопроцессор - Piccolo. ARM и Piccolo будут в типичном случае изготавливаться как единая интегральная схема, которая часто включает другие элементы (например, встроенные динамическое оперативное запоминающее устройство ОЗУ, постоянное запоминающее устройство ПЗУ, цифроаналоговые и аналого-цифровые преобразователи и т.д.) как часть проблемно-ориентированной интегральной микросхемы.

Piccolo представляет собой сопроцессор ARM и, таким образом, выполняет часть команд из набора команд ARM. Команды ARM для сопроцессора позволяют ARM пересылать данные между Piccolo и памятью (с использованием команд "Загрузка сопроцессора", LDC и "Сохранение сопроцессора", STC), и пересылать регистры в Piccolo и из него (с использованием команд "Пересылка в сопроцессор", MCR и "Пересылка из сопроцессора", MRC). Синергетическое взаимодействие ARM и Piccolo можно представить следующим образом: ARM действует как мощный генератор адресов для данных Piccolo, при этом Piccolo остается свободным для выполнения операций ЦОС, требующих работы в реальном времени с большими объемами данных для получения также в реальном времени соответствующих результатов.

На фиг. 1 показаны ARM 2 и Piccolo 4. ARM 2 выдает управляющие сигналы Piccolo 4 для управления пересылкой слов данных в Piccolo 4 и из него. Кэш 6 команд хранит командные слова программы Piccolo, которые необходимы Piccolo 4. В единой памяти 8 на основе динамического ОЗУ хранятся все данные и командные слова, необходимые как ARM 2, так и Piccolo 4. ARM 2 ответственен за адресацию памяти 8 и управление всеми операциями пересылки данных. Конструкция с только одной единой памятью 8 и одним набором шин данных и адресов является менее сложной и дорогостоящей, чем типичный подход к ЦОС, который требует нескольких элементов памяти и шин с большой шириной полосы.

Piccolo исполняет второй командный поток (командные слова программы цифровой обработки сигнала) из кэша 6 команд, который контролирует магистраль данных для Piccolo. Эти команды содержат операции, относящиеся по типу к цифровой обработке сигнала, например, "Умножение с накоплением", и команды управления потоком, например команды цикла с нулевыми непроизводительными затратами. Эти команды применяются к данным, которые содержатся в регистрах 10 Piccolo (см. фиг.2). Эти данные ранее были пересланы ARM 2 из памяти 8. Командный поток поступает из кэша 6 команд; кэш 6 управляет шиной данных как полноправный контроллер шины. Небольшой кэш команд Piccolo будет представлять собой 4-строковый, с 16 словами в строке кэш с непосредственным отображением (64 команды). Для некоторых разработок может иметь смысл сделать кэш команд больше.

Таким образом, две задачи выполняются независимо - ARM загружает данные, a Piccolo их обрабатывает. Это позволяет осуществить непрерывную обработку 16-битовых данных в едином цикле. Piccolo имеет механизм ввода данных (показанный на фиг. 1), который позволяет ARM 2 производить предварительную выборку последовательных данных, загружая данные перед тем, как они потребуются Piccolo. Piccolo может обращаться к загруженным данным в любом порядке, автоматически пополняя свой регистр в то время, как старые данные используются в последний раз (все команды имеют по одному биту на операнд - источник для указания на то, что регистр-источник должен быть пополнен). Этот механизм ввода называется буфером переупорядочивания и включает входной буфер 12. Каждое значение, загруженное в Piccolo (посредством LDC или MCR, см. ниже), несет с собой признак Rn, указывающий на то, какому регистру предназначены данные). Признак Rn хранится рядом со словом данных во входном буфере. Когда к регистру происходит обращение через схему выбора регистра 14, а команда указывает, что регистр данных должен быть пополнен, регистр маркируется как пустой установлением сигнала Е. Регистр затем автоматически пополняется при помощи схемы 16 управления пополнением, используя самое старое загруженное значение, предназначенное для этого регистра во входном буфере 12. Буфер переупорядочивания содержит 8 значений с признаком. Буфер 12 переупорядочивания имеет форму, подобную FIFO (память обратного магазинного типа), за исключением того, что слова данных могут быть извлечены из центра очереди, после чего позднее сохраненные слова будут передвинуты вдоль него, чтобы заполнить пространство. Соответственно, слова данных, наиболее удаленные от входа, являются самыми старыми, и это может быть использовано для решения, какое слово данных должно быть использовано для пополнения регистра, когда входной буфер 12 содержит два слова данных с корректным признаком Rn.

Piccolo выдает данные путем размещения их на хранение в выходном буфере 18 (FIFO), как показано на фиг.3. Данные записываются в FIFO последовательно и считываются ARM в память 8 в том же порядке. Буфер 18 вывода содержит 8 32-битовых значений.

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

Самые обычные команды для сопроцессора, которые будет выполнять Piccolo - LDC и STC, которые соответственно загружают из памяти 8 и сохраняют в ней слова данных при помощи шины данных, причем все адреса вырабатывает ARM. Именно эти команды загружают данные в буфер переупорядочивания и сохраняют данные из выходного буфера 18. Piccolo будет останавливать ARM на команде LDC, если во входном буфере переупорядочивания недостаточно пространства для загрузки данных, и на STC - если в буфере 18 вывода недостаточно данных для сохранения, т.е. данные, которые ожидает ARM, не находятся в выходном буфере 18. Piccolo также исполняет регистровые пересылки АРМ/Сопроцессор, чтобы предоставить ARM доступ к специальным регистрам Piccolo.

Piccolo производит выборку своих собственных команд из памяти для управления магистралью данных Piccolo, показанной на фиг.3, и пересылки данных из буфера переупорядочивания в регистры и из регистров в выходной буфер 18. Арифметико-логическое устройство Piccolo, которое выполняет эти команды, имеет схему умножителя сумматора 20, которая производит умножение, сложение, вычитание, умножение с накоплением, логические операции, сдвиг и циклический сдвиг. На магистрали данных также имеется схема 22 накопления/сброса и схема 24 масштабирования/насыщения.

Команды Piccolo первоначально загружаются из памяти в кэш 6 команд, где Piccolo может к ним обращаться, при этом ему не требуется доступ обратно в основную память.

Piccolo не может восстанавливаться при отказах памяти. Таким образом, если Piccolo используется в системе виртуальной памяти, все его данные должны располагаться в физической памяти на протяжении всего времени выполнения им задачи. Это незначительное ограничение возникло в связи с тем, что задачи Piccolo по своей природе являются задачами реального времени, например ЦОС в реальном времени. Если произойдет отказ памяти, Piccolo прекратит работу и установит флаг в регистре состояния S2.

На фиг.3 показана общая функциональная схема магистрали данных Piccolo. Банк 10 регистров использует три порта чтения и два порта записи. Один порт записи (порт L) используется для пополнения регистров из буфера переупорядочивания. Выходной буфер 18 обновляется непосредственно от шины 26 результатов арифметико-логического устройства (АЛУ), а выводом из буфера 18 программно управляет ARM. Сопроцессорный интерфейс ARM помещает результаты выполнения команд LDC (Загрузка сопроцессора) в буфер переупорядочивания, а исходные данные команд STC (Сохранение сопроцессора) берет из буфера 18 вывода, а также применяет команды MCR и MRC (Пересылка регистра ARM в регистр СП и из него) к банку 10 регистров.

Остающиеся порты регистров используются для АЛУ. Два порта чтения (А и В) направляют входные данные в схему 20 умножителя/сумматора, порт чтения С используется для направления ввода в схему 22 накопления/сброса. Оставшийся порт записи W используется для возврата результатов в банк 10 регистров.

Умножитель 20 выполняет 16х16 умножение со знаком или без знака, с возможным 48-битовым накоплением. Блок 24 масштабирования может обеспечивать непосредственный арифметический или логический сдвиг вправо от 0 до 31, с возможным последующим насыщением. Сдвиговый и логический блок 20 может за каждый такт выполнять либо сдвиг, либо логическую операцию.

Piccolo имеет 16 регистров общего назначения, названных D0-D15 или А0-А3, Х0-Х3, Y0-Y3, Z0-Z3. Первые четыре регистра (А0-А3) предназначены для использования в качестве аккумуляторов и имеют разрядность 48 бит, причем дополнительные 16 бит обеспечивают защиту от переполнения во время многих последовательных вычислений. Оставшиеся регистры - 32-разрядные.

Каждый из регистров Piccolo может обрабатываться как содержащий два независимых 16-битовых значения. Биты с 0 по 15 содержат младшую половину, биты с 16 по 31 - старшую половину. Команды могут задавать отдельную 16-битовую половину каждого регистра как операнд-источник, или задавать 32-битовый регистр в целом.

Piccolo также обеспечивает арифметику насыщения. Варианты команд умножения, сложения или вычитания предоставляют насыщенный результат, если результат больше, чем размер регистра-приемника. Если регистр-приемник является 48-битовым аккумулятором, то значение насыщается до 32 бит (т.е. нет способа насытить 48-битовое значение). Для 48-битовых регистров отсутствует распознавание переполнения. Это разумное ограничение, так как понадобилось бы, по крайней мере, 65536 команд умножения с накоплением, чтобы вызвать переполнение.

Каждый из регистров Piccolo либо помечен как "пустой" (флаг Е, см. фиг. 2), либо содержит некоторое значение (невозможно иметь пустую половину регистра). Сначала все регистры помечены как пустые. В каждом такте Piccolo пытается при помощи схемы управления пополнением 16 заполнить один из пустых регистров значением из входного буфера переупорядочивания. В противном случае, если в регистр записано значение из АЛУ, он больше не помечен как "пустой". Если в регистр записано значение из АЛУ и, в то же время существует значение, которое ожидает размещения в регистр из буфера переупорядочивания, то результат неопределен. Блок исполнения Piccolo остановится, если чтение сделано в пустой регистр.

Входной буфер переупорядочивания (БП) размещен между сопроцессорным интерфейсом и банком регистров Piccolo. Данные загружаются в БП при сопроцессорных пересылках ARM. БП содержит некоторое число 32-битовых значений, каждое с признаком, указывающим регистр Piccolo, для которого это значение предназначено. Признак также указывает, должны ли данные занять целый 32-битовый регистр или только нижние 16-бит 32-битового регистра. Если данные предназначены для целого регистра, то нижние 16 бит ввода будут пересланы в нижнюю половину целевого регистра, а верхние 16 бит - в верхнюю его половину (с дополнением знака, если целевой регистр представляет собой 48-битовый аккумулятор). Если данные предназначены только для нижней половины регистра (так называемые "Полрегистра"), то сначала будут пересланы нижние 16 бит.

Признак регистра всегда ссылается на физический регистр-приемник, переопределение регистров не производится (относительно переопределения регистров смотрите ниже).

В каждом такте Piccolo пытается переслать ввод данных из БП в банк регистров по следующему принципу.

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

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

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

Например, если целевой регистр - совершенно пустой, а выбранные вводы БП содержат данные, предназначенные для полного регистра, то пересылаются все 32 бита, а ввод помечается как пустой. Если нижняя половина целевого регистра пуста, а ввод в БП содержит данные, предназначенные для нижней половины регистра, то нижние 16 бит из ввода в БП пересылаются в нижнюю половину целевого регистра, а нижняя половина БП помечается как пустая.

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

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

Данные загружаются в БП с использованием команд ARM для сопроцессора. Как данные помечаются в БП, зависит от того, какая команда ARM для сопроцессора была использована для выполнения пересылки. Для заполнения БП данными имеются следующие команды ARM: LDР{<состояние>[<16/32><приемник>, [Rn]{!}, #<размер> LDP{<состояние>}<16/32>W<приемник>, <разворот>, [Rn]{!}, #<размер> LDР{<состояние>} 16U<банк>, [Rn]{!} МРR{<состояние>{<приемник>, [Rn] МRР{<состояние>}<приемник>, [Rn] Для конфигурирования БП предназначена следующая команда ARM: LDPA<список банков> Первые три ассемблируются как команды LDC, MPR и MRP - как команды MCR и LDPA ассемблируется как CDP.

В вышеприведенном <приемник> означает регистр Piccolo (A0-Z3), Rn - регистр ARM, <размер> - постоянную величину, число байт, которое должно быть ненулевым и кратным 4, и <разворот> означает константу (1, 2, 4, 8). Поля в фигурных скобках {} являются необязательными. Для того чтобы пересылка могла уместиться в буф