以下、本発明の実施の形態について、図面を参照しながら説明する。なお、図中、同一または相当部分については同一の参照符号を付してその説明を援用する。また、本明細書及び図面において、「0b」は2進数を、「0x」は16進数を意味する。
図1は、本発明の実施の形態によるマルチメディアプロセッサ1の内部構成を示すブロック図である。図1に示すように、このマルチメディアプロセッサは、外部メモリインタフェース3、DMAC(direct memory access controller)4、中央演算処理装置(以下、「CPU」と呼ぶ。)5、CPUローカルRAM7、レンダリングプロセッシングユニット(以下、「RPU」と呼ぶ。)9、カラーパレットRAM11、サウンドプロセシングユニット(以下、「SPU」と呼ぶ。)13、SPUローカルRAM15、ジオメトリエンジン(以下、「GE」と呼ぶ。)17、Yソーティングユニット(以下、「YSU」と呼ぶ。)19、外部インタフェースブロック21、メインRAMアクセスアービタ23、メインRAM25、I/Oバス27、ビデオDAC(digital to analog converter)29、オーディオDACブロック31、及びA/Dコンバータ(以下、「ADC」と呼ぶ。)33を具備する。
ここで、CPU5、RPU9、SPU9、GE17、及びYSU19をそれぞれプロセッサコアと呼ぶこともある。また、メインRAM25及び外部メモリ50を区別して説明する必要がないときは、「メモリMEM」と表記する。
外部メモリインタフェース3は、外部バス51を介して、外部メモリ50からのデータの読み出し、及び外部メモリ50へのデータの書き込みを司る。この場合、外部メモリインタフェース3は、図示しないEBI優先順位テーブルに従って、CPU5及びDMAC4からの外部バスアクセス要求要因(外部バス51へのアクセスを要求する要因)を調停して、いずれか1つの外部バスアクセス要求要因を選択する。そして、選択した外部バスアクセス要求要因に対して外部バス51へのアクセスを許可する。EBI優先順位テーブルは、CPU5からの複数種類の外部バスアクセス要求要因及びDMAC4からの外部バスアクセス要求要因の優先順位を定めたテーブルである。
外部バスアクセス要求要因として、CPUに含まれる図示しないIPL(initial program loader)によるブロック転送要求、CPU5によるデータアクセス要求、CPU5による命令フェッチ要求、及びDMAC4によるDMA要求がある。
本発明の特徴の1つであるDMAC4は、メインRAM25と、外部バス51に接続された外部メモリ50と、の間でDMA転送を行う。DMAC4については、後で詳述する。
CPU5は、メモリMEMに格納されたプログラムを実行して、各種演算やシステム全体の制御を行う。また、CPU5は、DMAC4にプログラム及びデータの転送要求を行うこともできるし、DMAC4を介さずに、外部メモリ50から直接プログラムコードをフェッチしたり、外部メモリ50に直接データアクセスを行うこともできる。
I/Oバス27は、CPU5をバスマスタとするシステム制御用のバスであり、バススレイブである各機能ユニット(外部メモリインタフェース3、DMAC4、RPU9、SPU13、GE17、YSU19、及び外部インタフェースブロック21)の制御レジスタ及びローカルRAM7,11,15へのアクセスに用いられる。このようにして、これらの機能ユニットは、I/Oバス27を通じて、CPU5により制御される。
CPUローカルRAM7は、CPU5専用のRAMであり、サブルーチンコールや割り込み時におけるデータの退避などを行うためのスタック領域、及びCPU5のみが扱う変数の格納領域等として使用される。
RPU9は、ポリゴン及びスプライトから構成される三次元イメージをリアルタイムに生成する。具体的には、RPU9は、YSU19によるソート済みの、ポリゴン構造体配列の各構造体インスタンス及びスプライト構造体配列の各構造体インスタンスを、メインRAM25から読み出し、所定の処理を実行して、スクリーン(表示画面)のスキャンに合わせて水平ラインごとにイメージを生成する。生成されたイメージは、コンポジットビデオ信号波形を示すデータストリームに変換され、ビデオDAC29に出力される。また、RPU9は、DMAC4に対して、ポリゴン及びスプライトのテクスチャパターンデータの取り込みのためのDMA転送要求を行う機能を有する。
テクスチャパターンデータとは、ポリゴンまたはスプライトに貼り付けられる2次元の画素配列データであり、各画素データは、カラーパレットRAM11のエントリを指定するための情報の一部である。以降、テクスチャパターンデータの画素を「テクセル」と呼称し、スクリーンに表示されるイメージを構成する画素を指す「ピクセル」とは区別して使用する。
ポリゴン構造体配列は、多角形状のグラフィック要素であるポリゴンのための構造体配列であり、スプライト構造体配列は、スクリーンに平行な矩形のグラフィック要素であるスプライトのための構造体配列である。ポリゴン構造体配列の要素を、「ポリゴン構造体インスタンス」と呼び、スプライト構造体配列の要素を、「スプライト構造体インスタンス」と呼ぶ。ただし、両者を区別して説明する必要がないときは、単に「構造体インスタンス」と呼ぶこともある。
ポリゴン構造体配列に格納された各ポリゴン構造体インスタンスは、ポリゴンごとの表示情報(テクスチャマッピングモードでのテクスチャパターンデータ格納アドレス及びグーローシェーディングモードでのカラーデータ(RGBのカラーコンポーネント)を含む。)であり、1つのポリゴン構造体インスタンスに1つのポリゴンが対応している。スプライト構造体配列に格納された各スプライト構造体インスタンスは、スプライトごとの表示情報(テクスチャパターンデータ格納アドレスを含む。)であり、1つのスプライト構造体インスタンスに1つのスプライトが対応している。
ビデオDAC29は、アナログのビデオ信号を生成するためのデジタル/アナログ変換器である。ビデオDAC29は、RPU9から入力されたデータストリームをアナログのコンポジットビデオ信号に変換し、ビデオ信号出力端子(図示せず)からテレビジョンモニタ等(図示せず)に出力する。
カラーパレットRAM11は、本実施の形態では512色すなわち512エントリのカラーパレットからなる。RPU9は、テクスチャパターンデータに含まれるテクセルデータをカラーパレットのエントリを指定するインデックスの一部として、カラーパレットRAM11を参照し、テクスチャパターンデータを、カラーデータ(RGBのカラーコンポーネント)に変換する。
SPU13は、PCM(pulse code modulation)波形データ(以下、「ウェーブデータ」と呼ぶ。)、アンプリチュードデータ、及びメインボリュームデータを生成する。具体的には、SPU13は、最大64チャンネル分のウェーブデータを時分割多重するとともに、最大64チャンネル分のエンベロープデータを時分割多重してチャンネルボリュームデータと乗算し、アンプリチュードデータを生成する。そして、SPU13は、メインボリュームデータ、時分割多重されたウェーブデータ、及び時分割多重されたアンプリチュードデータを、オーディオDACブロック31に出力する。また、SPU13は、DMAC4に対して、ウェーブデータ及びエンベロープデータの取り込みのためのDMA転送要求を行う機能を有する。
オーディオDACブロック31は、SPU13から入力されたウェーブデータ、アンプリチュードデータ、及びメインボリュームデータをそれぞれアナログ信号に変換し、結果をアナログ乗算して、アナログオーディオ信号を生成する。このアナログオーディオ信号は、オーディオ信号出力端子(図示せず)からテレビジョンモニタ等(図示せず)のオーディオ入力端子(図示せず)に出力される。
SPUローカルRAM15は、SPU13がウェーブ再生及びエンベロープ生成を行う際に用いるパラメータ(例えば、ウェーブデータやエンベロープデータの格納アドレスやピッチ情報など)を格納する。
GE17は、三次元イメージを表示するための幾何演算を実行する。具体的には、GE17は、行列積、ベクトルアフィン変換、ベクトル直交変換、透視投影変換、頂点明度/ポリゴン明度計算(ベクトル内積)、及びポリゴン裏面カリング処理(ベクトル外積)などの演算を実行する。
YSU19は、メインRAM25に格納されているポリゴン構造体配列の各構造体インスタンス及びスプライト構造体配列の各構造体インスタンスを、ソートルール1〜4に従ってソートする。この場合、ポリゴン構造体配列とスプライト構造体配列とで、別個にソートが行われる。
ソートルール1は、最小Y座標が小さい順に、各ポリゴン構造体インスタンスを並べ替えることである。最小Y座標とは、ポリゴンの3頂点のY座標のうち、最も小さいY座標のことである。Y座標はスクリーンの垂直座標であり、下向きが正方向である。ソートルール2は、最小Y座標が同じである複数のポリゴンについては、デプス値が大きい順に、各ポリゴン構造体インスタンスを並べることである。
ただし、YSU19は、スクリーンの先頭ラインに表示されるピクセルを持つ複数のポリゴンについては、最小Y座標が異なっている場合でも、それらが同一であるとみなして、ソートルール1ではなく、ソートルール2に従って、各ポリゴン構造体インスタンスの並べ替えを行う。つまり、スクリーンの先頭ラインに表示されるピクセルを持つポリゴンが複数存在する場合は、最小Y座標が同一であるとみなして、デプス値が大きい順に並べ替えられる。これがソートルール3である。
インタレーススキャンの場合でも、ソートルール1〜3が適用される。ただし、奇数フィールドを表示するためのソートでは、奇数ラインに表示されるポリゴンの最小Y座標及び/又はその奇数ラインの1つ前の偶数ラインに表示されるポリゴンの最小Y座標が同一であるとみなして、ソートルール2によるソートを行う。ただし、先頭の奇数ラインは除く。なぜなら、その1つ前の偶数ラインが存在しないからである。一方、偶数フィールドを表示するためのソートでは、偶数ラインに表示されるポリゴンの最小Y座標及び/又はその偶数ラインの1つ前の奇数ラインに表示されるポリゴンの最小Y座標が同一であるとみなして、ソートルール2によるソートを行う。これがソートルール4である。
スプライトに関するソートルール1〜4は、それぞれポリゴンに関するソートルール1〜4と同様である。
外部インタフェースブロック21は、周辺装置54とのインタフェースであり、24チャンネルのプログラマブルなデジタル入出力(I/O)ポートを含む。24チャンネルのI/Oポートの各々は、4チャンネル分のマウスインタフェース機能、4チャンネル分のライトガンインタフェース機能、2チャンネル分の汎用タイマ/カウンタ、1チャンネル分の調歩同期式シリアルインタフェース機能、1チャンネル分の汎用パラレル/シリアル変換ポート機能のうち1または複数に内部接続されている。
ADC33は、4チャンネルのアナログ入力ポートに接続され、これらを介して、アナログ入力装置52から入力されたアナログ信号をデジタル信号に変換する。例えば、マイク音声等のアナログ入力信号をサンプリングしてデジタルデータに変換する。
メインRAMアクセスアービタ23は、機能ユニット(CPU5、RPU9、GE17、YSU19、DMAC4、及び外部インタフェースブロック21(汎用パラレル/シリアル変換ポート)からのメインRAM25へのアクセスを調停して、いずれかの機能ユニットにアクセス許可を出す。
メインRAM25は、CPU5のワーク領域、変数格納領域、および仮想記憶管理領域等として利用される。また、メインRAM25は、CPU5が他の機能ユニットに受け渡すデータの格納領域、RPU9及びSPU13が外部メモリ50からDMAによって取得したデータの格納領域、GE17及びYSU19の入力データ及び出力データの格納領域等としても使用される。
外部バス51は、外部メモリ50にアクセスするためのバスである。CPU5およびDMAC4から、外部メモリインタフェース3を介してアクセスされる。外部バス51のアドレスバスは、30ビットから成り、最大で1Gバイト(=8Gビット)の外部メモリ50を接続することができる。外部バス51のデータバスは、16ビットから成り、8ビット又は16ビットのデータバス幅を持つ外部メモリ50を接続できる。異なるデータバス幅を持つ外部メモリを同時に接続可能であり、アクセスする外部メモリによってデータバス幅を自動的に切り替える機能が備えられる。
図2は、DMAC4のダイレクトメモリアクセス転送要求の調停に関するブロック図である。図2を参照して、DMAC4は、CPU5からのDMA転送要求を保持するリクエストバッファ105、RPU9からのDMA転送要求を保持するリクエストバッファ109、SPU13からのDMA転送要求を保持するリクエストバッファ113、DMAリクエストアービタ44、DMAリクエストキュー45、及びDMA実行ユニット46を含む。DMA実行ユニット46は、伸張回路48を含む。
リクエストバッファ105,109及び113のうち、2以上のリクエストバッファにDMA転送要求がエントリされている場合、DMAリクエストアービタ44は、後述のDMA優先順位テーブルに従って一つのDMA転送要求を選択し、選択されたDMA転送要求をDMAリクエストキュー45の最後尾に送出する。4つのエントリを有するDMAリクエストキュー45は、FIFO構造になっており、最初に受け付けたDMA転送要求から順次DMA実行ユニット46に送出する。DMA実行ユニット46は、外部バス51へのアクセス要求(外部バスアクセス要求要因としてのDMA要求)を発行し、外部バス51へのアクセスが許可された場合は、DMAリクエストキュー45から受け取ったDMA転送要求に従ったDMA転送を実行する。
DMAC4が備えるDMAチャンネルは一つのみであるため、DMA転送を同時実行することはできないが、CPU5、RPU9、及びSPU13からのDMA転送要求を保持するリクエストバッファ105,109及び113と、4エントリのDMAリクエストキュー45と、を備えているため、DMA転送中でもDMA転送要求を受け付けることができる。
図3は、DMAC4による調停の際に参照されるDMA優先順位テーブルの例示図である。図3を参照して、上記のように、このDMA優先順位テーブルは、リクエストバッファ105,109及び113のうち、2以上のリクエストバッファにDMA転送要求がエントリされている状態において、DMAリクエストアービタ44が、どのDMA転送要求を優先してDMAリクエストキュー45に送出するのかを示す。
優先順位は、1番が最も高く、番号が大きくなるに従って低くなる。従って、優先順位が高いほうから、SPU13によるDMA転送要求、RPU9によるDMA転送要求、及び、CPU5によるDMA転送要求、となる。本実施の形態では、優先順位はハードウェアで固定されており、変更することはできない。
SPU13、RPU9、及びCPU5からのDMA要求要因(DMA転送を要求する要因)について順に説明していく。
図3を参照して、SPU13のDMA要求要因として、(1)ウェーブデータをウェーブバッファに転送すること、(2)エンベロープデータをエンベロープバッファに転送すること、がある。ウェーブバッファ及びエンベロープバッファは、それぞれメインRAM25上に設定されるウェーブデータ及びエンベロープデータのテンポラリ格納領域である。このテンポラリ格納領域の先頭アドレスは、SPU13内の制御レジスタ(図示せず)で定められ、このテンポラリ格納領域の大きさは、再生チャンネル数の設定により定められる。なお、SPU13の2つのDMA要求要因間の調停は、SPU13内のハードウェア(図示せず)で行われ、DMAC4は関知しない。
RPU9のDMA要求要因として、テクスチャパターンデータをテクスチャバッファに転送すること、がある。テクスチャバッファは、メインRAM25上に設定されるテクスチャパターンデータのテンポラリ格納領域である。このテンポラリ格納領域の先頭アドレス及びサイズは、RPU9内の制御レジスタ(図示せず)で定められる。
CPU5のDMA要求要因として、(1)仮想記憶管理においてページミスが発生した場合のページ転送、(2)アプリケーションプログラム等が要求するデータ転送、がある。なお、CPU5内で複数のDMA転送要求が同時に発生した場合は、その調停はCPU5で実行されるソフトウェアにて行われ、DMAC4は関知しない。
CPU5による上記(1)のDMA要求要因についてもう少し詳しく説明する。CPU5のDMA転送要求は、ソフトウェアの実行に応じて行われる。マルチメディアプロセッサ1の一般的なソフトウェア構造では、仮想記憶管理は、OS(オペレーティングシステム)によって行われる。仮想記憶管理においてページミスが発生し、ページスワップの必要が発生すると、OSは、DMAC4にDMA転送要求を発行する。
CPU5による上記(2)のDMA要求要因についてもう少し詳しく説明する。OS等のシステムソフトウェアやアプリケーションソフトウェアの実行中、外部メモリ50とメインRAM25との間で、まとまったデータ転送の必要が生じた場合、DMA要求が発行される。
図2に戻って、伸張回路48は、LZ77(Lempel Ziv 77)アルゴリズムに基づくデータ伸張を実行する。従って、DMAC4は、CPU5によるDMA転送要求に対して、外部メモリ50に格納された圧縮データを伸張しながら、メインRAM25へDMA転送することが可能である。このように、本実施の形態では、CPU5が要求するDMA転送に限り、圧縮されたデータを伸張しながらDMA転送することを可能としている。以下、データ伸張DMA転送について詳細に説明する。
図4は、1回のDMA転送要求によるデータ伸張DMA転送の説明図である。図4を参照して、転送元データの圧縮は、外部メモリアドレスの256バイト=1ブロックの単位で行われている。図4では、転送元データが3つのブロック#0〜#2からなる例を挙げている。ブロック#0及びブロック#2は、圧縮ブロック(つまり圧縮データ)であり、ブロック#1は、非圧縮ブロック(つまり生データ)である。生データは、圧縮されていないデータのことである。
圧縮ブロック#0及び#2の各々は、圧縮ブロック識別コード(以下、「IDコード」と呼ぶ。)を先頭2バイトに含む。従って、DMA実行ユニット46は、ブロックの先頭2バイトと、後述の圧縮ブロック識別レジスタ62に格納されているIDコードと、を比較して、一致した場合は、当該ブロックを圧縮ブロックと判断して、伸張回路48によるデータ伸張を行いつつ、DMA転送を行う。一方、不一致の場合は、当該ブロックを非圧縮ブロックと判断して、伸張を行うことなく、DMA転送する。
従って、圧縮ブロック#0及び#2は、DMA転送時に伸張され、メインRAM25には、伸張されたデータが格納される。一方、非圧縮ブロック#1は、そのまま転送され、メインRAM25には、生データが格納される。このように、1回のDMA転送要求で、圧縮ブロックと非圧縮ブロックとを混在してDMA転送することが可能である。
図中の斜線部のデータは、データ伸張DMAでは使用されない部分であり、外部メモリ50における斜線部に、生データを配置して外部メモリ50の使用効率を上げることが可能である。
図5は、図4の圧縮ブロックの構成を示す図である。図5を参照して、圧縮ブロックの先頭2バイトにはIDコードが配置される。IDコードに続いて、ビットストリームとバイトストリームとが交互に配置される。ビットストリームの各々は、8ビット=1バイトで構成され、バイトストリームの各々は、1〜8バイトのうちのいずれかのサイズで構成される。圧縮ブロックの大きさは、最大256バイトである。
ここで、圧縮ブロックのビットストリーム及びバイトストリームの詳細を説明する前に、データ圧縮について簡単に説明する。上記のように、本実施の形態で採用した圧縮アルゴリズムは、LZ77である。LZ77は、スライド辞書法とも呼ばれ、辞書に登録された(過去に出現した)データ列の中から符号化すべきデータ列と最長一致するデータ列を探し出して、その符号化すべきデータ列を、一致したデータ列の位置情報(以下、「一致位置情報」と呼ぶ。)及び長さ情報(以下、「一致長情報」と呼ぶ。)に置き換えることにより、圧縮を行うアルゴリズムである。加えて、本実施の形態では、スライド辞書法による一致長情報を可変長符号化することにより、圧縮率をより高めている。本実施の形態では、可変長符号化の例としてハフマン符号化を挙げる。
図5に戻って、バイトストリームは、生データ及び一致位置情報を含み、ビットストリームは、圧縮あるいは非圧縮のいずれかを示す圧縮/非圧縮フラグ及びハフマン符号化された一致長情報を含む。
図6は、一致長情報のハフマン符号化を行う際の符号割り当ての説明図である。図6を参照して、ビットストリームに格納される圧縮/非圧縮フラグが「0」のときは、データが圧縮されていないこと、つまり、生データであることを示す。生データのサイズは、1バイトで固定されているため、圧縮/非圧縮フラグが「0」を示すときは、対応する生データのサイズは1バイトである。
ビットストリームに格納される圧縮/非圧縮フラグが「1」のときは、データが圧縮されていることを示す。この場合、ビットストリームには、そのビット「1」に続いて、ハフマン符号化された一致長情報が格納される。一致長情報は、圧縮前の一致データ列のサイズをバイト数で示すものであるところ、図6に示すように、圧縮前の一致データ列のサイズが、そのサイズに応じて、1〜6ビットの可変長のビットデータに符号化される。
ここで、「namamugi namagome namatamago」なるデータ列(ヌル文字などの文字列終端記号を含まない。)を圧縮したものをC言語で表した例を(表1)に示す。
(表1)を参照して、先頭の2バイトのIDコードに続いて格納されている1バイト(0b00010000)は、ビットストリーム(図5参照)であり、MSBから、「0」、「0」、「0」、「10」、「0」、「0」、「0」の7つのフィールドに分解される。各フィールド「0」は、非圧縮を示す圧縮/非圧縮フラグであり、フィールド「10」のビット「1」は、圧縮を示す圧縮/非圧縮フラグであり、フィールド「10」のビット「0」は、圧縮前の一致データ列のサイズを示すハフマン符号である。図6から分かるように、ハフマン符号「0」は、圧縮前の一致データ列のサイズが2バイトであることを示す。
従って、このビットストリームによって、続くバイトストリーム(図5参照)に、3バイトの生データ、2バイト(圧縮前のサイズ)の圧縮データの一致位置情報、および3バイトの生データが格納されていることが示される。
このビットストリームに続く、「n」、「a」、「m」、「1」、「u」、「g」、「i」は、生データ及び一致位置情報を格納しているバイトストリームである。「n」、「a」、「m」は、生データである。これに続く「1」は、一致位置情報であり、2バイトの圧縮データの位置を示す。
一致位置情報「N(自然数)」は、直前のデータが生データであればその生データの位置を「0」として、直前のデータが圧縮データであれば伸張されたデータの末尾の位置を「0」として、Nバイト前に一致データ列の先頭が位置することを示す。上の例では、一致位置情報「1」は、直前の伸張データ「m」の位置を「0」として、1バイト前に一致データ列「am」の先頭「a」が位置することを示す。
従って、一致位置情報「N」が示す一致データ列の先頭位置から、一致長情報が示すバイト数分のデータ列を取得することにより、伸張を行うことができる。上の例では、一致位置情報「1」が示す一致データ列の先頭位置から、一致長情報「0」が示す2バイトのデータ列「am」を取得することにより、伸張を行うことがでる。
一致長情報「1」に続く「u」、「g」、「i」は、生データである。以下同様に、ビットストリームとバイトストリームとが交互に圧縮ブロックに格納される。
さて、次に、DMAC4の詳細を説明する。
図7は、DMAC4の内部構成の詳細を示すブロック図である。図7を参照して、DMAC4は、リクエストバッファ105,109,113、DMAリクエストアービタ44、DMAリクエストキュー45、及びDMA実行ユニット46を含む。
リクエストバッファ105は、CPU転送元アドレスレジスタCS、CPU転送先アドレスレジスタCD、及びCPU転送バイト数レジスタCBを含む。リクエストバッファ109は、RPU転送元アドレスレジスタRS、RPU転送先アドレスレジスタRD、及びRPU転送バイト数レジスタRBを含む。リクエストバッファ113は、SPU転送元アドレスレジスタSS、SPU転送先アドレスレジスタSD、及びSPU転送バイト数レジスタSBを含む。
DMAリクエストアービタ44は、リクエストセレクタ80、リクエストアービタ82、及びDMA要求有効ビットCV,RV,SVを含む。
DMA実行ユニット46は、DMACステートマシン100、伸張回路48、DMAリクエストキューステータスレジスタ84、DMAステータスレジスタ86、DMAイネーブルレジスタ88、割込イネーブルレジスタ90、リードデータバッファ92、ライトデータ格納レジスタ94、及びメインRAMライトデータバッファ96を含む。
伸張回路48は、データ伸張有効レジスタ60、圧縮ブロック識別レジスタ62、ヘッダ格納レジスタ64、一致検出回路70、バイトストリーム格納レジスタ66、ビットストリーム格納シフトレジスタ68、辞書RAM72、辞書RAMコントローラ74、ビットストリーム解釈論理76、及びマルチプレクサ(MUX)78を含む。
DMAC4に対してDMA転送を要求する機能ユニットは、CPU5、RPU9、及びSPU13の3つである。CPU5からのDMA転送要求は、I/Oバス27を通じて行われる。具体的には、CPU5は、I/Oバス27を通じて、「転送元アドレス」、「転送先アドレス」、及び「転送バイト数」を、それぞれCPU転送元アドレスレジスタCS、CPU転送先アドレスレジスタCD、及びCPU転送バイト数レジスタCB」に書き込む。そして、CPU5が、CPU5に対応して設けられたDMA要求有効ビットCVに「1」を書き込むことにより、CPU5からのDMA転送要求が有効になる。
RPU9からのDMA転送要求では、「転送元アドレス」、「転送先アドレス」、「転送バイト数」、及びDMA転送要求信号RDRが、DMAC4に直接入力される。具体的には、RPU9は、DMA転送要求信号RDRをアサートし、これに応じて、RPU9から入力された「転送元アドレス」、「転送先アドレス」、及び「転送バイト数」が、それぞれRPU転送元アドレスレジスタRS、RPU転送先アドレスレジスタRD、及びRPU転送バイト数レジスタRBに格納されるとともに、RPU9に対応して設けられたDMA要求有効ビットRVの値が「1」にセットされる。これにより、RPU9からのDMA転送要求が有効になる。
SPU13からのDMA転送要求では、「転送元アドレス」、「転送先アドレス」、「転送バイト数」、及びDMA転送要求信号SDRが、DMAC4に直接入力される。具体的には、SPU13は、DMA転送要求信号SDRをアサートし、これに応じて、SPU13から入力された「転送元アドレス」、「転送先アドレス」、及び「転送バイト数」が、それぞれSPU転送元アドレスレジスタSS、SPU転送先アドレスレジスタSD、及びSPU転送バイト数レジスタSBに格納されるとともに、SPU13に対応して設けられたDMA要求有効ビットSVの値が「1」にセットされる。これにより、SPU13からのDMA転送要求が有効になる。
リクエストアービタ82は、DMA転送要求が1つのみ有効である場合は、そのDMA転送要求を選択するように、DMA転送要求が複数有効である場合は、図3のDMA優先順位テーブルに従って、有効なDMA転送要求の中で最も優先順位が高いDMA転送要求を選択するように、リクエストセレクタ80に対して選択信号を出力する。
リクエストセレクタ80は、リクエストアービタ82からの選択信号により選択されたDMA転送要求に対応するリクエストバッファ105,109あるいは113に格納された「転送元アドレス」、「転送先アドレス」、及び「転送バイト数」をDMAリクエストキュー45に出力する。
DMAリクエストキュー45は、リクエストバッファから入力されたDMA転送要求を入力順に出力するFIFO構造のバッファである。具体的には、次の通りである、
DMAリクエストキュー45には、リクエストバッファから入力された、「転送元アドレス」、「転送先アドレス」、及び「転送バイト数」、並びに、どの機能ユニット(CPU5/RPU9/SPU13)からの要求であるかを示す情報を、DMA転送要求として格納する。
DMAリクエストキュー45は、DMA転送要求を受け付けると、そのDMA転送要求を行った機能ユニット5,9あるいは13に対応するDMA要求有効ビットCV,RVあるいはSVの値を「0」にクリアし、その機能ユニットが新たなDMA転送要求を発行できるようにする。一方、DMAリクエストキュー45は、キューがビジー(フル)の状態では新たなDMA転送要求を受け付けない。
また、DMAリクエストキュー45は、キューの状態(ビジー/レディ)をDMAリクエストキューステータスレジスタ84に反映する。DMAリクエストキューステータスレジスタ84は、CPU5がI/Oバス27を通じてアクセス可能である。CPU5は、このレジスタ84をリードすることにより、DMAリクエストキュー45の状態を知ることができ、新たなDMA転送要求を発行可能か否かを判断できる。
DMAリクエストキュー45から出力されたDMA転送要求(「転送元アドレス」、「転送先アドレス」、及び「転送バイト数」、並びに、どの機能ユニットからの要求であるかを示す情報)は、DMACステートマシン100に入力される。DMACステートマシン100は、入力されたDMA転送要求に基づいて、外部バスリード要求信号EBRR、外部バスアドレスEBA、及び外部バスリードバイト数信号EBRBを生成し、外部メモリインタフェース3に対して、外部バスリード要求信号EBRR、外部バスアドレスEBA、及び外部バスリードバイト数信号EBRBを外部バスアクセス要求として出力する。
外部バスリード要求信号EBRRによる外部バスアクセス要求が許可されると、外部メモリ50からのリードデータが外部メモリインタフェース3からDMAC4に順次入力される。入力されたリードデータは、順次リードデータバッファ92に格納され、1バイト/1ワードのデータが入力されるたびに、外部バスリードカウント信号EBRCがアサートされる。外部バスリードカウント信号EBRCは、DMACステートマシン100に入力され、DMACステートマシン100は、現在までに何バイトのデータがリードされたかを知ることができる。
DMACステートマシン100は、データ伸張のイネーブル/ディセーブルを制御するデータ伸張有効レジスタ60の値が「1」である場合(つまり、データ伸張がイネーブルの場合)、外部バスアドレスの下位8ビットが0x00および0x01を示す2バイトのリードデータをヘッダ格納レジスタ64とライトデータ格納レジスタ94の双方に格納する。この場合、DMACステートマシン100は、マルチプレクサ78に対して、リードデータバッファ92からのデータを選択する選択信号を与え、これによって、リードデータバッファ92からの当該2バイトのリードデータがライトデータ格納レジスタ94に格納される。
一致検出回路70は、ヘッダ格納レジスタ64に格納された2バイトの値と、圧縮ブロック識別レジスタ62に格納された2バイトの値(IDコード)と、を比較して両者が一致した場合、その旨をDMACステートマシン100に通知する。この通知を受けたDMACステートマシン100は、続くKバイト(2〜254バイトまでの値をとり得る。)のデータを圧縮ブロックとみなし、順次ビットストリーム格納シフトレジスタ68またはバイトストリーム格納レジスタ66に格納する。この場合、圧縮ブロックのビットストリームは、ビットストリーム格納シフトレジスタ68に格納し、バイトストリームは、バイトストリーム格納レジスタ66に格納する。
一方、一致検出回路70は、ヘッダ格納レジスタ64に格納された2バイトの値と、圧縮ブロック識別レジスタ62に格納された2バイトの値(IDコード)と、を比較して両者が一致しなかった場合、その旨をDMACステートマシン100に通知する。この通知を受けたDMACステートマシン100は、ヘッダ格納レジスタ64に格納された2バイトを含む256バイトを非圧縮ブロックとみなす。そして、DMACステートマシン100は、ライトデータ格納レジスタ94に格納されている2バイトのデータを有効なライトデータとして扱う。更に続いてリードデータバッファ92に入力されるデータを、外部バスアドレスの下位8ビットが0x00を示すまで、順次ライトデータ格納レジスタ94に入力し、ライトデータ格納レジスタ94に8バイトのデータがたまる毎にメインRAMライトデータバッファ96に出力する。但し、外部バスアドレスの下位8ビットが0x00を示す前に要求した全データのリードが完了した場合には、ライトデータ格納レジスタ94に8バイトのデータがたまっていなくても、その時点でライトデータ格納レジスタ94に格納されているデータをメインRAMライトデータバッファ96に出力する。
ビットストリーム格納シフトレジスタ68に格納されたビットストリームは、1ビットずつビットストリーム解釈論理76に出力される。ビットストリーム解釈論理76は、入力されたビットストリームを順次解釈し、辞書RAMコントローラ74を制御して、圧縮されたデータを伸張していく。
具体的には、ビットストリーム解釈論理76は、受け取ったビット、つまり圧縮/非圧縮フラグが、「0」(非圧縮)を示しているときは、辞書RAMコントローラ74に対して、その旨を通知する。この通知を受けた辞書RAMコントローラ74は、バイトストリーム格納レジスタ66から入力された1バイトのデータ(生データ)を辞書RAM72に書き込むとともに、伸張データとしてマルチプレクサ78に出力する。
一方、ビットストリーム解釈論理76は、受け取ったビット、つまり圧縮/非圧縮フラグが、「1」(圧縮)を示しているときは、順次入力されてくるハフマン符号化された一致長情報を復元して、その一致長情報を辞書RAMコントローラ74に出力する。辞書RAMコントローラ74は、ビットストリーム解釈論理76から受け取った一致長情報と、バイトストリーム格納レジスタ66から受け取った一致位置情報と、に基づいて、辞書RAM72から一致データ列を読み出して、伸張データとしてマルチプレクサ78に出力するとともに、新たな伸張データとして辞書RAM72に書き込む。
DMACステートマシン100は、データ伸張有効レジスタ60の値が「1」である場合(つまり、データ伸張がイネーブルの場合)、マルチプレクサ78に対して、辞書RAMコントローラ74からの伸張データを選択する選択信号を出力する。従って、この場合、辞書RAMコントローラ74が出力した伸張データが、ライトデータ格納レジスタ94に順次格納される。この際、ライトデータ格納レジスタ94に予め格納されていた2バイトのリードデータ(外部バスアドレスの下位8ビットが0x00および0x01を示す2バイトのリードデータ)は破棄され、辞書RAMコントローラ74から出力される伸張データに上書きされる。一方、DMACステートマシン100は、データ伸張有効レジスタ60の値が「0」である場合(つまり、データ伸張がディセーブルの場合)、マルチプレクサ78に対して、リードデータバッファ92からのデータを選択する選択信号を出力する。CPU5は、I/Oバス27を通じて、データ伸張有効レジスタ60に格納されたデータのリード/ライトが可能である。
辞書RAM72は、256×8ビットの容量を有し、辞書RAMコントローラ74からの制御により、伸張データの内の最新の256バイトが常に格納される。
ライトデータ格納レジスタ94は、8バイトのデータがたまるたびに、たまったデータをメインRAMライトデータバッファ96へ出力する。メインRAMライトデータバッファ96は、メインRAMアクセスアービタ23へ受け取ったデータを出力する。ここで、メインRAMアクセスアービタ23への転送バイト数が「8」で割り切れない場合、最後の剰余分のデータは、ライトデータ格納レジスタ94に8バイトのデータがたまらなくてもメインRAMライトデータバッファ96に出力される。なお、転送バイト数はデータ伸張後のバイト数で示される。
DMACステートマシンは、DMAリクエストキュー45から入力された転送先アドレスおよび転送バイト数から、メインRAMライトアドレスMWA、メインRAMライトバイト数(1〜8バイト)MWBを算出して、メインRAMライト要求信号MWRとともに、メインRAMアクセスアービタ23に出力する。
メインRAMライト要求信号MWRによるライト要求が受け付けられると、メインRAMライト要求アクノリッジ信号MWRAがメインRAMアクセスアービタ23から入力される。DMACステートマシン100は、メインRAMライト要求アクノリッジ信号MWRAを受け取ると、次のデータライトのステートに移る。また、DMACステートマシン100は、要求された全バイト数のDMA転送が完了すると、RPU9からのDMA転送要求については、その完了を通知すべく、RPU9に対して、RPU要求DMA終了信号RDEを出力し、SPU13からのDMA転送要求については、その完了を通知すべく、SPU13に対して、SPU要求DMA終了信号SDEを出力する。
DMACステートマシン100の状態は、DMAステータスレジスタ86に反映される。DMAステータスレジスタ86は、DMA完了ビット、DMA実行中ビット、及びDMA未完了数フィールドを含む。DMA完了ビットには、CPU5から要求されたDMA転送が完了する度に「1」がセットされる。割込イネーブルレジスタ90に格納された割り込みイネーブルビットをイネーブルに設定している場合、DMA完了ビットに「1」がセットされるのと同時に、DMACステートマシン100は、CPU5に対する割り込み要求CIを発行する。DMA実行中ビットは、DMA転送が実行中か否かを示すビットである。DMA未完了数フィールドは、CPU5から要求された未完了のDMA転送の数を示すフィールドである。CPU5は、I/Oバス27を通じてDMAステータスレジスタ86の値をリードして、DMAC4の現在の状態を知ることができる。
DMAイネーブルレジスタ88には、DMA転送イネーブルビットが格納される。DMA転送イネーブルビットは、CPU5から要求されるDMA転送のイネーブル/ディセーブルを制御するビットである。CPU5は、I/Oバス27を通じて、DMAイネーブルレジスタ88及び割込イネーブルレジスタ90に格納されたデータのリード/ライトが可能である。
さて、以上のように、本実施の形態では、DMAC4は、データ伸張機能を有しているため、メインRAM25に転送するデータ(プログラムコードを含む。)を圧縮して、外部メモリ50に格納できる。その結果、外部メモリ50の容量削減を図ることができる。また、DMAC4がデータ伸張機能を有しているので、CPU5からのDMA転送要求では、データを圧縮して外部メモリ50から外部バス51に送出できる。従って、CPU5が消費する外部バスバンドを低減できる。従って、他の機能ユニット(CPU5、RPU9及びSPU13)が外部バス51を使用できる時間を多くできるとともに、当該他の機能ユニットがバス使用許可を得るまでのレイテンシを短くできる。
また、1回のDMA転送において、圧縮データと非圧縮データとを混在できるので、それぞれ別個にDMA転送要求を行わなければならない場合と比較して、DMA転送要求の回数を少なくできる。従って、CPU5のDMA転送要求に関する処理量の軽減を図ることができ、それ故、CPU5の能力を他の処理に割り当てることができる。よって、CPU5の全体的なパフォーマンスを向上できる。さらに、プログラムの設計において、圧縮データと非圧縮データとを区別して管理する必要がなく、プログラマの負担軽減を図ることができる。
全てのデータを圧縮して、DMA転送することもできるが、圧縮しても圧縮率が低いため圧縮するメリットがないデータも存在する。このようなデータを圧縮しても、圧縮のメリットがないばかりか、その伸張処理が必要になるので、処理量も増加してしまう。従って、圧縮データと非圧縮データとを混在できるようにすることで、CPU5の全体的なパフォーマンスの向上だけでなく、DMAC4自身の全体的なパフォーマンスの向上をも図ることができる。
さらに、DMAC4が、データ伸張を行いつつ(行いながら)、DMA転送を行うので、CPU5は、伸張処理を行うことを要せず、それ故CPU5の負荷を軽減できる。また、データ伸張を行いつつ、メインRAM25へ転送するので、データ伸張完了後にメインRAM25への転送を行う場合と比較して、転送の高速化を図ることができる。
また、本実施の形態では、IDコードと一致するコードがブロックに含まれる場合(図4参照)、当該ブロックに含まれる圧縮データを伸張回路48に転送し、伸張回路48は、当該圧縮データを伸張する。従って、圧縮データと非圧縮データとを混在させても、ブロックにIDコードを含めるだけで、容易に圧縮データと非圧縮データとを分離できる。
IDコードは、CPU5から書き換え可能な圧縮ブロック識別レジスタ62に格納されるため、ソフトウェアの実行中に動的にIDコードを変更することができる。仮に、非圧縮データのブロックが膨大に存在し、非圧縮データの各ブロックのいずれにも含まれないデータをIDコードとして選択することが不可能な場合でも、動的にIDコードを変更することにより、問題なく圧縮データと非圧縮データとを混在できる。
さらに、本実施の形態では、LZ77に基づく圧縮に加えて、ハフマン符号化を行っている。従って、外部メモリ50に格納されるデータの圧縮率をより高くすることができる。
さらに、本実施の形態によれば、CPU5からのDMA転送要求においてのみ伸張処理を行うので、いたずらに伸張処理量が増大することはなく、処理の遅延を防止できる。
さらに、本実施の形態では、CPU5、RPU9、及びSPU13からのDMA転送要求を保持する3つのリクエストバッファ105,109及び113およびDMAリクエストキュー45を備えている。従って、DMA転送実行中であっても、DMA転送要求を受け付けることができる。特に、DMAチャンネルが1つしかない場合に有効である。
また、CPU5、RPU9、及びSPU13のそれぞれに対応して、リクエストバッファ105,109及び113を設けているため、DMAC4内でのDMA転送要求の調停が可能になる。従って、外部バスアクセス要求を調停する外部メモリインタフェース3は、DMA転送要求の調停を行う必要がなく、調停処理としては外部バスアクセス要求の調停のみを行えばよく、システムのオーバヘッドを軽減できる。つまり、調停処理の分散・並列処理を行うことにより、オーバヘッドを軽減している。
なお、本発明は、上記の実施の形態に限られるものではなく、その要旨を逸脱しない範囲で種々の態様において実施することが可能であり、例えば、以下のような変形も可能である。
(1)上記では、外部メモリインタフェース3に対して、外部バスアクセス要求ができるのは、CPU5及びDMAC4だけであったが、より多くの機能ユニットが外部バスアクセス要求を行えるようにすることもできる。
(2)上記では、DMAC4に対してDMA転送要求ができるのは、CPU5、RPU9、及びSPU13だけであったが、より多くの機能ユニットあるいはより少ない機能ユニットがDMA転送要求を行えるようにすることもできる。この場合、DMA転送要求が可能な機能ユニットの数と同じ数のリクエストバッファをDMAC4に設ける。また、DMAリクエストキュー45のエントリ数は、4つに限定されない。
(3)上記では、データ伸張DMAを要求できるのは、CPU5のみであったが、これに限定されず、他の機能ユニットが、データ伸張DMAを要求できるようにすることができる。
(4)上記では、DMA優先順位テーブルは固定であったが、所定条件の成立によって、複数の異なるDMA優先順位テーブルを切り替えて使用することもできる。
1…マルチメディアプロセッサ、3…外部メモリインタフェース、4…DMAC、5…CPU、7…CPUローカルRAM、9…RPU、11…カラーパレットRAM、13…SPU、15…SPUローカルRAM、17…GE、19…YSU、21…外部インタフェースブロック、23…メインRAMアクセスアービタ、25…メインRAM、27…I/Oバス、29…ビデオDAC、31…オーディオDACブロック、44…DMAリクエストアービタ、45…DMAリクエストキュー、46…DMA実行ユニット、48…伸張回路、51…外部バス、50…外部メモリ、62…圧縮ブロック識別レジスタ、100…DMACステートマシン、105,109,113…リクエストバッファ。