Устройство и способ для извлечения данных из буфера и загрузки их в буфер

Иллюстрации

Показать все

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

Реферат

Область техники

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

Предшествующий уровень техники

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

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

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

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

Используемые в настоящее время алгоритмы сжатия, например метод объединенной группы экспертов по фотографии (JPEG) и JPEG 2000 сжатия изображения, а также методы группы экспертов по движущимся изображениям (MPEG), MPEG-1, MPEG-2 and MPEG-4 сжатия аудио- и видеоданных объединяют два подхода. Сначала данные обрабатывают с помощью преобразования, а затем квантуют. Затем осуществляют сжатие путем перемещения воспринимаемых и значимых данных. Это так называемый метод с потерями, поскольку исходные данные не полностью восстанавливаются при декомпрессии. Результаты первого этапа подвергают дальнейшему сжатию методом статистического кодирования. Статистическое кодирование заключается в том, что исходные символы данных (в данном случае квантованные коэффициенты преобразований) заменяют символами, длина которых зависит от частотности исходных символов данных. Наиболее частотные исходные символы данных заменяют короткими символами статистического кода, а наименее частотные заменяют длинными символами статистического кода. Поэтому длина символов статистического кода изменяется с их битовой длиной.

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

Поэтому остается необходимость в преодолении одного или нескольких ограничений в вышеописанном существовании.

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

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

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

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

фиг.3А - блок-схема блока статистического декодирования декодера контента, изображенного на фиг.2, согласно еще одному варианту осуществления настоящего изобретения;

фиг.3В - схема конечного устройства (назначения) хранения данных согласно еще одному варианту осуществления настоящего изобретения;

фиг.4 - блок-схема преобразования данных в устройстве хранения данных согласно еще одному варианту осуществления настоящего изобретения;

фиг.5А-5D - блок-схема считывания данных из одного или нескольких устройств хранения буфера данных согласно еще одному варианту осуществления настоящего изобретения;

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

фиг.7А и 7В - блок-схема блока статистического кодирования, изображенного на фиг.6, согласно еще одному варианту осуществления настоящего изобретения;

фиг.8 - блок-схема алгоритма способа осуществления доступа к данным в буфере данных согласно варианту осуществления настоящего изобретения;

фиг.9 - блок-схема алгоритма дополнительного способа загрузки данных в буфер данных согласно еще одному варианту осуществления настоящего изобретения;

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

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

фиг.12 - блок-схема алгоритма дополнительного способа объединения данных, распространяющихся на одно или несколько устройств хранения данных буфера данных согласно иллюстративному варианту осуществления настоящего изобретения;

фиг.13 - блок-схема алгоритма дополнительного способа загрузки данных в устройство хранения данных буфера данных при осуществлении доступа ко всем данным в буфере данных согласно еще одному варианту осуществления настоящего изобретения;

фиг.14 - блок-схема алгоритма дополнительного способа декодирования выбранных данных согласно еще одному варианту осуществления настоящего изобретения;

фиг.15 - блок-схема алгоритма декодирования данных в конечном устройстве хранения данных согласно иллюстративному варианту осуществления настоящего изобретения;

фиг.16 - блок-схема алгоритма способа загрузки данных в буфер данных, который содержит множество устройств хранения данных согласно варианту осуществления настоящего изобретения;

фиг.17 - блок-схема алгоритма кодирования данных перед загрузкой в буфер данных согласно еще одному варианту осуществления настоящего изобретения;

фиг.18 - блок-схема алгоритма дополнительного способа, осуществляемого в ответ на выполнение команды загрузки данных согласно еще одному варианту осуществления настоящего изобретения;

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

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

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

Подробное описание

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

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

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

СИСТЕМА

Ниже описана изображенная на фиг.1 блок-схема, на которой показаны основные компоненты компьютерной системы 200, в которой можно реализовать формат хранения согласно изобретению. Компьютерная система 200 содержит контроллер 220 дисплея. Контроллер 220 дисплея представляет собой, например, адаптер видеографики (VGA), супер-VGA (SVGA) и т.п. Контроллер 220 дисплея генерирует пиксельные данные для дисплея 290, который представляет собой, например, ЭЛТ, плоско-панельный дисплей и т.п. Пиксельные данные генерируются в соответствии с той или иной частотой обновления дисплея 290 (например, 60 Гц, 72 Гц, 75 Гц и т.д.) и горизонтальным и вертикальным разрешением изображения, формируемого на дисплее (например, 640x480 пикселей, 1024x768 пикселей, 800x600 и т.д.). Контроллер 220 дисплея может генерировать непрерывный поток пиксельных данных на характеристической частоте дисплея 290.

