JP4479370B2 - プロセッサ - Google Patents

プロセッサ Download PDF

Info

Publication number
JP4479370B2
JP4479370B2 JP2004188070A JP2004188070A JP4479370B2 JP 4479370 B2 JP4479370 B2 JP 4479370B2 JP 2004188070 A JP2004188070 A JP 2004188070A JP 2004188070 A JP2004188070 A JP 2004188070A JP 4479370 B2 JP4479370 B2 JP 4479370B2
Authority
JP
Japan
Prior art keywords
bit string
data
memory
bits
stored
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2004188070A
Other languages
English (en)
Other versions
JP2006011822A (ja
Inventor
孝寛 久村
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2004188070A priority Critical patent/JP4479370B2/ja
Publication of JP2006011822A publication Critical patent/JP2006011822A/ja
Application granted granted Critical
Publication of JP4479370B2 publication Critical patent/JP4479370B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Memory System (AREA)
  • Executing Machine-Instructions (AREA)

Description

本発明は、メモリ上のビット列を効率良くレジスタへ読み込んだり、レジスタ内のビット列をメモリへ効率良く書き込むことができるプロセッサに関する。
映像や音楽でのデータ圧縮では、頻繁に出現する情報を短い符号語で表す可変長符号が使用される。可変長符号が使用する符号語は1個以上の任意の数のビットで表される。圧縮された映像や音楽のデータは可変長符号がいくつも連結されたビットストリームとなる。一般的なプロセッサでは、8ビット単位や16ビット単位で情報を管理するため、可変長符号を効率良く扱うことができない。
たとえば、可変長符号化された符号語を一つメモリから取り出すために、一般的なプロセッサではシフト命令や論理演算命令を使用する。この場合、複数の命令を組み合わせて使用する必要があるので、一つの符号語をメモリから取り出す処理は数ステップから十数ステップのプログラムになる。
別の例として、可変長符号化された符号語を一つメモリへ書き込むために、一般的なプロセッサて゜はシフト命令や論理演算命令を使用する。この場合も、一つの符号語をメモリへ書き込む処理は数ステップから十数ステップのプログラムになる。
また、一般的なプロセッサはキャッシュをもつ。キャッシュは高速に動作する小容量のメモリであり、そこに頻繁に利用する命令やデータが一時的に保存される。一般的にプロセッサよりもメモリは低速なので、プロセッサがメモリを直接アクセスすることはプロセッサの性能低下につながる。そこで、キャッシュを利用してプロセッサがメモリを直接アクセスすることを避けるようにしている。
ところで、圧縮された映像や音楽のデータはキャッシュに不向きである。つまり、圧縮された映像や音楽を再生する場合、圧縮されたデータに含まれる各符号語は一度しか参照されないためである。したがって、圧縮されたデータをキャッシュに格納することは無駄である。しかも、圧縮されたデータをキャッシュに格納することにより、頻繁に利用されるデータがキャッシュから追い出されてしまうこともある。そこで、圧縮されたデータをキャッシュに格納しないで、メモリから直接読み込む方法が以前から使用されているが、プロセッサがメモリからデータを直接読むと、メモリの遅延サイクルを隠蔽することができない。
そこで、特許文献1では、メモリからプロセッサのレジスタへビット列を読み込む処理や、プロセッサのレジスタからメモリへビット列を書き込む処理を効率良く実行する演算器を提案している。
特許文献2〜4では、メモリからプロセッサのレジスタへビット列を読み込む処理を効率良く実行するプロセッサを提案している。
特許文献5では、ビット列を効率良く扱うためのメモリインターフェース装置を提案している。
特許文献6では、プロセッサのレジスタからメモリへビット列を書き込む処理を効率良く実行するプロセッサを提案している。
特開2003−337692号公報 特開2002−57587号公報 特開2002−57587号公報 特開平6−326615号公報 特開2001−117814号公報 特開平7−222164号公報
ところが、上述した特許文献1での演算器では、ビット列を効率良く扱うことができるが、メモリからビット列を読み込んだり、メモリへビット列を書き込んだりする必要がある。そのため、それぞれ複数ステップの命令を必要とするばかりか、メモリの遅延サイクルやキャッシュに関する不具合を解消することができない。
また、上述した特許文献2〜4では、プロセッサのレジスタからメモリへビット列を書き込む処理についての説明がないため、ビット列をメモリへ書き込む際の不具合を解消することができない。
また、上述した特許文献5では、インターフェース装置を使う場合、プロセッサがインターフェース装置へ動作命令と入力データとを与え、かつプロセッサがその結果を引きとらなければならない。つまり、インターフェース装置は、プロセッサの外部に接続されるため、動作命令を与えて結果を引きとる処理には数ステップかかることから、インターフェース装置によってビット列を扱う処理が劇的に高速化されるわけではない。
解決しようとする問題点は、圧縮されたデータをキャッシュに格納しないで、メモリから直接読み込む方法を用いようとしても、メモリ上のビット列を効率良くレジスタへ読み込んだり、レジスタ内のビット列をメモリへ効率良く書き込むことができないという点である。
本発明のプロセッサは、メモリからレジスタに読み込まれる1個以上のビットから構成されるビット列を読み込みデータとし、前記レジスタから前記メモリに書き込まれる1個以上のビットから構成されるビット列を書き込みデータとし、メモリアクセスによって前記メモリから取得される1個以上のビットから構成されるビット列を取得データとし、メモリアクセスによって前記メモリに格納される1個以上のビットから構成されるビット列を格納データとしたとき、前記読み込みデータを前記メモリから前記レジスタへ読み込むための読み込み処理、及び、前記書き込みデータを前記レジスタから前記メモリに書き込むための書き込み処理の少なくとも1つの処理を実行する制御手段と、前記制御手段によって読み込まれる前記読み込みデータの前記メモリ上の基準位置又は前記制御手段によって書き込まれる前記書き込みデータの前記メモリ上の基準位置を記憶するための位置記憶手段と、前記取得データ又は前記格納データをビット列データとして記憶するビット列記憶手段と、前記ビット列記憶手段に記憶されている前記ビット列データのビット数を記憶するビット数記憶手段と、を備え、前記制御手段は、前記読み込み処理のときに、前記取得データを介して、読み込み対象となる前記読み込みデータを、前記メモリから前記ビット列記憶手段に格納する読み込みデータ取得処理を実行し、前記ビット列記憶手段に格納されている前記ビット列データを介して、前記読み込みデータを前記レジスタに格納するレジスタ格納処理を実行し、前記書き込み処理のときに、前記ビット列記憶手段の記憶容量、前記ビット列データのビット数、及び、書き込み対象となる前記書き込みデータのビット数に基づいて、すでに前記ビット列データとして前記ビット列記憶手段に格納されている1個又は複数個の前記書き込みデータを、前記メモリに格納するタイミングであるか否かを判定する処理を実行し、すでに前記ビット列データとして前記ビット列記憶手段に格納されている1個又は複数個の前記書き込みデータを、前記メモリに格納するタイミングであるときに、前記ビット列データを前記メモリに格納するメモリ格納処理を実行し、前記書き込みデータを、前記レジスタから前記ビット列記憶手段に格納する書き込みデータ取得処理を実行することを特徴とする。
また、前記読み込みデータ取得処理は、前記ビット列データのビット数と前記読み込みデータのビット数とに基づいて、前記ビット列データのビット列に前記読み込みデータの全てのビット列が存在するか否かを判定する処理を実行し、前記ビット列記憶手段に格納されている前記ビット列データに前記読み込みデータの一部もしくは全てが存在しないときに、前記メモリ上の基準位置と前記ビット列データのビット数とに基づいて算出された前記メモリ上の位置から、前記メモリより所定のビット数のビット列を取得し、取得したビット列とすでに前記ビット列記憶手段に格納されている前記ビット列データとから生成した新たなビット列データを前記ビット列記憶手段に格納する処理を実行するようにすることができる。
また、前記レジスタ格納処理は、前記ビット列記憶手段に格納されている前記ビット列データから前記読み込みデータを取得し、取得した前記読み込みデータを前記レジスタに格納し、次回の読み込み処理を実行するために、前記メモリ上の基準位置、前記ビット列データ、及び、前記ビット列データのビット数を更新する読み込み用後処理を実行するようにすることができる。
また、前記読み込み用後処理は、前記ビット列データにおいて、前記レジスタに格納した前記読み込みデータを無効にしたデータを、次回の読み込み処理における新たなビット列データとし、前記メモリ上の基準位置に、前記レジスタに格納した前記読み込みデータのビット数を加算した位置を、次回の読み込み処理における新たな前記メモリ上の基準位置とし、前記ビット列データのビット数から、前記レジスタに格納した前記読み込みデータのビット数を減算したビット数を、次回の読み込み処理における前記新たなビット列データのビット数とするようにすることができる。
また、前記メモリ格納処理は、前記ビット列データから所定のビット数のビット列を取得し、取得したビット列を、前記メモリ上の基準位置から前記メモリに格納し、次回の書き込み処理を実行するために、前記メモリ上の基準位置、前記ビット列データ、及び、前記ビット列データのビット数を更新する書き込み用後処理を実行するようにすることができる。
また、前記書き込み用後処理は、前記ビット列データにおいて、前記メモリに格納した前記所定のビット数のビット列を無効にしたデータを、次回の書き込み処理における新たなビット列データとし、前記メモリ上の基準位置に、前記メモリに格納されたビット列のビット数を加算した位置を、次回の書き込み処理における新たな前記メモリ上の基準位置とし、前記ビット列データのビット数から、前記メモリに格納されたビット列のビット数を減算したビット数を、次回の書き込み処理における前記新たなビット列データのビット数とするようにすることができる。
また、前記書き込みデータ取得処理は、前記書き込みデータを前記レジスタから取得し、前記ビット列データのビット数に基づいた前記ビット列記憶手段の位置から、取得した前記書き込みデータを前記ビット列記憶手段に格納した新たなビット列データを生成し、取得した前記書き込みデータのビット数に基づいて、新たに生成した前記ビット列データのビット数を、前記ビット数記憶手段に格納するようにすることができる。
また、前記制御手段によって実行される処理が、前記読み込み処理であるか、前記書き込み処理であるかを決定するデータを記憶する動作情報記憶手段を、備えているようにすることができる。
また、前記メモリを管理する所定のビット数の単位をメモリ管理単位とし、データを構成するビット列を前記メモリ管理単位に分割して、順序付けた番号をメモリ管理単位順番としたとき、前記制御手段は、前記読み込み処理のときに、前記メモリに格納されている前記読み込みデータを、前記メモリ管理単位順番に基づいて昇順又は降順に変換して、前記レジスタに格納し、前記書き込み処理のときに、前記レジスタに格納されている前記書き込みデータを、前記メモリ管理単位順番に基づいて昇順又は降順に変換して、前記メモリに格納するようにすることができる。
また、前記読み込み処理のときに、前記レジスタに格納する前記読み込みデータを、前記メモリ管理単位順番に基づいて昇順又は降順に変換するかを決定するデータを記憶し、前記書き込み処理のときに、前記メモリに格納する前記書き込みデータを、前記メモリ管理単位順番に基づいて昇順又は降順に変換するかを決定するデータを記憶する変換順記憶手段を、備えているようにすることができる。
また、前記位置記憶手段、前記ビット列記憶手段及び前記ビット数記憶手段は、レジスタであるようにすることができる。
本発明の制御プログラムは、メモリからレジスタに読み込まれる1個以上のビットから構成されるビット列を読み込みデータとし、前記レジスタから前記メモリに書き込まれる1個以上のビットから構成されるビット列を書き込みデータとし、メモリアクセスによって前記メモリから取得される1個以上のビットから構成されるビット列を取得データとし、メモリアクセスによって前記メモリに格納される1個以上のビットから構成されるビット列を格納データとしたとき、前記読み込みデータを前記メモリから前記レジスタへ読み込むための読み込み処理、及び、前記書き込みデータを前記レジスタから前記メモリに書き込むための書き込み処理の少なくとも1つの処理を実行する制御手段と、前記制御手段によって読み込まれる前記読み込みデータの前記メモリ上の基準位置又は前記制御手段によって書き込まれる前記書き込みデータの前記メモリ上の基準位置を記憶するための位置記憶手段と、前記取得データ又は前記格納データをビット列データとして記憶するビット列記憶手段と、前記ビット列記憶手段に記憶されている前記ビット列データのビット数を記憶するビット数記憶手段と、を備え、制御手段として実現される処理をコンピュータに実行させるためのプログラムであって、前記制御手段は、前記読み込み処理のときに、前記取得データを介して、読み込み対象となる前記読み込みデータを、前記メモリから前記ビット列記憶手段に格納する読み込みデータ取得処理を実行し、前記ビット列記憶手段に格納されている前記ビット列データを介して、前記読み込みデータを前記レジスタに格納するレジスタ格納処理を実行し、前記書き込み処理のときに、前記ビット列記憶手段の記憶容量、前記ビット列データのビット数、及び、書き込み対象となる前記書き込みデータのビット数に基づいて、すでに前記ビット列データとして前記ビット列記憶手段に格納されている1個又は複数個の前記書き込みデータを、前記メモリに格納するタイミングであるか否かを判定する処理を実行し、すでに前記ビット列データとして前記ビット列記憶手段に格納されている1個又は複数個の前記書き込みデータを、前記メモリに格納するタイミングであるときに、前記ビット列データを前記メモリに格納するメモリ格納処理を実行し、前記書き込みデータを、前記レジスタから前記ビット列記憶手段に格納する書き込みデータ取得処理を実行することを特徴とする。
本発明のプロセッサの制御方法は、メモリからレジスタに読み込まれる1個以上のビットから構成されるビット列を読み込みデータとし、前記レジスタから前記メモリに書き込まれる1個以上のビットから構成されるビット列を書き込みデータとし、メモリアクセスによって前記メモリから取得される1個以上のビットから構成されるビット列を取得データとし、メモリアクセスによって前記メモリに格納される1個以上のビットから構成されるビット列を格納データとしたとき、前記読み込みデータの前記メモリ上の基準位置又は前記制御手段によって書き込まれる前記書き込みデータの前記メモリ上の基準位置を記憶するための位置記憶手段と、前記取得データ又は前記格納データをビット列データとして記憶するビット列記憶手段と、前記ビット列記憶手段に記憶されている前記ビット列データのビット数を記憶するビット数記憶手段と、を有したプロセッサの制御方法であって、読み込み処理工程は、前記取得データを介して、読み込み対象となる前記読み込みデータを、前記メモリから前記ビット列記憶手段に格納する読み込みデータ取得処理工程と、前記ビット列記憶手段に格納されている前記ビット列データを介して、前記読み込みデータを前記レジスタに格納するレジスタ格納処理工程とを備え、書き込み処理工程は、前記ビット列記憶手段の記憶容量、前記ビット列データのビット数、及び、書き込み対象となる前記書き込みデータのビット数に基づいて、すでに前記ビット列データとして前記ビット列記憶手段に格納されている1個又は複数個の前記書き込みデータを、前記メモリに格納するタイミングであるか否かを判定する処理工程と、すでに前記ビット列データとして前記ビット列記憶手段に格納されている1個又は複数個の前記書き込みデータを、前記メモリに格納するタイミングであるときに、前記ビット列データを前記メモリに格納するメモリ格納処理工程と、前記書き込みデータを、前記レジスタから前記ビット列記憶手段に格納する書き込みデータ取得処理工程とを備えていることを特徴とする。
また、前記読み込みデータ取得処理工程は、前記ビット列データのビット数と前記読み込みデータのビット数とに基づいて、前記ビット列データのビット列に前記読み込みデータの全てのビット列が存在するか否かを判定する処理工程と、前記格納されている前記ビット列データに前記読み込みデータの一部もしくは全てが存在しないときに、前記メモリ上の基準位置と前記ビット列データのビット数とに基づいて算出された前記メモリ上の位置から、前記メモリより所定のビット数のビット列を取得し、取得したビット列とすでに前記ビット列記憶手段に格納されている前記ビット列データとから生成した新たなビット列データを前記ビット列記憶手段に格納する処理工程とを備えているようにすることができる。
また、前記レジスタ格納処理工程は、前記ビット列記憶手段に格納されている前記ビット列データから前記読み込みデータを取得する工程と、取得した前記読み込みデータを前記レジスタに格納する工程と、次回の読み込み処理を実行するために、前記メモリ上の基準位置、前記ビット列データ、及び、前記ビット列データのビット数を更新する読み込み用後処理工程とを備えているようにすることができる。
また、前記読み込み用後処理工程は、前記ビット列データにおいて、前記レジスタに格納した前記読み込みデータを無効にしたデータを、次回の読み込み処理における新たなビット列データとする工程と、前記メモリ上の基準位置に、前記レジスタに格納した前記読み込みデータのビット数を加算した位置を、次回の読み込み処理における新たな前記メモリ上の基準位置とする工程と、前記ビット列データのビット数から、前記レジスタに格納した前記読み込みデータのビット数を減算したビット数を、次回の読み込み処理における前記新たなビット列データのビット数とする工程とを備えているようにすることができる。
また、前記メモリ格納処理工程は、前記ビット列データから所定のビット数のビット列を取得する工程と、取得したビット列を、前記メモリ上の基準位置から前記メモリに格納する工程と、次回の書き込み処理を実行するために、前記メモリ上の基準位置、前記ビット列データ、及び、前記ビット列データのビット数を更新する書き込み用後処理工程とを備えているようにすることができる。
また、前記書き込み用後処理工程は、前記ビット列データにおいて、前記メモリに格納した前記所定のビット数のビット列を無効にしたデータを、次回の書き込み処理における新たなビット列データとする工程と、前記メモリ上の基準位置に、前記メモリに格納されたビット列のビット数を加算した位置を、次回の書き込み処理における新たな前記メモリ上の基準位置とする工程と、前記ビット列データのビット数から、前記メモリに格納されたビット列のビット数を減算したビット数を、次回の書き込み処理における前記新たなビット列データのビット数とする工程とを備えているようにすることができる。
また、前記書き込みデータ取得処理工程は、前記書き込みデータを前記レジスタから取得する工程と、前記ビット列データのビット数に基づいた前記ビット列記憶手段の位置から、取得した前記書き込みデータを前記ビット列記憶手段に格納した新たなビット列データを生成する工程と、取得した前記書き込みデータのビット数に基づいて、新たに生成した前記ビット列データのビット数を、前記ビット数記憶手段に格納する工程とを備えているようにすることができる。
また、前記メモリを管理する所定のビット数の単位をメモリ管理単位とし、データを構成するビット列を前記メモリ管理単位に分割して、順序付けた番号をメモリ管理単位順番としたとき、前記読み込み処理工程は、前記メモリに格納されている前記読み込みデータを、前記メモリ管理単位順番に基づいて昇順又は降順に変換して、前記レジスタに格納するようにすることができる。
また、前記メモリを管理する所定のビット数の単位をメモリ管理単位とし、データを構成するビット列を前記メモリ管理単位に分割して、順序付けた番号をメモリ管理単位順番としたとき、前記書き込み処理工程は、前記レジスタに格納されている前記書き込みデータを、前記メモリ管理単位順番に基づいて昇順又は降順に変換して、前記メモリに格納するようにすることができる。
本発明では、制御手段が、読み込み処理のときに、位置記憶手段に記憶されたメモリ上の基準位置、及び、ビット数記憶手段に記憶されたビット列データのビット数に基づいて、ビット列記憶手段に記憶されたビット列データを介し、メモリ上に格納されている読み込みデータをレジスタへ格納し、書き込み処理のときに、位置記憶手段に記憶されたメモリ上の基準位置、及び、ビット数記憶手段に記憶されたビット列データのビット数に基づいて、ビット列記憶手段に記憶されたビット列データを介し、レジスタに格納されている書き込みデータをメモリに格納することができる。
本発明によれば、制御手段による読み込み処理と書き込み処理により、メモリ上のビット列を効率良くレジスタへ読み込んだり、レジスタ内のビット列をメモリへ効率良く書き込むことができる。また、メモリからプロセッサのレジスタへビット列を読み込む処理、及び、プロセッサのレジスタからメモリへビット列を書き込む処理を、それぞれ一つの命令で実行することできる。また、ビット列記憶手段を使用することによってメモリへ実際にアクセスする回数を減らすことができる。
本実施形態において使用する用語を次のように定義する。ビットとは0又は1を表す情報の単位である。また、0又は1を表す情報そのものをビットとよぶ。ビット列とは0個以上のビットの集合である。ビットストリームとはビット列の集合である。
本実施形態でのプロセッサは、ビットストリーム・ポインタ、ビットストリーム・バッファ、ビットストリーム・カウンタ、ビットストリーム・ディレクション、ビットストリーム・バイトオーダ、制御手段を備えている。なお、ビットストリーム・ディレクションやビットストリーム・バイトオーダを省いても本発明を実現することは可能である。
ビットストリーム・ポインタは、ビットストリームの先頭アドレスを格納する手段である。格納されるアドレスの単位はビットである。ビットストリーム・バッファは、ビット列を一時的に格納する手段である。ビットストリーム・カウンタはビットストリーム・バッファに格納されたビットの数を格納する手段である。
ビットストリーム・ディレクションは、制御手段の動作を決定する情報を格納する手段である。ビットストリーム・バイトオーダは、メモリ上のビットストリームのバイト順序を表す情報を格納する手段である。制御手段は、ビットストリーム・ポインタ、ビットストリーム・バッファ、ビットストリーム・カウンタを制御する手段である。
ビットストリーム・ディレクションに格納された情報と、指定されたビット列の長さと、指定されたレジスタとに基づいて、制御手段は次の二つの処理のいずれかを実行する。
1. ビットストリーム・ポインタで示されるアドレスから始まる指定された長さのビット列を、指定されたプロセッサのレジスタへ格納する。
2. 指定された長さのビット列を指定されたレジスタから取り出し、ビットストリーム・ポインタで示されるアドレスへ格納する。
以下、本発明の詳細を図面に基づいて説明する。
図1に示すプロセッサは、ビットストリーム・ポインタ10、ビットストリーム・バッファ20、ビットストリーム・カウンタ30、ビットストリーム・ディレクション40、ビットストリーム・バイトオーダ50、制御手段60を備えている。
位置記憶手段としてのビットストリーム・ポインタ10は、ビットストリームの先頭アドレスを格納する手段である。格納されるアドレスの単位はビットである。ビット列記憶手段としてのビットストリーム・バッファ20は、ビット列を一時的に格納する手段である。
ビット数記憶手段としてのビットストリーム・カウンタ30は、ビットストリーム・バッファ20に格納されたビットの数を格納する手段である。ビットストリーム・ディレクション40は、制御手段60の動作を決定する情報を格納する手段である。
ビットストリーム・バイトオーダ50は、後述のメモリ70上のビットストリームのバイト順序を表す情報を格納する手段である。制御手段60は、ビットストリーム・ポインタ10、ビットストリーム・バッファ20、ビットストリーム・カウンタ30を制御する手段である。
なお、図1に示すプロセッサでは、ビットストリーム・ポインタ10、ビットストリーム・バッファ20、ビットストリーム・カウンタ30、ビットストリーム・ディレクション40、ビットストリーム・バイトオーダ50、制御手段60を備えた場合について説明したが、ビットストリーム・ディレクション40やビットストリーム・バイトオーダ50を省いても本発明を実現することは可能である。
次に、制御手段60によって実行される後述のメモリ70から後述のレジスタRへのビット列の読み込み処理、及びレジスタRからメモリ70へのビット列の書き込み処理の概要について説明する。
まず、制御手段60によって読み込み処理又は書き込み処理が実行される前に、初期化処理が行われる。ここで、制御手段60による初期化処理を要約すると次のようになる。なお、初期化処理はオペレーターが記述した初期化プログラムによって実行される。
1. 初期化プログラムはビットストリーム・ディレクション40に「制御手段60が後述のメモリ70からビット列を読み込むことを表す信号」か「制御手段60がビット列をメモリ70へ書き込むことを表す信号」のどちらかを格納する。
2. 初期化プログラムはビットストリーム・バイトオーダ50に「制御手段60がビット列のバイト順序を逆順にすることを表す信号」か「制御手段60がビット列のバイト順序を変えないことを表す信号」のどちらかを格納する。
3. 初期化プログラムはビットストリーム・ポインタ10にビットストリームの先頭アドレスを格納する。
4. 初期化プログラムは制御手段60にビットストリーム・カウンタ30をクリアさせる。
5. もしビットストリーム・ディレクション40に「制御手段60がメモリ70からビット列を読み込むことを表す信号」が格納されるならば、制御手段60は「メモリ70からビットストリーム・バッファ20への読み込み処理」を行う。
次に、後述のメモリ70からビットストリーム・バッファ20への読み込み処理について説明する。処理の流れを、図2、図3、図4、図5に示す。
まず、制御手段60は、上述した初期化に従って初期化した後、図2に示すように、後述のメモリ70からビット列を読み込む処理(ステップS20)と、メモリ70から読み出したビット列のバイト順を変換する処理(ステップS21)と、バイト順変換処理後のビット列をビットストリーム・バッファ20へ格納する処理(ステップS22)とを行う。
具体的には、図3に示すように、ビットストリーム・ポインタ10とビットストリーム・カウンタ30との和で表されるビットアドレスからビット列を読み込み、その読み込んだビット列のバイト順を適切に変換し、そのビット列をビットストリーム・バッファ20へ格納する(ステップS30〜33)。
ここで、読み込んだビット列のバイト順を適切に変換する場合と、そのビット列をビットストリーム・バッファ20へ格納する場合の具体例は、次の通りである。
まず、そのビット列をビットストリーム・バッファ20へ格納する場合を、図5により説明する。
ビット列を格納する位置は、ビットストリーム・カウンタ30によって表される。ビットストリーム・カウンタ30に格納された値をビットストリーム・バッファ20内の位置を表すインデックスとして使用する。ビットストリーム・バッファ20のMSB(most significant bit)のインデックスは0で、LSB(least significant bit)に向かってインデックスが増加する。
ビット列はビットストリーム・カウンタ30で指定された位置からLSBへ向かって格納される。もしビットストリーム・カウンタ30=0ならビットストリーム・バッファ20のMSBから、もしビットストリーム・カウンタ30=1ならビットストリーム・バッファ20のMSBの1ビット隣のビットから、それぞれビット列を格納する。
次に、読み込んだビット列のバイト順を適切に変換する場合を、図4より説明する。
まず、制御手段60はメモリ70から読み出したビット列を8ビット単位に分割する。分割された8ビット単位のデータを制御手段60がビットストリーム・バッファ20へ書き込む順番は、
(1)元のビット列のMSB側にある8ビットから順に書き込む、
(2)元のビット列のLSB側にある8ビットから順に書き込む、
のいずれかである。
もしビットストリーム・バイトオーダ50に「制御手段60がビット列のバイト順序を逆順にすることを表す信号」が格納されているなら、制御手段60は「(1)元のビット列のMSB側にある8ビットから順に書き込む」を選択する。
この場合、制御手段60はビット列内の8ビット単位の順序を逆にする。つまり、MSB側にある8ビットとそれに対応するLSB側の8ビットの位置を入れ換える。ただし、8ビットの中にあるビットの位置は変化しない。
もしビットストリーム・バイトオーダ50に「制御手段60がビット列のバイト順序を変えないことを表す信号」が格納されているなら、制御手段60は「(2)元のビット列のLSB側にある8ビットから順に書き込む」を選択する。この場合、制御手段60はビット列内の8ビット単位の順序を入れ換えない。
次に、メモリ70上のビット列をプロセッサのレジスタRへ読み込む処理について説明する。ここで、読み込むビット列の長さをBとする。読み込んだビット列はレジスタRへ格納されることにする。
まず、上述した初期化に従って、初期化する。ビットストリーム・ディレクション40に「制御手段60がメモリ70からビット列を読み込むことを表す信号」を格納する。ビットストリーム・ポインタ10にメモリ70にあるビットストリームの先頭アドレスを格納する。メモリ70からレジスタRへBビットを読み込む処理は以下のように実行される。
処理の流れを、図6に示す。
まず、もしビットストリーム・カウンタ30よりもビット数Bが大きいならば(ステップS60)、制御手段60は「メモリ70からビットストリーム・バッファ20への読み込み処理」を行う(ステップS61)。
そして、制御手段60はビットストリーム・バッファ20のMSBからBビットのビット列を取り出し(ステップS62)、指定されたレジスタRをBビットだけMSB方向へシフトし(ステップS63)、取り出したビット列をレジスタRのLSB側のBビットへ代入する(ステップS64)。
次いで、ビットストリーム・バッファ20をBビットだけLSBからMSBに向かってシフトし(ステップS65)、ビットストリーム・ポインタ10へBを加算し(ステップS66)、ビットストリーム・カウンタ30からBを減算する(ステップS67)。
次に、プロセッサのレジスタRにあるビット列をメモリ70へ書き込む処理について説明する。ここで、読み込むビット列の長さをBとする。読み込んだビット列はレジスタRへ格納されることにする。
まず、上述した初期処理化に従い、初期化する。ビットストリーム・ディレクション40に「制御手段60がビット列をメモリ70へ書き込むことを表す信号」を格納する。ビットストリーム・ポインタ10にビット列を格納する先頭アドレスを格納する。レジスタRからメモリ70へBビットを書き込む処理は以下のように実行される。
処理の流れを、図7に示す。
まず、もしビットストリーム・バッファ20のサイズからビットストリーム・カウンタ30に格納された値を引いた結果がビット列の長さBよりも小さいならば(ステップS70)、「ビットストリーム・バッファ20からメモリ70への書き出し処理」を行い(ステップS71)、制御手段60はレジスタRのLSBから始まる長さBのビット列を読み込む(ステップS72)。
次いで、制御手段60はレジスタRから読み込んだビット列をビットストリーム・バッファ20へ格納する(ステップS73)。ビット列を格納する位置は、図8に示すように、ビットストリーム・カウンタ30によって表される。ビットストリーム・カウンタ30に格納された値をビットストリーム・バッファ20内の位置を表すインデックスとして使用する。ビットストリーム・バッファ20のMSBのインデックスは0で、LSBに向かってインデックスが増加する。ビット列はビットストリーム・カウンタ30で指定された位置からLSBへ向かって格納される。そして、制御手段60はレジスタRから読み込んだビット列の長さBをビットストリーム・カウンタ30へ加算する(ステップS74)。
次に、ビットストリーム・バッファ20からメモリ70への書き出し処理について、図9、図10、図11、図12、図13により説明する。
まず、制御手段60は、図9に示すように、ビットストリームバッファ・バッファ20のMSB側にあるビット列を取り出す(ステップS90)。ここで、ビットストリームバッファ・バッファ20のMSB側にあるビット列を取り出す場合の例は、図10に示す通りである。ここで、ビット列を取り出す場合、ビット列の長さは、8の倍数である32や64等が好ましい。
そして、取り出したビット列のバイト順を適切に変換してから(ステップS91)、そのビット列をビットストリーム・ポインタ10が示すアドレスへ書き込む(ステップS92)。ここで、取り出したビット列のバイト順を適切に変換する場合の例は図11に示す通りであり、そのビット列をビットストリーム・ポインタ10が示すアドレスへ書き込む場合の例は図12に示す通りである。
さらに、書き込まれたビット列の長さをビットストリーム・ポインタ10へ加算し、書き込まれたビット列の長さをビットストリーム・カウンタ30から減算することによる更新の処理を行い(ステップS93)、書き込まれたビット列の長さだけビットストリーム・バッファ20をLSBからMSB方向へシフトする(ステップS94)。ここで、書き込まれたビット列の長さだけビットストリーム・バッファ20をLSBからMSB方向へシフトする場合の例は図13に示す通りである。つまり、読み込んだビット列の長さ(たとえば32や64)だけ、ビットストリーム・バッファ20をMSB方向へシフトする。
次に、図11に示した「ビットストリーム・バッファ20から取り出したビット列のバイト順を変換する処理」について説明する。制御手段60は、ビットストリーム・バッファ20から取り出したビット列を8ビット単位に分割する。
分割された8ビット単位のデータを制御手段60がメモリ70へ書き込む順番は、
(1) 元のビット列のMSB側にある8ビットから順に書き込む、
(2) 元のビット列のLSB側にある8ビットから順に書き込む、
のいずれかである。
もしビットストリーム・バイトオーダ50に「制御手段60がビット列のバイト順序を逆順にすることを表す信号」が格納されているなら、制御手段60は「(1)元のビット列のMSB側にある8ビットから順に書き込む」を選択する。
この場合、制御手段60はビット列内の8ビット単位の順序を逆にする。つまり、MSB側にある8ビットとそれに対応するLSB側の8ビットの位置を入れ換える。ただし、8ビットの中にあるビットの位置は変化しない。
もしビットストリーム・バイトオーダ50に「制御手段60がビット列のバイト順序を変えないことを表す信号」が格納されているなら、制御手段60は「(2)元のビット列のLSB側にある8ビットから順に書き込む」を選択する。この場合、制御手段60はビット列内の8ビット単位の順序を入れ換えない。
(実施例)
次に、実施例について説明する。
本実施例における構成要素を以下に示す。
ビットストリーム・ポインタ10は35ビットのレジスタRである。ビット単位のアドレスがこのレジスタRに格納される。
ビットストリーム・バッファ20は64ビットのレジスタRである。メモリ70から読み込んだビット列、あるいはメモリ70へ書き込むビット列がこのレジスタRへ格納される。ビットストリーム・カウンタ30は6ビットのレジスタRである。ビットストリーム・ディレクション40は1ビットのレジスタRである。
「制御手段60がメモリ70からビット列を読み込むことを表す信号」は0であり、「制御手段60がビット列をメモリ70へ書き込むことを表す信号」は1である。ビットストリーム・バイトオーダ50は1ビットのレジスタRである。
「制御手段60がビット列のバイト順序を逆順にすることを表す信号」は0であり、「制御手段60がビット列のバイト順序を変えないことを表す信号」は1である。制御手段60は回路である。
本実施例では、ビットストリーム・バッファ20のサイズを64ビットとしたが、もっと大きなサイズにすることもできる。ビットストリーム・バッファ20のサイズを大きくすれば、メモリ70から一度に読み込むデータのサイズを大きくできるし、メモリ70へ一度に書き込むデータのサイズも大きくできる。したがって、メモリアクセスの回数を減らすことができる。メモリアクセスの回数を減らすことによって、メモリアクセスの際の処理遅延を減らすことができる。
次に、メモリ70上のビット列をプロセッサへ読み込む処理について説明する。
読み込むビット列の長さをB1=5とする。読み込むビット列の長さをB2=28とする。読み込んだビット列はレジスタRへ格納されることにする。
メモリ70上のビット列をプロセッサのレジスタRへ読み込む処理を行う場合、次のように初期化する。
1. ビットストリーム・ディレクション40に「制御手段60がメモリ70からビット列を読み込むことを表す信号」=0を格納する。
2. ビットストリーム・バイトオーダ50に「制御手段60がビット列のバイト順序を逆順にすることを表す信号」=0を格納する。
3. ビットストリーム・ポインタ10にビットストリームの先頭アドレス=0x80000を格納する。
4. 制御手段60はビットストリーム・カウンタ30をクリアする。
5. ビットストリーム・ディレクション40に「制御手段60がメモリ70からビット列を読み込むことを表す信号」=0が格納されるので、制御手段60は「メモリ70からビットストリーム・バッファ20への読み込み処理」を行う。
メモリ70からビットストリーム・バッファ20への読み込み処理の詳細を以下に示す。
a. 制御手段60はビットストリーム・ポインタ10とビットストリーム・カウンタ30との和で表されるアドレスからビット列を読み込む。この時点で、ビットストリーム・ポインタ10=0x80000、ビットストリーム・カウンタ30=0である。したがって、0x80000+0=0x80000となって、アドレス0x80000からビット列を読み込む。
アドレス0x80000はビット単位のアドレスなので、これをバイト単位のアドレスへ変換する。変換したアドレスは0x10000である。本実施例では、「メモリ70からビットストリーム・バッファ20への読み込み処理」において読み込むビット列の長さを32ビットとする。つまり、制御手段60はアドレス0x10000からアドレス0x10003までの32ビットを読み込む。
b. 次に、読み込んだビット列のバイト順を適切に変換する。バイト順の変換方法は「メモリ70から読み出したビット列のバイト順を変換する処理」に従う。本実施例では、ビットストリーム・バイトオーダ50に「制御手段60がビット列のバイト順序を逆順にすることを表す信号」=0が格納されているので、制御手段60は読み込んだビット列のバイト順を逆にする。
c. 次に、バイト順を適切に変換したビット列をビットストリーム・バッファ20へ格納する。この時点では、ビットストリーム・カウンタ30=0なので、ビットストリーム・バッファ20のMSBからLSB方向へ向かってビット列のMSBから順に格納される。
本実施例では、ビットストリーム・バッファ20のサイズが64ビットで、ビットストリーム・バッファ20へ一度に読み込むビット列の長さが32ビットなので、ビットストリーム・バッファ20のビット63にビット列のビット31が、ビットストリーム・バッファ20のビット62にビット列のビット30が、ビットストリーム・バッファ20のビット61にビット列のビット30が、...、ビットストリーム・バッファ20のビット33にビット列のビット1が、ビットストリーム・バッファ20のビット32にビット列のビット0が、というようにそれぞれ格納される。
d. 次に、読み込んだビット列の長さをビットストリーム・カウンタ30へ加算する。本実施例では、読み込んだビット列の長さは32ビットなので、32をビットストリーム・カウンタ30へ加算する。加算後、ビットストリーム・カウンタ30は32になる。
メモリ70からレジスタRへB1=5ビットを読み込む処理は次のように実行される。
1. もしビットストリーム・カウンタ30よりもビット数B1が大きいならば、制御手段60は「メモリ70からビットストリーム・バッファ20への読み込み処理」を行う。この時点では、ビットストリーム・カウンタ30=32で、ビット数B1=5なので、制御手段60は「メモリ70からビットストリーム・バッファ20への読み込み処理」を行わない。
2. 制御手段60はビットストリーム・バッファ20のMSBからB1=5ビットのビット列を取り出す。指定されたレジスタRをB1=5ビットだけMSB方向へシフトしてから、取り出したビット列を指定されたレジスタRのLSB側のB1=5ビットへ代入する。つまり、取り出したビット列のビット4をレジスタRのビット4へ、取り出したビット列のビット3をレジスタRのビット3へ、取り出したビット列のビット2をレジスタRのビット2へ、取り出したビット列のビット1をレジスタRのビット1へ、取り出したビット列のビット0をレジスタRのビット0へ、それぞれ格納する。
3. ビットストリーム・バッファ20をB1=5ビットだけLSBからMSBに向かってシフトする。
4. ビットストリーム・ポインタ10へB1=5を加算する。ビットストリーム・ポインタ10=0x80005となる。
5. ビットストリーム・カウンタ30からB1=5を減算する。ビットストリーム・カウンタ30=27となる。
続いて、B2=28ビットのビット列をメモリ70からレジスタRへ読み込む処理は次のようにして実行される。
1. もしビットストリーム・カウンタ30よりもビット数B2が大きいならば、制御手段60は「メモリ70からビットストリーム・バッファ20への読み込み処理」を行う。この時点では、ビットストリーム・カウンタ30=27で、ビット数B2=28なので、制御手段60は「メモリ70からビットストリーム・バッファ20への読み込み処理」を行う。
「メモリ70からビットストリーム・バッファ20への読み込み処理」の詳細を次に示す。
a. 制御手段60はビットストリーム・ポインタ10とビットストリーム・カウンタ30との和で表されるアドレスからビット列を読み込む。この時点で、ビットストリーム・ポインタ10=0x80005、ビットストリーム・カウンタ30=27である。
したがって、0x80005+27=0x80020となって、アドレス0x80020からビット列を読み込む。アドレス0x80020はビット単位のアドレスなので、これをバイト単位のアドレスへ変換する。変換したアドレスは0x10004である。本実施例では、「メモリ70からビットストリーム・バッファ20への読み込み処理」において読み込むビット列の長さを32ビットとする。つまり、制御手段60はアドレス0x10004からアドレス0x10007までの32ビットを読み込む。
b. 次に、読み込んだビット列のバイト順を適切に変換する。バイト順の変換方法は「メモリ70から読み出したビット列のバイト順を変換する処理」に従う。本実施例では、ビットストリーム・バイトオーダ50に「制御手段60がビット列のバイト順序を逆順にすることを表す信号」=0が格納されているので、制御手段60は読み込んだビット列のバイト順を逆にする。
c. 次に、バイト順を適切に変換したビット列をビットストリーム・バッファ20へ格納する。この時点ではビットストリーム・カウンタ30=27なので、ビットストリーム・バッファ20のMSBから数えて27番目のビットからLSB方向へ向かって、ビット列のMSBから順に格納される。ただし、ビットストリーム・バッファ20のMSBを0番目とする。本実施例では、ビットストリーム・バッファ20のサイズが64ビットで、ビットストリーム・バッファ20へ一度に読み込むビット列の長さが32ビットなので、ビットストリーム・バッファ20のビット36にビット列のビット31が、ビットストリーム・バッファ20のビット35にビット列のビット30が、ビットストリーム・バッファ20のビット34にビット列のビット29が、...、ビットストリーム・バッファ20のビット6にビット列のビット1が、ビットストリーム・バッファ20のビット5にビット列のビット0が、というようににそれぞれ格納される。
d. 次に、読み込んだビット列の長さをビットストリーム・カウンタ30へ加算する。 本実施例では、読み込んだビット列の長さは32ビットなので、32をビットストリーム・カウンタ30へ加算する。加算後、ビットストリーム・カウンタ30は59になる。
2. 制御手段60はビットストリーム・バッファ20のMSBからB2=28ビットのビット列を取り出す。指定されたレジスタRをB2=28ビットだけMSB方向へシフトしてから、取り出したビット列を指定されたレジスタRのLSB側のB2=28ビットへ代入する。つまり、取り出したビット列のビット27をレジスタRのビット27へ、取り出したビット列のビット26をレジスタRのビット26へ、取り出したビット列のビット25をレジスタRのビット25へ、...、取り出したビット列のビット1をレジスタRのビット1へ、取り出したビット列のビット0をレジスタRのビット0へ、それぞれ格納する。
3. ビットストリーム・バッファ20をB2=28ビットだけLSBからMSBに向かってシフトする。
4. ビットストリーム・ポインタ10へB2=28を加算する。ビットストリーム・ポインタ10=0x80021となる。
5. ビットストリーム・カウンタ30からB2=28を減算する。ビットストリーム・カウンタ30=31となる。
次に、プロセッサのレジスタRにあるビット列をメモリ70へ書き込む処理について説明する。ビット列はレジスタR1、R2、R3のLSB側に格納されていることにする。
レジスタR1に格納されているビット列の長さをB1=17ビット、レジスタR2に格納されているビット列の長さをB2=19ビットとする。レジスタR3に格納されているビット列の長さをB3=29ビットとする。
プロセッサのレジスタRにあるビット列をメモリ70へ書き込む処理を行う場合、次のように初期化する。
1. ビットストリーム・ディレクション40に「制御手段60がビット列をメモリ70へ書き込むことを表す信号」=1を格納する。
2. ビットストリーム・バイトオーダ50に「制御手段60がビット列のバイト順序を逆順にすることを表す信号」=0を格納する。
3. ビットストリーム・ポインタ10にビットストリームの書き込み先頭アドレス=0x90000を格納する。
4. 制御手段60はビットストリーム・カウンタ30をクリアする。
5. ビットストリーム・ディレクション40に「制御手段60がメモリ70からビット列を読み込むことを表す信号」=0が格納されないので、制御手段60は「メモリ70からビットストリーム・バッファ20への読み込み処理」を行わない。
次に、レジスタR1からメモリ70へB1=17ビットを書き込む処理は次のようにして実行される。
1. もしビットストリーム・バッファ20のサイズからビットストリーム・カウンタ30に格納された値を引いた結果がビット列の長さB1よりも小さいならば、「ビットストリーム・バッファ20からメモリ70への書き出し処理」を行う。この時点では、ビットストリーム・バッファ20のサイズ=64ビット、ビットストリーム・カウンタ30=0、ビット数B1=17なので、条件は満たされない。したがって「ビットストリーム・バッファ20からメモリ70への書き出し処理」を行わない。
2. 制御手段60はレジスタR1に格納された長さB1=17のビット列をビットストリーム・バッファ20へ格納する。ビット列を格納する位置はビットストリーム・カウンタ30によって表され、ビットストリーム・カウンタ30で指定された位置からLSBへ向かってビット列は格納される。つまり、ビットストリーム・バッファ20のビット63にビット列のビット16が、ビットストリーム・バッファ20のビット62にビット列のビット15が、ビットストリーム・バッファ20のビット61にビット列のビット14が、...、ビットストリーム・バッファ20のビット48にビット列のビット1が、ビットストリーム・バッファ20のビット47にビット列のビット0が、それぞれ格納される。
3. 次に、ビット列の長さB1=17をビットストリーム・カウンタ30へ加算する。加算後、ビットストリーム・カウンタ30は17になる。
B1=17ビットをメモリ70へ書き込む処理に続いて、レジスタR2からメモリ70へB2=19ビットを書き込む処理は以下のように実行される。
1. もしビットストリーム・バッファ20のサイズからビットストリーム・カウンタ30に格納された値を引いた結果がビット列の長さB2よりも小さいならば、「ビットストリーム・バッファ20からメモリ70への書き出し処理」を行う。
この時点では、ビットストリーム・バッファ20のサイズ=64ビット、ビットストリーム・カウンタ30=17、ビット数B2=19なので、条件は満たされない。したがって「ビットストリーム・バッファ20からメモリ70への書き出し処理」を行わない。
2. 制御手段60はレジスタR2に格納された長さB2=19のビット列をビットストリーム・バッファ20へ格納する。ビット列を格納する位置はビットストリーム・カウンタ30によって表され、ビットストリーム・カウンタ30で指定された位置からLSBへ向かってビット列は格納される。つまり、ビットストリーム・バッファ20のビット56にビット列のビット18が、ビットストリーム・バッファ20のビット55にビット列のビット17が、ビットストリーム・バッファ20のビット54にビット列のビット16が、...、ビットストリーム・バッファ20のビット39にビット列のビット1が、ビットストリーム・バッファ20のビット38にビット列のビット0が、それぞれ格納される。
3. 次に、ビット列の長さB2=19をビットストリーム・カウンタ30へ加算する。加算後、ビットストリーム・カウンタ30は36になる。
B2=19ビットをメモリ70へ書き込む処理に続いて、レジスタR3からメモリ70へB3=29ビットを書き込む処理は次のようにして実行される。
1. もしビットストリーム・バッファ20のサイズからビットストリーム・カウンタ30に格納された値を引いた結果がビット列の長さB3よりも小さいならば、「ビットストリーム・バッファ20からメモリ70への書き出し処理」を行う。この時点では、ビットストリーム・バッファ20のサイズ=64ビット、ビットストリーム・カウンタ30=36、ビット数B3=29なので、条件は満たされる。したがって「ビットストリーム・バッファ20からメモリ70への書き出し処理」を行う。
ビットストリーム・バッファ20からメモリ70への書き出し処理の詳細を次に示す。
a. 制御手段60はビットストリーム・バッファ20のMSB側にあるビット列を取り出す。本実施例では、ビットストリーム・バッファ20から取り出すビット列の長さを32ビットとする。
b. 次に、取り出したビット列のバイト順を適切に変換する。バイト順の変換方法は「ビットストリーム・バッファ20から取り出したビット列のバイト順を変換する処理」に従う。本実施例では、ビットストリーム・バイトオーダ50に「制御手段60がビット列のバイト順序を逆順にすることを表す信号」=0が格納されているので、制御手段60は取り出したビット列のバイト順を逆にする。
c. 次に、バイト順を適切に変換したビット列をビットストリーム・ポインタ10が示すアドレスへ書き込む。この時点で、ビットストリーム・ポインタ10は0x90000である。0x90000はビット単位のアドレスなので、これをバイト単位のアドレスへ変換する。変換したアドレスは0x12000である。つまり、制御手段60はアドレス0x12000からアドレス0x12003までの32ビットへバイト順を変換したビット列を書き込む。
d. 次に、制御手段60は書き込まれたビット列の長さをビットストリーム・ポインタ10へ加算する、この時点で、メモリ70へ書き込んだビット列の長さは32ビットなので、ビットストリーム・ポインタ10へ32を加算する。
e. 次に、メモリ70へ書き込んだビット列の長さをビットストリーム・カウンタ30から減算する、この時点で、メモリ70へ書き込んだビット列の長さは32ビットなので、ビットストリーム・カウンタ30から32を減算する。減算後、ビットストリーム・カウンタ30は4になる。
f. 次に、書き込まれたビット列の長さだけビットストリーム・バッファ20をLSBからMSB方向へシフトする。この時点で、メモリ70へ書き込んだビット列の長さは32ビットなので、ビットストリーム・バッファ20をLSBからMSB方向へ32ビットシフトする。
2. 制御手段60はレジスタR2に格納された長さB3=29のビット列をビットストリーム・バッファ20へ格納する。ビット列を格納する位置はビットストリーム・カウンタ30によって表され、ビットストリーム・カウンタ30で指定された位置からLSBへ向かってビット列は格納される。つまり、ビットストリーム・バッファ20のビット59にビット列のビット28が、ビットストリーム・バッファ20のビット58にビット列のビット27が、ビットストリーム・バッファ20のビット57にビット列のビット26が、...、ビットストリーム・バッファ20のビット32にビット列のビット1が、ビットストリーム・バッファ20のビット31にビット列のビット0が、それぞれ格納される。
3. 次に、ビット列の長さB3=29をビットストリーム・カウンタ30へ加算する。加算後、ビットストリーム・カウンタ30は33になる。
このように、本実施形態では、制御手段60が、読み込み処理のときに、ビットストリーム・ポインタ10に記憶されたメモリ70上の基準位置、及び、ビットストリーム・カウンタ30に記憶されたビット列データのビット数に基づいて、ビットストリーム・バッファ20に記憶されたビット列データを介し、メモリ70上に格納されている読み込みデータをレジスタRへ格納し、書き込み処理のときに、ビットストリーム・ポインタ10に記憶されたメモリ70上の基準位置、及び、ビットストリーム・カウンタ30に記憶されたビット列データのビット数に基づいて、ビットストリーム・バッファ20に記憶されたビット列データを介し、レジスタRに格納されている書き込みデータをメモリ70に格納することができる。
これにより、メモリ70上のビット列を効率良くレジスタRへ読み込んだり、レジスタR内のビット列をメモリ70へ効率良く書き込むことができる。また、メモリ70からプロセッサのレジスタRへビット列を読み込む処理、及び、プロセッサのレジスタRからメモリ70へビット列を書き込む処理を、それぞれ一つの命令で実行することできる。
映像や音楽のデータの符号化装置や復号化装置に適用できる。また、映像や音楽に関わらず、可変長符号を使ってデータを圧縮・解凍するシステムにも適用できる。
本発明のプロセッサの構成を示す図である。 図1のプロセッサにおけるメモリからビットストリーム・バッファへの読み込み処理を説明するための図である。 図2におけるメモリからビット列を読み込む処理を示す図である。 図2におけるメモリから読み出したビット列のバイト順を変換する処理を示す図である。 図2におけるバイト順変換処理後のビット列をビットストリーム・バッファへ格納する処理を示す図である。 図1のプロセッサにおけるメモリ上のビット列をプロセッサのレジスタへ読み込む処理を示す図である。 図1のプロセッサにおいてプロセッサのレジスタにあるビット列をメモリへ書き込む処理を示す図である。 図7におけるレジスタのLSBから始まる下位Bビットを読み込む処理を示す図である。 図7におけるビットストリーム・バッファからメモリへの書き出し処理を示す図である。 図9におけるビットストリーム・バッファからビット列を読み込む処理を示す図である。 図9におけるビットストリーム・バッファから読み出したビット列のバイト順を変換する処理を示す図である。 図9におけるバイト順変換処理後のビット列をメモリへ格納する処理を示す図である。 図9における読み込んだビット列の長さだけビットストリーム・バッファをMSB方向へシフトする処理を示す図である。
符号の説明
10 ビットストリーム・ポインタ
20 ビットストリーム・バッファ
30 ビットストリーム・カウンタ
40 ビットストリーム・ディレクション
50 ビットストリーム・バイトオーダ
60 制御手段
70 メモリ
R レジスタ

Claims (21)

  1. メモリからレジスタに読み込まれる1個以上のビットから構成されるビット列を読み込みデータとし、
    前記レジスタから前記メモリに書き込まれる1個以上のビットから構成されるビット列を書き込みデータとし、
    メモリアクセスによって前記メモリから取得される1個以上のビットから構成されるビット列を取得データとし、
    メモリアクセスによって前記メモリに格納される1個以上のビットから構成されるビット列を格納データとしたとき、
    前記読み込みデータを前記メモリから前記レジスタへ読み込むための読み込み処理、及び、前記書き込みデータを前記レジスタから前記メモリに書き込むための書き込み処理の少なくとも1つの処理を実行する制御手段と、
    前記制御手段によって読み込まれる前記読み込みデータの前記メモリ上の基準位置又は前記制御手段によって書き込まれる前記書き込みデータの前記メモリ上の基準位置を記憶するための位置記憶手段と、
    前記取得データ又は前記格納データをビット列データとして記憶するビット列記憶手段と、
    前記ビット列記憶手段に記憶されている前記ビット列データのビット数を記憶するビット数記憶手段と、を備え、
    前記制御手段は、
    前記読み込み処理のときに、
    前記取得データを介して、読み込み対象となる前記読み込みデータを、前記メモリから前記ビット列記憶手段に格納する読み込みデータ取得処理を実行し、
    前記ビット列記憶手段に格納されている前記ビット列データを介して、前記読み込みデータを前記レジスタに格納するレジスタ格納処理を実行し、
    前記書き込み処理のときに、
    前記ビット列記憶手段の記憶容量、前記ビット列データのビット数、及び、書き込み対象となる前記書き込みデータのビット数に基づいて、すでに前記ビット列データとして前記ビット列記憶手段に格納されている1個又は複数個の前記書き込みデータを、前記メモリに格納するタイミングであるか否かを判定する処理を実行し、
    すでに前記ビット列データとして前記ビット列記憶手段に格納されている1個又は複数個の前記書き込みデータを、前記メモリに格納するタイミングであるときに、前記ビット列データを前記メモリに格納するメモリ格納処理を実行し、
    前記書き込みデータを、前記レジスタから前記ビット列記憶手段に格納する書き込みデータ取得処理を実行する
    ことを特徴とするプロセッサ。
  2. 前記読み込みデータ取得処理は、
    前記ビット列データのビット数と前記読み込みデータのビット数とに基づいて、前記ビット列データのビット列に前記読み込みデータの全てのビット列が存在するか否かを判定する処理を実行し、
    前記ビット列記憶手段に格納されている前記ビット列データに前記読み込みデータの一部もしくは全てが存在しないときに、前記メモリ上の基準位置と前記ビット列データのビット数とに基づいて算出された前記メモリ上の位置から、前記メモリより所定のビット数のビット列を取得し、取得したビット列とすでに前記ビット列記憶手段に格納されている前記ビット列データとから生成した新たなビット列データを前記ビット列記憶手段に格納する処理を実行する
    ことを特徴とする請求項1に記載のプロセッサ。
  3. 前記レジスタ格納処理は、
    前記ビット列記憶手段に格納されている前記ビット列データから前記読み込みデータを取得し、
    取得した前記読み込みデータを前記レジスタに格納し、
    次回の読み込み処理を実行するために、前記メモリ上の基準位置、前記ビット列データ、及び、前記ビット列データのビット数を更新する読み込み用後処理を実行する
    ことを特徴とする請求項1に記載のプロセッサ。
  4. 前記読み込み用後処理は、
    前記ビット列データにおいて、前記レジスタに格納した前記読み込みデータを無効にしたデータを、次回の読み込み処理における新たなビット列データとし、
    前記メモリ上の基準位置に、前記レジスタに格納した前記読み込みデータのビット数を加算した位置を、次回の読み込み処理における新たな前記メモリ上の基準位置とし、
    前記ビット列データのビット数から、前記レジスタに格納した前記読み込みデータのビット数を減算したビット数を、次回の読み込み処理における前記新たなビット列データのビット数とする
    ことを特徴とする請求項3に記載のプロセッサ。
  5. 前記メモリ格納処理は、
    前記ビット列データから所定のビット数のビット列を取得し、
    取得したビット列を、前記メモリ上の基準位置から前記メモリに格納し、
    次回の書き込み処理を実行するために、前記メモリ上の基準位置、前記ビット列データ、及び、前記ビット列データのビット数を更新する書き込み用後処理を実行する
    ことを特徴とする請求項1に記載のプロセッサ。
  6. 前記書き込み用後処理は、
    前記ビット列データにおいて、前記メモリに格納した前記所定のビット数のビット列を無効にしたデータを、次回の書き込み処理における新たなビット列データとし、
    前記メモリ上の基準位置に、前記メモリに格納されたビット列のビット数を加算した位置を、次回の書き込み処理における新たな前記メモリ上の基準位置とし、
    前記ビット列データのビット数から、前記メモリに格納されたビット列のビット数を減算したビット数を、次回の書き込み処理における前記新たなビット列データのビット数とする
    ことを特徴とする請求項5に記載のプロセッサ。
  7. 前記書き込みデータ取得処理は、
    前記書き込みデータを前記レジスタから取得し、
    前記ビット列データのビット数に基づいた前記ビット列記憶手段の位置から、取得した前記書き込みデータを前記ビット列記憶手段に格納した新たなビット列データを生成し、
    取得した前記書き込みデータのビット数に基づいて、新たに生成した前記ビット列データのビット数を、前記ビット数記憶手段に格納する
    ことを特徴とする請求項1に記載のプロセッサ。
  8. 前記制御手段によって実行される処理が、前記読み込み処理であるか、前記書き込み処理であるかを決定するデータを記憶する動作情報記憶手段を、備えている
    ことを特徴とする請求項1からのいずれか1項に記載のプロセッサ。
  9. 前記メモリを管理する所定のビット数の単位をメモリ管理単位とし、
    データを構成するビット列を前記メモリ管理単位に分割して、順序付けた番号をメモリ管理単位順番としたとき、
    前記制御手段は、
    前記読み込み処理のときに、前記メモリに格納されている前記読み込みデータを、前記メモリ管理単位順番に基づいて昇順又は降順に変換して、前記レジスタに格納し、
    前記書き込み処理のときに、前記レジスタに格納されている前記書き込みデータを、前記メモリ管理単位順番に基づいて昇順又は降順に変換して、前記メモリに格納する
    ことができることを特徴とする請求項1からのいずれか1項に記載のプロセッサ。
  10. 前記読み込み処理のときに、前記レジスタに格納する前記読み込みデータを、前記メモリ管理単位順番に基づいて昇順又は降順に変換するかを決定するデータを記憶し、前記書き込み処理のときに、前記メモリに格納する前記書き込みデータを、前記メモリ管理単位順番に基づいて昇順又は降順に変換するかを決定するデータを記憶する変換順記憶手段を、備えている
    ことを特徴とする請求項9に記載のプロセッサ。
  11. 前記位置記憶手段、前記ビット列記憶手段及び前記ビット数記憶手段は、レジスタであることを特徴とする請求項1から10のいずれか1項に記載のプロセッサ。
  12. メモリからレジスタに読み込まれる1個以上のビットから構成されるビット列を読み込みデータとし、
    前記レジスタから前記メモリに書き込まれる1個以上のビットから構成されるビット列を書き込みデータとし、
    メモリアクセスによって前記メモリから取得される1個以上のビットから構成されるビット列を取得データとし、
    メモリアクセスによって前記メモリに格納される1個以上のビットから構成されるビット列を格納データとしたとき、
    前記読み込みデータを前記メモリから前記レジスタへ読み込むための読み込み処理、及び、前記書き込みデータを前記レジスタから前記メモリに書き込むための書き込み処理の少なくとも1つの処理を実行する制御手段と、
    前記制御手段によって読み込まれる前記読み込みデータの前記メモリ上の基準位置又は前記制御手段によって書き込まれる前記書き込みデータの前記メモリ上の基準位置を記憶するための位置記憶手段と、
    前記取得データ又は前記格納データをビット列データとして記憶するビット列記憶手段と、
    前記ビット列記憶手段に記憶されている前記ビット列データのビット数を記憶するビット数記憶手段と、を備え、
    制御手段として実現される処理をコンピュータに実行させるためのプログラムであって、
    前記制御手段は、
    前記読み込み処理のときに、
    前記取得データを介して、読み込み対象となる前記読み込みデータを、前記メモリから前記ビット列記憶手段に格納する読み込みデータ取得処理を実行し、
    前記ビット列記憶手段に格納されている前記ビット列データを介して、前記読み込みデータを前記レジスタに格納するレジスタ格納処理を実行し、
    前記書き込み処理のときに、
    前記ビット列記憶手段の記憶容量、前記ビット列データのビット数、及び、書き込み対象となる前記書き込みデータのビット数に基づいて、すでに前記ビット列データとして前記ビット列記憶手段に格納されている1個又は複数個の前記書き込みデータを、前記メモリに格納するタイミングであるか否かを判定する処理を実行し、
    すでに前記ビット列データとして前記ビット列記憶手段に格納されている1個又は複数個の前記書き込みデータを、前記メモリに格納するタイミングであるときに、前記ビット列データを前記メモリに格納するメモリ格納処理を実行し、
    前記書き込みデータを、前記レジスタから前記ビット列記憶手段に格納する書き込みデータ取得処理を実行する
    ことを特徴とする制御プログラム。
  13. メモリからレジスタに読み込まれる1個以上のビットから構成されるビット列を読み込みデータとし、
    前記レジスタから前記メモリに書き込まれる1個以上のビットから構成されるビット列を書き込みデータとし、
    メモリアクセスによって前記メモリから取得される1個以上のビットから構成されるビット列を取得データとし、
    メモリアクセスによって前記メモリに格納される1個以上のビットから構成されるビット列を格納データとしたとき、
    前記読み込みデータの前記メモリ上の基準位置又は前記制御手段によって書き込まれる前記書き込みデータの前記メモリ上の基準位置を記憶するための位置記憶手段と、
    前記取得データ又は前記格納データをビット列データとして記憶するビット列記憶手段と、
    前記ビット列記憶手段に記憶されている前記ビット列データのビット数を記憶するビット数記憶手段と、を有したプロセッサの制御方法であって、
    読み込み処理工程は、
    前記取得データを介して、読み込み対象となる前記読み込みデータを、前記メモリから前記ビット列記憶手段に格納する読み込みデータ取得処理工程と、
    前記ビット列記憶手段に格納されている前記ビット列データを介して、前記読み込みデータを前記レジスタに格納するレジスタ格納処理工程とを備え、
    書き込み処理工程は、
    前記ビット列記憶手段の記憶容量、前記ビット列データのビット数、及び、書き込み対象となる前記書き込みデータのビット数に基づいて、すでに前記ビット列データとして前記ビット列記憶手段に格納されている1個又は複数個の前記書き込みデータを、前記メモリに格納するタイミングであるか否かを判定する処理工程と、
    すでに前記ビット列データとして前記ビット列記憶手段に格納されている1個又は複数個の前記書き込みデータを、前記メモリに格納するタイミングであるときに、前記ビット列データを前記メモリに格納するメモリ格納処理工程と、
    前記書き込みデータを、前記レジスタから前記ビット列記憶手段に格納する書き込みデータ取得処理工程とを備えている
    ことを特徴とするプロセッサの制御方法。
  14. 前記読み込みデータ取得処理工程は、
    前記ビット列データのビット数と前記読み込みデータのビット数とに基づいて、前記ビット列データのビット列に前記読み込みデータの全てのビット列が存在するか否かを判定する処理工程と、
    前記格納されている前記ビット列データに前記読み込みデータの一部もしくは全てが存在しないときに、前記メモリ上の基準位置と前記ビット列データのビット数とに基づいて算出された前記メモリ上の位置から、前記メモリより所定のビット数のビット列を取得し、取得したビット列とすでに前記ビット列記憶手段に格納されている前記ビット列データとから生成した新たなビット列データを前記ビット列記憶手段に格納する処理工程とを備えている
    ことを特徴とする請求項13に記載のプロセッサの制御方法。
  15. 前記レジスタ格納処理工程は、
    前記ビット列記憶手段に格納されている前記ビット列データから前記読み込みデータを取得する工程と、
    取得した前記読み込みデータを前記レジスタに格納する工程と、
    次回の読み込み処理を実行するために、前記メモリ上の基準位置、前記ビット列データ、及び、前記ビット列データのビット数を更新する読み込み用後処理工程とを備えている
    ことを特徴とする請求項13に記載のプロセッサの制御方法。
  16. 前記読み込み用後処理工程は、
    前記ビット列データにおいて、前記レジスタに格納した前記読み込みデータを無効にしたデータを、次回の読み込み処理における新たなビット列データとする工程と、
    前記メモリ上の基準位置に、前記レジスタに格納した前記読み込みデータのビット数を加算した位置を、次回の読み込み処理における新たな前記メモリ上の基準位置とする工程と、
    前記ビット列データのビット数から、前記レジスタに格納した前記読み込みデータのビット数を減算したビット数を、次回の読み込み処理における前記新たなビット列データのビット数とする工程とを備えている
    ことを特徴とする請求項15に記載のプロセッサの制御方法。
  17. 前記メモリ格納処理工程は、
    前記ビット列データから所定のビット数のビット列を取得する工程と、
    取得したビット列を、前記メモリ上の基準位置から前記メモリに格納する工程と、
    次回の書き込み処理を実行するために、前記メモリ上の基準位置、前記ビット列データ、及び、前記ビット列データのビット数を更新する書き込み用後処理工程とを備えている
    ことを特徴とする請求項13に記載のプロセッサの制御方法。
  18. 前記書き込み用後処理工程は、
    前記ビット列データにおいて、前記メモリに格納した前記所定のビット数のビット列を無効にしたデータを、次回の書き込み処理における新たなビット列データとする工程と、
    前記メモリ上の基準位置に、前記メモリに格納されたビット列のビット数を加算した位置を、次回の書き込み処理における新たな前記メモリ上の基準位置とする工程と、
    前記ビット列データのビット数から、前記メモリに格納されたビット列のビット数を減算したビット数を、次回の書き込み処理における前記新たなビット列データのビット数とする工程とを備えている
    ことを特徴とする請求項17に記載のプロセッサの制御方法。
  19. 前記書き込みデータ取得処理工程は、
    前記書き込みデータを前記レジスタから取得する工程と、
    前記ビット列データのビット数に基づいた前記ビット列記憶手段の位置から、取得した前記書き込みデータを前記ビット列記憶手段に格納した新たなビット列データを生成する工程と、
    取得した前記書き込みデータのビット数に基づいて、新たに生成した前記ビット列データのビット数を、前記ビット数記憶手段に格納する工程とを備えている
    ことを特徴とする請求項13に記載のプロセッサの制御方法。
  20. 前記メモリを管理する所定のビット数の単位をメモリ管理単位とし、
    データを構成するビット列を前記メモリ管理単位に分割して、順序付けた番号をメモリ管理単位順番としたとき、
    前記読み込み処理工程は、前記メモリに格納されている前記読み込みデータを、前記メモリ管理単位順番に基づいて昇順又は降順に変換して、前記レジスタに格納する
    ことを特徴とする請求項13から16のいずれか1項に記載のプロセッサの制御方法。
  21. 前記メモリを管理する所定のビット数の単位をメモリ管理単位とし、
    データを構成するビット列を前記メモリ管理単位に分割して、順序付けた番号をメモリ管理単位順番としたとき、
    前記書き込み処理工程は、前記レジスタに格納されている前記書き込みデータを、前記メモリ管理単位順番に基づいて昇順又は降順に変換して、前記メモリに格納する
    ことを特徴とする請求項13又は請求項17から18のいずれか1項に記載のプロセッサの制御方法。
JP2004188070A 2004-06-25 2004-06-25 プロセッサ Expired - Fee Related JP4479370B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2004188070A JP4479370B2 (ja) 2004-06-25 2004-06-25 プロセッサ

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004188070A JP4479370B2 (ja) 2004-06-25 2004-06-25 プロセッサ

Publications (2)

Publication Number Publication Date
JP2006011822A JP2006011822A (ja) 2006-01-12
JP4479370B2 true JP4479370B2 (ja) 2010-06-09

Family

ID=35779022

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004188070A Expired - Fee Related JP4479370B2 (ja) 2004-06-25 2004-06-25 プロセッサ

Country Status (1)

Country Link
JP (1) JP4479370B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5003070B2 (ja) * 2006-09-09 2012-08-15 ヤマハ株式会社 デジタル信号処理装置
JP2015219544A (ja) * 2014-05-14 2015-12-07 ソニー株式会社 データ処理装置、データ処理方法、プログラム、および記憶装置

Also Published As

Publication number Publication date
JP2006011822A (ja) 2006-01-12

Similar Documents

Publication Publication Date Title
US5390307A (en) Apparatus for a multi-data store or load instruction for transferring multiple contiguous storage locations in one transfer operation
JP2017538213A (ja) アウトオブオーダーハードウェアソフトウェア協調設計プロセッサにおいてスタック同期命令を用いてプレディケート値のスタックを実装し維持する方法および装置
US11424761B2 (en) Multiple symbol decoder
KR20220049522A (ko) 다중 데이터 스트림을 포함하는 압축된 입력 데이터를 압축 해제하기 위한 압축 해제 엔진
JP2682264B2 (ja) プログラムカウンタ装置
JP2022521465A (ja) メモリ境界の収容のためのオーバーフロー管理方法、システム、プログラム
CN110806900B (zh) 一种访存指令处理方法及处理器
US20130262808A1 (en) Compression and decompression system, compression apparatus, decompression apparatus and compression and decompression method
JP4921310B2 (ja) 命令ビット長削減方法
JP4874162B2 (ja) データ展開装置及びデータ展開方法
JP4479370B2 (ja) プロセッサ
JP2012098893A (ja) 圧縮命令処理装置及び圧縮命令生成装置
US10707897B1 (en) Command processor with multiple string copy engines for a decompression system
JP2023503034A (ja) パターンベースのキャッシュブロック圧縮
JP2009217714A (ja) データ処理回路、キャッシュシステムおよびデータ転送装置
JP2013257670A (ja) プロセッサ、圧縮装置、圧縮方法、および圧縮プログラム
JP2001273141A (ja) コンピュータシステム、仮想マシン、オブジェクトの実行時表現方法、記憶媒体及びプログラム伝送装置
US11593311B2 (en) Compression system with longest match processing for generating compressed data
JP5895229B2 (ja) 配置決定装置、配置決定方法、データ構造、メモリ、アクセス装置及びメモリアクセス方法
JP5480793B2 (ja) プログラマブルコントローラ
US20050182902A1 (en) Signal processing apparatus
CN113454593A (zh) 保持多个机器生成上的复杂功能的兼容性
JP2005293118A (ja) ディスクキャッシュ制御回路、ディスク制御装置及びディスクキャッシュ制御方法
JP2012022640A (ja) ソフトウェア開発システム
JPWO2008066050A1 (ja) 符号化装置と方法及びプロセッサ

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060911

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20091117

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20091124

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100122

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20100223

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100308

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130326

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4479370

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130326

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140326

Year of fee payment: 4

LAPS Cancellation because of no payment of annual fees