Способ и устройство для кэширования команд переменной длины

Иллюстрации

Показать все

Изобретения относятся к области вычислительной техники, а именно к кэшированию команд переменной длины в микропроцессорных системах. Техническим результатом является повышение производительности систем, использующих наборы команд переменной длины и невыровненное запоминающее устройство для хранения данных команд. Способ кэширования команд переменной длины содержит этапы, на которых: записывают данные команд в строку кэша и сохраняют резервную копию данных команд для одной или более позиций границы кэша. 4 н. и 33 з.п. ф-лы, 6 ил.

Реферат

Область техники, к которой относится изобретение

Настоящее изобретение, в общем, относится к кэшированию команд и, в частности, к кэшированию команд переменной длины.

Уровень техники

Длина слова микропроцессора означает длину (в битах или байтах) его базовой рабочей единицы данных. Например, 32-битовый микропроцессор имеет номинальную длину слова в 32 бита (4 байта). В наборе команд равномерной длины команды, как правило, сохраняются в запоминающем устройстве по естественным границам слов. Тем не менее некоторые микропроцессоры используют команды переменной длины, например смесь 32-битовых и 16-битовых команд или смесь 64-битовых и 32-битовых команд. Поддержка команд меньшей длины обеспечивает в некоторых случаях совместимость с прежними версиями и предоставляет возможность использования меньшего объема памяти для команд, по меньшей мере, в приложениях, которые могут использовать более короткие команды.

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

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

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

Извлечение команд с пересечением границ для традиционного кэша требует двух обращений: первое обращение для того, чтобы считать данные команд перед позицией границы, и второе обращение для того, чтобы считать данные команд после позиции границы. Второе обращение извлекает замыкающую (послеграничную) часть пересекающей границу команды. Очевидно, преобладание невыровненных команд в кэш-памяти отрицательно влияет на общую производительность кэширования, поскольку требуются дополнительные считывания из кэша для извлечения замыкающих частей невыровненных команд с пересечением границ.

Раскрытие изобретения

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

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

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

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

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

Краткое описание чертежей

Фиг.1 - это блок-схема, иллюстрирующая вариант осуществления кэша команд и вспомогательного запоминающего устройства.

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

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

Фиг.4 - это блок-схема, иллюстрирующая другой вариант осуществления кэша команд и вспомогательного запоминающего устройства.

Фиг.5 - это блок-схема, иллюстрирующая еще один другой вариант осуществления кэша команд и вспомогательного запоминающего устройства.

Фиг.6 - это блок-схема, иллюстрирующая вариант осуществления микропроцессора, включающего в себя кэш команд и вспомогательное запоминающее устройство.

Осуществление изобретения

Фиг.1 иллюстрирует вариант осуществления кэша 10 команд и вспомогательного запоминающего устройства 12, включенного или ассоциативно связанного с кэшем 10 команд. Транзакции кэширования команд, направляемые в кэш 10 команд, администрируются посредством контроллера 14, который выполнен с возможностью использовать вспомогательное запоминающее устройство 12 для сохранения резервных копий данных команд для одной или более позиций границ в кэше 10. Дополнительно, контроллер 14 администрирует извлечение данных команд из кэша 10 так, что, по меньшей мере, некоторые из невыровненных команд, сохраненных в кэше 10, извлекаются в одном обращении. Контроллер 14 предоставляет извлечение в одном обращении невыровненных команд из кэша 10 посредством объединения предграничных данных из кэша 10 с послеграничными данными из вспомогательного запоминающего устройства 12.

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

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

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

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

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

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

