(57)【特許請求の範囲】
【請求項１】
プロセッサコアが、転送元である外部メモリに格納されたデータ（以下、「転送元データ」と呼ぶ。）を処理するため、前記プロセッサコアからのダイレクトメモリアクセス転送要求ごとに、前記転送元データを前記外部メモリから転送先である内部メモリへダイレクトメモリアクセス転送するダイレクトメモリアクセス実行手段を備え、
１回の前記ダイレクトメモリアクセス転送要求で転送される前記転送元データは、複数のブロックからなり、前記複数のブロックには、所定のアルゴリズムで圧縮された圧縮データである圧縮ブロックと圧縮されていない生データである非圧縮ブロックとが混在可能であり、
前記ダイレクトメモリアクセス実行手段は、前記圧縮ブロックを伸張する伸張手段を含み、
前記ダイレクトメモリアクセス実行手段は、前記圧縮ブロックについては、前記伸張手段による伸張を行いつつ、前記内部メモリへ転送し、前記非圧縮ブロックについては、前記伸張手段による伸張を行うことなく、前記内部メモリへ転送する、ダイレクトメモリアクセスコントローラ。
【請求項２】
前記ダイレクトメモリアクセス実行手段は、予め設定されている圧縮ブロック識別コードと一致するコードが前記ブロックに含まれる場合、前記圧縮ブロックとして当該ブロックを前記伸張手段に転送し、前記伸張手段は、当該圧縮ブロックを伸張する、請求項１記載のダイレクトメモリアクセスコントローラ。
【請求項３】
前記ダイレクトメモリアクセス実行手段は、前記圧縮ブロック識別コードを保持する圧縮ブロック識別コードレジスタをさらに含み、
前記圧縮ブロック識別コードレジスタに格納される前記圧縮ブロック識別コードは、前記プロセッサコアから書き換え可能である、請求項２記載のダイレクトメモリアクセスコントローラ。
【請求項４】
前記圧縮ブロックは、辞書に登録されたデータ列の中から符号化すべきデータ列と最長一致するデータ列を探し出して、一致したデータ列の位置情報及び長さ情報を符号として出力する圧縮方式により圧縮されたデータであり、第１データストリーム及び第２データストリームを含み、
前記第２データストリームは、圧縮されていない生データ及び前記一致したデータ列の前記位置情報を含み、
前記第１データストリームは、生データ及び圧縮データの別を識別する情報、及び前記一致したデータ列の前記長さ情報を含み、
前記伸張手段は、前記識別する情報に基づいて、前記生データを出力し、かつ、前記識別する情報に基づき、前記一致したデータ列の前記長さ情報を識別して、その長さ情報と前記位置情報とから、前記符号を復元する、請求項１から３記載のダイレクトメモリアクセスコントローラ。
【請求項５】
前記辞書に登録されるデータ列は、前記伸張手段から出力されるデータであり、最も新しく前記伸張手段から出力されるデータへの入れ換えが常時行われる、請求項４記載のダイレクトメモリアクセスコントローラ。
【請求項６】
前記一致したデータ列の前記長さ情報は、可変長符号化されており、
前記伸張手段は、可変長符号化された前記長さ情報を復元して、この復元した長さ情報と前記位置情報とから、前記符号を復元する、請求項４又は５記載のダイレクトメモリアクセスコントローラ。
【請求項７】
前記ダイレクトメモリアクセスコントローラは、各々演算処理を実行する、前記プロセッサコアを含む複数のプロセッサコアからの前記ダイレクトメモリアクセス転送要求を調停して、ダイレクトメモリアクセス転送を行い、
前記伸張手段は、前記複数のプロセッサコアのうち、予め指定された１または複数の前記プロセッサコアからの前記ダイレクトメモリアクセス転送要求によるダイレクトメモリアクセス転送においてのみ伸張処理を行う、請求項１から６記載のダイレクトメモリアクセスコントローラ。
【請求項８】
前記ダイレクトメモリアクセスコントローラは、
各々が、対応する前記プロセッサコアからの前記ダイレクトメモリアクセス転送要求を格納する複数のバッファと、
複数の前記バッファが送出した複数の前記ダイレクトメモリアクセス転送要求を調停して、いずれか１つの前記ダイレクトメモリアクセス転送要求を出力する調停手段と、
複数の前記ダイレクトメモリアクセス転送要求を保持でき、前記調停手段が出力した前記ダイレクトメモリアクセス転送要求を受け取った順に出力するキューと、をさらに備え、
前記ダイレクトメモリアクセス実行手段は、前記キューが出力した前記ダイレクトメモリアクセス転送要求に応じたダイレクトメモリアクセス転送を実行する、請求項７記載のダイレクトメモリアクセスコントローラ。
【請求項９】
前記圧縮ブロックは、生データを前記所定のアルゴリズムで圧縮し、その圧縮されたデータの一部を、別のアルゴリズムで圧縮することにより得られたものであり、
前記伸張手段は、前記所定のアルゴリズム及び前記別のアルゴリズムに従って、前記圧縮ブロックを伸張する、請求項１から８のいずれかに記載のダイレクトメモリアクセスコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ダイレクトメモリアクセスコントローラ及びその関連技術に関する。
【背景技術】
【０００２】
特許文献１に開示されているプロセッサでは、演算処理を行うＣＰＵ、ＣＰＵによりデータアクセス可能な内蔵ＲＡＭ、圧縮データを伸張する伸張回路、ＤＭＡコントローラ、及び、内蔵ＲＡＭ上に展開されるデータを伸張回路を通過させて内蔵ＲＡＭに送るか或いは直接内蔵ＲＡＭに送るか何れかを選択可能なセレクタが、１個の半導体基板上に設けられている。
【０００３】
データは、ブロック分けされており、ブロックのそれぞれは、圧縮データあるいは非圧縮データである。ＣＰＵは、ＤＭＡコントローラに対して、ブロックごとに、ＤＭＡ転送要求を行う。従って、１回のＤＭＡ転送要求で、１ブロックのＤＭＡ転送が行われる。つまり、１回のＤＭＡ転送要求で転送されるブロックには、圧縮データと非圧縮データとが混在できない。
【０００４】
【特許文献１】特開２００１−２９７００６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
そこで、本発明は、１回のダイレクトメモリアクセス転送要求で転送されるブロック群に、圧縮データを格納するブロックと非圧縮データを格納するブロックとを混在させることができるダイレクトメモリアクセスコントローラ及びその関連技術を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の第１の観点によれば、ダイレクトメモリアクセスコントローラは、ダイレクトメモリアクセス転送要求ごとに、転送元データをダイレクトメモリアクセス転送するダイレクトメモリアクセス実行手段を備え、前記ダイレクトメモリアクセス実行手段は、圧縮データを伸張する伸張手段を含み、１回の前記ダイレクトメモリアクセス転送要求で転送される前記転送元データは、１または複数のブロックからなり、ブロック単位で圧縮データと非圧縮データとが混在可能であり、前記ダイレクトメモリアクセス実行手段は、圧縮データについては、前記伸張手段による伸張を行いつつ、転送先へ転送し、非圧縮データについては、前記伸張手段による伸張を行うことなく、転送先へ転送する。
【０００７】
この構成によれば、転送先のメモリ（例えば、内部メモリ）に転送するデータ（プログラムコードを含む。）を圧縮して、転送元のメモリ（例えば、外部メモリ）に格納できるので、転送元のメモリ容量の削減を図ることができる。また、データを圧縮して転送できるので、データ転送量を少なくでき、ダイレクトメモリアクセス転送要求を行う機能ユニットが消費するバスバンドを低減できる。さらに、データ転送にかかる時間を短縮することができる。ダイレクトメモリアクセスコントローラが他の機能ユニット（例えば、ＣＰＵ、ＲＰＵ、及びＳＰＵ）とバス（例えば、外部バス）を共有する場合には、バスバンド幅の低減により当該他の機能ユニットがバスを使用できる時間を多くでき、データ転送時間の短縮により当該他の機能ユニットがバス使用要求を行ってからバス使用許可を得るまでのレイテンシを短くできる。
【０００８】
また、１回のダイレクトメモリアクセス転送において、圧縮データと非圧縮データとを混在できるので、それぞれ別個にダイレクトメモリアクセス転送要求を行わなければならない場合と比較して、ダイレクトメモリアクセス転送要求の回数を少なくできる。従って、機能ユニットのダイレクトメモリアクセス転送要求に関する処理量の軽減を図ることができ、それ故、当該機能ユニットの能力を他の処理に割り当てることができる。よって、当該機能ユニットの全体的なパフォーマンスを向上できる。さらに、プログラムの設計において、圧縮データと非圧縮データとを区別して管理する必要がなく、プログラマの負担軽減を図ることができる。
【０００９】
全てのデータを圧縮して、ダイレクトメモリアクセス転送することもできるが、圧縮しても圧縮率が低いため圧縮するメリットがないデータも存在する。このようなデータを圧縮しても、圧縮のメリットがないばかりか、その伸張処理が必要になるので、処理量も増加してしまう。従って、圧縮データと非圧縮データとを混在できるようにすることで、ダイレクトメモリアクセス転送要求を行う機能ユニットの全体的なパフォーマンスの向上だけでなく、ダイレクトメモリアクセスコントローラ自身の全体的なパフォーマンスの向上をも図ることができる。
【００１０】
さらに、ダイレクトメモリアクセスコントローラが、データ伸張を行いつつ（行いながら）、ダイレクトメモリアクセス転送を行うので、ダイレクトメモリアクセス転送要求を行った機能ユニット（例えば、ＣＰＵ）は、伸張処理を行うことを要せず、それ故当該機能ユニットの負荷を軽減できる。また、データ伸張を行いつつ、転送先へ転送するので、データ伸張完了後に転送先への転送を行う場合と比較して、転送の高速化を図ることができる。
【００１１】
上記ダイレクトメモリアクセスコントローラにおいて、前記ダイレクトメモリアクセス実行手段は、予め設定されている圧縮ブロック識別コードと一致するコードが前記ブロックに含まれる場合、当該ブロックに含まれる圧縮データを前記伸張手段に転送し、前記伸張手段は、当該圧縮データを伸張する。
【００１２】
この構成によれば、圧縮データと非圧縮データとを混在させても、ブロックに圧縮ブロック識別コードを含めるだけで、容易に圧縮データと非圧縮データとを分離できる。
【００１３】
このダイレクトメモリアクセスコントローラにおいて、前記ダイレクトメモリアクセス実行手段は、前記圧縮ブロック識別コードを保持する圧縮ブロック識別コードレジスタをさらに含み、前記圧縮ブロック識別コードレジスタに格納される前記圧縮ブロック識別コードは、外部から書き換え可能である。
【００１４】
この構成によれば、圧縮ブロック識別コードは、外部（例えば、ＣＰＵ）から書き換え可能なレジスタに格納されるため、ソフトウェアの実行中に動的に圧縮ブロック識別コードを変更することができる。仮に、非圧縮データのブロックが膨大に存在し、非圧縮データの各ブロックのいずれにも含まれないデータを圧縮ブロック識別コードとして選択することが不可能な場合でも、動的に圧縮ブロック識別コードを変更することにより、問題なく圧縮データと非圧縮データとを混在できる。
【００１５】
上記ダイレクトメモリアクセスコントローラにおいて、前記ブロックに含まれる圧縮データは、辞書に登録されたデータ列の中から符号化すべきデータ列と最長一致するデータ列を探し出して、一致したデータ列の位置情報及び長さ情報を符号として出力する圧縮方式により圧縮されたデータであり、第１データストリーム及び第２データストリームを含み、前記第２データストリームは、圧縮されていない生データ及び前記一致したデータ列の前記位置情報を含み、前記第１データストリームは、生データ及び圧縮データの別を識別する情報、及び前記一致したデータ列の前記長さ情報を含み、前記伸張手段は、前記識別する情報に基づいて、前記生データを出力し、かつ、前記識別する情報に基づき、前記一致したデータ列の前記長さ情報を識別して、その長さ情報と前記位置情報とから、前記符号を復元する。
【００１６】
この構成によれば、スライド辞書法に基づく伸張処理を行うことができる。
【００１７】
このダイレクトメモリアクセスコントローラにおいて、前記辞書に登録されるデータ列は、前記伸張手段から出力されるデータであり、最も新しく前記伸張手段から出力されるデータへの入れ換えが常時行われる。
【００１８】
上記ダイレクトメモリアクセスコントローラにおいて、前記一致したデータ列の前記長さ情報は、可変長符号化されており、前記伸張手段は、可変長符号化された前記長さ情報を復元して、この復元した長さ情報と前記位置情報とから、前記符号を復元する。
【００１９】
この構成によれば、転送元に格納されるデータの圧縮率をより高くすることができる。
【００２０】
上記ダイレクトメモリアクセスコントローラは、各々演算処理を実行する複数のプロセッサコアからの前記ダイレクトメモリアクセス転送要求を調停して、ダイレクトメモリアクセス転送を行い、前記伸張手段は、前記複数のプロセッサコアのうち、予め指定された１または複数の前記プロセッサコアからの前記ダイレクトメモリアクセス転送要求によるダイレクトメモリアクセス転送においてのみ伸張処理を行う。
【００２１】
この構成によれば、予め指定されたプロセッサコアからのダイレクトメモリアクセス転送要求においてのみ伸張処理を行うので、いたずらに伸張処理量が増大することはなく、処理の遅延を防止できる。例えば、圧縮に適さないデータのダイレクトメモリアクセス転送を要求するプロセッサコアが含まれる場合、このプロセッサコアからのダイレクトメモリアクセス転送要求ではデータ伸張処理を行わないように予め設定しておくことができる。
【００２２】
このダイレクトメモリアクセスコントローラは、各々が、対応する前記プロセッサコアからの前記ダイレクトメモリアクセス転送要求を格納する複数のバッファと、複数の前記バッファが送出した複数の前記ダイレクトメモリアクセス転送要求を調停して、いずれか１つの前記ダイレクトメモリアクセス転送要求を出力する調停手段と、複数の前記ダイレクトメモリアクセス転送要求を保持でき、前記調停手段が出力した前記ダイレクトメモリアクセス転送要求を受け取った順に出力するキューと、をさらに備え、前記ダイレクトメモリアクセス実行手段は、前記キューが出力した前記ダイレクトメモリアクセス転送要求に応じたダイレクトメモリアクセス転送を実行する。
【００２３】
本発明の第２の観点によると、ダイレクトメモリアクセスコントローラは、各々演算処理を実行する複数のプロセッサコアからのダイレクトメモリアクセス転送要求を調停して、前記複数のプロセッサコアによって共有される内部メモリと、外部バスに接続される外部メモリと、の間でダイレクトメモリアクセス転送を行うダイレクトメモリアクセスコントローラであって、各々が、対応する前記プロセッサコアからの前記ダイレクトメモリアクセス転送要求を格納する複数のバッファと、複数の前記バッファが送出した複数の前記ダイレクトメモリアクセス転送要求を調停して、いずれか１つの前記ダイレクトメモリアクセス転送要求を出力する調停手段と、複数の前記ダイレクトメモリアクセス転送要求を保持でき、前記調停手段が出力した前記ダイレクトメモリアクセス転送要求を受け取った順に出力するキューと、前記キューが出力した前記ダイレクトメモリアクセス転送要求に応じたダイレクトメモリアクセス転送を実行するダイレクトメモリアクセス転送実行手段と、を備える。
【００２４】
この構成では、複数のプロセッサコアからの複数のダイレクトメモリアクセス転送要求を保持する複数のバッファおよびキューを備えている。従って、ダイレクトメモリアクセス転送実行中であっても、ダイレクトメモリアクセス転送要求を受け付けることができる。特に、ダイレクトメモリアクセスチャンネルが１つしかない場合に有効である。
【発明を実施するための最良の形態】
【００２５】
以下、本発明の実施の形態について、図面を参照しながら説明する。なお、図中、同一または相当部分については同一の参照符号を付してその説明を援用する。また、本明細書及び図面において、「０ｂ」は２進数を、「０ｘ」は１６進数を意味する。
【００２６】
図１は、本発明の実施の形態によるマルチメディアプロセッサ１の内部構成を示すブロック図である。図１に示すように、このマルチメディアプロセッサは、外部メモリインタフェース３、ＤＭＡＣ（ｄｉｒｅｃｔ  ｍｅｍｏｒｙ  ａｃｃｅｓｓ  ｃｏｎｔｒｏｌｌｅｒ）４、中央演算処理装置（以下、「ＣＰＵ」と呼ぶ。）５、ＣＰＵローカルＲＡＭ７、レンダリングプロセッシングユニット（以下、「ＲＰＵ」と呼ぶ。）９、カラーパレットＲＡＭ１１、サウンドプロセシングユニット（以下、「ＳＰＵ」と呼ぶ。）１３、ＳＰＵローカルＲＡＭ１５、ジオメトリエンジン（以下、「ＧＥ」と呼ぶ。）１７、Ｙソーティングユニット（以下、「ＹＳＵ」と呼ぶ。）１９、外部インタフェースブロック２１、メインＲＡＭアクセスアービタ２３、メインＲＡＭ２５、Ｉ／Ｏバス２７、ビデオＤＡＣ（ｄｉｇｉｔａｌ  ｔｏ  ａｎａｌｏｇ  ｃｏｎｖｅｒｔｅｒ）２９、オーディオＤＡＣブロック３１、及びＡ／Ｄコンバータ（以下、「ＡＤＣ」と呼ぶ。）３３を具備する。
【００２７】
ここで、ＣＰＵ５、ＲＰＵ９、ＳＰＵ９、ＧＥ１７、及びＹＳＵ１９をそれぞれプロセッサコアと呼ぶこともある。また、メインＲＡＭ２５及び外部メモリ５０を区別して説明する必要がないときは、「メモリＭＥＭ」と表記する。
【００２８】
外部メモリインタフェース３は、外部バス５１を介して、外部メモリ５０からのデータの読み出し、及び外部メモリ５０へのデータの書き込みを司る。この場合、外部メモリインタフェース３は、図示しないＥＢＩ優先順位テーブルに従って、ＣＰＵ５及びＤＭＡＣ４からの外部バスアクセス要求要因（外部バス５１へのアクセスを要求する要因）を調停して、いずれか１つの外部バスアクセス要求要因を選択する。そして、選択した外部バスアクセス要求要因に対して外部バス５１へのアクセスを許可する。ＥＢＩ優先順位テーブルは、ＣＰＵ５からの複数種類の外部バスアクセス要求要因及びＤＭＡＣ４からの外部バスアクセス要求要因の優先順位を定めたテーブルである。
【００２９】
外部バスアクセス要求要因として、ＣＰＵに含まれる図示しないＩＰＬ（ｉｎｉｔｉａｌ  ｐｒｏｇｒａｍ  ｌｏａｄｅｒ）によるブロック転送要求、ＣＰＵ５によるデータアクセス要求、ＣＰＵ５による命令フェッチ要求、及びＤＭＡＣ４によるＤＭＡ要求がある。
【００３０】
本発明の特徴の１つであるＤＭＡＣ４は、メインＲＡＭ２５と、外部バス５１に接続された外部メモリ５０と、の間でＤＭＡ転送を行う。ＤＭＡＣ４については、後で詳述する。
【００３１】
ＣＰＵ５は、メモリＭＥＭに格納されたプログラムを実行して、各種演算やシステム全体の制御を行う。また、ＣＰＵ５は、ＤＭＡＣ４にプログラム及びデータの転送要求を行うこともできるし、ＤＭＡＣ４を介さずに、外部メモリ５０から直接プログラムコードをフェッチしたり、外部メモリ５０に直接データアクセスを行うこともできる。
【００３２】
Ｉ／Ｏバス２７は、ＣＰＵ５をバスマスタとするシステム制御用のバスであり、バススレイブである各機能ユニット（外部メモリインタフェース３、ＤＭＡＣ４、ＲＰＵ９、ＳＰＵ１３、ＧＥ１７、ＹＳＵ１９、及び外部インタフェースブロック２１）の制御レジスタ及びローカルＲＡＭ７，１１，１５へのアクセスに用いられる。このようにして、これらの機能ユニットは、Ｉ／Ｏバス２７を通じて、ＣＰＵ５により制御される。
【００３３】
ＣＰＵローカルＲＡＭ７は、ＣＰＵ５専用のＲＡＭであり、サブルーチンコールや割り込み時におけるデータの退避などを行うためのスタック領域、及びＣＰＵ５のみが扱う変数の格納領域等として使用される。
【００３４】
ＲＰＵ９は、ポリゴン及びスプライトから構成される三次元イメージをリアルタイムに生成する。具体的には、ＲＰＵ９は、ＹＳＵ１９によるソート済みの、ポリゴン構造体配列の各構造体インスタンス及びスプライト構造体配列の各構造体インスタンスを、メインＲＡＭ２５から読み出し、所定の処理を実行して、スクリーン（表示画面）のスキャンに合わせて水平ラインごとにイメージを生成する。生成されたイメージは、コンポジットビデオ信号波形を示すデータストリームに変換され、ビデオＤＡＣ２９に出力される。また、ＲＰＵ９は、ＤＭＡＣ４に対して、ポリゴン及びスプライトのテクスチャパターンデータの取り込みのためのＤＭＡ転送要求を行う機能を有する。
【００３５】
テクスチャパターンデータとは、ポリゴンまたはスプライトに貼り付けられる２次元の画素配列データであり、各画素データは、カラーパレットＲＡＭ１１のエントリを指定するための情報の一部である。以降、テクスチャパターンデータの画素を「テクセル」と呼称し、スクリーンに表示されるイメージを構成する画素を指す「ピクセル」とは区別して使用する。
【００３６】
ポリゴン構造体配列は、多角形状のグラフィック要素であるポリゴンのための構造体配列であり、スプライト構造体配列は、スクリーンに平行な矩形のグラフィック要素であるスプライトのための構造体配列である。ポリゴン構造体配列の要素を、「ポリゴン構造体インスタンス」と呼び、スプライト構造体配列の要素を、「スプライト構造体インスタンス」と呼ぶ。ただし、両者を区別して説明する必要がないときは、単に「構造体インスタンス」と呼ぶこともある。
【００３７】
ポリゴン構造体配列に格納された各ポリゴン構造体インスタンスは、ポリゴンごとの表示情報（テクスチャマッピングモードでのテクスチャパターンデータ格納アドレス及びグーローシェーディングモードでのカラーデータ（ＲＧＢのカラーコンポーネント）を含む。）であり、１つのポリゴン構造体インスタンスに１つのポリゴンが対応している。スプライト構造体配列に格納された各スプライト構造体インスタンスは、スプライトごとの表示情報（テクスチャパターンデータ格納アドレスを含む。）であり、１つのスプライト構造体インスタンスに１つのスプライトが対応している。
【００３８】
ビデオＤＡＣ２９は、アナログのビデオ信号を生成するためのデジタル／アナログ変換器である。ビデオＤＡＣ２９は、ＲＰＵ９から入力されたデータストリームをアナログのコンポジットビデオ信号に変換し、ビデオ信号出力端子（図示せず）からテレビジョンモニタ等（図示せず）に出力する。
【００３９】
カラーパレットＲＡＭ１１は、本実施の形態では５１２色すなわち５１２エントリのカラーパレットからなる。ＲＰＵ９は、テクスチャパターンデータに含まれるテクセルデータをカラーパレットのエントリを指定するインデックスの一部として、カラーパレットＲＡＭ１１を参照し、テクスチャパターンデータを、カラーデータ（ＲＧＢのカラーコンポーネント）に変換する。
【００４０】
ＳＰＵ１３は、ＰＣＭ（ｐｕｌｓｅ  ｃｏｄｅ  ｍｏｄｕｌａｔｉｏｎ）波形データ（以下、「ウェーブデータ」と呼ぶ。）、アンプリチュードデータ、及びメインボリュームデータを生成する。具体的には、ＳＰＵ１３は、最大６４チャンネル分のウェーブデータを時分割多重するとともに、最大６４チャンネル分のエンベロープデータを時分割多重してチャンネルボリュームデータと乗算し、アンプリチュードデータを生成する。そして、ＳＰＵ１３は、メインボリュームデータ、時分割多重されたウェーブデータ、及び時分割多重されたアンプリチュードデータを、オーディオＤＡＣブロック３１に出力する。また、ＳＰＵ１３は、ＤＭＡＣ４に対して、ウェーブデータ及びエンベロープデータの取り込みのためのＤＭＡ転送要求を行う機能を有する。
【００４１】
オーディオＤＡＣブロック３１は、ＳＰＵ１３から入力されたウェーブデータ、アンプリチュードデータ、及びメインボリュームデータをそれぞれアナログ信号に変換し、結果をアナログ乗算して、アナログオーディオ信号を生成する。このアナログオーディオ信号は、オーディオ信号出力端子（図示せず）からテレビジョンモニタ等（図示せず）のオーディオ入力端子（図示せず）に出力される。
【００４２】
ＳＰＵローカルＲＡＭ１５は、ＳＰＵ１３がウェーブ再生及びエンベロープ生成を行う際に用いるパラメータ（例えば、ウェーブデータやエンベロープデータの格納アドレスやピッチ情報など）を格納する。
【００４３】
ＧＥ１７は、三次元イメージを表示するための幾何演算を実行する。具体的には、ＧＥ１７は、行列積、ベクトルアフィン変換、ベクトル直交変換、透視投影変換、頂点明度／ポリゴン明度計算（ベクトル内積）、及びポリゴン裏面カリング処理（ベクトル外積）などの演算を実行する。
【００４４】
ＹＳＵ１９は、メインＲＡＭ２５に格納されているポリゴン構造体配列の各構造体インスタンス及びスプライト構造体配列の各構造体インスタンスを、ソートルール１〜４に従ってソートする。この場合、ポリゴン構造体配列とスプライト構造体配列とで、別個にソートが行われる。
【００４５】
ソートルール１は、最小Ｙ座標が小さい順に、各ポリゴン構造体インスタンスを並べ替えることである。最小Ｙ座標とは、ポリゴンの３頂点のＹ座標のうち、最も小さいＹ座標のことである。Ｙ座標はスクリーンの垂直座標であり、下向きが正方向である。ソートルール２は、最小Ｙ座標が同じである複数のポリゴンについては、デプス値が大きい順に、各ポリゴン構造体インスタンスを並べることである。
【００４６】
ただし、ＹＳＵ１９は、スクリーンの先頭ラインに表示されるピクセルを持つ複数のポリゴンについては、最小Ｙ座標が異なっている場合でも、それらが同一であるとみなして、ソートルール１ではなく、ソートルール２に従って、各ポリゴン構造体インスタンスの並べ替えを行う。つまり、スクリーンの先頭ラインに表示されるピクセルを持つポリゴンが複数存在する場合は、最小Ｙ座標が同一であるとみなして、デプス値が大きい順に並べ替えられる。これがソートルール３である。
【００４７】
インタレーススキャンの場合でも、ソートルール１〜３が適用される。ただし、奇数フィールドを表示するためのソートでは、奇数ラインに表示されるポリゴンの最小Ｙ座標及び／又はその奇数ラインの１つ前の偶数ラインに表示されるポリゴンの最小Ｙ座標が同一であるとみなして、ソートルール２によるソートを行う。ただし、先頭の奇数ラインは除く。なぜなら、その１つ前の偶数ラインが存在しないからである。一方、偶数フィールドを表示するためのソートでは、偶数ラインに表示されるポリゴンの最小Ｙ座標及び／又はその偶数ラインの１つ前の奇数ラインに表示されるポリゴンの最小Ｙ座標が同一であるとみなして、ソートルール２によるソートを行う。これがソートルール４である。
【００４８】
スプライトに関するソートルール１〜４は、それぞれポリゴンに関するソートルール１〜４と同様である。
【００４９】
外部インタフェースブロック２１は、周辺装置５４とのインタフェースであり、２４チャンネルのプログラマブルなデジタル入出力（Ｉ／Ｏ）ポートを含む。２４チャンネルのＩ／Ｏポートの各々は、４チャンネル分のマウスインタフェース機能、４チャンネル分のライトガンインタフェース機能、２チャンネル分の汎用タイマ／カウンタ、１チャンネル分の調歩同期式シリアルインタフェース機能、１チャンネル分の汎用パラレル／シリアル変換ポート機能のうち１または複数に内部接続されている。
【００５０】
ＡＤＣ３３は、４チャンネルのアナログ入力ポートに接続され、これらを介して、アナログ入力装置５２から入力されたアナログ信号をデジタル信号に変換する。例えば、マイク音声等のアナログ入力信号をサンプリングしてデジタルデータに変換する。
【００５１】
メインＲＡＭアクセスアービタ２３は、機能ユニット（ＣＰＵ５、ＲＰＵ９、ＧＥ１７、ＹＳＵ１９、ＤＭＡＣ４、及び外部インタフェースブロック２１（汎用パラレル／シリアル変換ポート）からのメインＲＡＭ２５へのアクセスを調停して、いずれかの機能ユニットにアクセス許可を出す。
【００５２】
メインＲＡＭ２５は、ＣＰＵ５のワーク領域、変数格納領域、および仮想記憶管理領域等として利用される。また、メインＲＡＭ２５は、ＣＰＵ５が他の機能ユニットに受け渡すデータの格納領域、ＲＰＵ９及びＳＰＵ１３が外部メモリ５０からＤＭＡによって取得したデータの格納領域、ＧＥ１７及びＹＳＵ１９の入力データ及び出力データの格納領域等としても使用される。
【００５３】
外部バス５１は、外部メモリ５０にアクセスするためのバスである。ＣＰＵ５およびＤＭＡＣ４から、外部メモリインタフェース３を介してアクセスされる。外部バス５１のアドレスバスは、３０ビットから成り、最大で１Ｇバイト（＝８Ｇビット）の外部メモリ５０を接続することができる。外部バス５１のデータバスは、１６ビットから成り、８ビット又は１６ビットのデータバス幅を持つ外部メモリ５０を接続できる。異なるデータバス幅を持つ外部メモリを同時に接続可能であり、アクセスする外部メモリによってデータバス幅を自動的に切り替える機能が備えられる。
【００５４】
図２は、ＤＭＡＣ４のダイレクトメモリアクセス転送要求の調停に関するブロック図である。図２を参照して、ＤＭＡＣ４は、ＣＰＵ５からのＤＭＡ転送要求を保持するリクエストバッファ１０５、ＲＰＵ９からのＤＭＡ転送要求を保持するリクエストバッファ１０９、ＳＰＵ１３からのＤＭＡ転送要求を保持するリクエストバッファ１１３、ＤＭＡリクエストアービタ４４、ＤＭＡリクエストキュー４５、及びＤＭＡ実行ユニット４６を含む。ＤＭＡ実行ユニット４６は、伸張回路４８を含む。
【００５５】
リクエストバッファ１０５，１０９及び１１３のうち、２以上のリクエストバッファにＤＭＡ転送要求がエントリされている場合、ＤＭＡリクエストアービタ４４は、後述のＤＭＡ優先順位テーブルに従って一つのＤＭＡ転送要求を選択し、選択されたＤＭＡ転送要求をＤＭＡリクエストキュー４５の最後尾に送出する。４つのエントリを有するＤＭＡリクエストキュー４５は、ＦＩＦＯ構造になっており、最初に受け付けたＤＭＡ転送要求から順次ＤＭＡ実行ユニット４６に送出する。ＤＭＡ実行ユニット４６は、外部バス５１へのアクセス要求（外部バスアクセス要求要因としてのＤＭＡ要求）を発行し、外部バス５１へのアクセスが許可された場合は、ＤＭＡリクエストキュー４５から受け取ったＤＭＡ転送要求に従ったＤＭＡ転送を実行する。
【００５６】
ＤＭＡＣ４が備えるＤＭＡチャンネルは一つのみであるため、ＤＭＡ転送を同時実行することはできないが、ＣＰＵ５、ＲＰＵ９、及びＳＰＵ１３からのＤＭＡ転送要求を保持するリクエストバッファ１０５，１０９及び１１３と、４エントリのＤＭＡリクエストキュー４５と、を備えているため、ＤＭＡ転送中でもＤＭＡ転送要求を受け付けることができる。
【００５７】
図３は、ＤＭＡＣ４による調停の際に参照されるＤＭＡ優先順位テーブルの例示図である。図３を参照して、上記のように、このＤＭＡ優先順位テーブルは、リクエストバッファ１０５，１０９及び１１３のうち、２以上のリクエストバッファにＤＭＡ転送要求がエントリされている状態において、ＤＭＡリクエストアービタ４４が、どのＤＭＡ転送要求を優先してＤＭＡリクエストキュー４５に送出するのかを示す。
【００５８】
優先順位は、１番が最も高く、番号が大きくなるに従って低くなる。従って、優先順位が高いほうから、ＳＰＵ１３によるＤＭＡ転送要求、ＲＰＵ９によるＤＭＡ転送要求、及び、ＣＰＵ５によるＤＭＡ転送要求、となる。本実施の形態では、優先順位はハードウェアで固定されており、変更することはできない。
【００５９】
ＳＰＵ１３、ＲＰＵ９、及びＣＰＵ５からのＤＭＡ要求要因（ＤＭＡ転送を要求する要因）について順に説明していく。
【００６０】
図３を参照して、ＳＰＵ１３のＤＭＡ要求要因として、（１）ウェーブデータをウェーブバッファに転送すること、（２）エンベロープデータをエンベロープバッファに転送すること、がある。ウェーブバッファ及びエンベロープバッファは、それぞれメインＲＡＭ２５上に設定されるウェーブデータ及びエンベロープデータのテンポラリ格納領域である。このテンポラリ格納領域の先頭アドレスは、ＳＰＵ１３内の制御レジスタ（図示せず）で定められ、このテンポラリ格納領域の大きさは、再生チャンネル数の設定により定められる。なお、ＳＰＵ１３の２つのＤＭＡ要求要因間の調停は、ＳＰＵ１３内のハードウェア（図示せず）で行われ、ＤＭＡＣ４は関知しない。
【００６１】
ＲＰＵ９のＤＭＡ要求要因として、テクスチャパターンデータをテクスチャバッファに転送すること、がある。テクスチャバッファは、メインＲＡＭ２５上に設定されるテクスチャパターンデータのテンポラリ格納領域である。このテンポラリ格納領域の先頭アドレス及びサイズは、ＲＰＵ９内の制御レジスタ（図示せず）で定められる。
【００６２】
ＣＰＵ５のＤＭＡ要求要因として、（１）仮想記憶管理においてページミスが発生した場合のページ転送、（２）アプリケーションプログラム等が要求するデータ転送、がある。なお、ＣＰＵ５内で複数のＤＭＡ転送要求が同時に発生した場合は、その調停はＣＰＵ５で実行されるソフトウェアにて行われ、ＤＭＡＣ４は関知しない。
【００６３】
ＣＰＵ５による上記（１）のＤＭＡ要求要因についてもう少し詳しく説明する。ＣＰＵ５のＤＭＡ転送要求は、ソフトウェアの実行に応じて行われる。マルチメディアプロセッサ１の一般的なソフトウェア構造では、仮想記憶管理は、ＯＳ（オペレーティングシステム）によって行われる。仮想記憶管理においてページミスが発生し、ページスワップの必要が発生すると、ＯＳは、ＤＭＡＣ４にＤＭＡ転送要求を発行する。
【００６４】
ＣＰＵ５による上記（２）のＤＭＡ要求要因についてもう少し詳しく説明する。ＯＳ等のシステムソフトウェアやアプリケーションソフトウェアの実行中、外部メモリ５０とメインＲＡＭ２５との間で、まとまったデータ転送の必要が生じた場合、ＤＭＡ要求が発行される。
【００６５】
図２に戻って、伸張回路４８は、ＬＺ７７（Ｌｅｍｐｅｌ  Ｚｉｖ  ７７）アルゴリズムに基づくデータ伸張を実行する。従って、ＤＭＡＣ４は、ＣＰＵ５によるＤＭＡ転送要求に対して、外部メモリ５０に格納された圧縮データを伸張しながら、メインＲＡＭ２５へＤＭＡ転送することが可能である。このように、本実施の形態では、ＣＰＵ５が要求するＤＭＡ転送に限り、圧縮されたデータを伸張しながらＤＭＡ転送することを可能としている。以下、データ伸張ＤＭＡ転送について詳細に説明する。
【００６６】
図４は、１回のＤＭＡ転送要求によるデータ伸張ＤＭＡ転送の説明図である。図４を参照して、転送元データの圧縮は、外部メモリアドレスの２５６バイト＝１ブロックの単位で行われている。図４では、転送元データが３つのブロック＃０〜＃２からなる例を挙げている。ブロック＃０及びブロック＃２は、圧縮ブロック（つまり圧縮データ）であり、ブロック＃１は、非圧縮ブロック（つまり生データ）である。生データは、圧縮されていないデータのことである。
【００６７】
圧縮ブロック＃０及び＃２の各々は、圧縮ブロック識別コード（以下、「ＩＤコード」と呼ぶ。）を先頭２バイトに含む。従って、ＤＭＡ実行ユニット４６は、ブロックの先頭２バイトと、後述の圧縮ブロック識別レジスタ６２に格納されているＩＤコードと、を比較して、一致した場合は、当該ブロックを圧縮ブロックと判断して、伸張回路４８によるデータ伸張を行いつつ、ＤＭＡ転送を行う。一方、不一致の場合は、当該ブロックを非圧縮ブロックと判断して、伸張を行うことなく、ＤＭＡ転送する。
【００６８】
従って、圧縮ブロック＃０及び＃２は、ＤＭＡ転送時に伸張され、メインＲＡＭ２５には、伸張されたデータが格納される。一方、非圧縮ブロック＃１は、そのまま転送され、メインＲＡＭ２５には、生データが格納される。このように、１回のＤＭＡ転送要求で、圧縮ブロックと非圧縮ブロックとを混在してＤＭＡ転送することが可能である。
【００６９】
図中の斜線部のデータは、データ伸張ＤＭＡでは使用されない部分であり、外部メモリ５０における斜線部に、生データを配置して外部メモリ５０の使用効率を上げることが可能である。
【００７０】
図５は、図４の圧縮ブロックの構成を示す図である。図５を参照して、圧縮ブロックの先頭２バイトにはＩＤコードが配置される。ＩＤコードに続いて、ビットストリームとバイトストリームとが交互に配置される。ビットストリームの各々は、８ビット＝１バイトで構成され、バイトストリームの各々は、１〜８バイトのうちのいずれかのサイズで構成される。圧縮ブロックの大きさは、最大２５６バイトである。
【００７１】
ここで、圧縮ブロックのビットストリーム及びバイトストリームの詳細を説明する前に、データ圧縮について簡単に説明する。上記のように、本実施の形態で採用した圧縮アルゴリズムは、ＬＺ７７である。ＬＺ７７は、スライド辞書法とも呼ばれ、辞書に登録された（過去に出現した）データ列の中から符号化すべきデータ列と最長一致するデータ列を探し出して、その符号化すべきデータ列を、一致したデータ列の位置情報（以下、「一致位置情報」と呼ぶ。）及び長さ情報（以下、「一致長情報」と呼ぶ。）に置き換えることにより、圧縮を行うアルゴリズムである。加えて、本実施の形態では、スライド辞書法による一致長情報を可変長符号化することにより、圧縮率をより高めている。本実施の形態では、可変長符号化の例としてハフマン符号化を挙げる。
【００７２】
図５に戻って、バイトストリームは、生データ及び一致位置情報を含み、ビットストリームは、圧縮あるいは非圧縮のいずれかを示す圧縮／非圧縮フラグ及びハフマン符号化された一致長情報を含む。
【００７３】
図６は、一致長情報のハフマン符号化を行う際の符号割り当ての説明図である。図６を参照して、ビットストリームに格納される圧縮／非圧縮フラグが「０」のときは、データが圧縮されていないこと、つまり、生データであることを示す。生データのサイズは、１バイトで固定されているため、圧縮／非圧縮フラグが「０」を示すときは、対応する生データのサイズは１バイトである。
【００７４】
ビットストリームに格納される圧縮／非圧縮フラグが「１」のときは、データが圧縮されていることを示す。この場合、ビットストリームには、そのビット「１」に続いて、ハフマン符号化された一致長情報が格納される。一致長情報は、圧縮前の一致データ列のサイズをバイト数で示すものであるところ、図６に示すように、圧縮前の一致データ列のサイズが、そのサイズに応じて、１〜６ビットの可変長のビットデータに符号化される。
【００７５】
ここで、「ｎａｍａｍｕｇｉ  ｎａｍａｇｏｍｅ  ｎａｍａｔａｍａｇｏ」なるデータ列（ヌル文字などの文字列終端記号を含まない。）を圧縮したものをＣ言語で表した例を（表１）に示す。
【００７６】
【表１】
0004625929.tif 000002
【００７７】
（表１）を参照して、先頭の２バイトのＩＤコードに続いて格納されている１バイト（０ｂ０００１００００）は、ビットストリーム（図５参照）であり、ＭＳＢから、「０」、「０」、「０」、「１０」、「０」、「０」、「０」の７つのフィールドに分解される。各フィールド「０」は、非圧縮を示す圧縮／非圧縮フラグであり、フィールド「１０」のビット「１」は、圧縮を示す圧縮／非圧縮フラグであり、フィールド「１０」のビット「０」は、圧縮前の一致データ列のサイズを示すハフマン符号である。図６から分かるように、ハフマン符号「０」は、圧縮前の一致データ列のサイズが２バイトであることを示す。
【００７８】
従って、このビットストリームによって、続くバイトストリーム（図５参照）に、３バイトの生データ、２バイト（圧縮前のサイズ）の圧縮データの一致位置情報、および３バイトの生データが格納されていることが示される。
【００７９】
このビットストリームに続く、「ｎ」、「ａ」、「ｍ」、「１」、「ｕ」、「ｇ」、「ｉ」は、生データ及び一致位置情報を格納しているバイトストリームである。「ｎ」、「ａ」、「ｍ」は、生データである。これに続く「１」は、一致位置情報であり、２バイトの圧縮データの位置を示す。
【００８０】
一致位置情報「Ｎ（自然数）」は、直前のデータが生データであればその生データの位置を「０」として、直前のデータが圧縮データであれば伸張されたデータの末尾の位置を「０」として、Ｎバイト前に一致データ列の先頭が位置することを示す。上の例では、一致位置情報「１」は、直前の伸張データ「ｍ」の位置を「０」として、１バイト前に一致データ列「ａｍ」の先頭「ａ」が位置することを示す。
【００８１】
従って、一致位置情報「Ｎ」が示す一致データ列の先頭位置から、一致長情報が示すバイト数分のデータ列を取得することにより、伸張を行うことができる。上の例では、一致位置情報「１」が示す一致データ列の先頭位置から、一致長情報「０」が示す２バイトのデータ列「ａｍ」を取得することにより、伸張を行うことがでる。
【００８２】
一致長情報「１」に続く「ｕ」、「ｇ」、「ｉ」は、生データである。以下同様に、ビットストリームとバイトストリームとが交互に圧縮ブロックに格納される。
【００８３】
さて、次に、ＤＭＡＣ４の詳細を説明する。
【００８４】
図７は、ＤＭＡＣ４の内部構成の詳細を示すブロック図である。図７を参照して、ＤＭＡＣ４は、リクエストバッファ１０５，１０９，１１３、ＤＭＡリクエストアービタ４４、ＤＭＡリクエストキュー４５、及びＤＭＡ実行ユニット４６を含む。
【００８５】
リクエストバッファ１０５は、ＣＰＵ転送元アドレスレジスタＣＳ、ＣＰＵ転送先アドレスレジスタＣＤ、及びＣＰＵ転送バイト数レジスタＣＢを含む。リクエストバッファ１０９は、ＲＰＵ転送元アドレスレジスタＲＳ、ＲＰＵ転送先アドレスレジスタＲＤ、及びＲＰＵ転送バイト数レジスタＲＢを含む。リクエストバッファ１１３は、ＳＰＵ転送元アドレスレジスタＳＳ、ＳＰＵ転送先アドレスレジスタＳＤ、及びＳＰＵ転送バイト数レジスタＳＢを含む。
【００８６】
ＤＭＡリクエストアービタ４４は、リクエストセレクタ８０、リクエストアービタ８２、及びＤＭＡ要求有効ビットＣＶ，ＲＶ，ＳＶを含む。
【００８７】
ＤＭＡ実行ユニット４６は、ＤＭＡＣステートマシン１００、伸張回路４８、ＤＭＡリクエストキューステータスレジスタ８４、ＤＭＡステータスレジスタ８６、ＤＭＡイネーブルレジスタ８８、割込イネーブルレジスタ９０、リードデータバッファ９２、ライトデータ格納レジスタ９４、及びメインＲＡＭライトデータバッファ９６を含む。
【００８８】
伸張回路４８は、データ伸張有効レジスタ６０、圧縮ブロック識別レジスタ６２、ヘッダ格納レジスタ６４、一致検出回路７０、バイトストリーム格納レジスタ６６、ビットストリーム格納シフトレジスタ６８、辞書ＲＡＭ７２、辞書ＲＡＭコントローラ７４、ビットストリーム解釈論理７６、及びマルチプレクサ（ＭＵＸ）７８を含む。
【００８９】
ＤＭＡＣ４に対してＤＭＡ転送を要求する機能ユニットは、ＣＰＵ５、ＲＰＵ９、及びＳＰＵ１３の３つである。ＣＰＵ５からのＤＭＡ転送要求は、Ｉ／Ｏバス２７を通じて行われる。具体的には、ＣＰＵ５は、Ｉ／Ｏバス２７を通じて、「転送元アドレス」、「転送先アドレス」、及び「転送バイト数」を、それぞれＣＰＵ転送元アドレスレジスタＣＳ、ＣＰＵ転送先アドレスレジスタＣＤ、及びＣＰＵ転送バイト数レジスタＣＢ」に書き込む。そして、ＣＰＵ５が、ＣＰＵ５に対応して設けられたＤＭＡ要求有効ビットＣＶに「１」を書き込むことにより、ＣＰＵ５からのＤＭＡ転送要求が有効になる。
【００９０】
ＲＰＵ９からのＤＭＡ転送要求では、「転送元アドレス」、「転送先アドレス」、「転送バイト数」、及びＤＭＡ転送要求信号ＲＤＲが、ＤＭＡＣ４に直接入力される。具体的には、ＲＰＵ９は、ＤＭＡ転送要求信号ＲＤＲをアサートし、これに応じて、ＲＰＵ９から入力された「転送元アドレス」、「転送先アドレス」、及び「転送バイト数」が、それぞれＲＰＵ転送元アドレスレジスタＲＳ、ＲＰＵ転送先アドレスレジスタＲＤ、及びＲＰＵ転送バイト数レジスタＲＢに格納されるとともに、ＲＰＵ９に対応して設けられたＤＭＡ要求有効ビットＲＶの値が「１」にセットされる。これにより、ＲＰＵ９からのＤＭＡ転送要求が有効になる。
【００９１】
ＳＰＵ１３からのＤＭＡ転送要求では、「転送元アドレス」、「転送先アドレス」、「転送バイト数」、及びＤＭＡ転送要求信号ＳＤＲが、ＤＭＡＣ４に直接入力される。具体的には、ＳＰＵ１３は、ＤＭＡ転送要求信号ＳＤＲをアサートし、これに応じて、ＳＰＵ１３から入力された「転送元アドレス」、「転送先アドレス」、及び「転送バイト数」が、それぞれＳＰＵ転送元アドレスレジスタＳＳ、ＳＰＵ転送先アドレスレジスタＳＤ、及びＳＰＵ転送バイト数レジスタＳＢに格納されるとともに、ＳＰＵ１３に対応して設けられたＤＭＡ要求有効ビットＳＶの値が「１」にセットされる。これにより、ＳＰＵ１３からのＤＭＡ転送要求が有効になる。
【００９２】
リクエストアービタ８２は、ＤＭＡ転送要求が１つのみ有効である場合は、そのＤＭＡ転送要求を選択するように、ＤＭＡ転送要求が複数有効である場合は、図３のＤＭＡ優先順位テーブルに従って、有効なＤＭＡ転送要求の中で最も優先順位が高いＤＭＡ転送要求を選択するように、リクエストセレクタ８０に対して選択信号を出力する。
【００９３】
リクエストセレクタ８０は、リクエストアービタ８２からの選択信号により選択されたＤＭＡ転送要求に対応するリクエストバッファ１０５，１０９あるいは１１３に格納された「転送元アドレス」、「転送先アドレス」、及び「転送バイト数」をＤＭＡリクエストキュー４５に出力する。
【００９４】
ＤＭＡリクエストキュー４５は、リクエストバッファから入力されたＤＭＡ転送要求を入力順に出力するＦＩＦＯ構造のバッファである。具体的には、次の通りである、
ＤＭＡリクエストキュー４５には、リクエストバッファから入力された、「転送元アドレス」、「転送先アドレス」、及び「転送バイト数」、並びに、どの機能ユニット（ＣＰＵ５／ＲＰＵ９／ＳＰＵ１３）からの要求であるかを示す情報を、ＤＭＡ転送要求として格納する。
【００９５】
ＤＭＡリクエストキュー４５は、ＤＭＡ転送要求を受け付けると、そのＤＭＡ転送要求を行った機能ユニット５，９あるいは１３に対応するＤＭＡ要求有効ビットＣＶ，ＲＶあるいはＳＶの値を「０」にクリアし、その機能ユニットが新たなＤＭＡ転送要求を発行できるようにする。一方、ＤＭＡリクエストキュー４５は、キューがビジー（フル）の状態では新たなＤＭＡ転送要求を受け付けない。
【００９６】
また、ＤＭＡリクエストキュー４５は、キューの状態（ビジー／レディ）をＤＭＡリクエストキューステータスレジスタ８４に反映する。ＤＭＡリクエストキューステータスレジスタ８４は、ＣＰＵ５がＩ／Ｏバス２７を通じてアクセス可能である。ＣＰＵ５は、このレジスタ８４をリードすることにより、ＤＭＡリクエストキュー４５の状態を知ることができ、新たなＤＭＡ転送要求を発行可能か否かを判断できる。
【００９７】
ＤＭＡリクエストキュー４５から出力されたＤＭＡ転送要求（「転送元アドレス」、「転送先アドレス」、及び「転送バイト数」、並びに、どの機能ユニットからの要求であるかを示す情報）は、ＤＭＡＣステートマシン１００に入力される。ＤＭＡＣステートマシン１００は、入力されたＤＭＡ転送要求に基づいて、外部バスリード要求信号ＥＢＲＲ、外部バスアドレスＥＢＡ、及び外部バスリードバイト数信号ＥＢＲＢを生成し、外部メモリインタフェース３に対して、外部バスリード要求信号ＥＢＲＲ、外部バスアドレスＥＢＡ、及び外部バスリードバイト数信号ＥＢＲＢを外部バスアクセス要求として出力する。
【００９８】
外部バスリード要求信号ＥＢＲＲによる外部バスアクセス要求が許可されると、外部メモリ５０からのリードデータが外部メモリインタフェース３からＤＭＡＣ４に順次入力される。入力されたリードデータは、順次リードデータバッファ９２に格納され、１バイト／１ワードのデータが入力されるたびに、外部バスリードカウント信号ＥＢＲＣがアサートされる。外部バスリードカウント信号ＥＢＲＣは、ＤＭＡＣステートマシン１００に入力され、ＤＭＡＣステートマシン１００は、現在までに何バイトのデータがリードされたかを知ることができる。
【００９９】
ＤＭＡＣステートマシン１００は、データ伸張のイネーブル／ディセーブルを制御するデータ伸張有効レジスタ６０の値が「１」である場合（つまり、データ伸張がイネーブルの場合）、外部バスアドレスの下位８ビットが０ｘ００および０ｘ０１を示す２バイトのリードデータをヘッダ格納レジスタ６４とライトデータ格納レジスタ９４の双方に格納する。この場合、ＤＭＡＣステートマシン１００は、マルチプレクサ７８に対して、リードデータバッファ９２からのデータを選択する選択信号を与え、これによって、リードデータバッファ９２からの当該２バイトのリードデータがライトデータ格納レジスタ９４に格納される。
【０１００】
一致検出回路７０は、ヘッダ格納レジスタ６４に格納された２バイトの値と、圧縮ブロック識別レジスタ６２に格納された２バイトの値（ＩＤコード）と、を比較して両者が一致した場合、その旨をＤＭＡＣステートマシン１００に通知する。この通知を受けたＤＭＡＣステートマシン１００は、続くＫバイト（２〜２５４バイトまでの値をとり得る。）のデータを圧縮ブロックとみなし、順次ビットストリーム格納シフトレジスタ６８またはバイトストリーム格納レジスタ６６に格納する。この場合、圧縮ブロックのビットストリームは、ビットストリーム格納シフトレジスタ６８に格納し、バイトストリームは、バイトストリーム格納レジスタ６６に格納する。
【０１０１】
一方、一致検出回路７０は、ヘッダ格納レジスタ６４に格納された２バイトの値と、圧縮ブロック識別レジスタ６２に格納された２バイトの値（ＩＤコード）と、を比較して両者が一致しなかった場合、その旨をＤＭＡＣステートマシン１００に通知する。この通知を受けたＤＭＡＣステートマシン１００は、ヘッダ格納レジスタ６４に格納された２バイトを含む２５６バイトを非圧縮ブロックとみなす。そして、ＤＭＡＣステートマシン１００は、ライトデータ格納レジスタ９４に格納されている２バイトのデータを有効なライトデータとして扱う。更に続いてリードデータバッファ９２に入力されるデータを、外部バスアドレスの下位８ビットが０ｘ００を示すまで、順次ライトデータ格納レジスタ９４に入力し、ライトデータ格納レジスタ９４に８バイトのデータがたまる毎にメインＲＡＭライトデータバッファ９６に出力する。但し、外部バスアドレスの下位８ビットが０ｘ００を示す前に要求した全データのリードが完了した場合には、ライトデータ格納レジスタ９４に８バイトのデータがたまっていなくても、その時点でライトデータ格納レジスタ９４に格納されているデータをメインＲＡＭライトデータバッファ９６に出力する。
【０１０２】
ビットストリーム格納シフトレジスタ６８に格納されたビットストリームは、１ビットずつビットストリーム解釈論理７６に出力される。ビットストリーム解釈論理７６は、入力されたビットストリームを順次解釈し、辞書ＲＡＭコントローラ７４を制御して、圧縮されたデータを伸張していく。
【０１０３】
具体的には、ビットストリーム解釈論理７６は、受け取ったビット、つまり圧縮／非圧縮フラグが、「０」（非圧縮）を示しているときは、辞書ＲＡＭコントローラ７４に対して、その旨を通知する。この通知を受けた辞書ＲＡＭコントローラ７４は、バイトストリーム格納レジスタ６６から入力された１バイトのデータ（生データ）を辞書ＲＡＭ７２に書き込むとともに、伸張データとしてマルチプレクサ７８に出力する。
【０１０４】
一方、ビットストリーム解釈論理７６は、受け取ったビット、つまり圧縮／非圧縮フラグが、「１」（圧縮）を示しているときは、順次入力されてくるハフマン符号化された一致長情報を復元して、その一致長情報を辞書ＲＡＭコントローラ７４に出力する。辞書ＲＡＭコントローラ７４は、ビットストリーム解釈論理７６から受け取った一致長情報と、バイトストリーム格納レジスタ６６から受け取った一致位置情報と、に基づいて、辞書ＲＡＭ７２から一致データ列を読み出して、伸張データとしてマルチプレクサ７８に出力するとともに、新たな伸張データとして辞書ＲＡＭ７２に書き込む。
【０１０５】
ＤＭＡＣステートマシン１００は、データ伸張有効レジスタ６０の値が「１」である場合（つまり、データ伸張がイネーブルの場合）、マルチプレクサ７８に対して、辞書ＲＡＭコントローラ７４からの伸張データを選択する選択信号を出力する。従って、この場合、辞書ＲＡＭコントローラ７４が出力した伸張データが、ライトデータ格納レジスタ９４に順次格納される。この際、ライトデータ格納レジスタ９４に予め格納されていた２バイトのリードデータ（外部バスアドレスの下位８ビットが０ｘ００および０ｘ０１を示す２バイトのリードデータ）は破棄され、辞書ＲＡＭコントローラ７４から出力される伸張データに上書きされる。一方、ＤＭＡＣステートマシン１００は、データ伸張有効レジスタ６０の値が「０」である場合（つまり、データ伸張がディセーブルの場合）、マルチプレクサ７８に対して、リードデータバッファ９２からのデータを選択する選択信号を出力する。ＣＰＵ５は、Ｉ／Ｏバス２７を通じて、データ伸張有効レジスタ６０に格納されたデータのリード／ライトが可能である。
【０１０６】
辞書ＲＡＭ７２は、２５６×８ビットの容量を有し、辞書ＲＡＭコントローラ７４からの制御により、伸張データの内の最新の２５６バイトが常に格納される。
【０１０７】
ライトデータ格納レジスタ９４は、８バイトのデータがたまるたびに、たまったデータをメインＲＡＭライトデータバッファ９６へ出力する。メインＲＡＭライトデータバッファ９６は、メインＲＡＭアクセスアービタ２３へ受け取ったデータを出力する。ここで、メインＲＡＭアクセスアービタ２３への転送バイト数が「８」で割り切れない場合、最後の剰余分のデータは、ライトデータ格納レジスタ９４に８バイトのデータがたまらなくてもメインＲＡＭライトデータバッファ９６に出力される。なお、転送バイト数はデータ伸張後のバイト数で示される。
【０１０８】
ＤＭＡＣステートマシンは、ＤＭＡリクエストキュー４５から入力された転送先アドレスおよび転送バイト数から、メインＲＡＭライトアドレスＭＷＡ、メインＲＡＭライトバイト数（１〜８バイト）ＭＷＢを算出して、メインＲＡＭライト要求信号ＭＷＲとともに、メインＲＡＭアクセスアービタ２３に出力する。
【０１０９】
メインＲＡＭライト要求信号ＭＷＲによるライト要求が受け付けられると、メインＲＡＭライト要求アクノリッジ信号ＭＷＲＡがメインＲＡＭアクセスアービタ２３から入力される。ＤＭＡＣステートマシン１００は、メインＲＡＭライト要求アクノリッジ信号ＭＷＲＡを受け取ると、次のデータライトのステートに移る。また、ＤＭＡＣステートマシン１００は、要求された全バイト数のＤＭＡ転送が完了すると、ＲＰＵ９からのＤＭＡ転送要求については、その完了を通知すべく、ＲＰＵ９に対して、ＲＰＵ要求ＤＭＡ終了信号ＲＤＥを出力し、ＳＰＵ１３からのＤＭＡ転送要求については、その完了を通知すべく、ＳＰＵ１３に対して、ＳＰＵ要求ＤＭＡ終了信号ＳＤＥを出力する。
【０１１０】
ＤＭＡＣステートマシン１００の状態は、ＤＭＡステータスレジスタ８６に反映される。ＤＭＡステータスレジスタ８６は、ＤＭＡ完了ビット、ＤＭＡ実行中ビット、及びＤＭＡ未完了数フィールドを含む。ＤＭＡ完了ビットには、ＣＰＵ５から要求されたＤＭＡ転送が完了する度に「１」がセットされる。割込イネーブルレジスタ９０に格納された割り込みイネーブルビットをイネーブルに設定している場合、ＤＭＡ完了ビットに「１」がセットされるのと同時に、ＤＭＡＣステートマシン１００は、ＣＰＵ５に対する割り込み要求ＣＩを発行する。ＤＭＡ実行中ビットは、ＤＭＡ転送が実行中か否かを示すビットである。ＤＭＡ未完了数フィールドは、ＣＰＵ５から要求された未完了のＤＭＡ転送の数を示すフィールドである。ＣＰＵ５は、Ｉ／Ｏバス２７を通じてＤＭＡステータスレジスタ８６の値をリードして、ＤＭＡＣ４の現在の状態を知ることができる。
【０１１１】
ＤＭＡイネーブルレジスタ８８には、ＤＭＡ転送イネーブルビットが格納される。ＤＭＡ転送イネーブルビットは、ＣＰＵ５から要求されるＤＭＡ転送のイネーブル／ディセーブルを制御するビットである。ＣＰＵ５は、Ｉ／Ｏバス２７を通じて、ＤＭＡイネーブルレジスタ８８及び割込イネーブルレジスタ９０に格納されたデータのリード／ライトが可能である。
【０１１２】
さて、以上のように、本実施の形態では、ＤＭＡＣ４は、データ伸張機能を有しているため、メインＲＡＭ２５に転送するデータ（プログラムコードを含む。）を圧縮して、外部メモリ５０に格納できる。その結果、外部メモリ５０の容量削減を図ることができる。また、ＤＭＡＣ４がデータ伸張機能を有しているので、ＣＰＵ５からのＤＭＡ転送要求では、データを圧縮して外部メモリ５０から外部バス５１に送出できる。従って、ＣＰＵ５が消費する外部バスバンドを低減できる。従って、他の機能ユニット（ＣＰＵ５、ＲＰＵ９及びＳＰＵ１３）が外部バス５１を使用できる時間を多くできるとともに、当該他の機能ユニットがバス使用許可を得るまでのレイテンシを短くできる。
【０１１３】
また、１回のＤＭＡ転送において、圧縮データと非圧縮データとを混在できるので、それぞれ別個にＤＭＡ転送要求を行わなければならない場合と比較して、ＤＭＡ転送要求の回数を少なくできる。従って、ＣＰＵ５のＤＭＡ転送要求に関する処理量の軽減を図ることができ、それ故、ＣＰＵ５の能力を他の処理に割り当てることができる。よって、ＣＰＵ５の全体的なパフォーマンスを向上できる。さらに、プログラムの設計において、圧縮データと非圧縮データとを区別して管理する必要がなく、プログラマの負担軽減を図ることができる。
【０１１４】
全てのデータを圧縮して、ＤＭＡ転送することもできるが、圧縮しても圧縮率が低いため圧縮するメリットがないデータも存在する。このようなデータを圧縮しても、圧縮のメリットがないばかりか、その伸張処理が必要になるので、処理量も増加してしまう。従って、圧縮データと非圧縮データとを混在できるようにすることで、ＣＰＵ５の全体的なパフォーマンスの向上だけでなく、ＤＭＡＣ４自身の全体的なパフォーマンスの向上をも図ることができる。
【０１１５】
さらに、ＤＭＡＣ４が、データ伸張を行いつつ（行いながら）、ＤＭＡ転送を行うので、ＣＰＵ５は、伸張処理を行うことを要せず、それ故ＣＰＵ５の負荷を軽減できる。また、データ伸張を行いつつ、メインＲＡＭ２５へ転送するので、データ伸張完了後にメインＲＡＭ２５への転送を行う場合と比較して、転送の高速化を図ることができる。
【０１１６】
また、本実施の形態では、ＩＤコードと一致するコードがブロックに含まれる場合（図４参照）、当該ブロックに含まれる圧縮データを伸張回路４８に転送し、伸張回路４８は、当該圧縮データを伸張する。従って、圧縮データと非圧縮データとを混在させても、ブロックにＩＤコードを含めるだけで、容易に圧縮データと非圧縮データとを分離できる。
【０１１７】
ＩＤコードは、ＣＰＵ５から書き換え可能な圧縮ブロック識別レジスタ６２に格納されるため、ソフトウェアの実行中に動的にＩＤコードを変更することができる。仮に、非圧縮データのブロックが膨大に存在し、非圧縮データの各ブロックのいずれにも含まれないデータをＩＤコードとして選択することが不可能な場合でも、動的にＩＤコードを変更することにより、問題なく圧縮データと非圧縮データとを混在できる。
【０１１８】
さらに、本実施の形態では、ＬＺ７７に基づく圧縮に加えて、ハフマン符号化を行っている。従って、外部メモリ５０に格納されるデータの圧縮率をより高くすることができる。
【０１１９】
さらに、本実施の形態によれば、ＣＰＵ５からのＤＭＡ転送要求においてのみ伸張処理を行うので、いたずらに伸張処理量が増大することはなく、処理の遅延を防止できる。
【０１２０】
さらに、本実施の形態では、ＣＰＵ５、ＲＰＵ９、及びＳＰＵ１３からのＤＭＡ転送要求を保持する３つのリクエストバッファ１０５，１０９及び１１３およびＤＭＡリクエストキュー４５を備えている。従って、ＤＭＡ転送実行中であっても、ＤＭＡ転送要求を受け付けることができる。特に、ＤＭＡチャンネルが１つしかない場合に有効である。
【０１２１】
また、ＣＰＵ５、ＲＰＵ９、及びＳＰＵ１３のそれぞれに対応して、リクエストバッファ１０５，１０９及び１１３を設けているため、ＤＭＡＣ４内でのＤＭＡ転送要求の調停が可能になる。従って、外部バスアクセス要求を調停する外部メモリインタフェース３は、ＤＭＡ転送要求の調停を行う必要がなく、調停処理としては外部バスアクセス要求の調停のみを行えばよく、システムのオーバヘッドを軽減できる。つまり、調停処理の分散・並列処理を行うことにより、オーバヘッドを軽減している。
【０１２２】
なお、本発明は、上記の実施の形態に限られるものではなく、その要旨を逸脱しない範囲で種々の態様において実施することが可能であり、例えば、以下のような変形も可能である。
【０１２３】
（１）上記では、外部メモリインタフェース３に対して、外部バスアクセス要求ができるのは、ＣＰＵ５及びＤＭＡＣ４だけであったが、より多くの機能ユニットが外部バスアクセス要求を行えるようにすることもできる。
【０１２４】
（２）上記では、ＤＭＡＣ４に対してＤＭＡ転送要求ができるのは、ＣＰＵ５、ＲＰＵ９、及びＳＰＵ１３だけであったが、より多くの機能ユニットあるいはより少ない機能ユニットがＤＭＡ転送要求を行えるようにすることもできる。この場合、ＤＭＡ転送要求が可能な機能ユニットの数と同じ数のリクエストバッファをＤＭＡＣ４に設ける。また、ＤＭＡリクエストキュー４５のエントリ数は、４つに限定されない。
【０１２５】
（３）上記では、データ伸張ＤＭＡを要求できるのは、ＣＰＵ５のみであったが、これに限定されず、他の機能ユニットが、データ伸張ＤＭＡを要求できるようにすることができる。
【０１２６】
（４）上記では、ＤＭＡ優先順位テーブルは固定であったが、所定条件の成立によって、複数の異なるＤＭＡ優先順位テーブルを切り替えて使用することもできる。
【図面の簡単な説明】
【０１２７】
【図１】本発明の実施の形態によるマルチメディアプロセッサ１の内部構成を示すブロック図である。
【図２】ＤＭＡＣ４のダイレクトメモリアクセス転送要求の調停に関するブロック図である。
【図３】ＤＭＡＣ４による調停の際に参照されるＤＭＡ優先順位テーブルの例示図である。
【図４】１回のダイレクトメモリアクセス転送要求によるデータ伸張ダイレクトメモリアクセス転送の説明図である。
【図５】図４の圧縮ブロックの構成を示す図である。
【図６】ハフマン符号化を行う際の符号割り当ての説明図である。
【図７】ＤＭＡＣ４の内部構成の詳細を示すブロック図である。
【符号の説明】
【０１２８】
１…マルチメディアプロセッサ、３…外部メモリインタフェース、４…ＤＭＡＣ、５…ＣＰＵ、７…ＣＰＵローカルＲＡＭ、９…ＲＰＵ、１１…カラーパレットＲＡＭ、１３…ＳＰＵ、１５…ＳＰＵローカルＲＡＭ、１７…ＧＥ、１９…ＹＳＵ、２１…外部インタフェースブロック、２３…メインＲＡＭアクセスアービタ、２５…メインＲＡＭ、２７…Ｉ／Ｏバス、２９…ビデオＤＡＣ、３１…オーディオＤＡＣブロック、４４…ＤＭＡリクエストアービタ、４５…ＤＭＡリクエストキュー、４６…ＤＭＡ実行ユニット、４８…伸張回路、５１…外部バス、５０…外部メモリ、６２…圧縮ブロック識別レジスタ、１００…ＤＭＡＣステートマシン、１０５，１０９，１１３…リクエストバッファ。
【図１】
0004625929.tif 000003
【図２】
0004625929.tif 000004
【図３】
0004625929.tif 000005
【図４】
0004625929.tif 000006
【図５】
0004625929.tif 000007
【図６】
0004625929.tif 000008
【図７】
0004625929.tif 000009