Контроллер 220 дисплея также снабжен памятью 222 дисплея, в которой хранятся пиксельные данные в текстовом, графическом или видео режимах для вывода на дисплей 290. Главный процессор 210 подключен к контроллеру 220 дисплея через шину 270 и обновляет содержимое памяти 222 дисплея при изменении изображения, выводимого на дисплей 290. Шина 270 может представлять собой, например, шину соединения периферийных компонентов (PCI) и т.п. Системная память 280 может быть подключена к главному процессору 210 для сохранения данных.

Аппаратный декодер 230 контента предусмотрен для декодирования видео-, аудиоданных, данных изображения и речевых данных («контента»), например, видеоданных в формате группы экспертов по движущимся изображениям (MPEG). MPEG-видеоданные поступают от источника MPEG-видеоданных (например, с CD-ROM и т.п.). Альтернативно, декодер 230 контента реализован, например, в виде традиционного программного декодера 282, хранящегося в системной памяти 280. Декодированные данные выводятся в системную память 280 или непосредственно в память 222 дисплея.

Компьютерная система 200 дополнительно содержит кодер 240 контента, предназначенный для кодирования данных контента, например, данных изображения, аудио-, видео- и речевых данных, генерируемых компьютерной системой 200. После того как контент закодирован кодером 240 контента, кодированный контент можно сохранить в системной памяти 280 или передать, в том числе в потоковом режиме, посредством ЦП 210 на конечное устройство (устройство назначения), которое не показано. Альтернативно, кодер 240 контента реализован, например, в виде традиционного программного кодера 284, хранящегося в системной памяти 280.

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

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

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

Соответственно, декодер 250 контента принимает битовый поток 252 MPEG на блоке 300 статистического декодирования. Однако в отличие от традиционного статистического декодера блок 300 статистического декодирования использует буфер с адресацией на битовом уровне для минимизации времени, необходимого для декодирования принятого битового потока 252, что более подробно описано ниже со ссылкой на фиг.3А. Соответственно, блок 300 статистического декодирования определяет декодированный символ, а также длину декодированного символа для принятого битового потока 252, который поступает на блок 256 декодирования по длинам серий.

Блок 256 ДДС принимает декодированный символ и длину декодированного символа от блока 300 статистического декодирования, чтобы генерировать квантованный блок 258, который поступает на блок обратного квантования (блок ОК) 262. Блок 262 ОК осуществляет обратное квантование квантованного блока 258 для генерации частотного спектра 264 квантованного блока. Затем блок 266 обратного дискретного косинусного преобразования (ОДКП) квантованного блока 268.

Сгенерированный декодированный блок 268 поступает на блок 270 компенсации движения (БКД). Компенсация движения осуществляется на БКД 270 для воссоздания данных 272 MPEG. Наконец, блок 274 преобразования цветов преобразует данные 272 MPEG к цветовому пространству «красный, зеленый, синий» (КЗС) для генерации изображений 280. Однако в отличие от традиционных декодеров контента, например аппаратного декодера 230 или программного декодера 282 контента компьютерной системы 200, изображенной на фиг.1, декодер контента использует блок 300 статистического декодирования, дополнительно описанный со ссылкой на фиг.3А.

Согласно фиг.3А блок 300 статистического декодирования использует буфер 302 данных, который содержит множество устройств 304 (304-1,... 304-N) хранения данных. В одном варианте осуществления буфер 302 данных использует регистры с адресацией на битовом уровне, которые могут включать в себя 128-разрядные регистры MMX. Однако специалистам в данной области очевидно, что устройства хранения данных буфера 302 данных не ограничиваются регистрами и, в общем случае, включают в себя любое устройство хранения данных, способное хранить цифровые данные. Таким образом, принятые данные 250 битового потока загружаются в множество устройств 304 хранения данных буфера 302 данных.

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

Следовательно, задержки в захвате кодированных символов переменной длины создают трудности при статистическом кодировании на традиционных декодерах. Поэтому блок 300 статистического декодирования использует буфер с адресацией на битовом уровне, который способен захватывать фрагменты данных, которые распространяются между различными устройствами хранения данных буфера 302 данных, чтобы захватить используемые кодированные символы переменной длины. Для этого блок статистического декодирования может выбрать фрагмент данных в исходном устройстве 304 хранения данных, входящем в состав буфера 302 данных и сохранить фрагмент данных в конечном устройстве 342 (устройстве назначения) для хранения данных, изображенном на фиг.3В, которое может размещаться в регистровом файле 340 блока 300 статистического декодирования.