Команды переменной длины, сохраненные в кэше 10 команд, могут пересекать одну или более границ строк кэша и тем самым могут быть невыровненными. Вспомогательное запоминающее устройство 12 снижает отрицательные эффекты, ассоциативно связанные с невыровненными командами, за счет сохранения резервной копии невыровненных сегментов команд, т.е. сегментов команд, которые сохранены через границы строки кэша. Сегмент команды может равняться последовательности данных любого размера, ассоциативно связанной с командой, к примеру словам, полусловам, байтам, полубайтам и т.д. По существу, когда один или более сегментов команды, сохраненной в кэше 10 команд, лежит за пределами границы строки кэша, резервная копия невыровненного сегмента(ов) сохраняется во вспомогательном запоминающем устройстве 12. Вспомогательное запоминающее устройство 12 включает в себя ряд строк 24-30 для сохранения невыровненных сегментов команд, при этом каждая строка имеет один или более столбцов 32-34. Таким образом, резервные копии невыровненных сегментов команды затем доступны для параллельного обращения наряду с выровненными сегментами команды, которые сохранены в кэше 10 команд, т.е. сегментами команды, которые не пересекают границу строки кэша. По существу, пересекающая границу команда, сохраненная в кэше 10, может быть извлечена в ходе одного обращения к кэшу команд посредством объединения выровненного сегмента(ов) команды, считанного из кэша 10 команд, с невыровненным сегментом(ами) команды, считанным из вспомогательного запоминающего устройства 12.

В неограничивающем примере контроллер 14 выбирает первую строку 16 кэша в кэше 10 команд для записи данных команд, как проиллюстрировано посредством этапа 100 по фиг.2. Первая команда, к примеру, имеющая четыре сегмента A0-A3, извлекается из внешнего запоминающего устройства или другого кэша как часть данных команд, записанных в выбранную строку кэша, как проиллюстрировано посредством этапа 102 по фиг.2. Первая команда имеет два сегмента A2 и A3, которые пересекают границу внутри строки кэша, разделяющую секторы нуль и один в первой строке 16 кэша. По сути, резервная копия A2' и A3' невыровненных сегментов команд A2 и A3 записывается во вспомогательное запоминающее устройство 12, как проиллюстрировано посредством этапа 104 по фиг.2. Данные команд, записанные в первую строку 16 кэша, также содержат первый сегмент B0 второй команды, имеющей два сегмента B0 и B1. Оставшаяся часть команды, сегмент B1, сохраняется в другой строке кэша, к примеру, второй строке 18 кэша, как часть последующей группы данных команд, извлеченных из внешнего запоминающего устройства или другого кэша. Например, первая и вторая группы данных команд извлекаются как часть пакетной транзакции, которая заполняет несколько строк кэша 10.

Независимо от конкретного механизма, который инструктирует запись второго сегмента B1 команды в кэш 10, второй сегмент B1 сохраняется таким образом, что он пересекает границу между строками кэша, к примеру границу между строками кэша, которая разделяет первую и вторую строки 16, 18 кэша в кэше 10. По сути, резервная копия B1' невыровненного сегмента B1 команды сохраняется во вспомогательном запоминающем устройстве 12. Третья группа данных команд, затем извлеченных посредством контроллера 14, включает в себя третью команду, имеющую четыре сегмента C0-C3, которые сохраняются в третьей строке 20 кэша. Эта команда не имеет невыровненных сегментов, и тем самым сегменты, ассоциативно связанные с третьей командой, не должны сохраняться во вспомогательном запоминающем устройстве 12. Вспомогательное запоминающее устройство 12 не содержит данных, связанных с третьей командой, поскольку третья команда является извлекаемой в течение одного обращения к кэшу команд, к примеру, посредством обращения к сектору нуль третьей строки 20 кэша.

Контроллер 14 извлекает команды, сохраненные в кэше 10 команд, посредством выбора строки кэша, содержащей требуемую команду, как проиллюстрировано посредством этапа 200 по фиг.3. Например, контроллер 14 выбирает первую строку 16 кэша, чтобы извлечь вторую команду переменной длины, имеющую сегменты B0 и B1. Выровненный сегмент B0 второй команды затем считывается из выбранной строки 16 кэша, как проиллюстрировано посредством этапа 202 по фиг.3. Резервная копия невыровненного сегмента B1' команды из второй команды считывается параллельно из вспомогательного запоминающего устройства 12, как проиллюстрировано посредством этапа 204 по фиг.3. Полная команда B0 B1 восстанавливается посредством объединения сегмента команды, считанной из первой строки 16 кэша, B0, с невыровненным сегментом команды, считанной из вспомогательного запоминающего устройства 12, B1'. Этап 206 по фиг.3 иллюстрирует эти операции. С помощью таких операций контроллер 14 исключает необходимость в нескольких обращениях к кэшу, чтобы извлечь невыровненные пересекающие границы команды из кэша 10.

