(57)【要約】【課題】可変長復号処理を、専用装置を要せずにプロセッサ向きな処理としその処理効率を向上すること。【解決手段】本発明による可変長復号化装置は、メモリ１０１と、メモリ１０１からロードしたデータを格納するバッファレジスタ１０３と、バッファレジスタで参照済みデータ数Ｍを下位側ビットに格納し、メモリへのアクセスアドレスを上位側に格納するアドレスレジスタ１０２とを備え、バッファレジスタは、前記アクセスアドレスによりメモリからロードしたデータから可変長復号化のため今回参照すべきデータを抜き出す際に、前記参照済みデータ数と今回参照するデータ数とを用いたデータシフト操作により参照すべきデータを抜き出し、前記データの抜き出しに伴って、アドレスレジスタにおける参照済みデータ数を、これに今回参照したデータ数を加算して更新するように構成されている。【選択図】  図１
2005244928.tif 000002
【特許請求の範囲】
【請求項１】
任意のアドレスにおける下位ビット側に記憶しているデータと同じデータを該任意のアドレスの次アドレスにおける上位ビット側にも配置してデータを記憶するメモリと、
前記メモリからロードされるデータを格納するものでビット幅が少なくとも前記メモリのビット幅を有するバッファレジスタと、
前記メモリへのアクセスアドレスの値（アドレス値）を上位ビット側に格納し、前記バッファレジスタで参照済みデータ数を下位ビット側に格納するアドレスレジスタと、
を備え、
前記バッファレジスタに対して前記参照済みデータ数と今回参照するデータ数とを用いたデータシフト操作を行うことにより、当該バッファレジスタから可変長復号化のために今回参照すべきデータを抜き出し、
前記バッファレジスタからのデータの抜き出しに伴って、
前記アドレスレジスタの下位ビット側の参照済みデータ数を、該参照済みデータ数に今回参照したデータ数を加算して更新し、
前記アドレスレジスタの上位ビット側に格納する前記アドレス値を、前記アドレスレジスタの下位ビット側の更新後の参照済みデータ数が桁上がりしないときはそのまま維持し、桁上がりするときはその桁上がりを用いて次のアドレス値に更新する、ことを特徴とする可変長復号化装置。
【請求項２】
前記メモリが、ビット数Ａ(２以上の整数)を１ワードとしてデータを記憶するものであり、前記Ａが、２×Ｐ（ただし、Ｐ＝２C）であることを特徴とする請求項１に記載の可変長復号化装置。
【請求項３】
前記メモリが、ビット数Ａ(２以上の整数)を１ワードとしてデータを記憶するものであり、前記Ａが、３×Ｐ（ただし、Ｐ＝２C）であることを特徴とする請求項１に記載の可変長復号化装置。
【請求項４】
前記メモリが、ビット数Ａ(２以上の整数)を１ワードとしてデータを記憶するものであり、前記Ａが、（３/２）×Ｐ（ただし、Ｐ＝２C）であることを特徴とする請求項１に記載の可変長復号化装置。
【請求項５】
前記メモリが、ビット数Ａ(２以上の整数)を１ワードとしてデータを記憶するものであり、前記Ａが、４×Ｐ（ただし、Ｐ＝２C）であることを特徴とする請求項１に記載の可変長復号化装置。
【請求項６】
ビット数Ａ(２以上の整数)を１ワードとしてデータを記憶するメモリと、
前記メモリからロードされたデータを格納するビット幅Ｂ(Ａ以上の整数)のバッファレジスタと、
前記メモリへのアクセスアドレスの値（アドレス値）を上位ビット側に格納し、かつ、前記バッファレジスタで参照済みデータ数Ｍ（０以上の整数）をビット幅Ｃ（１以上の整数）の下位ビット側に格納するアドレスレジスタと、
を備え、
前記メモリは、任意のアドレスにおいてビット数Ｄ（Ａ−２Cで表される整数）の下位ビット側に記憶しているデータと同じデータを、該任意のアドレスの次アドレスにおいてビット数Ｄの上位ビット側にも配置しており、
前記バッファレジスタから、前記参照済みデータ数Ｍと今回参照すべきデータ数Ｎ（１以上の整数）とを用いたデータシフト操作を行うことにより、可変長復号化のために今回参照すべきデータを抜き出す一方、
この抜き出しに伴い、ＥをＡ−Ｄの演算により得られる１以上の整数、Ｆ，Ｇを整数、(Ｍ＋Ｎ)/Ｅの演算により得られる商をＦ，余りをＧとして、前記アドレスレジスタの上位ビット側に前記商Ｆを加算することにより当該上位ビット側に格納する前記アドレス値の更新を行い、また、前記アドレスレジスタの下位ビット側に前記余りＧをセットすることにより当該下位ビット側に格納する参照済みデータ数Ｍの更新を行うことを特徴とする可変長復号化装置。
【請求項７】
前記Ｅが、Ｈ×２L（Ｈ、Ｌは１以上の整数）であることを特徴とする請求項６に記載の可変長復号化装置。
【請求項８】
前記Ｈが、３であることを特徴とする請求項７に記載の可変長復号化装置。
【請求項９】
さらに、前記バッファレジスタにおいて今回参照すべきデータを抜き出す手段として、前記参照済みデータをマスクしつつシフトするシフタを備えている請求項１ないし８いずれか１項に記載の可変長復号化装置。
【請求項１０】
ビット数Ａ(２以上の整数)を１ワードとしてデータを記憶するメモリと、前記メモリからロードしたデータを格納するビット幅Ｂ(Ａ以上の整数)のバッファレジスタと、前記メモリへのアクセスアドレスを上位ビット側に格納しかつ前記バッファレジスタで参照済みデータ数Ｍ（０以上の整数）をビット幅Ｃ（１以上の整数）の下位ビット側に格納するアドレスレジスタとを備える可変長復号化装置を用いて可変長復号する方法であって、
前記アドレスレジスタからアクセスアドレスの値（アドレス値）と参照済みのデータ数Ｍ（０以上の整数）とを分離する第１の工程と、
前記メモリに、任意のアドレスにおけるビット数Ｄ（Ａ−２Cで表される整数）の下位ビット側に記憶しているデータと同じデータを、該任意のアドレスの次アドレスにおけるビット数Ｄの上位ビット側にも配置し、かつ、前記メモリに対して、前記アクセスアドレスを用いてアクセスして、該メモリに記憶されているデータを前記バッファレジスタにロードする第２の工程と、
前記バッファレジスタから、前記参照済みデータ数Ｍと今回参照するデータ数Ｎ(１以上の整数)とを用いたデータシフト操作を行うことにより可変長復号化のために今回参照すべきデータを抜き出す第３の工程と、
前記今回参照すべきデータの抜き出しに伴って、前記アドレスレジスタの下位ビット側の参照済みデータ数を、該参照済みデータ数Ｍに今回参照したデータ数Ｎを加算して該下位ビット側に格納する参照済みデータ数Ｍを更新するとともに、前記アドレスレジスタの上位ビット側に格納する前記アドレス値を、前記アドレスレジスタの下位ビット側の更新後の参照済みデータ数が桁上がりしないときはそのまま維持し、桁上がりするときはその桁上がりを用いて次のアドレス値に更新する第４の工程と、
を備えることを特徴とする可変長復号化方法。
【請求項１１】
前記Ａが、２×Ｐ（ただし、Ｐ＝２C）であることを特徴とする請求項１０に記載の可変長復号化方法。
【請求項１２】
前記Ａが、３×Ｐ（ただし、Ｐ＝２C）であることを特徴とする請求項１０に記載の可変長復号化方法。
【請求項１３】
前記Ａが、３/２×Ｐ（ただし、Ｐ＝２C）であることを特徴とする請求項１０に記載の可変長復号化方法。
【請求項１４】
前記Ａが、４×Ｐ（ただし、Ｐ＝２C）であることを特徴とする請求項１０に記載の可変長復号化方法。
【請求項１５】
前記第３の工程は、前記バッファレジスタにおいて今回参照すべきデータを抜き出すに際して、前記参照済みデータをマスクしつつシフトすることを特徴とする請求項１０ないし１４のいずれか１項に記載の可変長復号化方法。
【請求項１６】
ビット数Ａ(２以上の整数)を１ワードとするデータを記憶するものでかつ任意のアドレスにおけるビット数Ｄ（Ａ−２Cで表される整数）の下位ビット側に記憶しているデータと同じデータを該任意のアドレスの次アドレスにおけるビット数Ｄの上位ビット側にも記憶しているメモリと、前記メモリからロードしたデータを格納するビット幅Ｂ(Ａ以上の整数)のバッファレジスタと、前記メモリへのアクセスアドレスの値（アドレス値）を上位ビット側に格納しかつ前記バッファレジスタで参照済みデータ数Ｍ（０以上の整数）をビット幅Ｃ（１以上の整数）の下位ビット側に格納するアドレスレジスタとを備える可変長復号化装置を用いて可変長復号する方法であって、
前記メモリに対して、前記アドレスレジスタに格納したアクセスアドレスの値を用いてアクセスし、前記バッファレジスタにロードする第１の工程と、
前記バッファレジスタから、前記バッファレジスタの下位ビット側に格納されている参照済みデータ数Ｍ（０以上の整数）と今回参照するデータ数Ｎ(１以上の整数)とを用いてデータシフト操作を行うことにより、可変長復号化のため前記参照すべきデータを抜き出す第２の工程と、
ＥをＡ−Ｄの演算により得られる１以上の整数、Ｆ，Ｇを整数とし、(Ｍ＋Ｎ)/Ｅの演算により得られる商をＦ，余りをＧとして、前記参照すべきデータの抜き出しに伴う前記アドレスレジスタの上位ビット側に格納するアドレス値の更新を当該上位ビット側に前記商Ｆを加算することによって行い、また、前記アドレスレジスタの下位ビット側に格納する参照済みデータ数Ｍの更新を当該下位ビット側に前記余りＧをセットすることにより行う第３の工程と、
を含むことを特徴する可変長復号化方法。
【請求項１７】
前記Ｅが、Ｈ×２L（Ｈ、Ｌは１以上の整数）であることを特徴とする請求項１６に記載の可変長復号化方法。
【請求項１８】
前記Ｈが、３であることを特徴とする請求項１７に記載の可変長復号化方法。
【請求項１９】
前記第２の工程は、前記バッファレジスタにおいて今回参照すべきデータを抜き出すに際して、前記参照済みデータをマスクしつつシフトすることを特徴とする請求項１０または１６に記載の可変長復号化方法。
【請求項２０】
請求項１ないし９のいずれか１項に記載の可変長復号化装置と、
前記可変長復号化装置に可変長復号化されたデータを含むストリームを入力する入力手段と、
前記可変長復号化装置により復号化されたデータを信号処理して再生する再生手段と、
具備したことを特徴とする再生システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば広義のプロセッサの技術分野で用いられる可変長符号を処理するデータ処理において、特にメモリからの可変長符号のロード処理を高速化する可変長復号化装置及び可変長復号化方法に関する。
【背景技術】
【０００２】
従来の可変長復号化装置は、可変長復号化のために専用の装置を設け高速化している。また、プロセッサの性能向上に伴いソフト処理する場合も増えているが、データ参照とその参照位置とを同時に更新する専用の命令等を設けることにより高速化したりしている（例えば、特許文献１参照。）。
【特許文献１】特開平１１−１８４７５０号公報（第１０−１１頁、第１−２図）
【発明の開示】
【発明が解決しようとする課題】
【０００３】
従来の専用の装置を設ける高速化手法では、例えば可変長符号を用いる画像符号化やオーディオ符号化のデータを複数取り扱いたい場合、それ専用装置を設ける必要があった。プロセッサでのソフト処理による高速化においても、消費データ量に応じた判定処理、それに伴ったメモリアクセスが複数回必要であり、充分な高速化ができていなかった。特許文献１においても、バッファレジスタ内のデータの参照済みデータ数がある閾値を超えるか否かの判定、バッファレジスタのシフト処理の判定処理があり、またバッファレジスタの値はメモリ上のロード元のデータ配置とは異なるため、別のメモリを使用するか、バッファレジスタを可変長復号の専用レジスタとして搭載して保持しておく必要があり、メモリへの退避復帰といった処理が必要であった。また、アドレス更新のための特別の監視、演算が必要であった。
【０００４】
本発明は、ソフト処理による高速化において、これら状況を鑑み、可変長復号を高速に行う可変長復号化装置およびこれを備えた再生システム、ならびに可変長復号化方法を提供することを目的としている。
【課題を解決するための手段】
【０００５】
本発明による第1の可変長復号化装置は、任意のアドレスにおける下位ビット側に記憶しているデータと同じデータを該任意のアドレスの次アドレスにおける上位ビット側にも配置してデータを記憶するメモリと、前記メモリからロードされるデータを格納するものでビット幅が少なくとも前記メモリのビット幅を有するバッファレジスタと、前記メモリへのアクセスアドレスの値（アドレス値）を上位ビット側に格納し、前記バッファレジスタで参照済みデータ数を下位ビット側に格納するアドレスレジスタとを備え、前記バッファレジスタに対して前記参照済みデータ数と今回参照するデータ数とを用いたデータシフト操作を行うことにより、当該バッファレジスタから可変長復号化のために今回参照すべきデータを抜き出し、前記バッファレジスタからのデータの抜き出しに伴って、前記アドレスレジスタの下位ビット側の参照済みデータ数を、該参照済みデータ数に今回参照したデータ数を加算して更新し、前記アドレスレジスタの上位ビット側に格納する前記アドレス値を、前記アドレスレジスタの下位ビット側の更新後の参照済みデータ数が桁上がりしないときはそのまま維持し、桁上がりするときはその桁上がりを用いて次のアドレス値に更新することを特徴とするものである。
【０００６】
なお、参照済みデータ数とは、データを構成するビットに対して、参照済みのビットの数のことを意味するものであり、今回参照したデータ数とは、データを構成するビットに対して、今回参照したビット数のことを意味するものであり、今回参照すべきデータとはデータを構成するビットに対して、今回参照すべきビットのことを意味するものである。上記の意味からデータシフトとは、データを構成するビットをシフトすることを意味するものである。以下、同じである。
【０００７】
本発明の第１の可変長復号化装置によれば、アドレスレジスタからアクセスアドレスと参照済みデータ数とを分離し、アクセスアドレスを用いてメモリへアクセスし、メモリからロードしたデータをバッファレジスタに格納し、バッファレジスタにおいて今回参照すべきデータを抜き出す。そして、アドレスレジスタに当該アクセス時に参照したデータ数を加算し、参照済みデータ数とアクセスアドレスとを更新する。これによれば、参照済みデータ数と今回参照するデータ数とにより、バッファレジスタより今回参照すべきデータを抜き出すことができる。また、参照すべきデータの抜き出しのためにアドレスレジスタに設定すべきアドレスも自動的に更新される。
【０００８】
したがって、本発明の第１の可変長復号化装置の場合、従来技術において必要であった、バッファレジスタの状態の退避復帰処理が不要となる。
【０００９】
本発明の第１の可変長復号化装置の場合、従来、参照済みデータ数の更新とアドレス更新との両者がともに必要であったのに対し、参照済みデータ数の更新時の桁上がりをアドレス更新に利用することで、参照済みデータ数とアドレスの更新演算とが１回で実現でき、更新処理を削減できる。この自動的なアドレス更新によって、桁上げにより次のアドレスに進み、メモリにおいてその更新後のアドレスにアクセスすると、そのアドレスの上位ビット側には１つ前のアドレスの下位ビット側のデータと同じデータがすでに格納されており、そのまま引き続き使用可能となっている。
【００１０】
本発明の第１の可変長復号化装置では、要するに、従来技術の場合に必要であった、バッファレジスタ内のデータの参照済みデータ数がある閾値を超えるか否かの判定、およびその判定に基づいて処理を変える判定処理、ならびに、その判定結果に基づいたメモリアクセスが不要となる。また、アドレス更新のための特別の監視、演算が不要となっている。ここにおいて、専用の装置や専用のソフトは不要であり、複雑な演算処理も不要である。すなわち、判定処理やアドレス演算、メモリアクセスの処理を削減し、可変長復号化処理を高速化することができる。
【００１１】
本発明の第１の可変長復号化装置の好ましい実施態様として、バッファレジスタにおいて今回参照すべきデータを抜き出す手段として、前記参照済みデータをマスクしつつシフトするシフタを備えることができる。この実施態様によれば、バッファレジスタから今回参照すべきデータの抜き出しに際して、参照済みデータをマスクするだけの簡単なシフト機能改善で実現でき、可変長復号化処理をさらに高速化することが可能になる。
【００１２】
本発明による第１の可変長復号化方法は、ビット数Ａ(２以上の整数)を１ワードとしてデータを記憶するメモリと、前記メモリからロードしたデータを格納するビット幅Ｂ(Ａ以上の整数)のバッファレジスタと、前記メモリへのアクセスアドレスを上位ビット側に格納しかつ前記バッファレジスタで参照済みデータ数Ｍ（０以上の整数）をビット幅Ｃ（１以上の整数）の下位ビット側に格納するアドレスレジスタとを備える可変長復号化装置を用いて可変長復号する方法であって、前記アドレスレジスタからアクセスアドレスの値（アドレス値）と参照済みのデータ数Ｍ（０以上の整数）とを分離する第１の工程と、前記メモリに、任意のアドレスにおけるビット数Ｄ（Ａ−２Cで表される整数）の下位ビット側に記憶しているデータと同じデータを、該任意のアドレスの次アドレスにおけるビット数Ｄの上位ビット側にも配置し、かつ、前記メモリに対して、前記アクセスアドレスを用いてアクセスして、該メモリに記憶されているデータを前記バッファレジスタにロードする第２の工程と、前記バッファレジスタから、前記参照済みデータ数Ｍと今回参照するデータ数Ｎ(１以上の整数)とを用いたデータシフト操作を行うことにより可変長復号化のために今回参照すべきデータを抜き出す第３の工程と、前記今回参照すべきデータの抜き出しに伴って、前記アドレスレジスタの下位ビット側の参照済みデータ数を、該参照済みデータ数Ｍに今回参照したデータ数Ｎを加算して該下位ビット側に格納する参照済みデータ数Ｍを更新するとともに、前記アドレスレジスタの上位ビット側に格納する前記アドレス値を、下位ビット側の更新後の参照済みデータ数が桁上がりしないときはそのまま維持し、桁上がりするときはその桁上がりを用いて次のアドレス値に更新する第４の工程とを備えることを特徴とするものである。
【００１３】
本発明の可変長復号化方法においては、アドレスレジスタからアクセスアドレスと参照済みデータ数とを分離し、アクセスアドレスの値（アドレス値）を用いてメモリへアクセスし、メモリからロードしたデータをバッファレジスタに格納し、バッファレジスタにおいて今回参照すべきデータを抜き出す。そして、アドレスレジスタに当該アクセス時に参照したデータ数を加算し、参照済みデータ数とアドレス値とを更新する。これによれば、参照済みデータ数と今回参照するデータ数とにより、バッファレジスタより今回参照すべきデータを抜き出すことができる。次に、参照すべきデータの抜き出のためにアドレスレジスタに設定すべきアドレスも自動的に更新される。従来技術において必要であった、バッファレジスタの状態の退避復帰処理が不要となる。参照済みデータ数の更新とアドレス更新との両者が共に必要であったのに対して、参照済みデータ数の更新時の桁上がりをアドレス更新に利用することにより、参照済みデータ数とアドレスの更新の演算が１回で実現することができ、更新処理を削減することができる。この自動的なアドレス更新によって、桁上がりにより次のアドレスに進み、メモリにおいてその更新後のアドレスにアクセスすると、そのアドレスの上位ビット側には１つ前のアドレスの下位ビット側のデータと同じデータが既に格納されており、そのまま引き続き使用可能となっている。
【００１４】
本発明による第２の可変長復号化装置は、ビット数Ａ(２以上の整数)を１ワードとしてデータを記憶するメモリと、前記メモリからロードされたデータを格納するビット幅Ｂ(Ａ以上の整数)のバッファレジスタと、前記メモリへのアクセスアドレスの値（アドレス値）を上位ビット側に格納し、かつ、前記バッファレジスタで参照済みデータ数Ｍ（０以上の整数）をビット幅Ｃ（１以上の整数）の下位ビット側に格納するアドレスレジスタとを備え、前記メモリは、任意のアドレスにおいてビット数Ｄ（Ａ−２Cで表される整数）の下位ビット側に記憶しているデータと同じデータを、該任意のアドレスの次アドレスにおいてビット数Ｄの上位ビット側にも配置しており、前記バッファレジスタから、前記参照済みデータ数Ｍと今回参照すべきデータ数Ｎ（１以上の整数）とを用いたデータシフト操作を行うことにより、可変長復号化のために今回参照すべきデータを抜き出す一方、この抜き出しに伴い、ＥをＡ−Ｄの演算により得られる１以上の整数、Ｆ，Ｇを整数、(Ｍ＋Ｎ)/Ｅの演算により得られる商をＦ，余りをＧとして、前記アドレスレジスタの上位ビット側に前記商Ｆを加算することにより当該上位ビット側に格納する前記アドレス値の更新を行い、また、前記アドレスレジスタの下位ビット側に前記余りＧをセットすることにより当該下位ビット側に格納する参照済みデータ数Ｍの更新を行うことを特徴とするものである。
【００１５】
上記におけるビット幅とは、例えばアドレスレジスタの下位ビット側が例えば４ビット構成であれば、ビット幅が「４」となることを意味する。
【００１６】
本発明の第２の可変長復号化装置によれば、上述した第１の可変長復号化装置と同様の作用効果を有することに加えて、特に、バッファレジスタからの上記抜き出しに伴い、ＥをＡ−Ｄの演算により得られる１以上の整数、Ｆ，Ｇを整数、(Ｍ＋Ｎ)/Ｅの演算により得られる商をＦ，余りをＧとして、前記アドレスレジスタの上位ビット側に前記商Ｆを加算することにより当該上位ビット側の更新を行い、また、前記アドレスレジスタの下位ビット側に前記余りＧをセットすることにより当該下位ビット側の更新を行うから、参照済みデータ数とアドレスの更新演算とを第１の可変長復号化装置と同様に１回で実現することができ、更新処理を削減することができる。
【発明の効果】
【００１７】
本発明によれば、可変長復号化処理に必要とされる処理を大幅に簡略化しており、可変長復号化処理を高速化することができる。
【発明を実施するための最良の形態】
【００１８】
以下、添付した図面を参照して本発明の実施形態に係る可変長復号化装置及び可変長復号化方法を詳細に説明する。
【００１９】
（実施の形態１）
図１は、本発明の実施の形態１における可変長復号化装置を示す。図１を参照して、１０１はメモリである。このメモリ１０１は、データを記憶するもので、そのデータにおいて１ワードを構成するビット数Ａ（Ａは２以上の整数で、実施の形態１ではＡ＝３２）であり、かつ、任意のアドレスにおけるビット数Ｄ（Ｄは１以上の整数であり、実施の形態１ではＤ＝１６）の下位ビット側が記憶しているデータと同じデータを、その任意のアドレスの次のアドレスにおけるビット数Ｄの上位ビット側にも配置しているメモリである。
【００２０】
１０２はビット幅が３２のアドレスレジスタである。アドレスレジスタ１０２は、アクセスアドレス（アドレス値）を上位ビット側（第１レジスタ部分）に、参照済みデータ数Ｍ（Ｍは０以上の整数）をビット幅Ｃ（Ｃは１以上の整数であり、実施の形態ではＣ＝４）の下位ビット側（第２レジスタ部分）に持っている。
【００２１】
ここで、Ａ，Ｃ，Ｄとの間には、Ｄ＝Ａ−２Cの関係がある。実施の形態１では、Ａ＝３２、Ｃ＝４であるから、Ｄ＝１６である。また、Ａ，Ｃの間には、Ａ＝２×Ｐ、Ｐ＝２Cとすると、Ｐ＝２4＝１６であり、Ａ＝２×Ｐ＝２×１６＝３２である。
【００２２】
１０３はビット幅Ｂ（ＢはＡ以上の整数であり、実施の形態１ではＢ＝３２）のバッファレジスタである。バッファレジスタ１０３は、メモリ１０１からロードしたデータを保持するもので、アクセスアドレスによりメモリ１０１からロードしたデータから今回参照すべきデータを抜き出す際に、参照済みデータ数Ｍと今回参照するデータ数Ｎ（Ｎは１以上のデータ数）とを用いたデータシフト操作により参照すべきデータを抜き出すものである。
【００２３】
上記したように、メモリ１０１上のデータについては、あるアドレスの下位１６ビットに格納されているデータがその次のアドレスの上位１６ビットにも格納されるように配置している。
【００２４】
具体的には、例えば、アドレス０ｘ１０１番における下位１６ビットにはデータｃが格納されているが、次のアドレス０ｘ１０２番の上位１６ビットにも同じデータｃが格納されている。また、アドレス０ｘ１０２番における下位１６ビットにはデータｄが格納されているが、次のアドレス０ｘ１０３番の上位１６ビットにも同じデータｄが格納されている。
【００２５】
図２は図１の可変長復号化装置を用いて可変長復号を行う処理フローを示したものである。図３はバッファレジスタ１０３から今回参照するデータを抜き出す一般的な処理フローを示したものである。図４は図３で示した処理フローに伴って変化するデータの状態を示したもので、図３の各ステップと対応して変化する様子を示している。なお、下記文章中のステップは、図２、図３の各処理ステップに対応する。また、説明の便宜上、３２ビットを基本とするプロセッサを前提に記載しているが、本発明はこれらに限定されるものではない。また、初期状態として、メモリ１０１には図１のように、０ｘ１００番地からａ，ｂ，ｃ，…といった順にデータが格納されているものとし、アドレスレジスタ１０２におけるアドレス値を０ｘ１０１、参照済みデータ数を０ｘ３とし、今回参照するデータ数をＮとする。
【００２６】
以下、処理の一例を説明する。
【００２７】
ステップ１においては、アドレスレジスタ１０２から参照済みデータ数０ｘ３とアドレス値０ｘ１０１とを分離して、抜き出す。
【００２８】
ステップ２においては、ステップ１にて分離したアドレス値０ｘ１０１を用いて、メモリ１０１の０ｘ１０１番地をアクセスし、データｂ，ｃをロードし、バッファレジスタ１０３へ格納する。
【００２９】
ステップ３においては、データｂ，ｃが格納されたバッファレジスタ１０３から、ステップ１で分離した参照済みデータ数０ｘ３と今回参照するデータ数Ｎとを用いて、今回参照するデータのみを抜き出してくる。具体的な抜き出し手段の一例をステップ３−１ａからステップ３−３ａで示す。
【００３０】
ステップ３−１ａにおいては、バッファレジスタ１０３にあるデータｂ，ｃを参照済みデータ数０ｘ３だけ左シフトさせる。今回参照するデータＤ１の先頭がバッファレジスタ１０３の最上位ビット側に移動する。このとき、一般のプロセッサではシフトした際の下位ビット側（右）のデータがない部分は"０"が拡張されるのが普通である（図４参照）。
【００３１】
ステップ３−２ａにおいては、"３２"から今回参照するデータ数Ｎを引いた値を算出する。
【００３２】
ステップ３−３ａにおいては、ステップ３−１ａでシフトしたデータを、さらにステップ３−２ａで算出した値分だけ右にシフトする。今回参照するデータＤ１の末尾がバッファレジスタ１０３の最下位ビット側に移動する。このとき、シフトは論理シフトとする。論理シフトは上位ビット側（左）のデータがない部分は"０"が拡張されるのが普通である（図４参照）。
【００３３】
ステップ４においては、アドレスレジスタ１０２に今回参照したデータ数Ｎを加算して、アドレスレジスタ１０２の値を更新する。このとき、加算によって参照済みデータ数は（０ｘ３＋Ｎ）へ更新され、さらに参照済みデータ数を保持している下位ビット側から、アドレス値を保持している上位ビット側への桁上がりによって、アドレス値の更新も自動的に実現されることになる。
【００３４】
例えばＮ＝０ｘ８の場合、参照済みデータ数は０ｘ３＋０ｘ８＝０ｘｂで４ビットで表現でき、桁上がりはなく、アドレス値は０ｘ１０１のままである。Ｎ＝０ｘｅの場合は、参照済みデータ数は０ｘ３＋０ｘｅ＝０ｘ１１で５ビットになり、桁上がりが発生し、アドレス値が０ｘ１０１から０ｘ１０２へ更新される。
【００３５】
なお、上記の例において、"０ｘ"は１６進数を表す。"０ｘｂ"は１０進数では"１１"であり、これは１０進数の"１６"すなわち４ビットよりも小さいので、４ビット表現することができる。また、"０ｘｅ"は１０進数では"１４"である。０ｘ３＋０ｘｅの結果は１０進数では３＋１４＝１７で、１７−１６＝１より、１６進数で桁上がりがあり、"０ｘ１１"となる。
【００３６】
理解を助けるため、より具体的な例をあげて説明する。
【００３７】
図５（ａ）は、メモリ１０１の０ｘ１０１番からロードによってバッファレジスタ１０３に格納されたデータを示す。図１のデータｂに対応するのが１６ビットのデータｂ１６，ｂ１５，ｂ１４，ｂ１３，ｂ１２，…ｂ６，ｂ５，…ｂ１である。また、図１のデータｃに対応するのが１６ビットのデータｃ１６，ｃ１５，…ｃ１である。合計３２ビットある。
【００３８】
前回の処理でデータｂ１６，ｂ１５，ｂ１４の３ビットが参照済みであるとする。したがって、参照済みデータ数Ｍ＝３である。今回参照するデータ数Ｎ＝８とする。それは、ｂ１３，ｂ１２，…ｂ６のデータＤ２に相当する。これを太い枠で強調する。
【００３９】
図５（ｂ）は、３２ビットのデータ列ｂ１６，ｂ１５，…ｂ１，ｃ１６，ｃ１５，…ｃ１を参照済みデータ数Ｍ＝３ビット分だけ左シフトし、最上位からデータ列ｂ１３，ｂ１２，…ｂ１，ｃ１６，ｃ１５，…ｃ１を格納し、下位３ビットを"０"にセットした状態である。太枠の先頭が３２ビット目に一致している。
【００４０】
図５（ｃ）は、３２ビットのデータ列ｂ１３，ｂ１２，…ｂ１，ｃ１６，ｃ１５，…ｃ１，０,０,０を２４ビット分だけ右シフトし、最上位から２４ビット分に"０"をセットした状態を示す。右シフト量の２４ビットは、"３２"から今回参照するデータ数Ｎ＝８を引いたものである。太枠の末尾が１ビット目に一致している。すなわち、バッファレジスタ１０３の最下位から８ビット分にデータＤ２のｂ１３，ｂ１２，…，ｂ６が格納された状態となり、これで今回参照するデータＤ２が抜き出されたことになる。
【００４１】
参照済みデータ数Ｍに今回参照するデータ数Ｎを加算すると、Ｍ＋Ｎ＝３＋８＝１１であり、アドレスレジスタ１０２において参照済みデータ数Ｍを"３"から"１１"に更新する。"１１"は２４（４ビット）未満であるからアドレス値の桁上げは行わず、元のアドレス値０ｘ１０１番を維持する。
【００４２】
図５の処理に引き続く処理を図６で説明する。
【００４３】
図６（ａ）は、メモリ１０１の０ｘ１０１番のデータがバッファレジスタ１０３にロードされた状態を示す（図５（Ａ）と同じ）。
【００４４】
前回までの処理でデータｂ１６，ｂ１５，ｂ１４，ｂ１３，ｂ１２，…，ｂ６の１１ビットが参照済みであり、参照済みデータ数Ｍ＝１１となっている。今回参照するデータ数Ｎ＝５とする。それは、ｂ５，ｂ４，…，ｂ１のデータＤ３に相当する。これを太い枠で強調する。
【００４５】
図６（ｂ）は、３２ビットのデータ列ｂ１６，ｂ１５，…，ｂ１，ｃ１６，ｃ１５，…，ｃ１を参照済みデータ数Ｍ＝１１ビット分だけ左シフトし、最上位からデータ列ｂ５，ｂ４，…，ｂ１，ｃ１６，ｃ１５，…，ｃ１を格納し、下位１１ビットを"０"にセットした状態である。太枠の先頭が３２ビット目に一致している。
【００４６】
図６（ｃ）は、３２ビットのデータ列ｂ５，ｂ４，…，ｂ１，ｃ１６，ｃ１５，…，ｃ１，０,０,…０を２７ビット分だけ右シフトし、最上位から２７ビット分に"０"をセットした状態を示す。右シフト量の２７ビットは、"３２"から今回参照するデータ数Ｎ＝５を引いたものである。太枠の末尾が１ビット目に一致している。すなわち、バッファレジスタ１０３の最下位から５ビット分にデータＤ３のｂ５，ｂ４，…，ｂ１が格納された状態となり、これで今回参照するデータＤ３が抜き出されたことになる。
【００４７】
参照済みデータ数Ｍに今回参照するデータ数Ｎを加算すると、Ｍ＋Ｎ＝１１＋５＝１６であり、アドレスレジスタ１０２において参照済みデータ数Ｍを"１１"から"１６"に更新する。"１６"は２４（４ビット）以上に該当するからアドレス値の桁上げを行い、次のアドレス値０ｘ１０２番に更新する。データＢの全１６ビット分のデータの参照が完了しているので、次のアドレスに進むのである。
【００４８】
なお、図６の処理で仮に今回参照するデータ数Ｎが４以下であれば、図５と同じ論理の処理を繰り返すことになる。
【００４９】
図５の処理に引き続く別の処理を図７で説明する。これは、今回参照するデータ数Ｎが６以上の場合である。
【００５０】
図７（ａ）は、メモリ１０１の０ｘ１０１番のデータがバッファレジスタ１０３にロードされた状態を示す（図５（ａ）と同じ）。
【００５１】
前回までの処理でデータｂ１６，ｂ１５，ｂ１４，ｂ１３，ｂ１２，…，ｂ６の１１ビットが参照済みであり、参照済みデータ数Ｍ＝１１となっている。今回参照するデータ数Ｎ＝７とする。それは、ｂ５，ｂ４，…，ｂ１，ｃ１６，ｃ１５のデータＤ４に相当する。図６（ｂ）の場合より２ビット分増えている。データｂだけでなくデータｃの一部も含んでいる。これを太い枠で強調する。
【００５２】
図７（ｂ）は、３２ビットのデータ列ｂ１６，ｂ１５，…，ｂ１，ｃ１６，ｃ１５，…，ｃ１を参照済みデータ数Ｍ＝１１ビット分だけ左シフトし、最上位からデータ列ｂ５，ｂ４，…，ｂ１，ｃ１６，ｃ１５，…，ｃ１を格納し、下位１１ビットを"０"にセットした状態である。これは、図６（ｂ）と同じである。太枠の先頭が３２ビット目に一致している。
【００５３】
図７（ｃ）は、３２ビットのデータ列ｂ５，ｂ４，…，ｂ１，ｃ１６，ｃ１５，…，ｃ１，０,０,…０を２５ビット分だけ右シフトし、最上位から２５ビット分に"０"をセットした状態を示す。右シフト量の２５ビットは、"３２"から今回参照するデータ数Ｎ＝７を引いたものである。図６（ｃ）の場合より２ビット分少ない。太枠の末尾が１ビット目に一致している。すなわち、バッファレジスタ１０３の最下位から７ビット分にデータＤ４のｂ５，ｂ４，…，ｂ１，ｃ１６，ｃ１５が格納された状態となり、これで今回参照するデータＤ４が抜き出されたことになる。
【００５４】
参照済みデータ数Ｍに今回参照するデータ数Ｎを加算すると、Ｍ＋Ｎ＝１１＋７＝１８であり、アドレスレジスタ１０２において参照済みデータ数Ｍを"１１"から"１８"に更新する。"１８"は２４（４ビット）以上に該当するからアドレス値の桁上げを行い、次のアドレス値０ｘ１０２番に更新する。データＢの全１６ビット分のデータの参照が完了し、データＣの参照に入っているので、次のアドレスに進むのである。参照済みデータ数Ｍの"１８"は１６進数では"０ｘ１２"であり、２進数で"０Ｂ１０００２"であるが、桁上げの５ビット目を除く下位から４ビット分は"０Ｂ０００２"で、１６進数で"０ｘ２"となる。これは、データＣの上位２つのビットＣ１６，Ｃ１５が参照済みであることに対応している。
【００５５】
図８に示すように、アドレス０ｘ１０１番から次のアドレス０ｘ１０２番に進むと、そこの上位１６ビット分には、１つ前のアドレス０ｘ１０１番の下位側１６ビット分のデータｃ（ｃ１６，ｃ１５，…，ｃ１）と同じものがすでに格納されており、そのまま引き続き使用可能となっている。アドレス更新のための特別の監視、演算が不要となっている。
【００５６】
なお、図１のアドレスレジスタ１０２やバッファレジスタ１０３は特殊な動作をするレジスタではなく、プロセッサの通常使用する汎用的なレジスタを用いて実現できるものであり、特に専用のレジスタを実装する必要はない。ただし、従来技術でのアクセスアドレスや参照済みデータ数等と同様、アドレスレジスタ１０２の値はメモリ１０１の空き領域等への退避復帰が必要である。
【００５７】
実施の形態１に示した例では、下位１６ビットのデータを、その次のアドレスの上位１６ビットにも配置しているので、少なくとも１６ビット＋１ビットの１７ビットのデータを一度に抜き出すことが出来る。また、データを詰めた場合に比べて２倍のメモリ容量を必要とする。
【００５８】
（実施の形態２）
以下、本発明の実施の形態２にかかわる可変長復号化装置及び可変長復号化方法について、図面を参照しながら説明する。
【００５９】
図９は、実施の形態２におけるバッファレジスタ１０３から今回参照するデータを抜き出す処理フローを示したものである。図１０は図９で示した処理フローに伴って変化するデータの状態を示したもので、図９の各ステップと対応して変化する様子を示している。図１１は、実施の形態２で使用するシフタとバッファレジスタとの周辺を示す回路構成の一例である。
【００６０】
７０１はバッファレジスタ１０３が保持しているビットの一部をマスクするためのマスク用論理回路、７０２はマスク用論理回路７０１の出力を受けてシフタへの入力データをマスクするマスク回路、７０３はシフトを行うシフタである。
【００６１】
図１および図２は本実施の形態２にも適用される。
【００６２】
以下、図１、図２、図９、図１０、図１１を用いて説明する。また、説明の便宜上、３２ビットを基本とするプロセッサを前提に記載しているが、本発明はこれらに限定されるものではない。また、初期状態として、メモリ１０１には図のように、０ｘ１００番地からａ，ｂ，ｃ…といった順にデータが格納されているものとし、アドレスレジスタもアドレス値が０ｘ１０１、参照済みデータ数が０ｘ３、今回参照するデータ数はＮとする。
【００６３】
基本の動作は図２のとおりであり、実施の形態１の場合と同様である。図２のステップ３が図９のように展開されるのが本実施の形態の特色である。
【００６４】
以下、処理の一例を説明する。
【００６５】
ステップ１においては、アドレスレジスタ１０２から参照済みデータ数０ｘ３とアドレス値０ｘ１０１を分離し、抜き出す。
【００６６】
ステップ２においては、ステップ１にて分離したアドレス値０ｘ１０１用いて、メモリ１０１の０ｘ１０１番地をアクセスし、データｂ，ｃをロードし、バッファレジスタ１０３へ格納する。
【００６７】
ステップ３においては、データｂ，ｃが格納されたバッファレジスタ１０３から、ステップ１で分離した参照済みデータ数０ｘ３と今回参照するデータ数Ｎとを用いて、今回参照するデータのみを抜き出してくる。具体的な抜き出しのフローをステップ３−１ｂからステップ３−２ｂで示す。
【００６８】
ステップ３−１ｂにおいては、"３２"から参照済みデータ数０ｘ３と今回参照するデータ数Ｎとの合計を引いた値を算出する。なお、念のためにいうと、実施の形態１の場合には、"３２"から引き算するのは今回参照するデータ数Ｎのみである。そして、実施の形態１の場合のステップ３−１ａの「バッファレジスタ１０３にあるデータｂ，ｃを参照済みデータ数０ｘ３だけ左シフトさせる」に相当する処理は行われない。その処理をマスク回路が代行するからである。
【００６９】
ステップ３−２ｂにおいては、図１１で示すマスク用論理回路７０１、マスク回路７０２およびシフタ７０３とを用いて、参照済みデータ数０ｘ３でマスクしつつ、ステップ３−１ｂで算出した値"３２−（０ｘ３＋Ｎ）"分だけ右にシフトする。今回参照するデータＤ１の末尾が、直接、バッファレジスタ１０３の最下位ビット側に移動する。このとき、シフトは論理シフトとする（図１０参照）。
【００７０】
ステップ４においては、アドレスレジスタ１０２に今回参照したデータ数Ｎを加算して、アドレスレジスタ１０２の値を更新する。このとき、実施の形態１の場合と同様に、加算によって参照済みデータ数は（０ｘ３＋Ｎ）へ更新され、さらに参照済みデータ数を保持している下位ビット側から、アドレス値を保持している上位ビット側への桁上がりによって、アドレス値の更新も自動的に実現されることになる。
【００７１】
ステップ３の具体的実施手段であるステップ３−１Ｂ，３−２Ｂ以外は実施の形態１と同様である。
【００７２】
上記において、４ビットで示される参照済みデータ数が０ｘ３のとき、マスク用論理回路７０１はマスク回路７０２における上位３つのアンドゲートＡ３２，Ａ３１，Ａ３０に対してマスク信号を出力する。これでこれら３つのアンドゲートＡ３２，Ａ３１，Ａ３０のみを非導通とし、他のＡＮＤゲートＡ２９〜Ａ１は導通とし、バッファレジスタ１０３の３２ビットのデータを、そのうち上位３ビットをマスクした状態で（強制的に"０"にした状態で）、シフタ７０３に転送する。シフタ７０３は、図１２に示すように、上位３ビットがマスクされた３２ビットデータを２１ビットだけ右シフトする。ここで、２１ビットは、参照済みデータ数Ｍ＝３と今回参照するデータ数Ｎ＝８とを加算して、その結果の"１１"を"３２"から引き算して得られたものである。
【００７３】
図１１の構成例のマスク用論理回路７０１で想定した変換論理表を示す。
【００７４】
【表１】
2005244928.tif 000003
【００７５】
なお、図１１で示したマスク用論理回路７０１とマスク回路７０２は、回路実装方法を特に規定するものではなく、回路実装上の手段は問わない。マスク用論理回路７０１とマスク回路７０２とは、これらを分割しても、まとめて論理を組んでもよい。
【００７６】
（実施の形態３）
図１３ないし図１６に実施の形態３の可変長復号化装置を示す。
【００７７】
説明の便宜上、実施の形態３におけるプロセッサは２４ビットを基本とするプロセッサを前提に記載しているが、本発明はこれらに限定されるものではない。
【００７８】
図１３において、メモリ１０１は２４ビットを１ワードとするデータを記憶しており、各アドレスが、上位８ビット、中位８ビット、下位８ビットとなり、あるアドレスの中位ビットと同じデータを次のアドレスの上位ビット側にも配置し、あるアドレスの下位ビット側と同じデータを次のアドレスの中位ビットにも配置している。ここで、上位８ビットに対して、中位８ビットと下位８ビットの１６ビットをまとめて下位ビット側と称することができる。
【００７９】
アドレスレジスタ１０２は、ビット幅２４のレジスタであり、アドレス値を保持する上位ビット側（第１レジスタ部分）と、参照済みデータ数Ｍを保持するビット幅Ｃ（実施の形態３ではＣ＝３）の下位ビット側（第２レジスタ部分）とからなる。
【００８０】
バッファレジスタ１０３は、メモリ１０１からロードしたデータを保持するビット幅Ｂ（実施の形態３ではＢ＝２４）のバッファレジスタである。
【００８１】
ここで、メモリ１０１のビット幅Ａは２４であり，アドレスレジスタ１０２の第２レジスタ部分のビット幅Ｃは３であり，メモリ１０１の下位ビット側のビット数Ｄは８であり、これらＡ，Ｃ，Ｄの間には、Ｄ＝Ａ−２Cの関係がある。実施の形態２では、Ａ＝２４、Ｃ＝３であるから、Ｄ＝１６である。また、Ａ，Ｃの間には、Ｐ＝２CとするとＡ＝３×Ｐの関係がある。すなわち、Ｐ＝２3＝８であり、Ａ＝３×Ｐ＝３×８＝２４である。
【００８２】
図２ならびに図１４および図１５を参照して、バッファレジスタ１０３から今回参照するデータを抜き出す一般的な処理を説明する。図１４はその処理フローを示し、図１５は図１４で示した処理フローに伴って変化するデータの状態を示す。下記文章中のステップは、図２、図１４の各処理ステップに対応する。初期状態として、メモリ１０１には図のように、０ｘ１００番地からａ，ｂ，ｃ…といった順にデータが格納されているものとし、アドレスレジスタ１０２におけるアドレス値を０ｘ１０１、参照済みデータ数を０ｘ３とし、今回参照するデータ数をＮとする。
【００８３】
以下、処理の一例を説明する。
【００８４】
ステップ１においては、アドレスレジスタ１０２から参照済みデータ数０ｘ３とアドレス値０ｘ１０１を分離し、抜き出す。
【００８５】
ステップ２においては、ステップ１にて分離したアドレス値０ｘ１０１を用いて、メモリ１０１の０ｘ１０１番地をアクセスし、データｂ，ｃ、ｄをロードし、バッファレジスタ１０３へ格納する。
【００８６】
ステップ３においては、データｂ，ｃ、ｄが格納されたバッファレジスタ１０３から、ステップ１で分離した参照済みデータ数０ｘ３と今回参照するデータ数Ｎとを用いて、今回参照するデータのみを抜き出してくる。具体的な抜き出し手段の一例をステップ３−１ａからステップ３−３ａで示す。
【００８７】
ステップ３−１ａにおいては、バッファレジスタ１０３にあるデータｂ，ｃ、ｄを参照済みデータ数０ｘ３だけ左シフトさせる。今回参照するデータＤ１の先頭がバッファレジスタ１０３の最上位ビット側に移動する。このとき、一般のプロセッサではシフトした際の下位ビット側（右）のデータがない部分は“０”が拡張されるのが普通である（図１５参照）。
【００８８】
ステップ３−２ａにおいては、“２４”から今回参照するデータ数Ｎを引いた値を算出する。
【００８９】
ステップ３−３ａにおいては、ステップ３−１ａでシフトしたデータを、さらにステップ３−２ａで算出した値分だけ右にシフトする。今回参照するデータＤ１の末尾がバッファレジスタ１０３の最下位ビット側に移動する。このとき、シフトは論理シフトとする。論理シフトは上位ビット側（左）のデータがない部分は“０”が拡張されるのが普通である（図１５参照）。
【００９０】
ステップ４においては、アドレスレジスタ１０２に今回参照したデータ数Ｎを加算して、アドレスレジスタ１０２の値を更新する。このとき、加算によって参照済みデータ数は（０ｘ３＋Ｎ）へ更新され、さらに参照済みデータ数を保持している下位ビット側から、アドレス値を保持している上位ビット側への桁上がりによって、アドレス値の更新も自動的に実現されることになる。
【００９１】
例えばＮ＝０ｘ２の場合、参照済みデータ数は０ｘ３＋０ｘ２＝０ｘ５で３ビットで表現でき、桁上がりはなく、アドレス値は０ｘ１０１のままである。Ｎ＝０ｘ８の場合は、参照済みデータ数は０ｘ３＋０ｘ８＝０ｘｂで４ビットになり、桁上がりが発生し、アドレス値が０ｘ１０１から０ｘ１０２へ更新される。また、Ｎ＝０ｘＦの場合は、参照済みデータ数は０ｘ３＋０ｘｆ＝０ｘ１３で５ビットになり、２つ桁上がりが発生し、アドレス値が０ｘ１０１から０ｘ１０３へ更新される。
【００９２】
理解を助けるため、より具体的な例をあげて説明する。
【００９３】
図１６（ａ）は、メモリ１０１の０ｘ１０１番からロードによってバッファレジスタ１０３に格納されたデータを示す。図１３のデータｂに対応するのが８ビットのデータｂ８，ｂ７，ｂ６，…，ｂ１である。また、図１３のデータｃに対応するのが８ビットのデータｃ８，ｃ７，…，ｃ１である。また、図１３のデータｄに対応するのが８ビットのデータｄ８，ｄ７，…，ｄ１である。合計２４ビットある。
【００９４】
前回の処理でデータｂ８，ｂ７，ｂ６の３ビットが参照済みであるとする。したがって、参照済みデータ数Ｍ＝３である。今回参照するデータ数Ｎ＝１５とする。それは、ｂ５，…，ｂ１,ｃＣ８，ｃ７，…，ｃ１,ｄ８,ｄ７のデータＤ２に相当する。これを太い枠で強調する。
【００９５】
図１６（ｂ）は、２４ビットのデータ列ｂ８，ｂ７，…，ｂ１，ｃ８，ｃ７，…，ｃ１，ｄ８，ｄ７，…，ｄ１を参照済みデータ数Ｍ＝３ビット分だけ左シフトし、最上位からデータ列ｂ５，…，ｂ１,ｃ８，ｃ７，…，ｃ１,ｄ８,ｄ７, …，ｄ１を格納し、下位３ビットを“０”にセットした状態である。太枠の先頭が２４ビット目に一致している。
【００９６】
図１６（ｃ）は、２４ビットのデータ列ｂ５，…，ｂ１,ｃ８，ｃ７，…，ｃ１,ｄ８,ｄ７, …，ｄ１，０,０,０を９ビット分だけ右シフトし、最上位から９ビット分に“０”をセットした状態を示す。右シフト量の９ビットは、“２４”から今回参照するデータ数Ｎ＝１５を引いたものである。太枠の末尾が１ビット目に一致している。すなわち、バッファレジスタ１０３の最下位から１５ビット分にデータＤ２のｂ５，…，ｂ１,ｃ８，ｃ７，…，ｃ１,ｄ８,ｄ７が格納された状態となり、これで今回参照するデータＤ２が抜き出されたことになる。
【００９７】
参照済みデータ数Ｍに今回参照するデータ数Ｎを加算すると、Ｍ＋Ｎ＝３＋１５＝１８であり、アドレスレジスタ１０２において参照済みデータ数Ｍを“３”から“１８”に更新する。“１８”は２x２４（４ビット）以上に該当するからアドレス値を２つ桁上げを行い、アドレス値０ｘ１０３番に更新する。データｂの全８ビット分のデータの参照とデータｃの全８ビット分のデータ参照が完了し、データｄの参照に入っているので、２つ先のアドレスに進むのである。参照済みデータ数Ｍの“１８”は１６進数では“０ｘ１２”であり、２進数で“０ｂ１０００２”であるが、桁上げの５ビット目を除く下位から４ビット分は“０ｂ０００２”で、１６進数で“０ｘ２”となる。これは、データｅの上位２つのビットｅ１６，ｅ１５が参照済みであることに対応している。
【００９８】
図１３に示すように、アドレス０ｘ１０３の上位８ビット分には、２つ前のアドレス０ｘ１０１番の下位側８ビット分のデータｄ（ｄ８，ｄ７，…，ｄ１）と同じものがすでに格納されており、そのまま引き続き使用可能となっている。アドレス更新のための特別の監視、演算が不要となっている。
【００９９】
実施の形態３に示した例では、下位１６ビットのデータを、その次のアドレスの上位１６ビットにも配置しているので、少なくとも１６ビット＋１ビットの１７ビットのデータを一度に抜き出すことが出来る。また、データを詰めた場合に比べて３倍のメモリ容量を必要とする。
【０１００】
なお、図１３のアドレスレジスタ１０２やバッファレジスタ１０３は特殊な動作をするレジスタではなく、プロセッサの通常使用する汎用的なレジスタを用いて実現できるものであり、特に専用のレジスタを実装する必要はない。ただし、従来技術でのアクセスアドレスや参照済みデータ数等と同様、アドレスレジスタ１０２の値はメモリ１０１の空き領域等への退避復帰が必要である。
【０１０１】
（実施の形態４）
図１７ないし図１９を参照して実施の形態４の可変長復号化装置を説明する。
【０１０２】
説明の便宜上、実施の形態４におけるプロセッサは２４ビットを基本とするプロセッサを前提に記載しているが、本発明はこれらに限定されるものではない。
【０１０３】
図１７において、メモリ１０１は２４ビットを１ワードとするデータを記憶しており、各アドレスが、上位８ビット、中位８ビット、下位８ビットとなり、あるアドレスの下位ビット側と同じデータを次のアドレスの上位ビット側にも配置している。
【０１０４】
アドレスレジスタ１０２は、ビット幅３２のレジスタであり、アドレス値を保持する上位ビット側（第１レジスタ部分）と、参照済みデータ数Ｍを保持するビット幅Ｃ（実施の形態ではＣ＝４）の下位ビット側（第２レジスタ部分）とからなる。
【０１０５】
バッファレジスタ１０３は、メモリ１０１からロードしたデータを保持するビット幅Ｂ（実施の形態４ではＢ＝２４）のレジスタである。
【０１０６】
ここで、メモリ１０１のビット幅Ａは２４であり，アドレスレジスタ１０２の第２レジスタ部分のビット幅Ｃは４であり，メモリ１０１の下位ビット側のビット数Ｄは８であり、これらＡ，Ｃ，Ｄの間には、Ｄ＝Ａ−２Cの関係がある。また、Ａ，Ｃの間には、Ｐ＝２CとするとＡ＝（３／２）×Ｐの関係がある。すなわち、Ｐ＝２4＝１６であり、Ａ＝（３／２）×１６＝２４である。
【０１０７】
実施の形態４の可変長復号化装置において、可変長復号を行う処理フローは実施の形態１の処理フロー（図２）と同様である。
【０１０８】
実施の形態４において、バッファレジスタ１０３から今回参照するデータを抜き出す一般的な処理フローは実施の形態３の処理フロー（図１４）と同様である。
【０１０９】
実施の形態４において、その処理フローに伴って変化するデータの状態（図１５）も実施の形態３と同様である。
【０１１０】
実施の形態４において、初期状態として、メモリ１０１には図１７で示すように、０ｘ１００番地からａ，ｂ，ｃ…といった順にデータが格納されているものとし、アドレスレジスタ１０２におけるアドレス値を０ｘ１０１、参照済みデータ数を０ｘ３とし、今回参照するデータ数をＮとする。
【０１１１】
以下、処理の一例を説明する。
【０１１２】
ステップ１においては、アドレスレジスタ１０２から参照済みデータ数０ｘ３とアドレス値０ｘ１０１を分離し、抜き出す。
【０１１３】
ステップ２においては、ステップ１にて分離したアドレス値０ｘ１０１を用いて、メモリ１０１の０ｘ１０１番地をアクセスし、データｃ，ｄ、ｅをロードし、バッファレジスタ１０３へ格納する。
【０１１４】
ステップ３においては、データｃ，ｄ、ｅが格納されたバッファレジスタ１０３から、ステップ１で分離した参照済みデータ数０ｘ３と今回参照するデータ数Ｎを用いて、今回参照するデータのみを抜き出してくる。具体的な抜き出し手段の一例をステップ３−１ａからステップ３−３ａで示す。
【０１１５】
ステップ３−１ａにおいては、バッファレジスタ１０３にあるデータｃ，ｄ、ｅを参照済みデータ数０ｘ３だけ左シフトさせる。今回参照するデータＤ１の先頭がバッファレジスタ１０３の最上位ビット側に移動する。このとき、一般のプロセッサではシフトした際の下位ビット側（右）のデータがない部分は“０”が拡張されるのが普通である（図１５参照）。
【０１１６】
ステップ３−２ａにおいては、“２４”から今回参照するデータ数Ｎを引いた値を算出する。
【０１１７】
ステップ３−３ａにおいては、ステップ３−１ａでシフトしたデータを、さらにステップ３−２ａで算出した値分だけ右にシフトする。今回参照するデータＤ１の末尾がバッファレジスタ１０３の最下位ビット側に移動する。このとき、シフトは論理シフトとする。論理シフトは上位ビット側（左）のデータがない部分は“０”が拡張されるのが普通である（図１５参照）。
【０１１８】
ステップ４においては、アドレスレジスタ１０２に今回参照したデータ数Ｎを加算して、アドレスレジスタ１０２の値を更新する。このとき、加算によって参照済みデータ数は（０ｘ３＋Ｎ）へ更新され、さらに参照済みデータ数を保持している下位ビット側から、アドレス値を保持している上位ビット側への桁上がりによって、アドレス値の更新も自動的に実現されることになる。
【０１１９】
例えばＮ＝０ｘ２の場合、参照済みデータ数は０ｘ３＋０ｘ２＝０ｘ５で４ビットで表現でき、桁上がりはなく、アドレス値は０ｘ１０１のままである。Ｎ＝０ｘ８の場合も、参照済みデータ数は０ｘ３＋０ｘ８＝０ｘｂで４ビットになり、桁上がりが発生し、アドレス値が０ｘ１０１から０ｘ１０２へ更新される。また、Ｎ＝０ｘＦの場合は、参照済みデータ数は０ｘ３＋０ｘｆ＝０ｘ１３で５ビットになり、桁上がりが発生し、アドレス値が０ｘ１０１から０ｘ１０２へ更新される。
【０１２０】
理解を助けるため、より具体的な例をあげて説明する。
【０１２１】
図１８（ａ）は、メモリ１０１の０ｘ１０１番からロードによってバッファレジスタ１０３に格納されたデータを示す。図１７のデータｃに対応するのが８ビットのデータｃ８，ｃ７，ｃ６，…，ｃ１である。また、図１７のデータｄに対応するのが８ビットのデータｄ８，ｄ７，…，ｄ１である。また、図１７のデータｅに対応するのが８ビットのデータｅ８，ｅ７，…，ｅ１である。合計２４ビットある。
【０１２２】
前回の処理でデータｃ８，ｃ７，ｃ６の３ビットが参照済みであるとする。したがって、参照済みデータ数Ｍ＝３である。今回参照するデータ数Ｎ＝９とする。それは、ｃ５，ｃ４，…，ｃ１,ｄ８，…，ｄ５のデータＤ２に相当する。これを太い枠で強調する。
【０１２３】
図１８（ｂ）は、２４ビットのデータ列ｃ８，ｃ７，…，ｃ１，ｄ８，ｄ７，…，ｄ１，ｅ８，ｅ７，…，ｅ１を参照済みデータ数Ｍ＝３ビット分だけ左シフトし、最上位からデータ列ｃ５，…，ｃ１,ｄ８，ｄ７，…，ｄ１,ｅ８,ｅ７, …，ｅ１を格納し、下位３ビットを“０”にセットした状態である。太枠の先頭が２４ビット目に一致している。
【０１２４】
図１８（ｃ）は、２４ビットのデータ列ｃ５，…，ｃ１,ｄ８，ｄ７，…，ｄ１,ｅ８,ｅ７, …，ｅ１，０，０，０を９ビット分だけ右シフトし、最上位から１５ビット分に“０”をセットした状態を示す。右シフト量の１５ビットは、“２４”から今回参照するデータ数Ｎ＝９を引いたものである。太枠の末尾が１ビット目に一致している。すなわち、バッファレジスタ１０３の最下位から９ビット分にデータＤ２のｃ５，ｃ４，…，ｃ１,ｄ８，…，ｄ５が格納された状態となり、これで今回参照するデータＤ２が抜き出されたことになる。
【０１２５】
参照済みデータ数Ｍに今回参照するデータ数Ｎを加算すると、Ｍ＋Ｎ＝３＋９＝１２であり、アドレスレジスタ１０２において参照済みデータ数Ｍを“３”から“１２”に更新する。“１２”は２４（４ビット）未満であるからアドレス値の桁上げは行わず、元のアドレス値０ｘ１０１番を維持する。
【０１２６】
図１８の処理に引き続く処理を図１９で説明する。
【０１２７】
図１９（ａ）は、メモリ１０１の０ｘ１０１番のデータがバッファレジスタ１０３にロードされた状態を示す（図１９（ａ）と同じ）。
【０１２８】
前回までの処理でデータｃ８，ｃ７，…，ｃ１，ｄ８，ｄ７，…，ｄ５の１２ビットが参照済みであり、参照済みデータ数Ｍ＝１２となっている。今回参照するデータ数Ｎ＝９とする。それは、ｄ４，…，ｄ１，ｅ８，ｅ７，…，ｅ４のデータＤ３に相当する。これを太い枠で強調する。
【０１２９】
図１９（ｂ）は、２４ビットのデータ列ｃ８，ｃ７，…，ｃ１，ｄ８，ｄ７，…，ｄ１，ｅ８，ｅ７，…，ｅ１を参照済みデータ数Ｍ＝１２ビット分だけ左シフトし、最上位からデータ列ｄ４，ｄ３，…，ｄ１，ｅ８，ｅ７，…，ｅ１を格納し、下位１２ビットを“０”にセットした状態である。太枠の先頭が２４ビット目に一致している。
【０１３０】
図１９（ｃ）は、２４ビットのデータ列ｄ４，ｄ３，…，ｄ１，ｅ８，ｅ７， …，ｅ１，０，０， …，０ を１５ビット分だけ右シフトし、最上位から１５ビット分に“０”をセットした状態を示す。右シフト量の１５ビットは、“２４”から今回参照するデータ数Ｎ＝９を引いたものである。太枠の末尾が１ビット目に一致している。すなわち、バッファレジスタ１０３の最下位から９ビット分にデータＤ３のｄ４，…，ｄ１，ｅ８，ｅ７，…，ｅ４が格納された状態となり、これで今回参照するデータＤ２が抜き出されたことになる。
【０１３１】
参照済みデータ数Ｍに今回参照するデータ数Ｎを加算すると、Ｍ＋Ｎ＝１２＋９＝２１であり、アドレスレジスタ１０２において参照済みデータ数Ｍを“１２”から“２１”に更新する。“２１”は２４（４ビット）以上に該当するからアドレス値の桁上げを行い、次のアドレス値０ｘ１０２番に更新する。データｃ、及びデータｄの全１６ビット分のデータの参照が完了し、データｅの参照に入っているので、次のアドレスに進むのである。参照済みデータ数Ｍの“２１”は１６進数では“０ｘ１５”であり、２進数で“０ｂ１０１０１”であるが、桁上げの５ビット目を除く下位から４ビット分は“０ｂ０１０１”で、１６進数で“０ｘ５”となる。これは、データＥの上位５つのビットｃ８，ｃ７，…，ｅ４が参照済みであることに対応している。
【０１３２】
図１７に示すように、アドレス０ｘ１０１番から次のアドレス０ｘ１０２番に進むと、そこの上位８ビット分には、１つ前のアドレス０ｘ１０１番の下位側８ビット分のデータｅ（ｅ８，ｅ７，…，ｅ１）と同じものがすでに格納されており、そのまま引き続き使用可能となっている。アドレス更新のための特別の監視、演算が不要となっている。
【０１３３】
実施の形態４に示した例では、下位８ビットのデータを、その次のアドレスの上位８ビットにも配置しているので、少なくとも８ビット＋１ビットの９ビットのデータを一度に抜き出すことが出来る。また、データを詰めた場合に比べて４/３倍のメモリ容量を必要とする。
【０１３４】
なお、図１７のアドレスレジスタ１０２やバッファレジスタ１０３は特殊な動作をするレジスタではなく、プロセッサの通常使用する汎用的なレジスタを用いて実現できるものであり、特に専用のレジスタを実装する必要はない。ただし、従来技術でのアクセスアドレスや参照済みデータ数等と同様、アドレスレジスタ１０２の値はメモリ１０１の空き領域等への退避復帰が必要である。
【０１３５】
（実施の形態５）
図２０および図２１を参照して実施の形態５の可変長復号化装置を説明する。説明の便宜上、実施の形態５におけるプロセッサは３２ビットを基本とするプロセッサを前提に記載しているが、本発明はこれらに限定されるものではない。
図２０において、メモリ１０１は、３２ビットを１ワードとするデータを記憶しており、各アドレスが、上位８ビット、第１中位８ビット、第２中位ビット８ビット、下位８ビットとなり、あるアドレスの第１中位ビットと同じデータを次のアドレスの上位ビット側にも配置し、あるアドレスの第２中位ビットと同じデータを次のアドレスの第１中位ビットにも配置し、あるアドレスの下位ビット側と同じデータを次のアドレスの第２中位ビットにも配置している。
【０１３６】
アドレスレジスタ１０２は、ビット幅３２のレジスタであり、アドレス値を保持する上位ビット側（第１レジスタ部分）と、参照済みデータ数Ｍを保持するビット幅Ｃ（実施の形態５ではＣ＝３）ビット幅の下位ビット側（第２レジスタ部分）とからなる。
【０１３７】
バッファレジスタ１０３は、メモリ１０１からロードしたデータを保持するビット幅Ｂ（実施の形態５ではＢ＝３２）のレジスタである。
【０１３８】
ここで、メモリ１０１のビット幅Ａは３２であり，アドレスレジスタ１０２の第２レジスタ部分のビット幅Ｃは３であり，メモリ１０１の下位ビット側のビット数Ｄは２４であり、これらＡ，Ｃ，Ｄの間には、Ｄ＝Ａ−２Cの関係がある。また、Ａ，Ｃの間には、Ｐ＝２CとするとＡ＝４×Ｐの関係がある。すなわち、Ｐ＝２3＝８であり、Ａ＝４×８＝３２である。
【０１３９】
実施の形態５の可変長復号化装置においては、可変長復号を行う処理フローは実施の形態１の処理フロー（図２）と同様である。
【０１４０】
実施の形態５の可変長復号化装置においては、バッファレジスタ１０３から今回参照するデータを抜き出す一般的な処理フローは実施の形態１の処理フロー（図３）と同様である。
【０１４１】
実施の形態５の可変長復号化装置においては、図３で示した処理フローに伴って変化するデータの状態も実施の形態１と同様に図４で示される。
【０１４２】
実施の形態５の可変長復号化装置においては、初期状態として、メモリ１０１には図２０で示すように、０ｘ１００番地からａ，ｂ，ｃ…といった順にデータが格納されているものとし、アドレスレジスタ１０２におけるアドレス値を０ｘ１０１、参照済みデータ数を０ｘ３とし、今回参照するデータ数をＮとする。
【０１４３】
以下、処理の一例を説明する。
【０１４４】
ステップ１においては、アドレスレジスタ１０２から参照済みデータ数０ｘ３とアドレス値０ｘ１０１を分離し、抜き出す。
【０１４５】
ステップ２においては、ステップ１にて分離したアドレス値０ｘ１０１を用いて、メモリ１０１の０ｘ１０１番地をアクセスし、データｂ，ｃ，ｄ，ｅをロードし、バッファレジスタ１０３へ格納する。
【０１４６】
ステップ３においては、データｂ，ｃ，ｄ，ｅが格納されたバッファレジスタ１０３から、ステップ１で分離した参照済みデータ数０ｘ３と今回参照するデータ数Ｎを用いて、今回参照するデータのみを抜き出してくる。具体的な抜き出し手段の一例をステップ３−１ａからステップ３−３ａで示す。
【０１４７】
ステップ３−１ａにおいては、バッファレジスタ１０３にあるデータｂ，ｃ，ｄ，ｅを参照済みデータ数０ｘ３だけ左シフトさせる。今回参照するデータＤ２の先頭がバッファレジスタ１０３の最上位ビット側に移動する。このとき、一般のプロセッサではシフトした際の下位ビット側（右）のデータがない部分は“０”が拡張されるのが普通である（図４参照）。
【０１４８】
ステップ３−２ａにおいては、“３２”から今回参照するデータ数Ｎを引いた値を算出する。
【０１４９】
ステップ３−３ａにおいては、ステップ３−１ａでシフトしたデータを、さらにステップ３−２ａで算出した値分だけ右にシフトする。今回参照するデータＤ１の末尾がバッファレジスタ１０３の最下位ビット側に移動する。このとき、シフトは論理シフトとする。論理シフトは上位ビット側（左）のデータがない部分は“０”が拡張されるのが普通である（図４参照）。
【０１５０】
ステップ４においては、アドレスレジスタ１０２に今回参照したデータ数Ｎを加算して、アドレスレジスタ１０２の値を更新する。このとき、加算によって参照済みデータ数は（０ｘ３＋Ｎ）へ更新され、さらに参照済みデータ数を保持している下位ビット側から、アドレス値を保持している上位ビット側への桁上がりによって、アドレス値の更新も自動的に実現されることになる。
【０１５１】
例えばＮ＝０ｘ２の場合、参照済みデータ数は０ｘ３＋０ｘ２＝０ｘ５で３ビットで表現でき、桁上がりはなく、アドレス値は０ｘ１０１のままである。Ｎ＝０ｘ８の場合も、参照済みデータ数は０ｘ３＋０ｘ８＝０ｘｂで４ビットになり、桁上がりが発生し、アドレス値が０ｘ１０１から０ｘ１０２へ更新される。また、Ｎ＝０ｘｆの場合は、参照済みデータ数は０ｘ３＋０ｘｆ＝０ｘ１３で５ビットになり、桁上がりが発生し、アドレス値が０ｘ１０１から０ｘ１０２へ更新される。
【０１５２】
理解を助けるため、より具体的な例をあげて説明する。
【０１５３】
図２１（ａ）は、メモリ１０１の０ｘ１０１番からロードによってバッファレジスタ１０３に格納されたデータを示す。図２０のデータｂに対応するのが８ビットのデータｂ８，ｂ７，ｂ６，…，ｂ１である。また、図２０のデータｃに対応するのが８ビットのデータｃ８，ｃ７，ｃ６，…，ｃ１である。また、図１７のデータｄに対応するのが８ビットのデータｄ８，ｄ７，…，ｄ１である。また、図２０のデータｅに対応するのが８ビットのデータｅ８，ｅ７，…，ｅ１である。合計３２ビットである。
【０１５４】
前回の処理でデータｂ８，ｂ７，ｂ６の３ビットが参照済みであるとする。したがって、参照済みデータ数Ｍ＝３である。今回参照するデータ数Ｎ＝２３とする。それは、ｂ５，ｂ４，…，ｂ１，ｃ８，…，ｃ１，ｄ８，…，ｄ１,ｅ８，ｅ７のデータＤ２に相当する。これを太い枠で強調する。
【０１５５】
図２１（ｂ）は、３２ビットのデータ列ｂ８，…，ｂ１，ｃ８，…，ｃ１，ｄ８，…，ｄ１，ｅ８，…，ｅ１を参照済みデータ数Ｍ＝３ビット分だけ左シフトし、最上位からデータ列ｂ５，…，ｂ１，ｃ８，…，ｃ１，ｄ８，…，ｄ１，ｅ８，…，ｅ１を格納し、下位３ビットを“０”にセットした状態である。太枠の先頭が３２ビット目に一致している。
【０１５６】
図２１（ｃ）は、３２ビットのデータ列ｂ５，…，ｂ１，ｃ８，…，ｃ１，ｄ８，…，ｄ１，ｅ８，…，ｅ１，０，０，０を９ビット分だけ右シフトし、最上位から９ビット分に“０”をセットした状態を示す。右シフト量の９ビットは、“３２”から今回参照するデータ数Ｎ＝２３を引いたものである。太枠の末尾が１ビット目に一致している。すなわち、バッファレジスタ１０３の最下位から２３ビット分にデータＤ２のｂ５，ｂ４，…，ｂ１，ｃ８，…，ｃ１，ｄ８，…，ｄ１，ｅ８，ｅ７が格納された状態となり、これで今回参照するデータＤ２が抜き出されたことになる。
【０１５７】
参照済みデータ数Ｍに今回参照するデータ数Ｎを加算すると、Ｍ＋Ｎ＝３＋２３＝２６であり、アドレスレジスタ１０２において参照済みデータ数Ｍを“３”から“２６”に更新する。“２６”は３x２４（４ビット）以上に該当するからアドレス値を３つ桁上げを行い、アドレス値０ｘ１０４番に更新する。データｂ，ｃ，ｄの全２４ビット分のデータの参照が完了し、データＥの参照に入っているので、３つ先のアドレスに進むのである。参照済みデータ数Ｍの“２６”は１６進数では“０ｘ１ａであり、２進数で“０ｂ１１０１０”であるが、桁上げの４、５ビット目を除く下位から３ビット分は“０ｂ０１０”で、１６進数で“０ｘ２”となる。これは、データｅの上位２つのビットｅ８，ｅ７が参照済みであることに対応している。
【０１５８】
図２０に示すように、アドレス０ｘ１０４の上位８ビット分には、３つ前のアドレス０ｘ１０１番の下位側８ビット分のデータｅ（ｅ８，ｅ７，…，ｅ１）と同じものがすでに格納されており、そのまま引き続き使用可能となっている。アドレス更新のための特別の監視、演算が不要となっている。
【０１５９】
実施の形態５に示した例では、下位２４ビットのデータを、その次のアドレスの上位２４ビットにも配置しているので、少なくとも２４ビット＋１ビットの２５ビットのデータを一度に抜き出すことが出来る。また、データを詰めた場合に比べて４倍のメモリ容量を必要とする。
【０１６０】
なお、図２０のアドレスレジスタ１０２やバッファレジスタ１０３は特殊な動作をするレジスタではなく、プロセッサの通常使用する汎用的なレジスタを用いて実現できるものであり、特に専用のレジスタを実装する必要はない。ただし、従来技術でのアクセスアドレスや参照済みデータ数等と同様、アドレスレジスタ１０２の値はメモリ１０１の空き領域等への退避復帰が必要である。
【０１６１】
（実施の形態６）
図２２ないし図２４を参照して実施の形態６の可変長復号化装置を説明する。
【０１６２】
説明の便宜上、実施の形態６におけるプロセッサは３２ビットを基本とするプロセッサを前提に記載しているが、本発明はこれらに限定されるものではない。
【０１６３】
図２２において、メモリ１０１は、Ａ（実施の形態６ではＡ＝３２）ビットを１ワードとするデータを記憶しており、各アドレスが、上位８ビット、第１中位８ビット、第２中位ビット８ビット、下位８ビットで構成されている。メモリ１０１においては、あるアドレスにおける下位ビット側のデータと同じデータが、次のアドレスにおける上位ビット側にも配置されている。
【０１６４】
アドレスレジスタ１０２は、ビット幅３２のレジスタであり、アドレス値を保持する上位ビット側（第１レジスタ部分）と、参照済みデータ数Ｍを保持するビット幅Ｃ（実施の形態６ではＣ＝５）の下位ビット側（第２レジスタ部分）とからなる。
バッファレジスタ１０３は、メモリ１０１からロードしたデータを保持するビット幅Ｂ（実施の形態６ではＢ＝３２）のレジスタである。
【０１６５】
この実施の形態５においては、アドレスレジスタ１０２の値と今回参照したビット数Ｎとを加算する特殊加算器１０４を備えたことに特徴を有する。
【０１６６】
特殊加算器１０４は、参照済みビット数をＭ、今回参照したビット数をＮとした時に（Ｍ＋Ｎ）/Ｅ（ただし、ＥはＡ−Ｄの１以上の整数であり、実施の形態６では３２−８＝２４である。）２４の商Ｆ（整数）をアドレスレジスタ１０１の上位側（第１レジスタ部分）に加算し、余りＧ（整数）をアドレスレジスタ１０１の下位側（第２レジスタ部分）にセットするものである。
【０１６７】
ここで、上記Ｅには、Ｅ＝Ｈ×２Lの関係がある。実施の形態６ではＥ＝２４＝３×２3であり、Ｈ＝３となる。
【０１６８】
メモリ１０１上のデータについては、上位２４ビットの残りの下位８ビット分のデータが次のアドレスの上位側にも格納されるように配置している。具体的には、例えば、アドレス０ｘ１０１番には、上位８ビットにデータｄが、第１中位ビットにはデータｅが、第２中位ビットにデータｆが、下位ビット側にデータｇがそれぞれ格納されているが、次のアドレス０ｘ１０２番の上位ビット側にはデータｇが格納されている。アドレス０ｘ１０２番における下位ビット側にデータｊが格納されているが、次のアドレス０ｘ１０３番の上位ビット側にデータｊが格納されている。
【０１６９】
実施の形態６の可変長復号化装置においては、可変長復号を行う処理フローは実施の形態１の処理フロー（図２）と同様である。
【０１７０】
実施の形態６の可変長復号化装置においては、バッファレジスタ１０３から今回参照するデータを抜き出す一般的な処理フローは実施の形態１の処理フロー（図３）と同様である。
【０１７１】
実施の形態６の可変長復号化装置においては、図３で示した処理フローに伴って変化するデータの状態も実施の形態１と同様に図４で示される。
【０１７２】
実施の形態６の可変長復号化装置においては、初期状態として、メモリ１０１には図のように、０ｘ１００番地からａ，ｂ，ｃ…といった順にデータが格納されているものとし、アドレスレジスタ１０２におけるアドレス値を０ｘ１０１、参照済みデータ数を０ｘ３とし、今回参照するデータ数をＮとする。
【０１７３】
以下、処理の一例を説明する。
【０１７４】
ステップ１においては、アドレスレジスタ１０２から参照済みデータ数０ｘ３とアドレス値０ｘ１０１とを分離し、抜き出す。
【０１７５】
ステップ２においては、ステップ１にて分離したアドレス値０ｘ１０１を用いて、メモリ１０１の０ｘ１０１番地をアクセスし、データｄ，ｅ，ｆ，ｇをロードし、バッファレジスタ１０３へ格納する。
【０１７６】
ステップ３においては、データｄ，ｅ，ｆ，ｇが格納されたバッファレジスタ１０３から、ステップ１で分離した参照済みデータ数０ｘ３と今回参照するデータ数Ｎとを用いて、今回参照するデータのみを抜き出してくる。具体的な抜き出し処理の一例をステップ３−１ａからステップ３−３ａで示す。
【０１７７】
ステップ３−１ａにおいては、バッファレジスタ１０３にあるデータｄ，ｅ，ｆ，ｇを参照済みデータ数０ｘ３だけ左シフトさせる。今回参照するデータＤ２の先頭がバッファレジスタ１０３の最上位ビット側に移動する。このとき、一般のプロセッサではシフトした際の下位ビット側（右）のデータがない部分は“０”が拡張されるのが普通である（図４参照）。
【０１７８】
ステップ３−２ａにおいては、“３２”から今回参照するデータ数Ｎを引いた値を算出する。
【０１７９】
ステップ３−３ａにおいては、ステップ３−１ａでシフトしたデータを、さらにステップ３−２ａで算出した値分だけ右にシフトする。今回参照するデータＤ２の末尾がバッファレジスタ１０３の最下位ビット側に移動する。このとき、シフトは論理シフトとする。論理シフトは上位ビット側（左）のデータがない部分は“０”が拡張されるのが普通である（図４参照）。
【０１８０】
ステップ４においては、アドレスレジスタ１０２に今回参照したデータ数Ｎを特殊加算器１０４で加算して、アドレスレジスタ１０２の値を更新する。このとき、加算によって参照済みデータ数は（０ｘ３＋Ｎ）/２４の余りへ更新され、さらに参照済みデータ数を保持している下位ビット側から、アドレス値を保持している上位ビット側への（０ｘ３＋Ｎ）/２４の商の値の加算によって、アドレス値の更新も自動的に実現されることになる。
【０１８１】
例えばＮ＝０ｘ８の場合、参照済みデータ数は０ｘ３＋０ｘ８＝０ｘａで２４以下であるので、桁上がりはなく、アドレス値は０ｘ１０１のままである。Ｍ＝０ｘ１３、Ｎ＝０ｘ８とした時、参照済みデータ数は０ｘ１３＋０ｘ８＝０ｘ１ｂ（２７）で２７/２４の商は０ｘ１、余りは０ｘ３であるので、アドレス値は０ｘ１０１＋０ｘ１で０ｘ１０２へ更新される。
【０１８２】
理解を助けるため、より具体的な例をあげて説明する。
【０１８３】
図２３（ａ）は、メモリ１０１の０ｘ１０１番からロードによってバッファレジスタ１０３に格納されたデータを示す。図２２のデータｄに対応するのが８ビットのデータｄ８，ｄ７，ｄ６，…，ｄ１である。また、図２２のデータｅに対応するのが８ビットのデータｅ８，ｅ７，ｅ６，…，ｅ１である。また、図２２のデータｆに対応するのが８ビットのデータｆ８，ｆ７，…，ｆ１である。また、図２２のデータｇに対応するのが８ビットのデータｇ８，ｇ７，…，ｇ１である。合計３２ビットある。
【０１８４】
前回の処理でデータｄ８，ｄ７，ｄ６の３ビットが参照済みであるとする。したがって、参照済みデータ数Ｍ＝３である。今回参照するデータ数Ｎ＝８とする。それは、ｄ５，ｄ４，…，ｄ１，ｅ８，ｅ７，ｅ６のデータＤ２に相当する。これを太い枠で強調する。
【０１８５】
図２３（ｂ）は、３２ビットのデータｄ８，…，ｄ１，ｅ８，…，ｅ１，ｆ８，…，ｆ１，ｇ８，…，ｇ１を参照済みデータ数Ｍ＝３ビット分だけ左シフトし、最上位からデータ列ｄ５，…，ｄ１，ｅ８，…，ｅ１，ｆ８，…，ｆ１，ｇ８，…，ｇ１を格納し、下位３ビットを“０”にセットした状態である。太枠の先頭が３２ビット目に一致している。
【０１８６】
図２３（ｃ）は、３２ビットのデータ列ｄ５，…，ｄ１，ｅ８，…，ｅ１，ｆ８，…，ｆ１，ｇ８，…，ｇ１，０，０，０を２４ビット分だけ右シフトし、最上位から２４ビット分に“０”をセットした状態を示す。右シフト量の２４ビットは、“３２”から今回参照するデータ数Ｎ＝８を引いたものである。太枠の末尾が１ビット目に一致している。すなわち、バッファレジスタ１０３の最下位から２３ビット分にデータＤ２のｄ５，ｄ４，…，ｄ１，ｅ８，ｅ７，ｅ６が格納された状態となり、これで今回参照するデータＤ２が抜き出されたことになる。
【０１８７】
参照済みデータ数Ｍに今回参照するデータ数Ｎを加算すると、Ｍ＋Ｎ＝３＋８＝１１であり、アドレスレジスタ１０２において参照済みデータ数Ｍを“３”から“１１”に更新する。“１１”は２４以下であるので、アドレス値の加算は行われず、元のアドレス値０ｘ１０１番を維持する。
【０１８８】
次は、前回まで処理でデータｄ８，…，ｄ１，ｅ８，…，ｅ１，ｆ８，ｆ７，ｆ６の１９ビットが参照済みであるとする。したがって、参照済みデータ数Ｍ＝１９である。今回参照するデータ数Ｎ＝８とする。それは、ｆ５，ｆ４，…，ｆ１，ｇ８，ｇ７，ｇ６のデータＤ２に相当する。これを太い枠で強調する。
【０１８９】
図２４（ｂ）は、３２ビットのデータｄ８，…，ｄ１，ｅ８，…，ｅ１，ｆ８，…，ｆ１，ｇ８，…，ｇ１を参照済みデータ数Ｍ＝１９ビット分だけ左シフトし、最上位からデータ列ｆ５，…，ｆ１，ｇ８，…，ｇ１を格納し、下位１９ビットを“０”にセットした状態である。太枠の先頭が３２ビット目に一致している。
【０１９０】
図２４（Ｃ）は、３２ビットのデータ列ｆ５，…，ｆ１，ｇ８，…，ｇ１，０， …，０を２４ビット分だけ右シフトし、最上位から２４ビット分に“０”をセットした状態を示す。右シフト量の２４ビットは、“３２”から今回参照するデータ数Ｎ＝８を引いたものである。太枠の末尾が１ビット目に一致している。すなわち、バッファレジスタ１０３の最下位から２３ビット分にデータＤ２のｆ５，ｆ４，…，ｆ１，ｇ８，ｇ７，ｇ６が格納された状態となり、これで今回参照するデータＤ２が抜き出されたことになる。
【０１９１】
参照済みデータ数Ｍに今回参照するデータ数Ｎを加算すると、Ｍ＋Ｎ＝１９＋８＝２７である。２７/２４の商は１であり、余りは３である。よって、アドレスレジスタ１０２において参照済みデータ数Ｍに“３”をセットする。また、アドレス値には１を加算しアドレス値０ｘ１０２番に更新する。データｄ，ｅ，ｆの全２４ビット分のデータの参照が完了し、データｇの参照に入っているので、１つ先のアドレスに進むのである。参照済みデータ数Ｍの“３”はデータｇの上位３つのビットｇ８，ｇ７、ｇ６が参照済みであることに対応している。
【０１９２】
図２２に示すように、アドレス０ｘ１０２の上位８ビット分には、１つ前のアドレス０ｘ１０１番の下位側８ビット分のデータｇ（ｇ８，ｇ７，…，ｇ１）と同じものがすでに格納されており、そのまま引き続き使用可能となっている。アドレス更新のための特別の監視、演算が不要となっている。
【０１９３】
実施の形態６に示した例では、下位８ビットのデータを、その次のアドレスの上位８ビットにも配置しているので、少なくとも８ビット＋１ビットの９ビットのデータを一度に抜き出すことが出来る。また、データを詰めた場合に比べて１．２５倍のメモリ容量を必要とする。
【０１９４】
なお、図２０のアドレスレジスタ１０２やバッファレジスタ１０３は特殊な動作をするレジスタではなく、プロセッサの通常使用する汎用的なレジスタを用いて実現できるものであり、特に専用のレジスタを実装する必要はない。ただし、従来技術でのアクセスアドレスや参照済みデータ数等と同様、アドレスレジスタ１０２の値はメモリ１０１の空き領域等への退避復帰が必要である。
【０１９５】
（実施の形態７）
図２５に上記実施の形態の可変長復号化装置を用いた再生システムの概略を示す。
【０１９６】
図２５に示すように、ＤＶＤ等のシステムストリームを蓄積したデータ蓄積装置５０１やインターネットや放送などのストリーム配信手段から送られてきたシステムストリームは多重分離手段５０２でビデオの可変長符号化されたストリームとオーディオの可変長符号化されたストリームとに分離される。
【０１９７】
ビデオの可変長符号化されたストリームは、可変長復号化装置５０３で可変長復号化され、ビデオ信号処理手段５０４に出力される。ビデオ信号処理手段５０４では、可変長復号化されたデータをもとにビデオ信号を再生し、ビデオ表示手段５０５に出力する。
【０１９８】
オーディオの可変長符号化されたストリームは、可変長復号化装置５０６で可変長復号化され、オーディオ信号処理手段５０７に出力される。オーディオ信号処理手段５０７では、可変長復号化されたデータをもとにオーディオ信号を再生し、オーディオ出力手段５０８に出力する。
【０１９９】
可変長復号化装置５０３、５０６に本発明の可変長復号化装置を使うことにより、処理性能の低いプロセッサでも再生システムを実現することができ、安価にシステムを構築することが出来る。
【０２００】
本発明にかかる可変長復号化装置及び可変長復号化方法は、可変長符号を用いる画像コーデックやオーディオコーデックを搭載し実行するプロセッサの処理高速化の技術であり、ＡＶマルチメディア機器やモバイル端末分野等に幅広く有用である。
【図面の簡単な説明】
【０２０１】
【図１】本発明の実施の形態１における可変長復号化装置の構成例の説明図
【図２】本発明の実施の形態１における可変長復号化方法の処理フロー図
【図３】本発明の実施の形態１におけるデータ抜き出しの処理フロー図
【図４】本発明の実施の形態１におけるデータ抜き出しのデータ状態を示す図
【図５】本発明の実施の形態１における具体的動作例説明図
【図６】本発明の実施の形態１における具体的動作例説明図
【図７】本発明の実施の形態１における具体的動作例説明図
【図８】本発明の実施の形態１における具体的動作例説明図
【図９】本発明の実施の形態２におけるデータ抜き出しの処理フロー図
【図１０】本発明の実施の形態２におけるデータ抜き出しのデータ状態を示す図
【図１１】本発明の実施の形態２におけるシフタとバッファレジスタの周辺を示す回路構成例の説明図
【図１２】本発明の実施の形態２における具体的動作例説明図
【図１３】本発明の実施の形態３における可変長復号化装置の構成例の説明図
【図１４】本発明の実施の形態３におけるデータ抜き出しの処理フロー図
【図１５】本発明の実施の形態３におけるデータ抜き出しのデータ状態を示す図
【図１６】本発明の実施の形態３における具体的動作例説明図
【図１７】本発明の実施の形態４における可変長復号化装置の構成例の説明図
【図１８】本発明の実施の形態４における具体的動作例１の説明図
【図１９】本発明の実施の形態４における具体的動作例２の説明図
【図２０】本発明の実施の形態５における可変長復号化装置の構成例の説明図
【図２１】本発明の実施の形態５における具体的動作例説明図
【図２２】本発明の実施の形態６における可変長復号化装置の構成例の説明図
【図２３】本発明の実施の形態６における具体的動作例１の説明図
【図２４】本発明の実施の形態６における具体的動作例２の説明図
【図２５】本発明の実施の形態７における再生システムの概略図
【符号の説明】
【０２０２】
１０１：メモリ
１０２：アドレスレジスタ
１０３：バッファレジスタ
【図１】
2005244928.tif 000004
【図２】
2005244928.tif 000005
【図３】
2005244928.tif 000006
【図４】
2005244928.tif 000007
【図５】
2005244928.tif 000008
【図６】
2005244928.tif 000009
【図７】
2005244928.tif 000010
【図８】
2005244928.tif 000011
【図９】
2005244928.tif 000012
【図１０】
2005244928.tif 000013
【図１１】
2005244928.tif 000014
【図１２】
2005244928.tif 000015
【図１３】
2005244928.tif 000016
【図１４】
2005244928.tif 000017
【図１５】
2005244928.tif 000018
【図１６】
2005244928.tif 000019
【図１７】
2005244928.tif 000020
【図１８】
2005244928.tif 000021
【図１９】
2005244928.tif 000022
【図２０】
2005244928.tif 000023
【図２１】
2005244928.tif 000024
【図２２】
2005244928.tif 000025
【図２３】
2005244928.tif 000026
【図２４】
2005244928.tif 000027
【図２５】
2005244928.tif 000028