Соответственно, согласно идеям настоящего изобретения, процессор 330, в ответ на выполнение команды обнаружения данных, может определить позицию первой единицы в устройстве назначения для хранения данных. Определив эту позицию, процессор 330 может, согласно одному варианту осуществления, использовать таблицу 360 сдвига (360-1,..., 360-N) в кэш-памяти 350 блока 300 статистического декодирования. При этом процессор 330 может считывать таблицу 360 сдвига, чтобы получить значение сдвига, используя позицию первой единицы в качестве индекса (указателя). После определения значения сдвига устройство 342 назначения для хранения данных можно, например, подвергнуть сдвигу вправо в соответствии со значением сдвига. После сдвига вправо процессор может считать декодированный символ из таблицы 352 декодирования (352-1,..., 352-N) кэш-памяти 350, чтобы определить декодированный символ на основании значения устройства 342 хранения сдвинутых данных.

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

Возвращаясь к фиг.3А, заметим, что в альтернативном варианте осуществления кэш-память 350 содержит только таблицы 352 декодирования и не использует таблицы 360 сдвига. Соответственно, в описанном варианте осуществления таблицы декодирования могут включать в себя значение уровня или величины, значение длины серии до следующего ненулевого значения и длину кодового слова. Поэтому, когда фрагмент потоковых видеоданных считывается из устройства 304 хранения данных в буфере данных 302, к выбранному фрагменту данных можно применять маску для извлечения данных поиска из выбранного фрагмента данных.

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

На фиг.4 представлено преобразование данных в устройстве 304 хранения данных буфера 302 данных. В показанном примере данные в устройстве 304 хранения данных могут первоначально храниться в порядке «начиная с младших битов». Первоначальное упорядочение данных, в целом, базируется на методологии организации данных в соответствующей вычислительной архитектуре. К сожалению, MPEG, наиболее распространенный видеоформат, организует данные в порядке «начиная со старших битов». В результате декодирование данных MPEG требует преобразования от порядка «начиная с младших битов» к порядку «начиная со старших битов». Альтернативно, данные можно первоначально хранить в порядке «начиная со старших битов», тем самым избегая преобразования.

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

На фиг.5А-5D изображен буфер 302 данных блока 300 статистического кодирования, использующий исходное устройство 304-1 хранения данных (R0) и вспомогательное устройство 304-2 хранения данных (R1). Согласно описанному, различные устройства 304 хранения данных буфера 302 данных обеспечивают адресацию на битовом уровне, что можно использовать для ускорения кодирования и декодирования данных контента. Соответственно, данные битового потока первоначально загружаются в устройство 304-1 хранения данных R0. После заполнения устройства хранения данных R0, данные битового потока сохраняются в устройстве 304-2 хранения данных R1. При этом, в описываемом варианте осуществления, устройства хранения данных R0 и R1 содержат непрочитанные данные битового потока.

На фиг.5В показаны устройства хранения данных R0 и R1 и данные, доступ к которым осуществляется на границах битов. В результате, биты являются единичными элементами, определяющими объем (размер) данных, к которым можно осуществлять доступ в буфере 302 данных. Следовательно, минимальная разность адресов доступа для устройств хранения данных составляет один бит. Соответственно, в описываемом варианте осуществления буфер 302 данных содержит множество регистров с адресацией на битовом уровне. Однако специалистам в данной области очевидно, что в качестве устройств хранения данных с адресацией на битовом уровне можно использовать и другое оборудование, способное сохранять данные.

Следовательно, обеспечивается начальный битовый адрес 306 выбранных текущих данных 314 в устройстве 304-1 хранения данных R0 и на основании количества битов, которые нужно прочитать, можно вычислить концевую позицию 308 запрашиваемых данных. Кроме того, согласно одному варианту осуществления устройства хранения данных содержат флаг 310 для определения, был ли осуществлен доступ к каждому фрагменту данных битового потока в соответствующем устройстве хранения данных. При этом, что касается устройства 304-1 хранения данных R0, устройство 304-1 R0 содержит прочитанные данные 312, текущие данные 314 и непрочитанные данные 316.