Фиг.4 иллюстрирует один вариант осуществления схемы, включенной или ассоциативно связанной с кэшем 10 команд, для извлечения команд из кэша 10 и вспомогательного запоминающего устройства 12. Команда извлекается посредством объединения выровненного сегмента(ов) команды, считанной из выбранной строки кэша в кэше 10 команд, с невыровненным сегментом(ами) команды, считанной из вспомогательного запоминающего устройства 12. В частности, первая схема 36 выбора, к примеру мультиплексор, идентифицирует сектор выбранной строки кэша, из которого следует извлекать содержимое, сохраненное в нем. Например, управляющий ввод адреса (ADDR), предоставленный контроллером 14, инструктирует мультиплексору 36 отобрать сектор выбранной строки кэша в кэше 10 команд. По существу, содержимое сектора выбранной строки кэша предоставляется в схему 38 объединителя. В одном варианте осуществления, где строки кэша поделены на два сектора, одна из двух полустрок данных (HL0 или HL1) предоставляется в схему 38 объединителя. В других вариантах осуществления другой объем данных предоставляется в схему 38 объединителя, где объем соответствует числу секторов строки кэша, к примеру 1/2 строк данных, 1/4 строк данных и т.д.

Вторая схема 40 выбора, к примеру второй мультиплексор, выбирает невыровненный сегмент(ы) команды, сохраненный во вспомогательном запоминающем устройстве 12, который соответствует сегменту(ам) команды, извлекаемому из кэша 10 команд. Например, сигнал выбора столбца (SEL), предоставляемый посредством контроллера 14, инструктирует второй схеме 40 выбора выбирать столбец вспомогательного запоминающего устройства 12, к которому необходимо выполнить обращение. Если вспомогательное запоминающее устройство 12 содержит один столбец записей, вторая схема 40 выбора не требуется. По существу, выбранная запись вспомогательного запоминающего устройства 12 предоставляется в схему 38 объединителя. Если вспомогательное запоминающее устройство содержит несколько столбцов сегментов команд на запись, к примеру два столбца 32-34, как проиллюстрировано на фиг.4, один из столбцов выбирается посредством второй схемы 40 выбора. Выбранные столбцы соответствуют типу границы, пересекаемой командой, в данный момент извлекаемой из кэша 10 команд. Например, второй столбец 34 может сохранять невыровненные сегменты команд, которые пересекают межстроковые границы кэша и тем самым выбираются, если команда, содержащая сегменты B0 и B1, извлекается из кэша 10 команд. По существу, резервная копия невыровненного сегмента B1' команды параллельно извлекается из вспомогательного запоминающего устройства 12, тогда как B0 извлекается из кэша 10 команд.

Схема 38 объединителя, в ответ на управляющий сигнал (CTRL), предоставляемый посредством контроллера 14, объединяет выбранный выход кэша 10 команд с выбранным выходом вспомогательного запоминающего устройства 12, чтобы восстановить извлекаемую команду. Когда извлекаемая команда не пересекает границу строки кэша, к примеру команда, имеющая сегменты C0-C3, как проиллюстрировано на фиг.4, схема 38 объединителя не объединяет выход кэша 10 команд с данными, сохраненными во вспомогательном запоминающем устройстве 12. Вместо этого схема 38 объединителя выводит данные, считываемые только из кэша 10 команд, поскольку извлеченная команда не является невыровненной.

Когда команда, которая охватывает границу строки кэша, извлекается, схема 38 объединителя может объединять выбранные выводы кэша 10 команд и вспомогательного запоминающего устройства 12 множеством способов. В одном варианте осуществления схема 38 объединителя сдвигает сегмент(ы) команды, извлеченный из кэша 10, на число позиций битов, соответствующих битовой ширине извлеченного невыровненного сегмента(ов) команды, и затем объединяет сдвинутый сегмент(ы) с невыровненным сегментом(ами). В другом варианте осуществления схема 38 объединителя присоединяет невыровненный сегмент(ы) команды, извлеченный из вспомогательного запоминающего устройства 12, к сегменту(ам) команды, извлеченному из кэша 10.

Вне зависимости от конкретной реализации объединения, команда переменной длины, пересекающая границу строки кэша, извлекается в одном обращении к кэшу команд, поскольку к кэшу 10 команд и вспомогательному запоминающему устройству 12 можно обращаться параллельно. Например, контроллер 14 извлекает команду, содержащую сегменты B0 и B1, в одном обращении к кэшу команд посредством выбора сектора HL1 в полстроки первой строки 16 кэша и объединения ее с невыровненным сегментом B1' команды, извлеченным из вспомогательного запоминающего устройства 12. По сути, вывод схемы 38 объединителя включает в себя сегмент команды, сохраненный в кэше 10 команд, B0, объединенный с резервной копией невыровненного сегмента команды, сохраненного во вспомогательном запоминающем устройстве 12, B1'. Как результат, последующие циклы обработки не требуются для того, чтобы извлечь из кэша 10 команд сегмент команды, сохраненный через границу между строками кэша, т.е. сегмент B1.

Фиг.5 иллюстрирует другой вариант осуществления схемы, включенной или ассоциативно связанной с кэшем 10 команд, для извлечения команд из кэша 10 и вспомогательного запоминающего устройства 12 и также для предоставления извлеченных команд в регистр 42. Регистр 42, к примеру регистр команд, включенный в микропроцессор (не показан), имеет заданную длину. Дополнительно, регистр 42 сохраняет требуемые секции команды, извлеченной из кэша 10 команд. По существу, требуемые секции команды выбираются из кэша 10 команд и/или вспомогательного запоминающего устройства 12 и загружаются в регистр 42.

С этой целью первая схема 44 выбора, к примеру первый мультиплексор, идентифицирует сектор выбранной строки кэша команд, из которой извлекается содержимое, сохраненное в нем. Вторая схема 46 выбора, к примеру второй мультиплексор, выбирает соответствующий резервный невыровненный сегмент(ы) команды, сохраненный в запоминающем устройстве 12. Третья схема 48 выбора, к примеру третий мультиплексор, выбирает либо вывод, считываемый из кэша 10 команд, либо вывод, считываемый из вспомогательного запоминающего устройства 12, и предоставляет выбранный вывод в регистр 42. В одном варианте осуществления третья схема 48 выбора предоставляет только нужную секцию выбранного вывода в регистр 42, тем самым учитывая фиксированный размер регистра 42. Транзитное устройство или схема 50 триггера передает вывод, считанный из конкретного сектора кэша, в регистр 42. В одном варианте осуществления транзитное устройство или схема 50 триггера учитывает фиксированный размер регистра 42 посредством предоставления только требуемой секции выбранного выхода в регистр 42.

При работе первая схема 44 выбора в ответ на управляющий ввод адреса (ADDR), предоставляемый посредством контроллера 14, выбирает один из секторов конкретной строки кэша. Вторая схема 46 выбора в ответ на сигнал выбора столбца (SEL), предоставленный посредством контроллера 14, выбирает невыровненный сегмент(ы) команды, если есть, который соответствует данным команды, сохраненным в выбранной строке и секторе кэша. Третья схема 48 выбора в ответ на сигнал управления (CTRL), предоставляемый посредством контроллера 14, определяет то, следует ли выбирать данные, считанные из кэша 10 команд, или данные, считанные из вспомогательного запоминающего устройства 12. Помимо этого третья схема 48 выбора предоставляет выбранные данные или только их часть в регистр 42. Вывод третьей схемы 48 выбора заполняет верхнюю часть регистра 42, к примеру верхнюю часть полуслова. Вывод транзитного устройства или схемы 50 триггера заполняет нижнюю часть регистра 42, к примеру нижнюю часть полуслова. Компоновка схем, проиллюстрированная на фиг.5, усиливает тенденции, ассоциативно связанные с пересечениями границ строк кэша. Т.е. нижняя часть команды переменной длины может быть сохранена в первом секторе кэша 10 команд, тогда как верхняя часть команды может быть сохранена в другом секторе или строке кэша, тем самым пересекая границу строки кэша. Таким образом, сквозное устройство или схема 50 триггера усиливает эту тенденцию и заполняет нижнюю часть регистра 42 данными команды низкого порядка, извлеченными из кэша 10 команд. Третья схема 48 выбора заполняет верхнюю часть регистра 42 соответствующими данными команды высокого порядка, извлеченными из кэша 10 команд, если команда, выбранная для извлечения, не пересекает границу строки кэша.

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