На фиг.5С изображен вариант осуществления буфера 302 данных, когда запрашиваемые данные содержатся в нескольких устройствах хранения данных (от R0 на R1). При обнаружении такого случая осуществляется операция слияния регистров. Соответственно, в ответ на выполнение команды слияния регистров текущие данные из устройства хранения данных R0 и текущие данные из устройства хранения данных R1 считываются и копируются в устройство назначения для хранения данных в качестве непрерывного блока. В описываемом варианте осуществления устройство назначения для хранения данных представляет собой регистр, который может содержаться в регистровом файле 340 блока 300 статистического кодирования, изображенного на фиг.3А. Однако устройство назначения для хранения данных может представлять собой оборудование любого типа, способное сохранять цифровые данные.

Согласно альтернативному варианту осуществления, в случае обнаружения расположения данных (в нескольких регистрах), ненужные или прочитанные данные в устройстве хранения данных R0 можно сдвинуть, чтобы освободить место для данных, которые располагаются также в устройстве хранения данных R1. После сдвига непрочитанных данных за пределы устройства хранения данных R0 текущие данные в устройстве хранения данных R1 можно сдвинуть в устройство хранения данных R0. Следовательно, когда текущие данные содержатся в устройстве хранения данных R0, данные можно копировать в устройство назначения для хранения данных в качестве непрерывного модуля (блока). После копирования все данные в устройстве хранения данных R0 являются ненужными прочитанными данными и потому в устройство хранения данных R0 можно загружать свежие данные.

На фиг.5D изображен вариант осуществления, когда буфер 302 данных действует как кольцевой буфер. При этом, когда текущий массив данных выбран из устройства 304-1 хранения данных R0 и устройства 304-2 хранения данных R1, устройство 304-1 хранения данных R0 больше не будет содержать непрочитанных данных. Соответственно, как показано на фиг.5D, доступ ко всем данным в устройстве 304-1 хранения данных R0 был произведен, в результате чего установлен флаг 310. Кроме того в описываемом варианте осуществления, позиция устройства 304-1 хранения данных R0 перемещается к концу буфера 302, чтобы можно было загружать данные в устройство хранения данных R0 из входного потока данных. Следовательно, в описываемом варианте осуществления, буфер данных функционирует как кольцевой буфер. Другими словами, в представленном примере все данные при следующей операции доступа выбираются из устройства 304-1 хранения данных R1.Однако в некоторых вариантах осуществления участки доступа к данным перекрываются, в результате чего доступ к некоторым битам осуществляется более одного раза, тогда как в других случаях доступ к некоторым битам не осуществляется вовсе. При этом, в описываемых вариантах осуществления способ задания адреса нужных данных, к которым нужно осуществить доступ в буфере 302 данных, обеспечивается путем получения первого ИД регистра, который может состоять из типа номера регистра, в котором появляется первый бит, к которому осуществляется доступ. Способ также включает в себя битовый адрес, заданный битовой позицией в регистре, количество битов, к которым нужно произвести доступ, и (в большинстве случаев) второй регистр, в котором находятся некоторые данные, подлежащие доступу, если диапазон битов, подлежащих доступу, выходит за пределы первоначального исходного регистра.

В описываемом варианте осуществления начальная битовая позиция (306) текущих данных и количество битов, подлежащих извлечению, хранятся в двух дополнительных регистрах (не показаны). Однако в альтернативном варианте осуществления спецификация данных, к которым нужно осуществить доступ, обеспечивается приемом адреса 306 первого бита и адреса 308 последнего бита вместо адреса 306 первого бита и количества битов данных, к которым осуществляется доступ. Адрес 308 последнего бита может быть связан с регистром (R1 304-2), в котором хранится последний бит, а может быть связан с первым регистром (R0 304-1), в каковом случае он равен сумме адреса первого бита и количества битов, к которым нужно осуществить доступ. В последнем случае последний адрес 308 может относиться к позиции в другом регистре (R1 304-2), если адрес 308 последнего бита выходит за пределы максимального адреса первого регистра (R0 304-1). В этом случае в буфере фактически имеется единое адресное пространство.

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

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

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

Наконец, буфер 302 данных с побитовой адресацией поддерживает программные оптимизации, например, функции цикла и обхода. При этом цикл можно проходить так, что не нужно проверять после декодирования каждого символа, ко всем ли данным в регистре был произведен доступ. Соответственно, количество раз, которое цикл может быть статически обойден, равно битовой длине регистра х (количество регистров в буфере минус один), деленной на максимальное количество битов, доступных в буфере. Например, если длина буфера равна 128 битов и количество регистров в буфере равно двум, это гарантированно будет 128x(2-1), что составляет 128 битов в буфере. Следовательно, если максимально доступно 17 битов, то буфер никогда не выйдет за пределы данных после 128, деленное на 17, что равно 7 запросам. Соответственно, буфер будет «обойден» семь раз.

На фиг.6