В неограничивающем примере регистр 42 имеет ширину в 32 бита и делится на верхнюю секцию в половину слова и нижнюю секцию в половину слова. Кроме того, каждый сегмент команды, сохраненный в кэше 10 команд и вспомогательном запоминающем устройстве 12, имеет ширину в 16 битов. По существу, чтобы извлечь сегменты A1 и A2 команды, соответствующий невыровненный сегмент A2' команды считывается из вспомогательного запоминающего устройства 12 и загружается в регистр 42 посредством третьей схемы 48 выбора как верхнее полуслово (HW1) регистра 42. Дополнительно, другой требуемый сегмент команды, A1, считывается из кэша 10 команд и параллельно загружается в регистр 42 посредством транзитного устройства или схемы 50 триггера как нижнее полуслово (HW0) регистра 42. Таким образом, регистр 42 загружается в одном обращении, даже если требуемая команда пересекает границу внутри строки кэша.

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

Дополнительно, емкость вспомогательного запоминающего устройства 12 может соответствовать сегментам данных любого размера, подходящим для вмещения требуемого числа сегментов команд. Как проиллюстрировано на фиг.1, показано вспомогательное запоминающее устройство 12, имеющее два столбца на запись: один столбец 32 для сохранения сегмента(ов) команды, соответствующего пересечениям границы внутри строки кэша между секторами в кэше команд, и второй столбец 34 для сохранения сегмента(ов) команды, соответствующего пересечениям границы между строками кэша. Тем не менее, вспомогательное запоминающее устройство 12 может содержать любое подходящее число столбцов для сохранения невыровненных сегментов команд, к примеру один столбец, который соответствует типу пересечения границы, как правило, возникающему.

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

Фиг.6 иллюстрирует один вариант осуществления микропроцессора 52, включающего в себя кэш 10 команд, вспомогательное запоминающее устройство 12 и контроллер 14. Вспомогательное запоминающее устройство 12 может быть включено или ассоциативно связано с кэшем 10 команд, к примеру одним или более дополнительными столбцами, добавленными в кэш 10, либо включенными или ассоциативно связанными с кэшем верхнего уровня, таким как кэш второго уровня (не показан). Альтернативно, вспомогательное запоминающее устройство может быть включено или ассоциативно связано с массивом тегов (не показан), ассоциативно связанным с кэшем 10 команд, или может быть отдельным массивом тегов, включенным в процессор 52. Процессор 52 дополнительно включает в себя блок 54 команд, множество блоков 56 исполнения, блок 58 шинного интерфейса и кэш 60 данных.

Блок 54 команд предоставляет централизованное управление потоком команд в блоки 56 исполнения. Блоки 56 исполнения, которые могут включать в себя один или более блоков загрузки/хранения (не показаны), блоки операций с плавающей запятой (не показаны) и блоки целочисленных операций (не показаны), могут приводить в исполнение несколько команд параллельно. По существу, процессор 52 может быть суперскалярным и/или суперконвейерным. Блок 58 шинного интерфейса предоставляет механизм для переноса данных, адресов и управляющих сигналов в и из процессора 52. Кэши 10, 60 команд и данных позволяют блокам 56 исполнения быстро обращаться к командам и данным, соответственно.

Более подробно, блок 54 команд включает в себя блок 62 выборки команд, блок 64 прогнозирования ветвлений (BPU), очередь 66 команд и блок 68 диспетчеризации команд. Блок 62 выборки извлекает команды из кэша 10 команд, декодирует их и загружает декодированные команды в очередь 66 команд. Блок 68 диспетчеризации команд диспетчеризирует помещенные в очередь команды в соответствующие блоки 56 исполнения. BPU 64 обнаруживает команды ветвления и в зависимости от типа обнаруженного ветвления приводит в исполнение различные механизмы прогнозирования ветвлений, к примеру прогнозирование целевых адресов ветвления и/или то, должно ли быть взято конкретное ветвление.

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

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

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

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