(57)【要約】【課題】  高速動作可能なＤＣＴ／逆ＤＣＴ装置ならびに方法を提供すること。【解決手段】  転置行列メモリ（１１１８）に接続された演算回路（１１２２）と、ＤＣＴ演算を行う、中間のクロックド記憶回路を有さない組み合わせ回路（１１３８）を有するＤＣＴ装置（１１１８−１１２６）であって、組み合わせ回路はＤＣＴを行うためのシーケンシャルに配置された所定数のステージ（１１５８−１１６４）を有し、またＤＣＴ装置はさらに入力データと転置行列メモリ（１１１８）の出力データを多重化する多重化器（１１２４）を有していても良い。また、ＤＣＴ装置の動作を制御する制御回路（１１１６）を有することが好ましい。【選択図】  図７９
2005348410.tif 000002
【特許請求の範囲】
【請求項１】
可変長の非符号化ビットフィールドでインターリーブされた複数の可変長コードにより符号化され、複数の固定長の非符号化フィールドを有する複数のデータブロックの復号化装置であって、
複数の固定長非符号化フィールドを除去し、前記可変長非符号化ビットフィールドと前記可変長の非符号化ビットフィールドでインターリーブされた前記複数の可変長コードと、複数のデータブロック中の前記複数の固定長非符号化フィールドの位置を示す複数の位置信号とを出力する前処理部と、
前記固定長非符号化フィールドの間に入力される可変長符号化データの復号化データが、前記固定長非符号化フィールドに対応する前記位置信号の間に復号化装置から出力されるように、前記位置信号を復号化されるデータと同期させて外部装置へ送出する手段とを含むことを特徴とする復号化装置。
【請求項２】
第１のバレルシフタセットと第１レジスタを有し、前記可変長の非符号化ビットフィールドでインターリーブされた前記複数の可変長コードを処理する第１処理部と、
第２のバレルシフタセットと第２レジスタを有し、複数のデータブロック中の前記複数の固定長非符号化フィールドの位置を示す複数の位置信号を処理する第２処理部とを更に有し、前記第１および第２処理部が同一であり、前記第１、第２バレルシフタセットの出力と前記第１、第２処理部が同じ制御信号を受信する請求項１記載の復号化装置。
【請求項３】
前記固定長非符号化フィールドの位置を示す位置信号を処理する前記第２処理部の出力が、データレジスタに保管されたデータから復号化時に除去される非符号化可変長フィールドのサイズ決定に用いられることを特徴とする請求項２記載の復号化装置。
【請求項４】
前記前処理部が、複数の固定長非符号化フィールドを除去し、前記可変長非符号化ビットフィールドと前記可変長の非符号化ビットフィールドでインターリーブされた前記複数の可変長コードを、複数の固定長ビットフィールドからなる複数の固定長コードとして、かつ一つの前記固定長ビットフィールドが、前記前処理フィールドでパス又は除去されたこと、前記前処理フィールドでパスされたことのいずれかを示すタグを有し、かつ前記タグは固定長の非符号化フィールドを示すマーカーの前又は後ろに存在するように出力することを特徴とする請求項１の復号化装置。
【請求項５】
前記データブロックがハフマン符号化されていることを特徴とする請求項１の復号化装置。
【請求項６】
可変長の非符号化ビットフィールドでインターリーブされた複数の可変長コードにより符号化され、複数の固定長の非符号化フィールドを有する複数のデータブロックの復号化方法であって、
複数の固定長非符号化フィールドを除去し、前記可変長非符号化ビットフィールドと前記可変長の非符号化ビットフィールドでインターリーブされた前記複数の可変長コードと、複数のデータブロック中の前記複数の固定長非符号化フィールドの位置を示す複数の位置信号とを出力する前処理ステップと、
前記固定長非符号化フィールドの間に入力される可変長符号化データの復号化データが、前記固定長非符号化フィールドに対応する前記位置信号の間に復号化装置から出力されるように、前記位置信号を復号化されるデータと同期させて外部装置へ送出するステップとを含むことを特徴とする復号化方法。
【請求項７】
第１のバレルシフタセットと第１レジスタを有する第１処理部を用いて、前記可変長の非符号化ビットフィールドでインターリーブされた前記複数の可変長コードを処理するステップと、
第２のバレルシフタセットと第２レジスタを有する第２処理部を用いて、複数のデータブロック中の前記複数の固定長非符号化フィールドの位置を示す複数の位置信号を処理するステップを更に有し、
前記第１および第２処理部が同一であり、前記第１、第２バレルシフタセットの出力と前記第１、第２処理部が同じ制御信号を受信する請求項６記載の復号化方法。
【請求項８】
前記固定長非符号化フィールドの位置を示す位置信号を処理する前記第２処理部の出力に応じて、データレジスタに保管されたデータから復号化時に除去される非符号化可変長フィールドのサイズを決定するステップを更に有することを特徴とする請求項７記載の復号化方法。
【請求項９】
前記前処理部ステップにおいて、複数の固定長非符号化フィールドを除去し、前記可変長非符号化ビットフィールドと前記可変長の非符号化ビットフィールドでインターリーブされた前記複数の可変長コードを、複数の固定長ビットフィールドからなる複数の固定長コードとして、かつ一つの前記固定長ビットフィールドが、前記前処理フィールドでパス又は除去されたこと、前記前処理フィールドでパスされたことのいずれかを示すタグを有し、かつ前記タグは固定長の非符号化フィールドを示すマーカーの前又は後ろに存在するように出力することを特徴とする請求項６記載の復号化方法。
【請求項１０】
前記データブロックがハフマン符号化されていることを特徴とする請求項６記載の復号化方法。
【請求項１１】
請求項６〜１０のいずれかに記載の方法をコンピューターが実行可能なプログラムコードとして記憶する記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は符号化されていない０またはそれ以上の可変長ビットフィールドを挿入された可変長コードを復号化する復号化器に関し、コードのいくつかは変化させない復号化器に関する。本発明はまた、パイプラインまたは記憶手段を持たないデータパスを用い、かつ高速で動作可能な離散コサイン変換（ＤＣＴ）装置に関する。
【背景技術】
【０００２】
一般に、大きな量のデータは電送、記憶、読み出しおよびハフマン符号化のような可変長符号化のいくつかのステージ手段での使用を含むさまざまな理由により圧縮されまた伸長される。ハフマン符号化はＤ．Ａ．ハフマンによる論文、「最小冗長コードの構築方法（”Ａ Ｍｅｔｈｏｄ ｆｏｒ ｔｈｅ Ｃｏｎｓｔｒｕｃｔｉｏｎ ｏｆ Ｍｉｎｉｍｕｎ Ｒｅｄｕｎｄａｎｃｙ Ｃｏｄｅｓ”Ｐｒｏｃ．ＩＲＥ，４０：１０９８，１９５２）」（非特許文献１）により最初に開示された。多くの場合、符号化ビット列中の可変長符号は不連続であり、他の非符号化ビットフィールドが挿入されている。このビットフィールドは制御および／またはフォーマット情報を表し、かつ／またはマーカーヘッダ、マーカーコード、スタッフバイト、パディングビットおよび含まれる付加ビット、たとえばＪＰＥＧ符号化データなどを含む、符号化データに対する追加事項を供給する。
【０００３】
可変長符号化においては、統計的に頻度の高い入力コードが頻度の低いデータよりも短い符号を割り当てられるように、入力データの発生の確からしさに基づいて異なる入力データに異なる長さの符号を割り当てる。頻度の低い入力コードは長いコードを割り当てられる。コードの割り当ては統計的もしくは適応的のいずれかによりなされる。統計的割り当ての場合、どのデータブロックが処理されるかに関わらず一定のデータには同じ出力コードが与えられる。適応的割り当ての場合、出力コードは特定の入力ブロックまたはデータブロックのセットの統計的分析および予想されるブロック間（またはブロックセット間）での変化に基づき割り当てられる。
【０００４】
高速な可変長復号化が必要となった場合、重大な問題が起きる。問題は特にＪＰＥＧ標準のような、符号化データ列が符号化データを挿入（インタリーブ）された符号化されていない可変長のビットフィールドを含む場合におきる。そのような可変長符号化データの高速復号化における大きな困難は、ＪＰＥＧ標準のように特定の非符号化ビットフィールドの長さが引き続く（符号化された）データの復号化が完全に終了した後でないと判別できない場合に発生する。次の符号化データの開始位置が、後ろのコードの復号化が完全に終わった後でないとわからないため、一般的に直接パイプライン処理を復号化器とともに用いることができない。
【０００５】
現存する解決法は、多くの用途に対して遅すぎるが、一つの入力データの復号化に数ステップ（クロックサイクル）を必要とするか、繰り返しユニット（ｉｔｅｒａｔｉｖｅ ｕｎｉｔｓ）を用いて一つより多いシンボルを１ステージ（クロックサイクル）で擬似的に同時復号化するかである。しかし、更なる復号化ブロックの追加はしばしばそのような復号化器を経済的に釣り合わなくし、さらに必要十分な速度を得られなくする。これは次の復号化器の処理開始が依然として次の入力データの先頭を決定する、前に位置する復号化器の処理結果に依存するため、複数の復号化器が完全な並列動作をしないからである。その結果、１ステージ（クロックサイクル）で複数のシンボルを復号化したとしても、そのステージ（クロック期間）は相対的に長く、全体の復号化器としては多くの用途において遅すぎることになる。
【０００６】
よって、従来の復号化器の問題点を１つかそれ以上解決した、可変長非符号化ビットフィールドでインターリーブされた可変長コードの復号化器に対する要求は明らかに存在する。具体的には、図７７に示された離散コサイン変換（ＤＣＴ）装置は８×８画素のブロックの完全二次元（２−Ｄ）変換を８×８画素ブロックの行にまず１−ＤＤＣＴを行うことで実現する。そして、別の１−ＤＤＣＴを８×８画素ブロックの列に対して行う。このような装置は具体的には入力回路１０９６、演算回路１１０４、制御回路１０９８、転置行列メモリ回路１０９０及び出力回路１０９２から構成される。
【０００７】
入力回路１０９６は８×８ブロックから８ビットの画素を受け付ける。入力回路１０９６は中間多重化器１１００、１１０２によって演算回路１１０４に接続される。演算回路１１０４は８×８ブロックの行または列全体のいずれかに算術操作を施す。制御回路１０９８は他のすべての回路を制御し、ＤＣＴアルゴリズムを実現する。演算回路の出力は転置行列メモリ１０９０、レジスタ１０９５および出力回路１０９２にに接続される。転置行列メモリは次の多重化器１１０２に出力を供給する多重化器１１００に接続されている。多重化器１１０２はまたレジスタ１０９４から入力を受信する。転置行列メモリ１０９０は８×８ブロックのデータを行に受け付け、列にデータを生成する。出力回路１０９２は８×８の画素データブロックになされるＤＣＴの係数を供給する。
【０００８】
典型的なＤＣＴ装置において、演算回路がもっとも複雑であるため、基本的には演算回路１１０４の速度が全体の速度を決定付ける。図７７における演算回路１１０４は、演算処理を図７８を参照して以下に説明されるいくつかのステージに分割して構成されている。これらのステージ１１１４、１１４８、１１５２、１１５６は加算器や乗算器などの共通利用されるものの集まりによって一つの回路で実現することができる。しかし、そのような回路１１０４は、共通に使われる一つの回路で複数のステージを構成しているため、最適化されたものに比べて遅いという欠点がある。これは中間結果の記憶に用いる記憶手段を含む。そのような回路のクロックサイクルとして割り当てられる時間は、回路の中の最も遅いステージの時間と同じかそれ以上でなければならず、全体としての時間は全部のステージの合計よりも長くなる可能性があるからである。
【０００９】
図７８は図７７に示した装置における、４ステージのＤＣＴの一部としての典型的な演算データパスを示している。図は現実の構成を反映しているわけではないが、機能は反映している。４つのステージ１１４４、１１４８、１１５２、１１５６のそれぞれは一つの、再構成可能な回路で構成されている。１サイクル毎に１−ＤＤＣＴである各４つの演算ステージ１１４４、１１４８、１１５２、１１５６が再構成される。この回路において、４つのステージ１１４４、１１４８、１１５２、１１５６のそれぞれは共通に使用されるもの（加算器および乗算器）の集まりを使用しており、ハードウエアを最小化している。
【００１０】
しかしながらこの回路の欠点は、最適化されたものに比べて遅いということである。４つのステージ１１４４、１１４８、１１５２、１１５６のそれぞれは同一の加算器および乗算器の集まりで構成されている。クロック周期は最も遅いステージで決まり、この例ではブロック１１４４における２０ｎｓである。入力及び出力多重化器１１４６および１１５４の遅延（各２ｎｓ）およびフリップフロップ１１５０の遅延（３ｎｓ）を加えると、合計時間は２７ｎｓである。よって、このＤＣＴ要素は２７ｎｓで動作することが可能である。
【００１１】
パイプライン化されたＤＣＴ要素もまたよく知られている。この構成の問題点は構成に多量のハードウエアを必要とすることである。本発明では同じ性能すなわち処理速度を提供はしないが、非常によい性能対大きさの妥協点を提供する。さらに、現状のＤＣＴ要素の大半よりもよい速度的な利点を提供する。よって、従来の技術が有する１つまたはそれ以上の課題を解決できる、改良されたＤＣＴ／逆ＤＣＴ方法及び装置に対する要求は明確である。特に、ＤＣＴ／逆ＤＣＴ装置において必要な結果を計算する中心的な演算回路に要する時間を短縮でき、ＤＣＴまたは逆ＤＣＴ全体の性能を向上する方法および装置の必要性は明確である。
【００１２】
【非特許文献１】Ｄ．Ａ．ハフマン、「最小冗長コードの構築方法」（”A Method for the Construction of Minimun Redundancy Codes”），Proc.IRE,40:1098,1952）
【発明の開示】
【課題を解決するための手段】
【００１３】
本発明の第１は、可変長の非符号化ビットフィールドでインターリーブされた複数の可変長コードにより符号化されたデータと、符号化されない固定長の非符号化フィールドを有する複数のデータブロックの復号化装置であって、複数の固定長非符号化フィールドを除去し、可変長非符号化ビットフィールドと可変長の非符号化ビットフィールドでインターリーブされた複数の可変長コードと、複数のデータブロック中の複数の固定長非符号化フィールドの位置を示す複数の位置信号とを出力する前処理部と、固定長非符号化フィールドの間に入力される可変長符号化データの復号化データが、固定長非符号化フィールドに対応する位置信号の間に復号化装置から出力されるように、位置信号を復号化されるデータと同期させて復号化装置の出力へ受け渡しするする受け渡し手段とを含む復号化装置である。
【００１４】
また、好ましくは、第１のバレルシフタセットと第１レジスタを有し、可変長の非符号化ビットフィールドでインターリーブされた複数の可変長コードを処理する第１処理部と、第２のバレルシフタセットと第２レジスタを有し、複数のデータブロック中の複数の固定長非符号化フィールドの位置を示す複数の位置信号を処理する第２処理部とを更に有し、第１および第２処理部が同一であり、第１、第２バレルシフタセットの出力と第１、第２処理部が同じ制御信号を受信する復号化装置である。
【００１５】
好ましい別の構成としては、固定長非符号化フィールドの位置を示す位置信号を処理する第２処理部の出力が、データレジスタに保管されたデータから復号化時に除去される非符号化可変長フィールドのサイズ決定に用いられる復号化装置である。さらに、別の好ましい構成としては、前処理部が、複数の固定長非符号化フィールドを除去し、可変長非符号化ビットフィールドと可変長の非符号化ビットフィールドでインターリーブされた複数の可変長コードを、複数の固定長ビットフィールドからなる複数の固定長コードとして、かつ一つの固定長ビットフィールドが、前処理フィールドでパス又は除去されたこと、前処理フィールドでパスされたことのいずれかを示すタグを有し、かつタグは固定長の非符号化フィールドを示すマーカーの前又は後ろに存在するように出力する復号化装置である。
【００１６】
データブロックがハフマン符号化されていることがさらに好ましい。また、本発明の第２は、可変長の非符号化ビットフィールドでインターリーブされた複数の可変長コードにより符号化されたデータと、符号化されない固定長の非符号化フィールドを有する複数のデータブロックの復号化方法であって、複数の固定長非符号化フィールドを除去し、可変長非符号化ビットフィールドと可変長の非符号化ビットフィールドでインターリーブされた複数の可変長コードと、複数のデータブロック中の複数の固定長非符号化フィールドの位置を示す複数の位置信号とを出力する前処理ステップと、固定長非符号化フィールドの間に入力される可変長符号化データの復号化データが、固定長非符号化フィールドに対応する位置信号の間に復号化装置から出力されるように、位置信号を復号化されるデータと同期させて復号化装置の出力へ受け渡しするする受け渡しステップとを含む復号化方法である。
【００１７】
好ましくは、第１のバレルシフタセットと第１レジスタを有する第１処理部を用いて、可変長の非符号化ビットフィールドでインターリーブされた複数の可変長コードを処理するステップと、第２のバレルシフタセットと第２レジスタを有する第２処理部を用いて、複数のデータブロック中の複数の固定長非符号化フィールドの位置を示す複数の位置信号を処理するステップを更に有し、第１および第２処理部が同一であり、第１、第２バレルシフタセットの出力と第１、第２処理部が同じ制御信号を受信する復号化方法である。
【００１８】
さらには、固定長非符号化フィールドの位置を示す位置信号を処理する第２処理部の出力に応じて、データレジスタに保管されたデータから復号化時に除去される非符号化可変長フィールドのサイズを決定するステップを更に有する復号化方法である。好ましくは、前処理部ステップにおいて、複数の固定長非符号化フィールドを除去し、可変長非符号化ビットフィールドと可変長の非符号化ビットフィールドでインターリーブされた複数の可変長コードを、複数の固定長ビットフィールドからなる複数の固定長コードとして、かつ一つの固定長ビットフィールドが、前処理フィールドでパス又は除去されたこと、前処理フィールドでパスされたことのいずれかを示すタグを有し、かつタグは固定長の非符号化フィールドを示すマーカーの前又は後ろに存在するように出力する復号化方法である。
【００１９】
また、データブロックがハフマン符号化されていることが好ましい。以下の詳細な説明においては、他の説明はもとより、特に図８２〜９１およびそれに関係する説明に注意されたい。
【発明を実施するための最良の形態】
【００２０】
「目次」
１．０ 図面の簡単な説明
２．０ テーブルリスト
３．０ 好適な及び他の実施例
３．１ 複数のストリームアーキテクチャの概要
３．２ ホスト／コプロセッサのキューイング
３．３ コプロセッサのレジスタ説明
３．４ 複数のストリームのフォーマット
３．５ 現アクティブストリームの判定
３．６ 現アクティブストリームのフェッチ命令
３．７ 命令のデコード及び実行
３．８ 命令コントローラのレジスタの更新
３．９ レジスタアクセスセマフォの意味論
３．１０ 命令コントローラ
３．１１ ローカルレジスタファイルモジュールの説明
３．１２ レジスタのリード・ライト処理
３．１３ メモリエリアのリード／ライト処理
３．１４ Ｃバス構造
３．１５ コプロセッサのデータタイプとデータ操作
３．１６ データ正規化処理
３．１７ アクセラレータカードの画像処理
３．１７．１ 合成
３．１７．２ 色空間変換命令
ａ． 単一出力カラー空間（ＳＯＧＣＳ）変換モード
ｂ． 複数出力からー空間モード
３．１７．３ ＬＰＥＧ符号化／復号化
ａ． 符号化
ｂ． 復号化
３．１７．４ テーブル索引
３．１７．５ データ符号化命令
３．１７．６ 高速ＤＣＴ装置
３．１７．７ ハフマン復号
３．１７．８ イメージ変換命令
３．１７．９ コンボルージョン命令
３．１７．１０ マトリクス乗算
３．１７．１１ 階調（ハーフトーン）
３．１７．１２ 階層イメージフォーマット伸長
３．１７．１３ メモリコピー命令
ａ． 汎用データ移動命令
ｂ． ローカルＤＭＡ命令
３．１７．１４ フロー制御命令
３．１８ アクセラレータカードのモジュール
３．１８．１ ピクセルオーガナイザ
３．１８．２ ＭＵＶバッファ
３．１８．３ 結果オーガナイザ
３．１８．４ オペランドオーガナイザＢ，Ｃ
３．１８．５ メインデータパスユニット
３．１８．６ データキャッシュコントローラとキャッシュ
ａ． ノーマルキャッシュモード
ｂ． 単一出力一般カラー空間変換モード
ｃ． 複数出力一般カラー空間変換モード
ｄ． ＪＰＥＧ符号化モード
ｅ． 低速ＪＰＥＧ復号モード
ｆ． マトリクス乗算モード
ｇ． ディスエーブルモード
ｈ． 無効化モード
３．１８．７ 入力インターフェーススイッチ
３．１８．８ ローカルメモリコントローラ
３．１８．９ その他のモード
３．１８．１０ 外部インターフェースコントローラ
３．１８．１１ 周辺インターフェースコントローラ
テーブル索引
テーブル１： レジスタの説明
テーブル２： オペコードの説明
テーブル３： オペランドタイプ
テーブル４： オペランド説明
テーブル５： モジュールセットアップ順序
テーブル６： Ｃバス信号の定義
テーブル７： Ｃバスのトランザクションタイプ
テーブル８： データ操作レジスタフォーマット
テーブル９： 希望データタイプ
テーブル１０： シンボル説明
テーブル１１： 合成処理
テーブル１２： ＳＯＧＣＳモード用アドレス合成
テーブル１２Ａ： 色空間変換用命令符号化
テーブル１３： 色変換命令用のマイナーオペコード符号化
テーブル１４： データキャッシュに記憶されたハフマン及び量子化テーブル
テーブル１５： フェッチアドレス
テーブル１６： ハフマン符号化用テーブル
テーブル１７： ハフマン及び量子化テーブル用バンクアドレス
テーブル１８： 命令ワード−マイナーオペコードフィールド
テーブル１９： 命令ワード−マイナーオペコードフィールド
テーブル２０： 命令オペランド−結果ワード
テーブル２１： 命令ワード
テーブル２２： 命令オペランド−結果ワード
テーブル２３： 命令ワード
テーブル２４： 命令オペランド−結果ワード
テーブル２５： 命令ワード−マイナーオペコードフィールド
テーブル２６： 命令ワード−マイナーオペコードフィールド
テーブル２７： 分数テーブル
［好適ならびに他の実施例の説明」
好適な実施例では、ハードウェアアクセラレータによる２つの独立命令ストリームの利用によってハードウェアラスタリングを行うことで大きな利点が得られている。従って、第一の命令ストリームが現ページの印刷準備をしている間に、次の命令ストリームが次ページの印刷準備をすることができる。ハードウェア資源は、ハードウェアアクセラレータが出力装置以上の速度で動作可能である場合に特に効率的に利用することができる。
【００２１】
好適な実施例では、２命令ストリームを用いる構成を示す。しかし、２以上の命令ストリームを用いる構成も可能であり、ハードウェアトレードオフを鑑みてもより多くのストリームを用いることによる利点が得られる。２つのストリームを用いることで、ラスタ画像コプロセッサのハードウェア資源は、出力装置に応じて現ページ、バンド、ストリップなどを印刷装置に転送している間にも、続くページ、バンド、ストリップなどの準備に常に関わることができる。
３．１ 複数ストリームアーキテクチャの一般構成
図１は、好適な実施例を含むコンピュータハードウェア構成２０１を模式的に示した図である。構成２０１には、ブリッジ２０４を介してホスト記憶メモリ２０３に接続されたホストＣＰＵ２０２から成る標準ホストコンピュータシステムが含まれている。ホストコンピュータシステムには、オペレーティングシステムプログラム、アプリケーション、情報ディスプレイなどの一般のコンピュータシステム機能が備わっており、ホストコンピュータシステムはＰＣＩバスインタフェース２０７を介して標準ＰＣＩバス２０６に接続されている。なお、ＰＣＩ標準は良く知られた業界標準であり、市販のほとんどのコンピュータシステム、特にマイクロソフトウインドウズ（商標）オペレーティングシステムを搭載しているシステムには、ＰＣＩバス２０６が備わっている。ＰＣＩバス２０６を用いることにより、ＰＣＩバスインタフェース２１０、他のデバイス２１１、ローカルメモリ２１２などを更に含む１つ或は複数のＰＣＩカード（例えば２０９）を構成２０１に付加して利用することが容易になる。
【００２２】
好適な実施例では、ページ記述言語で表現されたグラフィックス処理を高速にするために、ラスタ画像アクセラレータカード２２０を備える。ラスタ画像アクセラレータカード（ＰＣＩバスインタフェース２２１を備える）は、他のＰＣＩカード２０９などと同様にホストＣＰＵ２０２とは、緩やかに結合された共有メモリの形態で動作するように設計されている。なお、必要であれば、画像アクセラレータカード２２０を更にホストコンピュータシステムに付加することもできる。ラスタ画像アクセラレータカードは、ラスタ画像処理動作における複雑かつ多量の動作処理を高速化するためのものであり、これらの動作としては、
（ａ）合成
（ｂ）一般化色空間変換
（ｃ）ＪＰＥＧ符号化／復号
（ｄ）ハフマン、ランレングス、予測符号化／復号
（ｅ）階層的画像（商標）復号
（ｆ）一般化アフィン画像変換
（ｇ）小カーネル畳込演算（コンボルージョン）
（ｈ）行列演算
（ｉ）ハーフトーン処理
（ｊ）一括算術／メモリコピー演算
ラスタ画像アクセラレータカード２２０は更にラスタ画像コプロセッサ２２４に接続されたローカルメモリ２２３を備え、ラスタ画像コプロセッサ２２４はホストＣＰＵ２０２からの命令に基づいてラスタ画像アクセラレータカード２２０を起動する。ここで、コプロセッサ２２４は特定用途向けＬＳＩ（ＡＳＩＣ）であることが望ましい。また、ラスタ画像コプロセッサ２２４は、必要な少なくとも１つのプリンターデバイス２２６を周辺インタフェース２２５を介して制御する能力を有する。更に、画像アクセラレータカード２２０は、スキャナなどの入力／出力デバイスを制御することも可能である。あわせて、アクセラレータカード２２０にはラスタ画像コプロセッサ２２４に接続された一般外部インターフェース２２７が備えられており、モニタリングやテストを行うこともできる。。
【００２３】
実行モードでは、ホストＣＰＵ２０２がＰＣＩバス２０６を介して一連の命令やデータを送信し、ラスタ画像コプロセッサ２２４で画像の生成処理を行う。送信されたデータはローカルメモリ２２３のみならずラスタ画像コプロセッサ２２４中のキャッシュ２３０、あるいはコプロセッサ２２４中のレジスタ２２９に蓄えられる。
【００２４】
図２は、ラスタ画像コプロセッサ２２４をより詳細に示した図である。コプロセッサ２２４は、前記の処理を高速化するためのものであり、命令制御部２３５の制御下にある複数の部位から構成される。コプロセッサが外界と通信するために、図１のローカルメモリ２２３と通信するためのローカルメモリ制御部２３６を具備している。周辺インタフェース制御部２３７は、プリンタデバイスとの通信に利用されるもので、セントロニクスインタフェース標準フォーマットや他のビデオインタフェースフォーマットなどの標準フォーマットを利用する。周辺インタフェース制御部２３７はローカルメモリ制御部２３６と内部接続されている。ローカルメモリ制御部２３６と外部インタフェース制御部２３８とは入力インタフェーススイッチ２５２を介して接続されており、入力インタフェーススイッチ２５２は命令制御部２３５と接続されている。入力インタフェーススイッチ２５２はまたピクセルオーガナイザ２４６とデータキャッシュ制御部２４０に接続されている。入力インタフェーススイッチ２５２は、外部インタフェース制御部２３７とローカルメモリ制御部２３６からのデータをスイッチして命令制御部２３５、あるいはデータキャッシュ制御部２４０、ピクセルオーガナイザ２４６に転送するためのものである。
【００２５】
外部インタフェース制御部２３８は、図１中のＰＣＩバス２０６と通信するためにラスタ画像コプロセッサ２２４中に具備されており、命令制御部２３５と接続されている。また、テスト診断を行ったり、クロック信号やグローバル信号を入力するために、命令制御部２３９に接続され、コプロセッサ２２４と協調して動作する他モジュール２３９が備わっている。
【００２６】
データキャッシュ２３０は、接続されているデータキャッシュ制御部２４０の制御下で動作する。データキャッシュ２３０は種々の用途において用いられるが、コプロセッサ２２４において引き続き使用される確率の高い最近使用した値を蓄えるために主として用いられる。上述の高速化処理は、主としてＪＰＥＧ符号化／復号器２４１やメインデータパス部２４２によって複数のデータストリームの処理が行われる。部位２４１、２４２は並列にピクセルオーガナイザ２４６と２つのオペランドオーガナイザ２４７、２４８に接続されている。部位２４１、２４２からの処理されたストリームは、結果オーガナイザ２４９に転送され、必要であれば処理や再フォーマット処理が行われる。なお、中間結果を記録しておきたいことも多いため、データキャッシュ２３０に加えて、ピクセルオーガナイザ２４６と結果オーガナイザ２４９との間にマルチユースト値（ＭＵＶ）バッファ２５０を備えている。結果オーガナイザ２４９からの結果は、必要であれば外部インタフェース制御部２３８、ローカルメモリ制御部２３６、周辺インタフェース制御部２３７に出力される。
【００２７】
図２中の点線で示されているように、さらなる（第３の）データパス部２４３を、ＪＰＥＧ符号化／復号器２４１とメインデータパス部２４２といった他の二つのデータパスと「並列に」接続することも可能である。また、四あるいはそれ以上のデータパスを構成することも同様に可能である。なお、パスは「並列に」接続されてはいるが、並列に動作するものではなく、一つのパスのみが一時に動作するものであることに注意されたい。
【００２８】
図２のＡＳＩＣの全体設計は以下のような考えに基づいてなされた。まず第１に、印刷ページでは小さな、或は一時的な画質劣化をも生じさせないことが必須である。映像信号では、このような小さな画質劣化が存在したとしても人間の目では感知されることはないが、印刷物では印刷ページに永久的に小さな画質劣化が残ってしまい、目立つようになることもあるからである。更に、プリンタに至るまでに遅延が生じると、ページがプリンタ内を移動している間に白い未印刷の部位がページ上にできてしまうことがあるため、見苦しいものとなる。そのため、高品質かつ高速に結果を提供することが必須となり、ソフトウエアを用いるアプローチよりもハードウェアの高速性に頼るアプローチの方が好ましい。
【００２９】
第２に、印刷処理を実行するのに必要なさまざまな動作ステップ（アルゴリズム）すべてをリストアップし、各ステップごとに対応するハードウェアを並べ上げると、全体のハードウェア量は膨大なものになり、非常に高価なものになってしまう。また、ハードウェアの動作スピードは、処理に必要なデータをフェッチしたり、あるいは処理で生成されたデータを転送するレートによって本質的に制限される。すなわち、動作スピードはインタフェースの帯域幅によって制約を受ける。
【００３０】
これに対して、全体のＡＳＩＣのデザインは、ハードウェアの全体量を模式的に表したときに、必要なハードウェアの種々の部位が（ａ）重複しており、（ｂ）同時に実行されることはない、という驚くべき事実に基づいている。特に、この点はデータの処理をする前にデータを転送する際のオーバヘッドにおいて顕著にみられる。
【００３１】
このような観点から、いつくかのステップを経て、ハードウェアのすべての部位をできるだけアクティブにしながら、ハードウェア量を低減することにした。第１のステップにおいて、画像操作では多くの場合同一の基本的種類の繰り返し演算が必要であることを認識した。従って、データがストリーム状に入力されると、特定の処理を行うように処理部を構成して長いデータストリームを処理し、その後次に必要な処理タイプに合うように処理部を再構成する。データストリームがかなり長いと、再構成に要する時間は全体の処理時間と比較して無視できるほど短くなるため、スループットが向上することになる。
【００３２】
また、複数のデータ処理パスを設けると、他のパスを使用している間に一つのパスを再構成することで、再構成に要する時間の無駄を省くこともできる。すなわち、メインデータパス部２４２がより汎用的な処理を実行している間に、他のデータパスにおいて部位２４１のようなＪＰＥＧ符号化／復号、あるいは追加部位２４３がある場合にはエントロピー符号化やハフマン符号化などのより特化した処理を行うことができる。
【００３３】
更に、処理を進めている間に、処理部位へのデータのフェッチや転送を行うこともできる。また、種々の種別のデータを標準化、統一することにより、更に高速化を図ることができるとともに、ハードウェア資源も有効に利用することができる。従って、データのフェッチや転送に関わる全体のオーバヘッドを低減することができる。
【００３４】
ここで重要なことは、コプロセッサ２２４がホストＣＰＵ２０２（図１）の制御の下で実行されることである。この点で、命令制御部２３５が、コプロセッサ２２４全体の制御を統括する。命令制御部２３５は、ＣＢｕｓ（Ｃバス）と呼ばれる制御バス２３１によってコプロセッサ２２４を動作させる。ＣＢｕｓ２３１はそれぞれのモジュール中のセットレジスタ（図１の２３１）を含むモジュール２３６−２５０のそれぞれに接続され、コプロセッサ２２４の全体の動作を可能とする。図２を見やすくするために、図２では制御バス２３１からそれぞれのモジュール２３６−２５０までの接続は示していない。
【００３５】
図３は、利用可能なモジュールレジスタの模式的なレイアウト２６０を示した図である。レイアウト２６０は、コプロセッサ２２４の全体制御のためのレジスタ２６１と命令制御部２３５とが含まれる。コプロセッサモジュール２３６−２６０には、同様のレジスタ２６２が含まれる。
３．２ ホスト／コプロセッサ・キューイング
上述のアーキテクチャによれば、ホストプロセッサ２０２と画像コプロセッサ２０４との間での協調が十分にとられていることが必要であることがわかる。しかしながら、これに対する解は一般的なものであり、上述のアーキテクチャ特有のものではないため、以下ではより一般的な計算ハードウェア環境を想定して説明する。
【００３６】
現代のコンピュータシステムは、動的メモリ割当を行うために何かしらのメモリ管理手法を必要とする。１つあるいは複数のコプロセッサを有するシステムでは、コプロセッサによる動的メモリ割当とメモリ使用との間で同期をとるための手法が必要である。一般的なコンピュータハードウェア構成では、ＣＰＵと特別のコプロセッサとを備え、それぞれが一連のメモリ群を共有している。このようなシステムでは、ＣＰＵのみがメモリを動的に割り当てることのできるシステム中唯一の部位である。コプロセッサが使用するようにＣＰＵがメモリを割り当てた時点で、コプロセッサは当該メモリが不必要になりＣＰＵによって解放されるまで、自由にメモリを利用することができる。すなわち、コプロセッサがメモリの使用を終えた後にメモリが解放されることを保証するために、ＣＰＵとコプロセッサとの間には何かしらの同期が必要となる。この同期に関しては、種々の解決策が示されてはいるが、必ずしも性能の面で好ましいとは言い難い。
【００３７】
静的に割り当てられたメモリを用いれば、同期の問題を避けることができるが、メモリ資源の利用を動的に適応させることが不可能となる。同様に、コプロセッサが処理の実行を終えるまでＣＰＵをブロックし待たせておくことも可能であるが、並列性を失い、全体のシステム性能を犠牲にすることになる。コプロセッサからの処理の終了を知らせるインタラプト信号の利用も可能であるが、コプロセッサのスループットが非常に高い場合には大きな処理のオーバヘッドとなってしまう。
【００３８】
高性能要件の他に、このようなシステムでは動的なメモリ欠乏に対してしなやかに対処しなければならない。多くのコンピュータシステムでは種々のメモリサイズ構成が可能となっているが、多くのメモリを具備するシステムでは有効資源を最大限に利用して性能を最大にすることが重要である。同様に、最小のメモリサイズ構成のシステムでは、少ないメモリながらも十分な動作を可能にすべきであり、少なくともメモリ欠乏の際には性能がしなやかに劣化すべきである。
【００３９】
これらの問題を解決するために、システム性能を最大にするとともに、コプロセッサのメモリ使用をシステム容量や実行する処理の複雑さに動的に適応化する同期機構が必要である。図４に、（ホスト）ＣＰＵとコプロセッサとの同期をとる好適な構成を示す。図中の参照番号は、図１の説明において利用したものを用いている。
【００４０】
図４において、ＣＰＵ２０２はシステム中のすべてのメモリ管理を統括している。ＣＰＵ２０２が、自身、あるいはコプロセッサ２２４での利用のために、メモリ２０３を割り当てる。コプロセッサ２２４はグラフィックス特有の命令セットを有しており、ホストプロセッサ２０２と共有しているメモリ２０３から命令１０２２を実行することができる。これらの命令のそれぞれは結果１０２４を共有メモリ２０３に書き込むことができ、またメモリ２０３からオペランドを読み込むこともできる。ここでコプロセッサ命令のオペランド１０２３や結果１０２４を記憶するに要するメモリ２０３の量は、処理の複雑さや種別に依存する。
【００４１】
ＣＰＵ２０２は、コプロセッサ２２４によって実行される命令１０２２を生成する処理をも行う。ＣＰＵ２０２とコプロセッサ２２４との間の並列性を最大にするために、ＣＰＵ２０２によって生成された命令は１０２２に示されるようにキューイングされてからコプロセッサ２２４において実行される。キュー１０２２中の各命令は、コプロセッサ２２４のためにホストＣＰＵ２０２によって割り当てられた共有メモリ２０３中のオペランド１０２３や結果１０２４を参照することができる。
【００４２】
図５に示すように、これらの処理を行うために、命令生成部１０３０、メモリ管理部１０３１、キュー管理部１０３２が接続されている。これらすべてのモジュールはホストＣＰＵ２０２上で単一プロセスとして実行される。コプロセッサ２２４における実行命令は命令生成部１０３０において生成され、メモリ管理部１０３１のサービスを利用して生成された命令のオペランド１０２３や結果１０２４のための領域を割り当てる。また、命令生成部１０３０は、キュー管理部１０３２のサービスを利用して、コプロセッサ２２４で実行する命令をキューイングする。
【００４３】
各命令がコプロセッサ２２４において実行されると、ＣＰＵ２０２はメモリ管理部１０３１によって命令のオペランド用に割り当てられていたメモリを解放することができる。ある命令の結果が次の命令のオペランドとなることも可能であり、その後でＣＰＵによってメモリが解放される。コプロセッサ２２４が命令を終えると同時にインタラプト信号を送出しメモリを解放するのではなく、コプロセッサ２２４が命令を終えた後のある時点でクリーンアップ機構を起動し、命令の処理に要した資源をシステムが解放する。クリーンアップ機構が起動される時点は、メモリ管理部１０３１とキュー管理部１０３２との関係に依存しており、利用可能なシステムメモリ量や各コプロセッサ命令に必要なメモリ量に応じて動的に適応させることができる。
【００４４】
図６は、コプロセッサ命令キュー１０２２の構成を模式的に示した図である。命令群はホストＣＰＵ２０２によりペンディング命令キュー１０４０に挿入され、コプロセッサ２２４によって読み出され実行に移される。コプロセッサ２２４における実行処理が終了すると、命令はクリーンアップキュー１０４１に転送され、コプロセッサ２２４が処理を終えた後で命令が必要とした資源の解放を行う。
【００４５】
命令キュー１０２２自身は固定あるいは動的可変サイズの巡回バッファとして構成される。命令キュー１０２２は、ＣＰＵ２０２による命令の生成とコプロセッサ２２４における命令の実行とを分離している。各命令のオペランドと結果メモリは、命令生成時に命令生成部１０３０からの要求に応じてメモリ管理部１０３１（図５）によって割り当てられる。新しく生成された命令のためのメモリ割当が、以下で説明するメモリ管理部１０３１とキュー管理部１０３２との協調動作を起動させ、利用可能なメモリ量や命令の複雑さにシステムが自動的に適応できるようにしている。
【００４６】
命令キュー管理部１０２は、コプロセッサ２２４が命令生成部１０３０によって生成された命令を実行し終えるまで、待機することができる。しかし、メモリ管理部１０３１によって割り当てられる命令キュー１０２２とメモリ２０３が十分大きければ、コプロセッサ２２４を全く待つ必要がないか、あるいは少なくともすべての命令シーケンスが終了するまで待機する必要はない。大きなジョブではこれらの待機時間が、数分間にも及ぶため、効果は大きい。しかし、ピーク時のメモリ使用量は利用可能なメモリ量を容易に超えることもある。この時点で、キュー管理部１０３２とメモリ管理部１０３１との間で協調的な動作が開始される。
【００４７】
命令キュー管理部１０３２にとって、終了した命令を「クリーンアップ」し、動的に割り当てられたメモリを解放するようにとの指示がなされる時点は適宜で構わない。メモリ管理部１０３１が利用可能なメモリが少なくなりつつある、あるいはなくなったことを検出した場合には、キュー管理部１０３２にクリーンアップ処理を指示し、コプロセッサ２２４によってもはや利用されていないメモリを解放させる手段をとる。これにより、メモリ管理部１０３１は、ＣＰＵ２０２がコプロセッサ２２４を待つ、あるいはコプロセッサ２２４と同期することなく、命令生成部１０３０からの新しく生成された命令に要するメモリ要求を満足させることができる。
【００４８】
メモリ管理部１０３１からキュー管理部１０３２に終了命令をクリーンアップする要求を出しても、命令生成部の新しい要求を満たすに足る十分メモリが解放されなかった場合には、メモリ管理部１０３１はキュー管理部１０３２にペンディング命令キュー１０４０中の処理中命令の一部、例えば半分が終了するまで待機せよ、と要求する。これにより、コプロセッサ２２４命令のいくつかが終了するまでＣＰＵ２０２処理はブロックされることになる。コプロセッサ２２４命令のいくつかが終了すると、これらの命令のオペランドが解放され、要求を満たすに十分なメモリが得られる。処理中の命令の一部のみを待つことにより、少なくともいくつかの命令はペンディング命令キュー１０４０に存在しており、コプロセッサ２２４は常に動作していることになる。多くの場合、ＣＰＵ２０２が待機するペンディング命令キュー１０４０中の一部をクリーンアップすることにより、メモリ管理部１０３１にとって十分なメモリが解放され、命令生成部１０３０の要求を満たすことができる。
【００４９】
コプロセッサ２２４がペンディング命令の例えば半分が実行終了するまで待機したとしても要求を満たすだけのメモリが解放されなかったという特殊なケースの場合には、メモリ管理部１０３１はすべてのペンディングコプロセッサ命令が終了するまで待機するという最後の手段をとる。システムの現在のメモリ容量を超えるような非常に大きなかつ複雑なジョブなどを除いて、これにより命令生成部１０３０の要求を満たすに十分な資源が解放される。
【００５０】
このようなメモリ管理部１０３１とキュー管理部１０３２との協調動作により、システムに与えられたメモリ量２０３の中で効率的にスループットを最大にすることが可能となる。より多くのメモリがあれば同期の必要性は少なくなり、より大きなスループットを得ることができる。逆に、より少ないメモリの場合には、コプロセッサ２２４が乏しいメモリ２０３を使っての処理が終わるまで待機することが多くなり、利用可能なメモリが少なくても動作はするものの性能は劣化する。
【００５１】
命令生成部１０３０からの要求を満たす際にメモリ管理部１０３１が行う処理ステップを以下にまとめる。各ステップは順々に実行され、ステップ後にメモリ管理部１０３１が要求を満たすに十分なメモリ２０３が得られるかどうか調べる。十分なメモリが得られる場合には要求が満たされるため、ステップを終了する。得られなかった場合には、次のステップに進み、要求を満たすべくより過激な処理に進む。
１．利用可能なメモリ２０３で要求を満たすことを試みる
２．すべての終了した命令をクリーンアップする
３．ペンディング命令の一部が終了するのを待つ
４．すべてのペンディング命令が終了するのを待つ
なお、要求を満たすために、ペンディング命令のうちの異なる部分（例えば、１／３や２／３）を待機するとか、多量のメモリを使用することがわかっている特定の命令を待機するなど、他のオプションを用いることもできる。
【００５２】
図７において、メモリ管理部１０３１とキュー管理部１０３２との間での協調動作に加えて、固定長命令キューバッファ１０５０が溢れた場合にはキュー管理部１０３２がコプロセッサ２２４と同期をとることもできる。このような状況を図７に示しており、ペンディング命令キュー１０４０は長さ１０個の命令のキューとしている。付加される最新の命令が最も大きい数を有しているため、領域が溢れると最新の命令は位置９に格納される。次にコプロセッサ２２４に入力される命令は位置０において待機している。
【００５３】
領域が溢れた場合には、キュー管理部１０３２はコプロセッサ２２４がペンディング命令の例えば半分の処理を終えるまで待機する。この待機により、通常はキュー管理部１０３２によって挿入される新しい命令に必要な十分な領域が解放される。新しい命令をスケジューリングする際のキュー管理部１０３２の動作は以下の通りである。
１．命令キュー１０４０に十分な領域が残っているかテストする
２．十分な領域が残っていない場合は、コプロセッサがある所定数の命令が終了するまで待機する
３．新しい命令をキューに挿入する
ある命令が終了するのを待機せよと指示されたキュー管理部１０３２の動作は以下の通りである。
１．命令が終了したとコプロセッサ２２４から指示されるまで待機する
２．クリーンアップされていない終了した命令がある場合には、次に終了した命令をキューから削除する
新しい命令を生成する際の命令生成部１０３０の動作は以下の通りである。
１．命令オペランド１０２３に必要なメモリをメモリ管理部１０３１に要求する
２．転送する命令を生成する
３．コプロセッサ命令をキュー管理部１０３２に転送し実行する
以上の動作プロセスを擬似コードの形で示した例を以下に示す。
【００５４】
メモリ管理
ＡＬＬＯＣＡＴＥ＿ＭＥＭＯＲＹ
ＢＥＧＩＮ
ＩＦ 要求を満たすのに十分なメモリが得られないとすると
ＴＨＥＮ 終了した命令すべてをクリーンアップ（一掃）する
ＥＮＤＩＦ
ＩＦ 要求を満たすのに十分なメモリが未だ得られないとすると
ＴＨＥＮ ＷＡＩＴ＿ＦＯＲ＿ＩＮＳＴＲＵＣＴＩＯＮを呼び出
し、ペンディング命令の半分の終了を待つ
ＥＮＤＩＦ
ＩＦ 要求を満たすのに十分なメモリが未だ得られないとすると
ＴＨＥＮ エラーを出力し戻る
ＥＮＤＩＦ 割り当てたメモリを戻す
キュー管理
ＳＣＨＥＤＵＬＥ＿ＩＮＳＴＲＵＣＴＩＯＮ
ＢＥＧＩＮ
ＩＦ 命令キューに十分な領域が得られないとすると
ＴＨＥＮ ある所定数の命令をコプロセッサが終了するまで待機する
ＥＮＤＩＦ 新しい命令をキューに付加する
ＥＮＤ
ＷＡＩＴ＿ＦＯＲ＿ＩＮＳＴＲＵＣＴＩＯＮ（ｉ）
ＢＥＧＩＮ
命令ｉが終了したとコプロセッサから指示されるまで待機する
ＷＨＩＬＥ 終了しているもののクリーンアップされていない命令が
ある
ＤＯ
ＩＦ 次の終了した命令にクリーンアップ機能が備わっている
ＴＨＥＮ クリーンアップ機能を呼び出す
ＥＮＤＩＦ キューから終了した命令を削除する
ＤＯＮＥ
ＥＮＤ
命令生成部
ＧＥＮＥＲＡＴＥ＿ＩＮＳＴＲＵＣＴＩＯＮＳ
ＢＥＧＩＮ
ＡＬＬＯＣＡＴＥ＿ＭＥＭＯＲＹを呼び出し、命令オペランドに必要な
メモリをメモリ管理部において割り当てる
転送する命令を生成する
ＳＣＨＥＤＵＬＥ＿ＩＮＳＴＲＵＣＴＩＯＮを呼び出し、コプロセッサ
命令をキュー管理部に転送し実行する
ＥＮＤ
３．３ コプロセッサのレジスタの説明
図１と３において説明したように、コプロセッサ２２４は各命令ストリームを実行するために複数のレジスタを備える。
【００５５】
図２中のモジュールに対して、表１はコプロセッサ２２４において用いられるレジスタの名前、種別、説明を示しており、付録Ｂはそれぞれのレジスタの各フィールドを説明している。
レジスタの説明
【００５６】
【表１Ａ】
2005348410.tif 000003
【００５７】
【表１Ｂ】
2005348410.tif 000004
【００５８】
【表１Ｃ】
2005348410.tif 000005
【００５９】
【表１Ｄ】
2005348410.tif 000006
【００６０】
【表１Ｅ】
2005348410.tif 000007
【００６１】
【表１Ｆ】
2005348410.tif 000008
【００６２】
【表１Ｇ】
2005348410.tif 000009
【００６３】
これらのレジスタ中で着目すべきものは以下のものである。
（ａ）命令ポインタレジスタ（ｉｃ＿ｉｐａとｉｃ＿ｉｐｂ）。これらのレジスタペアは現在実行している命令の仮想アドレスを格納する。仮想アドレスの昇順に命令がフェッチされ実行される。制御が不連続な仮想アドレスに移る場合にはジャンプ命令が用いられる。各命令には、３２ビットのシーケンス番号が付与され、シーケンス番号は一命令ごとに１ずつ増える。シーケンス番号はコプロセッサ２２４とホストＣＰＵ２０２双方において、命令の生成と実行の同期をとるために用いられる。
（ｂ）終了レジスタ（ｉｃ＿ｆｎａとｉｃ＿ｆｎｂ）。これらのレジスタペアは、終了した命令のシーケンス番号を格納する。
（ｃ）ＴｏＤｏレジスタ（ｉｃ＿ｔｄａとｉｃ＿ｔｄｂ）。これらのレジスタペアは、キューイングされている命令のシーケンス番号を格納する。
（ｄ）インタラプトレジスタ（ｉｃ＿ｉｎｔａとｉｃ＿ｉｎｔｂ）。これらのレジスタペアは、インタラプトをかけるシーケンス番号を格納する。
（ｅ）インタラプト状態レジスタ（ｉｃ＿ｓｔａｔ．ａ＿ｐｒｉｍｅｄとｉｃ＿ｓｔａｔ．ｂ＿ｐｒｉｍｅｄ）。これらのレジスタペアは、インタラプト、終了レジスタとが合致した時点でインタラプトを起動するフラグであるプライムビットを格納する。本ビットは、インタラプト状態（ｉｃ＿ｓｔａｔ）レジスタ中の他のインタラプトイネーブルビットや他の状態／構成情報と同様に格納される。
（ｆ）レジスタアクセスセマフォア（ｉｃ＿ｓｅｍａとｉｃ＿ｓｅｍｂ）。ホストＣＰＵ２０２は、コプロセッサ２２４への高速性、即ち、１回以上のレジスタへの書き込みを必要とするレジスタアクセスに先立ちセマフォアを入手しておかなければならない。これに対して、高速性を必要としないレジスタアクセスの場合は何時でも実行することができる。ホストＣＰＵ２０２がセマフォアを入手することに付随する欠点は、現在実行中の命令が終了するまでコプロセッサの実行が中断することである。レジスタアクセスセマフォアは、コプロセッサ２２４の構成／状態レジスタの１ビットとして構成される。これらのレジスタは命令制御美のレジスタ領域中に存在する。前述の通り、コプロセッサの各サブモジュールは、それぞれ構成／状態レジスタを備えており、通常の命令実行においてレジスタが設定される。これらのすべてのレジスタは、レジスタマップ上に表されており、多くは命令実行において暗黙的に修正される。ホストはレジスタマップを介してこれらのレジスタの内容を知ることができる。
３．４ 複数ストリームフォーマット
前述の通り、資源を最大限に有効に利用するために、また外部周辺装置に高速に出力するために、コプロセッサ２２４は２つの独立な命令ストリームの１つを実行する。通常は、１つの命令ストリームは出力デバイスが適時点で必要とする現在の出力ページに対応しており、２つ目の命令ストリームが他の命令ストリームが休止中であるときにコプロセッサ２２４のモジュールを利用する。ここで、最も重要な点は、必要な出力データを適時点で出力することであるとともに、続くページ、バンドなどの準備のために資源を最大限に利用することである。従って、コプロセッサ２２４は、全く独立であるものの同じように実行される２つの命令ストリーム（以下、ＡとＢと呼ぶ）を実行するように設計される。命令はホストＣＰＵ２０２上で動作しているソフトウエアによって生成され、ラスタ画像アクセラレータカード２２０に転送されコプロセッサ２２４によって実行されることが望ましい。通常動作では、命令ストリームの１つ（ストリームＡ）は、他の命令ストリーム（ストリームＢ）よりも高い優先度で動作する。命令ストリームあるいはキューはホストＲＡＭ２０３（図１）中の一つあるいは複数のバッファに書き込まれる。バッファは開始時点で割り当てられ、アプリケーションの実行中はホスト２０３の物理メモリに固定される。各命令はホストＲＡＭ２０３の仮想メモリ環境に格納されることが好ましく、ラスタ画像コプロセッサ２２４が仮想アドレスから物理アドレスへの変換を行い、次の命令の位置としてホストＲＡＭ２０３中の対応する物理アドレスを決定する。これらの命令は順々にコプロセッサ２２４のローカルメモリに格納される。
【００６４】
図８は、ホストＲＡＭ２０３中に格納されている２つのストリームＡとＢのフォーマットを示す図である。ストリームＡとＢそれぞれのフォーマットは本質的に同一である。コプロセッサ２２４における簡単な実行モデルは、以下のものから構成される。
＊ＡストリームとＢストリームの２つの命令仮想ストリーム
＊通常はある時点で１つのみの命令が実行される
＊どちらかのストリームが優先権を有することもできるし、「ラウンドロビン」的に優先権を交互にすることもできる
＊どちらかのストリームを「ロック」して、ストリーム優先権や他のストリームの命令実行可能度に関わらず、確実に実行することもできる
＊どちらかのストリームが空であっても良い
＊どちらかのストリームが利用不能であっても良い
＊どちらかのストリームは、後続の命令が「オーバラップ」していなければ、次の命令の実行と「オーバラップ」しているような命令を含んでいても良い
＊各命令は３２ビットの１つずつ増加するような「一意な」シーケンス番号を有する
＊各命令はインタラプトや命令実行を停止させるコードを有していても良い
＊外部インタフェースの遅延の影響を最小限にするために、命令をあらかじめフェッチしても良い
命令制御部２３５は、コプロセッサ２２４の全体の実行制御を行うためや、必要な時にホストＲＡＭ２０３から命令をフェッチするために、コプロセッサの命令実行モデルを実装している。一つの命令ごとに、命令制御部２３５は命令の復号を行い、ＣＢｕｓ２３１を介してモジュール中の種々のレジスタを構成し、該当モジュールに命令を実行させる処理を行う。
【００６５】
図９は、命令制御部２３５で実行する命令実行サイクルを簡単な形で示した図である。命令実行サイクルは４つの主なステージ２７６−２７９から成る。第１ステージ２７６では、命令ストリームにおいて命令がペンディング状態であるかどうかを調べる。ペンディング状態である場合には、命令をフェッチして２７７、復号ならびに実行し２７８、レジスタを更新する２７９。
３．５ 現在のアクティブストリームの決定
第１ステージでは、２つのステップを実行しなければならない。
１．命令がペンディングしているかどうかの決定
２．どの命令ストリームを次にフェッチするかの決定
どの命令がペンディングであるかを決定するためには次の可能性を調べる。
１．命令制御部がイネーブルかどうか
２．内部エラーやインタラプトにより命令制御部が休止しているかどうか
３．ペンディングしている外部エラー状態があるかどうか
４．ＡあるいはＢのストリームがロックしているかどうか
５．どちらかのストリームシーケンス番号がイネーブルかどうか
６．どちらかのストリームがペンディング命令を有しているかどうか
以下に示す擬似コードは、上記ルールに基づいて命令がペンディングしているかどうかを決定するアルゴリズムを示したものである。このアルゴリズムは、既知の技術を用いて、命令制御部２３５中に状態遷移機械を介してハードウェアとして実装することができる。
【００６６】
ｉｆエラーモードでなく、稼働モードであり、バイパスモードでもなく、自己
診断モードである
ｉｆ Ａストリームがロックされていて休止中でない
ｉｆ Ａストリームが稼働モードであり、かつ「Ａストリームのシーケン
ス番号が休止中、あるいはＡストリームに命令が存在する」
命令はペンディングしている
ｅｌｓｅ 命令はペンディングしていない
ｅｎｄ ｉｆ
ｅｌｓｅ ｉｆ Ｂストリームがロックされていて休止中でない
ｉｆ Ｂストリームが稼働モードであり、かつ「Ｂストリームのシーケ
ンス番号が休止中、あるいはＢストリームに命令が存在する」
命令はペンディングしている
ｅｌｓｅ 命令はペンディングしていない
ｅｎｄ ｉｆ
ｅｌｓｅ ／＊ストリームがロックされていない＊／
ｉｆ Ａストリームが稼働モードで休止中でない、かつ「Ａストリー
ムのシーケンス番号が休止中、あるいはＡストリームに命令が存在する」
命令はペンディングしている
ｅｌｓｅ 命令はペンディングしていない
ｅｎｄ ｉｆ
ｅｎｄ ｉｆ
ｅｌｓｅ ／＊インタフェース制御部が稼動していない＊／
命令はペンディングされていない
ｅｎｄ ｉｆ
いかなる命令もペンディングしていない場合には、命令制御部２３５はペンデ
ィング命令が見つかるまで「スピン」あるいはアイドル状態となる。
【００６７】
どのストリームがアクティブであるか、どのストリームを次に実行するかを決定するために、次の状態が調べられる。
１．どちらかのストリームがロックされているか
２．ＡとＢのストリームにどの優先権が付与されており、最後に実行した命令ストリームはどちらであるか
３．どちらかのストリームが稼動しているか
４．どちらかのストリームがペンディング命令を有しているか
以下は、命令制御部によって実装される擬似コードを示したものであり、どのように次にアクティブとなるストリームを決定するかを示している。
【００６８】
ｉｆ Ａストリームがロックされている
次のストリームはＡ
ｅｌｓｅ ｉｆ Ｂストリームがロックされている
次のストリームはＢ
ｅｌｓｅ ／＊どちらのストリームもロックされていない＊／
ｉｆ Ａストリームが稼動モード、かつ「Ａストリームのシーケンス番号
が休止中、あるいはＡストリームに命令が存在する」、かつ「Ｂストリームが稼
動モードで、「Ｂストリームのシーケンス番号が休止中、あるいはＢストリーム
に命令が存在」」しなければ、次のストリームはＡ
ｅｌｓｅ ｉｆ Ｂストリームが稼動モード、かつ「Ｂストリームのシーケ
ンス番号が休止中、あるいはＢストリームにペンディング命令が存在する」、か
つ「Ａストリームが稼動モードで、「Ａストリームのシーケンス番号が休止中、
あるいはＡストリームに命令が存在」」しなければ、次のストリームはＢ
ｅｌｓｅ ／＊どちらのストリームも命令が存在しない＊／
ｉｆ ｐｒｉ＝０ ／＊Ａ高、Ｂ低＊／
次のストリームはＡ
ｅｌｓｅ ｉｆ ｐｒｉ＝１ ／＊Ａ低、Ｂ高＊／
次のストリームはＢ
ｅｌｓｅ ｉｆ ｐｒｉ＝２ｏｒ３ ／＊ラウンドロビン＊／
ｉｆ 最後のストリームがＡ
次のストリームはＢ
ｅｌｓｅ
次のストリームはＡ
ｅｎｄ ｉｆ
ｅｎｄ ｉｆ
ｅｎｄ ｉｆ
ｅｎｄ ｉｆ
条件は常に変化しているため、すべての条件を短時間で調べることが必要であ
る。
３．６ 現在のアクティブストリームのフェッチ命令
次のアクティブ命令ストリームを決定すると、命令制御部２３５は対応する命令ポインタレジスタ（ｉｃ＿ｉｐａとｉｃ＿ｉｐｂ）中のアドレスを用いて命令をフェッチする。しかしながら、有効な命令が既に命令制御部２３５中のプレフェッチバッファ内に存在する場合には、命令制御部２３５は命令をフェッチしない。
【００６９】
以下の条件が満たされるときに、プレフェッチバッファ中の命令が有効になる。
１．プレフェッチバッファが有効である
２．プレフェッチバッファ中の命令が現在のアクティブストリームと同じストリームからのものである
プレフェッチバッファの内容の有効性は、ｉｃ＿ｓｔａｔレジスタ中のプレフェッチビットによって表され、当該ビットは命令のプレフェッチが成功した際にセットされる。なお、命令制御部２３５のいかなるレジスタへの外部書き込みも、プレフェッチバッファの内容を無効にさせる。
３．７ 復号、実行命令
命令がフェッチされ、受理されると、命令制御部２３５は命令を復号し、命令を実行するためにコプロセッサ２２４のレジスタ２２９を構成する。
【００７０】
ラスタ画像コプロセッサ２２４において用いられる命令フォーマットは、命令の生成がホストＣＰＵ２０２からの命令によって実行され、ホストに対して直接的なオーバヘッドになるという点で、従来のプロセッサ命令セットとは異なる。また、命令はホストＲＡＭ２０３に格納され、図１のＰＣＩバス２０６を介してコプロセッサ２２４に転送されるため、命令はできるだけ小型化すべきである。好ましくは、コプロセッサ２２４は単一の命令によって実行開始されることが望ましい。また、将来の変更に最大限対処可能とするためには、命令セットの柔軟性をできるだけ保持することが望ましい。更に、コプロセッサ２２４において実行される命令はオペランドデータの長いストリームにも適用でき、最適な性能が得られるようにすることも好ましい。なお、コプロセッサ２２４が用いる命令復号「哲学」として、「一般的な命令」の復号を簡潔にかつ高速に行うとともに、「一般的でない」処理に対してもコプロセッサ２２４の動作に対して細かい制御をホストシステムが行えるようにデザインを取り入れている。
【００７１】
図１０は、それぞれが３２ビットの８ワードから成る単一命令２８０フォーマットを示している。各命令は、命令ワード（オプコード）２８１、オペランドの種別を示すオペランドあるいは結果タイプデータワード２８２を含む。３つのオペランドＡ，Ｂ，Ｃのアドレス２８３−２８５も、結果アドレス２８６とともに含まれる。更に、領域２８７も、ホストＣＰＵ２０２が用いる命令に関する情報を格納するために含んでいる。
【００７２】
図１１は、命令の命令オプコード２８１の構造２９０を示した図である。命令オプコードは３２ビット長で、主オプコード２９１、補オプコード２９２、インタラプト（Ｉ）ビット２９３、一部復号（Ｐｄ）ビット２９４、レジスタ長（Ｒ）ビット２９５、ロック（Ｌ）ビット２９６、長さ２９７を含む。命令ワード２９０のそれぞれのフィールドの説明を以下の表に示す。
【００７３】
オプコード説明
【００７４】
【表２Ａ】
2005348410.tif 000010
【００７５】
【表２Ｂ】
2005348410.tif 000011
【００７６】
Ｉビットフィールド２９３をセットすることによって、命令が終了した時点で命令の実行がインタラプトされ休止するように命令をコード化することができる。なお、このインタラプトは「命令終了インタラプト」と呼ばれる。一部復号ビット２９４は、一部復号ビット２９４のビットがセットされ、ｉｃ＿ｃｆｇレジスタ中で稼動モードになると、以下に述べるように命令の実行に先立ち種々のモジュールがマイクロコード化されるというような一部復号機能を提供する。ロックビット２９６は、開始にあたり１つ以上の命令を必要とする処理の際に用いられる。この際には、命令に先立ち種々のレジスタがセットされ、次の命令のために現在の命令ストリームを「ロック」される。Ｌビット２９６がセットされると、命令が終了した時点で次の命令が同じストリームからフェッチされる。長さフィールド２９７は各命令の一般的な定義であり、必要となる「入力データ項目」数あるいは「出力データ項目」数として定義され、１６ビット長である。６４、０００項目以上の入力データ項目のストリームに対する処理の場合には、Ｒビット２９５がセットされ、図２のピクセルオーガナイザ２４６中のｐｏ＿ｌｅｎレジスタから入力長を得る。当該レジスタはこのような命令の直前にセットされる。
【００７７】
図１０において、ある命令に必要なオペランド２８３〜２８６の数は用いる命令タイプに応じて可変である。以下の表は、各命令タイプごとにオペランド数と長さの定義とを示したものである。
オペランドタイプ
【００７８】
【表３】
2005348410.tif 000012
【００７９】
図１２は、３オペランド命令に対する図１０のデータワード、オペランド記述子２８２のデータワードフォーマット３００と、２オペランド命令に対するデータワードフォーマット３０１とを示している。以下の表に、オペランド記述子のコード化の詳細を示す。
オペランド記述子
【００８０】
【表４】
2005348410.tif 000013
【００８１】
上述の表において、一定データアドレスモードの場合には、コプロセッサ２２４が１つの内部データ項目をフェッチあるいは計算して、この項目を当該オペランドの命令長として用いる。タイルアドレスモードの場合には、コプロセッサ２２４がいくつかのデータをサイクルして「タイル効果」を得る。オペランド記述子のＬビットがゼロの場合には、データが短く、データ項目がオペランドワード中に存在することを意味する。
【００８２】
図１０において、それぞれのオペランド／結果ワード２８３−２８６は、オペランド自身の値あるいはデータが格納されているオペランド／結果の開始位置を示す３２ビット仮想アドレスを含む。図２の命令制御部２３５は、命令を二段階で復号する。最初に、命令の主オプコードが有効であるかを調べ、主オプコード（図１１）が無効である場合にはエラーを生成する。次に、ＣＢｕｓ２３１を介して種々のレジスタを設定することにより、命令制御部２３５が命令を実行し、命令に指定されている動作を行う。なお、設定するレジスタがないような命令もある。
【００８３】
各モジュールのレジスタは動作に応じていくつかの種別に分けられる。まず、状態レジスタタイプがあり、他のモジュールからは「読み込まれるのみ」で、レジスタを含むモジュールによって「読み込み／書き込み」されるものがある。次に、構成レジスタの一番目のタイプ（以降、ｃｏｎｆｉｇ１）は、モジュールから外部的に「読み込み／書き込み」され、レジスタを含むモジュールからは「読み込みのみ」される。これらのレジスタは一般にアドレス値などの大きなタイプ構成情報を格納する際に用いられる。構成レジスタの二番目のタイプ（以降、ｃｏｎｆｉｇ２）はすべてのモジュールから読み込み、書き込みができるが、レジスタを含むモジュールからは読み込みしかできない。このレジスタタイプは、レジスタのビットごとのアドレシングが必要なときに用いられる。
【００８４】
制御タイプのレジスタとしては種々のものが存在する。第一のタイプ（以降、ｃｏｎｔｒｏｌ１レジスタ）はすべてのモジュール（レジスタを含むモジュールも含む）によって読み込み／書き込みが可能である。Ｃｏｎｔｒｏｌ１レジスタは、アドレス値などの大きな制御情報を格納する際に用いられる。同様に、制御レジスタの第二のタイプ（以降、ｃｏｎｔｒｏｌ２）は、ビットごとに設定される。
【００８５】
最後のレジスタタイプ（インタラプトレジスタ）は、レジスタを含むモジュールによって１にセットされ、セットされたビットに「１」を外部から書き込みことによりゼロにリセットすることができるようなビットをレジスタ内に含む。このようなタイプのレジスタはそれぞれのモジュールからのインタラプト／エラー信号に対処するために用いられる。
【００８６】
コプロセッサ２２４の各モジュールは、命令を実行中でビジー状態のときには、ＣＢｕｓ２３１上のｃ＿ａｃｔｉｖｅラインをセットする。このため、命令制御部２３５は、ＣＢｕｓ２３１上の各モジュールからのｃ＿ａｃｔｉｖｅラインの「ＯＲ」をとり、命令が終了した時点を把握することができる。ローカルメモリ制御モジュール２３６と周辺インタフェース制御モジュール２３７とは、オーバラップ命令を実行することができ、オーバラップ命令を実行する際に起動するｃ＿ｂａｃｋｇｒｏｕｎｄラインを備える。オーバラップ命令は、ローカルメモリインタフェースと周辺インタフェースとの間でデータを転送する「ローカルＤＭＡ」命令である。
【００８７】
オーバラップローカルＤＭＡ命令の実行サイクルは、他の命令の実行サイクルとは異なる。オーバラップ命令が実行に移されるにあたっては、命令制御部２３５が既にオーバラップ命令が実行されているかどうかを調べる。オーバラップ命令が既に存在すれば、あるいはオーバラップ命令が不稼動モードになっていれば、命令制御部２３５は命令が終了するのを待ってから、当該命令の実行に移る。オーバラップ命令が存在せず、かつ稼動モードになっていれば、命令制御部２３５はすぐにオーバラップ命令を復号し、周辺インタフェース制御部２３７やローカルメモリ制御部２３６を構成し命令を実行する。レジスタを構成し終えたら、従来の意味で命令が終了するのを待たずに命令制御部２３５はレジスタ（終了レジスタ、状態レジスタ、命令ポインタ等）を更新する。この時点で、終了シーケンス番号はインタラプトシーケンス番号と同一であれば、「オーバラップ命令終了」インタラプト信号を出力するのではなく単に当該信号を用意する。「オーバラップ命令終了」インタラプト信号は、オーバラップ命令が完全に終了した時点で出力される。
【００８８】
命令が復号されると、命令制御部は現在の命令を実行しつつ、次の命令をプレフェッチする。ほとんどの命令では、命令のフェッチ、復号よりも命令の実行に要する時間の方がかなり長い。命令制御部２３５は、以下の条件が揃った時点で命令をプレフェッチする。
１．現在実行中の命令がインタラプトや休止中でない
２．現在実行中の命令がジャンプ命令でない
３．次の命令ストリームがプリフェッチ可能である
４．他にペンディングしている命令が存在する
命令制御部２３５がプレフェッチ可能と判断すると、次の命令に要求を出し、プレフェッチバッファに配置し、バッファを有効にする。ここまで処理を進めると、命令制御部２３５は現在実行中の命令が終了するまでは何もすることがなく、当該命令の終了をＣＢｕｓ２３１上のｃ＿ａｃｔｉｖｅとｃ＿ｂａｃｋｇｒｏｕｎｄラインを調べることのみを行う。
３．８ 命令制御部のレジスタの更新
命令が終了すると、命令制御部２３５は新しい状態を反映させるためにレジスタの更新を行う。この処理は外部からのアクセスとの同期の問題を避けるために高速に行わなければならない。この高速更新処理は以下の手順で行われる。
１．適切なレジスタアクセスセマフォアの入手。セマフォアが命令制御部２３５の外部のエージェントによって占有されている場合には、セマフォアが解放されるまで命令実行サイクルが待機し、解放されてから処理に移る。
２．適切なレジスタの更新。命令が適切なジャンプ命令でない場合には、命令ポインタ（ｉｃ＿ｉｐａとｉｃ＿ｉｐｂ）を命令のサイズ分増加させる。ジャンプ命令のときは、ジャンプ先の値が命令ポインタにロードされる。従って、シーケンス番号が稼動モードであれば終了レジスタ（ｉｃ＿ｆｎａとｉｃ＿ｆｎｂ）は増加することになる。
【００８９】
状態レジスタ（ｉｃ＿ｓｔａｔ）も新しい状態を反映させるように適切に更新される。必要であれば、休止ビットを設定することもある。インタラプトが生じ、インタラプトに対する休止が稼動状態になったり、エラーが生じた場合には、命令制御部２３５は休止する。休止は、状態レジスタ中の命令ストリーム休止ビット（ａ＿ｐａｕｓｅとｂ＿ｐａｕｓｅ）をセットすることによって起動される。命令実行を再開する際には、これらのビットを０にリセットしなければならない。
３．１クロックサイクル時間、ＣＢｕｓ２３１上にｃ＿ｅｎｄ信号を送出し、コプロセッサ２２４中の他のモジュールに命令が終了した旨を伝える。
４．必要であればインタラプトを送出する。インタラプトの送出は、以下の状況のときに送出される。
ａ．「シーケンス番号終了」インタラプトが生じたとき。すなわち、終了レジスタ（ｉｃ＿ｆｎａとｉｃ＿ｆｎｂ）シーケンス番号がインタラプトシーケンス番号と一致したとき。このとき、インタラプトが準備され、シーケンス番号が稼動モードになり、インタラプトが生じる。あるいは、
ｂ．終了した命令が終了時点でインタラプトするように符号化されている場合。この場合にはインタラプト機構が起動される。
３．９ レジスタアクセスセマフォアのセマンティックス
レジスタアクセスセマフォアは、複数の命令制御レジスタに高速アクセスを提供する機構である。高速アクセスを必要とするレジスタとして、以下のものが挙げられる。
１．命令ポインタレジスタ（ｉｃ＿ｉｐａとｉｃ＿ｉｐｂ）
２．ＴｏＤｏレジスタ（ｉｃ＿ｔｄａとｉｃ＿ｔｄｂ）
３．終了レジスタ（ｉｃ＿ｆｎａとｉｃ＿ｆｎｂ）
４．インタラプトレジスタ（ｉｃ＿ｉｎｔａとｉｃ＿ｉｎｔｂ）
５．構成レジスタ中の休止ビット（ｉｃ＿ｃｆｇ）
外部エージェントはすべてのレジスタをいつでも安全に読むことができる。また、外部エージェントはすべてのレジスタにいつでも書き込むことができるが、命令制御部２３５がこれらのレジスタ中の値を更新してしまわないように、外部エージェントはまずレジスタアクセスセマフォアを入手しなければならない。命令制御部は、レジスタアクセスセマフォアが外部で宣言されている間は上述のレジスタ中の値を更新することはできない。また、命令制御部２３５は、高速を維持するために１クロックサイクルの間に上述のすべてのレジスタを更新する。
【００９０】
前述のように、シーケンス機構が稼動モードであれば、各命令には３２ビットの「シーケンス番号」が付与されている。命令シーケンス番号は順々に増加していき、０ｘＦＦＦＦＦＦＦＦから０ｘ００００００００にラッピングされる。外部からの書き込みがインタラプトレジスタ（ｉｃ＿ｉｎｔａとｉｃ＿ｉｎｔｂ）になされると、命令制御部２３５はすぐに以下の比較と更新を行う。
１．インタラプトシーケンス番号（インタラプトレジスタ中の値）が同一ストリームの終了シーケンス番号（終了レジスタ中の値）よりも「大きければ」（モジュロ演算）、命令制御部は状態レジスタ中の「シーケンス番号終了」準備ビット（ｉｃ＿ｓｔａｔ中のａ＿ｐｒｉｍｅｄとｂ＿ｐｒｉｍｅｄビット）をセットすることで「シーケンス番号終了」インタラプト機構を準備する。
２．インタラプトシーケンス番号が終了シーケンス番号よりも「小さく」、当該ストリームにおいてオーバラップ命令が実行中であり、インタラプトシーケンス番号が最後のオーバラップ命令シーケンス番号（ｉｃ＿ｌｏａあるいはｉｃ＿ｌｏｂレジスタ中の値）と同一であれば、命令制御部はｉｃ＿ｓｔａｔレジスタ中のａ＿ｏｌ＿ｐｒｉｍｅｄあるいはｂ＿ｏｌ＿ｐｒｉｍｅｄビットをセットすることで「オーバラップ命令シーケンス番号終了」インタラプト機構を準備する。
３．インタラプトシーケンス番号が終了シーケンス番号よりも「小さく」、当該ストリームにおいてオーバラップ命令が実行中であり、インタラプトシーケンス番号が最後のオーバラップ命令シーケンス番号と同一でなければ、インタラプトシーケンス番号は終了命令を示すことになり、インタラプト機構は準備されない。
４．インタラプトシーケンス番号が終了シーケンス番号よりも「小さく」、当該ストリームにおいてオーバラップ命令が実行中でなければ、インタラプトシーケンス番号は終了命令を示すことになり、インタラプト機構は準備されない。
【００９１】
外部のエージェントは、状態レジスタ中のインタラプト準備ビット（ａ＿ｐｒｉｍｅｄ，ａ＿ｏｌ＿ｐｒｉｍｅｄ，ｂ＿ｐｒｉｍｅｄ，ｂ＿ｏｌ＿ｐｒｉｍｅｄビット）をセットすることができ、インタラプト機構を独立に起動、解除することができる。
３．１０ 命令制御部
図１３は、命令制御部２３５をより詳細に示した図である。命令制御部２３５は、命令実行サイクルを処理しコプロセッサ２２４の全体の実行制御を管理する実行制御部３０５を含む。実行制御部３０５は、命令制御部２３５の全体の実行制御を管理し、命令シーケンスを決定し、命令のフェッチやプレフェッチを行い、命令の復号や命令制御レジスタの更新を行う。命令制御部は更に命令復号器３０６を備える。命令復号器３０６は、プレフェッチバッファ３０７から命令を受信し、前述の通り復号する。命令復号器３０６は、他のコプロセッサモジュール中のレジスタを構成して命令を実行する処理も行う。プレフェッチバッファ制御部３０７は、プレフェッチバッファ制御部中のプレフェッチバッファからの読み込みや書き込みを管理するとともに、命令復号器３０６と入力インタフェーススイッチ２５２（図２）との間のインタフェースをも管理する。また、プレフェッチバッファ制御部３０７は二つの命令ポインタレジスタ（ｉｃ＿ｉｐａとｉｃ＿ｉｐｂ）の更新をも管理する。命令制御部２３５、種々のモジュール２３９（図２）、外部インタフェース制御部２３８（図２）からのＣＢｕｓ２３１（図２）へのアクセスは、三つのモジュールのアクセス要求間での調停を行う「ＣＢｕｓ」調停部３０８において行われる。要求はＣＢｕｓ２３１によって種々のモジュールのレジスタ部に転送される。
【００９２】
図１４は、図１３の実行制御部３０５をより詳細に示した図である。前述の通り、実行制御部は図９の命令実行サイクル２７５の処理を管理し、特に以下の処理を行う。
１．次の命令をどの命令ストリームから取り出すかを決定し、
２．当該命令のフェッチを開始し、
３．プレフェッチバッファに格納されている命令の復号を命令復号器に指示し、
４．次の命令のプレフェッチを決定して開始し、
５．命令の終了を決定し、
６．命令が終了したらレジスタを更新する。
【００９３】
実行制御部は、全体の命令実行サイクルを管理する大きなコア状態器３１０（以下、中枢部と呼ぶ）を備える。図１５は、上述の命令実行サイクルを管理する中枢部３１０状態遷移図を示した図である。図１４において、実行制御部は命令プレフェッチ論理部３１１を備える。この部位は、実行すべき命令が存在するかどうか、どの命令ストリームに命令が属するか、の決定処理を行う。図１５の遷移図において開始３１２ならびにプレフェッチ３１３状態は、この情報を用いて命令を入手する。図１４のレジスタ管理部３１７は、双方の命令ストリームのレジスタアクセスセマフォアをモニタし、各モジュール中の必要なすべてのレジスタを更新する処理を行う。また、終了レジスタ（ｉｃ＿ｆｎａとｉｃ＿ｆｎｂ）とインタラプトレジスタ（ｉｃ＿ｉｎｔａとｉｃ＿ｉｎｔｂ）とを比較し、「シーケンス番号終了」インタラプトを行うべきかどうかを決定する処理も、レジスタ管理部３１７が行う。更に、レジスタ管理部３１７はインタラプト準備処理も行う。オーバラップ命令部３１８は、ｉｃ＿ｓｔａｔレジスタ中の適切な状態ビットの管理を通して、オーバラップ命令の終了処理の管理を行う。実行制御部は、更に中枢部３１０と図１３の命令復号器３０６との間のインタフェースを行う復号インタフェース部３１９を備える。
【００９４】
図１６は、命令復号部３０６をより詳細に示した図である。命令復号器はコプロセッサを構成してプレフェッチバッファ内の命令を実行する処理を行う。命令復号器３０６は、多くの小さな状態マシンの組み合わせである大きな状態マシンから構成される命令復号シーケンサ３２１を備える。命令シーケンサ３２１は，各モジュール中のレジスタをセットするＣＢｕｓディスパッチャ３１２と通信する。また、命令復号シーケンサ３２１は、命令の有効性や命令のオーバラップ状況などの関連情報を実行制御部に伝える。ここで、命令の有効性チェックは命令オプコードが予約されているオプコードであるかどうかをチェックするものである。
【００９５】
図１７は、図１６の命令ディスパッチャシーケンサ３２１をより詳細に示した図である。命令ディスパッチャシーケンサ３２１は、全体のシーケンス制御状態マシン３２４と連続したモジュール毎構成シーケンサ状態マシン（例えば３２５や３２６）を備える。モジュール毎構成シーケンサ状態マシンは構成すべき各モジュールに与えられる。全体として状態マシンはモジュールのコプロセッサマイクロプログラミングを定義する。状態マシン（例えば３２５）は、ＣＢｕｓディスパッチャに全体のＣＢｕｓを利用して種々のレジスタをセットするように指示し、処理のための種々モジュールを構成する。特定のレジスタに書き込みをするためには、命令の実行が開始されなければならない。一般に命令の実行にはシーケンサ３２１が処理のためにコプロセッサのレジスタを構成する以上の時間が必要である。付録Ａにおいて、コプロセッサの命令シーケンサによって実行されるマイクロプログラミング処理と命令シーケンサ３２１によってセットアップされた形式を示す。
【００９６】
実際には、命令復号シーケンサ３２１は命令ごとにコプロセッサ中のすべてのモジュールを構成するわけではない。以下の表では、命令クラスに対するモジュール構成順序を、ピクセルオーガナイザ２４６（ＰＯ）、データキャッシュ制御部２４０（ＤＣＣ）、オペランドオーガナイザＢ２４７（ＯＯＢ）、オペランドオーガナイザＣ２４８（ＯＯＣ）、主データパス２４２（ＭＤＰ）、結果オーガナイザ２４９（ＲＯ）、ＪＰＥＧエンコーダ２４１（ＪＣ）などの構成されるモジュールとともに示している。なお、外部インタフェース制御部２３８（ＥＩＣ），ローカルメモリ制御部２３６（ＬＭＣ），命令制御部２３５自身（ＩＣ）、入力インタフェーススイッチ２５２（ＩＩＳ）、雑多モジュール（ＭＭ）などのモジュールは、命令復号処理中には構成されることはない。
【００９７】
モジュール立ち上げ順序
【００９８】
【表５】
2005348410.tif 000014
【００９９】
図１７において、各モジュール構成シーケンサ（例えば３２５）は必要なレジスタアクセス処理を行って特定のモジュールを構成するように管理する。また、全体のシーケンス制御状態マシン３２４は、前述の順序でモジュール構成シーケンサの全体の動作を管理する。図１８は、上の表に従って関連するモジュール構成シーケンサを起動する全体シーケンス制御を状態遷移図３３０で表した図である。各モジュール構成シーケンサは、モジュールの実行中に種々のレジスタをセットするために、ＣＢｕｓディスパッチャを制御して、レジスタ内容を変更する処理を行う。
【０１００】
図１９は、図１３のプリフェッチバッファ制御部３０７をより詳細に示した図である。プリフェッチバッファ制御部は単一のコプロセッサ命令（６×３２ビットワード）を格納するためのプリフェッチバッファ３３５を備える。そして、プリフェッチバッファはＩＢｕｓシーケンサ３３６によって制御される一つの書き込みポートと、命令復号器、実行制御部、命令制御部ＣＢｕｓインタフェースにデータを送出する一つの読み込みポートを備える。ＩＢｕｓシーケンサ３３６は、プリフェッチバッファ３３５の入力インタフェーススイッチへの接続においてバスプロトコルを監視する。また、命令をフェッチするためにアドレスを生成するアドレス管理部３３７をも備える。アドレス管理部３３７は、ｉｃ＿ｉｐａあるいはｉｃ＿ｉｐｂの一つを選択し入力インタフェーススイッチへのバスに接続する機能と、最後の命令がどのストリームからフェッチされたかに基づいてｉｃ＿ｉｐａあるいはｉｃ＿ｉｐｂの一つを増加させる機能と、ｉｃ＿ｉｐａとｉｃ＿ｉｐｂレジスタにジャンプ先のアドレスを格納する機能とを有する。ＰＢＣ制御部３３９はプレフェッチバッファ制御部３０７の全体の制御を行う。
３．１１ モジュールローカルレジスタファイルの説明
図１３に示したように、命令制御モジュール自身を含む各モジュールは、図２０に示してあるＣＢｕｓインタフェース制御部３０３とともに上述したレジスタ３０４の内部セットを備え、ＣＢｕｓ要求を受け付けるとともに当該要求に応じて内部レジスタを更新する処理を行う。モジュールの制御は、ＣＢｕｓインタフェース３０２を介してモジュール中のレジスタ３０４に書き込むことによって行われる。ＣＢｕｓ調整部３０８（図１３）は、命令制御部２３５、外部インタフェース制御部、雑多モジュールのどのモジュールがＣＢｕｓを制御し、ＣＢｕｓのマスターとして動作し、レジスタの書き込み／読み出しを行うのかを決定する。
【０１０１】
図２０は、各モジュールにおいて用いられるＣＢｕｓインタフェース３０３の標準構成を示した図である。標準ＣＢｕｓインタフェース３０３はＣＢｕｓ３０２からの読み出し要求や書き込み要求を受信するとともに、モジュール内の種々のサブモジュールによって３４１を介して更新されるレジスタファイル３０４を備える。更に、メモリ領域の読み出しを含むサブモジュールのメモリ領域の更新を行う制御ライン３４４が備わっている。標準ＣＢｕｓインタフェース３０３はＣＢｕｓの目的地として振る舞い、レジスタ３０４や他のサブモジュールのメモリオブジェクトの読み出し要求や書き込み要求を受け付ける。
【０１０２】
「ｃ＿ｒｅｓｅｔ」信号３４５は標準ＣＢｕｓインタフェース１０３内のすべてのレジスタをデフォルト状態にセットする。しかし、「ｃ＿ｒｅｓｅｔ」は自身とＣＢｕｓマスターとの間の信号のやり取りを制御する状態マシンはリセットしない。そのため、「ｃ＿ｒｅｓｅｔ」がＣＢｕｓ処理中に送出されたとしても、当該処理は何かしらの形で終了することになる。「ｃ＿ｉｎｔ」３４７、「ｃ＿ｅｘｐ」３４８、「ｃ＿ｅｒｒ」３４９信号は、以下の式に基づいてモジュールｅｒｒ＿ｉｎｔとｅｒｒ＿ｉｎｔ＿ｅｎレジスタの内容より生成される。
【０１０３】
【数１】
2005348410.tif 000015
【０１０４】
【数２】
2005348410.tif 000016
【０１０５】
【数３】
2005348410.tif 000017
【０１０６】
信号「ｃ＿ｓｄａｔａ＿ｉｎ」と「ｃ＿ｓｖａｌｉｄ＿ｉｎ」３４５は、モジュール列の中での前のモジュールからのデータ／有効信号であり、信号「ｃ＿ｓｄａｔａ＿ｏｕｔ」と「ｃ＿ｓｖａｌｉｄ＿ｏｕｔ」３５０は、モジュール列の中での次のモジュールへのデータ／有効信号である。標準ＣＢｕｓインタフェース３０３の機能としては以下のものが含まれる。
１．レジスタの読み出し／書き込み管理
２．メモリ領域の読み出し／書き込み管理
３．テストモードの読み出し／書き込み管理
４．サブモジュールの監視／更新管理
３．１２ レジスタ読み出し／書き込み管理
標準ＣＢｕｓインタフェース３０３はＣＢｕｓ上に流れるレジスタ読み出し／書き込み要求やビットセット要求を受け付ける。標準ＣＢｕｓインタフェースが管理するＣＢｕｓ命令として以下の２種類ある。
１．タイプＡ
タイプＡは、他のモジュールが標準ＣＢｕｓインタフェース３０３内のレジスタに１、２、３、４バイト読み出し／書き込みする動作をする。書き込み動作では、命令サイクルの直後のクロックサイクルでデータサイクルが生じる。なお、レジスタ書き込み／読み出しのタイプフィールドはそれぞれ「１０００」と「１００１」である。標準ＣＢｕｓインタフェース３０３は命令を復号して、命令がモジュールのアドレスを指しているか、読み出し／書き込み動作のどちらかであるか、を調べる。読み出し動作では、標準ＣＢｕｓインタフェース３０３は、ＣＢｕｓ処理の「ｒｅｇ」フィールドを用いてどのレジスタ出力に「ｃ＿ｓｄａｔａ」バス３５０を接続するかを選択する。書き込み動作では、標準ＣＢｕｓインタフェース３０３は「ｒｅｇ」フィールドと「ｂｙｔｅ」フィールドを用いて選択されたレジスタにデータを書き込む。読み出し動作が終了すると、標準ＣＢｕｓインタフェースはデータを戻すと同時に「ｃ＿ｓｖａｌｉｄ」３５０を送出する。書き込み動作が終了すると、標準ＣＢｕｓインタフェース３０３は「ｃ＿ｓｖａｌｉｄ」３５０を送出して返答する。
２．タイプＣ
タイプＣは、１つのレジスタ中のバイトの１つに他のモジュールが１ビットあるいは複数ビット書き込む動作をする。命令とデータとは１つのワードにまとめられる。
【０１０７】
標準ＣＢｕｓインタフェース３０３は命令をチェックして、命令がモジュールのアドレスを指しているかを調べる。また、「ｒｅｇ」「ｂｙｔｅ」「ｅｎａｂｌｅ」フィールドを復号して、必要なイネーブル信号を生成する。また、命令のデータフィールドを取り出し、取り出したデータをワードの４バイトすべてに転送する。これにより、必要なビットはすべてのイネーブルバイト中のイネーブルビットに書き込まれることになる。この動作においては返答は必要ない。
３．１３ メモリ領域読み出し／書き込み管理
標準ＣＢｕｓインタフェース３０３はＣＢｕｓ上のメモリ読み出し／書き込み要求を受け付ける。メモリ読み出し／書き込み要求を受け付けると、標準ＣＢｕｓインタフェース３０３は要求がモジュールのアドレスを指しているかを調べる。そして、命令のアドレスフィールドを復号することで、標準ＣＢｕｓインタフェースは適切なアドレスと、メモリ読み出し／書き込みを行うサブモジュールへのアドレスストローブ信号３４４とを生成する。書き込み動作では、標準ＣＢｕｓインタフェースは、命令からのバイトイネーブル信号をサブモジュールに転送する。
【０１０８】
標準ＣＢｕｓインタフェース３０３の動作は、ＣＢｕｓ３０２上のＣＢｕｓ命令のタイプフィールドを復号し、次のサイクルにおいてデータがレジスタファイル３０４に取り込まれるか、あるいは他のサブモジュール３４４に転送されるようにするために、レジスタファイル３０４と出力セレクタ３５３に適切なイネーブル信号を生成するような読み出し／書き込み制御部３５２によって制御される。ＣＢｕｓ命令がレジスタ読み出し動作であれば、読み出し／書き込み制御部３５２は出力セレクタ３５３をイネーブルにし、「ｃ＿ｓｄａｔａバス」３４５への正しいレジスタ出力を選択する。命令がレジスタ書き込み動作であれば、読み出し／書き込み制御部３５２はレジスタファイル３０４をイネーブルにし、次にサイクルでデータを選択する。もしその命令がメモリエリアのリード／ライトであれば、読み出し／書き込み制御部３５２は適切な信号３４４を生成し、モジュールが管理するメモリ領域を制御する。レジスタファイル３０４は、レジスタ選択復号部３５５、出力セレクタ３５３、インタラプト３５６、エラー３５７、例外３５８生成部、アンマスクエラー生成部３５９、あるモジュールのレジスタを構成するレジスタ部３６０の４つの部位から構成される。レジスタ選択復号部３５５は、読み出し／書き込み制御部３５２からの信号「ｒｅｆ＿ｅｎ」（レジスタファイルイネーブル）「ｗｒｉｔｅ」「ｒｅｇ」を復号し、あるレジスタをイネーブルにするためのレジスタイネーブル信号を生成する。出力セレクタ３５３は、読み出し／書き込み制御部３５２からの信号「ｒｅｇ」出力に応じて、レジスタ読み出し処理のために正しいレジスタデータを選択しｃ＿ｓｄａｔｅ＿ｏｕｔラインに出力する。
【０１０９】
例外生成部３５６〜３５９は入力中にエラーが検出されたら出力エラー信号（例えば、３４７〜３４９、３６２）を生成する。各出力エラーを計算する手法は前述の通りである。レジスタ部３６０は、表５においてレジスタセットの構成を説明したときに論じたように、要求に応じて種々のタイプになり得る。
３．１４ ＣＢｕｓ構成
前述の通り、ＣＢｕｓ（制御バス）は、各モジュールの標準ＣＢｕｓインタフェース中のレジスタをセットするための情報を転送することによって、全体的に各モジュールを制御する。標準ＣＢｕｓインタフェースの記述から明らかなように、ＣＢｕｓは以下の二つの目的を有する。
１．各モジュールを駆動する制御バス
２．ＲＡＭ，ＦＩＦＯ，各モジュール中の状態情報のためのアクセスバス
ＣＢｕｓは命令−アドレス−データプロトコルを用いて、モジュール中の構成レジスタをセットすることにより、モジュールを制御する。一般に、レジスタは各命令ごとにセットされるが、修正はどの時点でも行うことができる。ＣＢｕｓは状態情報や他の情報を集め、データを要求することにより種々のモジュールからＲＡＭやＦＩＦＯデータにアクセスする。
【０１１０】
ＣＢｕｓは以下の３つのどちらかにより処理ごとに駆動される。
１．命令実行時の命令制御部２３５（図２）
２．ターゲット（スレーブ）モードバス動作実行時の外部インタフェース制御部２３８（図２）
３．外部ＣＢｕｓインタフェースが構成された際には外部デバイス
いずれの場合でも、駆動モジュールはＣＢｕｓの発モジュールとなり、他のすべてのモジュールが可能な着モジュールとなる。バスの調整処理は命令制御部が行う。
【０１１１】
以下の表は、好適な実施例において用いるのに適しているＣＢｕｓ信号の一つの定義を示したものである。
ＣＢｕｓ信号定義
【０１１２】
【表６】
2005348410.tif 000018
【０１１３】
ＣＢｕｓのｃ＿ｉａｄ信号はアドレスデータを含み、二つの異なるサイクルにおいて制御部によって駆動される。
１．ｃ＿ｉａｄ上でＣＢｕｓ命令やアドレスが駆動される命令サイクル（ｃ＿ｖａｌｉｄ高）
２．ｃ＿ｉａｄ（書き込み動作）やｃ＿ｓｄａｔａ（読み出し動作）上でデータが駆動されるデータサイクル（ｃ＿ｖａｌｉｄ低）
書き込み動作の場合は、命令に関するデータは命令サイクルの直後にｃ＿ｉａｄバス上に置かれる。読み出し動作の場合は、データサイクルが終了するまで読み出し動作のターゲットモジュールがｃ＿ｓｄａｔａ信号を駆動する。
【０１１４】
図２１において、バスは３２ビットの命令−アドレス−データフィールドを含む。このフィールドは以下の３つのタイプ（３７０〜３７２）がある。
１．タイプＡ動作（３７０）は、コプロセッサ中のレジスタや各モジュールのデータ領域の読み出し／書き込みを行うために用いられる。これらの動作は、ターゲットモードＰＣＩサイクルを実行している外部インタフェース制御部２３８、命令のためにコプロセッサを構成している命令制御部２３１、外部ＣＢｕｓインタフェースによって生成される。
【０１１５】
これらの動作では、命令サイクルの直後のクロックサイクルがデータサイクルとなる。
２．タイプＢ動作（３７１）は診断モードで用いられ、ローカルメモリにアクセスしたり、一般インタフェース上のサイクルを生成する。これらの動作は、ターゲットモードＰＣＩサイクルを実行している外部インタフェース制御部や外部ＣＢｕｓインタフェースによって生成される。データサイクルは命令サイクルの後のどの時点でも良く、データサイクルはｃ＿ｓｖａｌｉｄ信号を用いて着モジュールから返答される。
３．タイプＣ動作（３７２）はモジュールのレジスタ中の各ビットをセットするために用いられる。これらの動作は、命令のためにコプロセッサを構成している命令制御部２３１や外部ＣＢｕｓインタフェースによって生成される。タイプＣ動作ではデータサイクルはなく、データは命令サイクル中に含まれる。
【０１１６】
各命令のタイプフィールドは、以下の表に従って関連するＣＢｕｓ処理を符号化したものである。
ＣＢｕｓ処理タイプ
【０１１７】
【表７】
2005348410.tif 000019
【０１１８】
バイトフィールドは、レジスタ中のビットをセットするために用いられる。モジュールフィールドはＣＢｕｓ上の命令のアドレス先モジュールを指定するフィールドである。レジスタフィールドはモジュール中のどのレジスタを更新するかを指定するフィールドである。アドレスフィールドは、動作を行うメモリ部位を指定するフィールドである、ＲＡＭ，ＦＩＦＯなどのアドレスを指定するものである。イネーブルフィールドは、ビット設定命令が用いられたときに選択されたバイト中の選択されたビットをイネーブルにするフィールドである。データフィールドは、更新されるべきバイトに書き込まれるビットデータを含む。
【０１１９】
前述の通り、ＣＢｕｓは各モジュールごとに、モジュールが命令実行中のときに送出されるｃ＿ａｃｔｉｖｅラインを含む。命令制御部はこの信号に基づいて命令の終了時を知ることができる。また、ＣＢｕｓは各モジュールごとにバックグラウンドモード時に動作するｃ＿ｂａｃｋｇｒｏｕｎｄラインを、リセット、エラー検出、インタラプトを行うためのリセット、エラー、インタラプトラインとともに含む。
３．１５ コプロセッサデータタイプとデータ操作
図２において、コプロセッサ部２２４の動作、特にＪＰＥＧ符号化器２４１や主データパスのコプロセッサ中の主な計算処理動作を簡潔にするため、コプロセッサは外部フォーマットと内部フォーマットとを差別化するデータモデルを用いる。外部データフォーマットは、ローカルメモリインタフェースやＰＣＩバスなどのコプロセッサの外部インタフェースに現われるデータフォーマットである。逆に、内部データフォーマットは、コプロセッサ２２４の主機能モジュール間で現われるフォーマットである。図２２は、種々の入力／出力フォーマットを模式的に示した図である。入力外部フォーマット３８１は、ピクセルオーガナイザ２４６、オペランドオーガナイザＢ２４７，オペランドオーガナイザＣ２４８への入力フォーマットである。これらのオーガナイザは、入力外部フォーマットを、ＪＰＥＧ符号化器２４１や主データパス部２４２へ入力される入力内部フォーマット３８２に再フォーマットする。また、これら２つの機能部は出力データを出力内部フォーマットで出力し、結果オーガナイザ２４９が出力内部フォーマットを所望出力フォーマット３０４に変換する。
【０１２０】
実施例では、外部データフォーマットは３つのタイプに分けられる。第一のタイプは、データごとに４つまでのチャネルを有し、各チャネルが１、２、４、８、あるいは１６ビットサンプルから成り立っているような連続ストリームから成るデータの「パックストリーム」である。パックストリームは、ピクセル、ピクセルに変換されるデータ、まとめられたビットなどを表現する際に用いられる。また、コプロセッサはリトルエンディアンバイトアドレッシングとバイト中ではビッグエンディアンビットアドレッシングを用いる。図２３はパックストリームフォーマットの第一の例を示している。ここでは、各オブジェクト３８７は、各チャネルごとに２ビットのチャネル０、チャネル１、チャネル２の三つのチャネルから構成される。このフォーマットのデータ配置が３８８である。図２４の次の例３９０では、各データオブジェクトが３２ビットワードを有し、チャネルごとに８ビット有する４チャネルオブジェクト３９５が示されている。図２５の第三の例３９５では、ビットアドレス３９７から始まるチャネルごとに８ビットを有するチャネルオブジェクト３９６が示されている。もちろん、アプリケーションに応じて、データチャネルの実際の幅や数は変化する。
【０１２１】
外部データフォーマットの第二のタイプは「アンパックバイトストリーム」であり、各ワード中の１バイトのみが有効であるような３２ビットワードのシーケンスである。このフォーマットの例が図２６の３９９として示されており、各ワード中の単一バイト４００のみが用いられる。さらなる外部データフォーマットは「他」フォーマットとして分類されるオブジェクトで表現される。一般に、これらのデータオブジェクトは色空間変換表、ハフマン符号化表などの大きな表型のデータである。
【０１２２】
コプロセッサは４つの内部データタイプを用いる。第一のタイプは「パックバイト」フォーマットであり、最後の３２ビットワードを除いて４アクティブバイトの３２ビットワードから成るフォーマットである。図２７に、ワードが４バイトであるパックバイトフォーマットの例４０２を示す。図２８に示す次のデータタイプは「ピクセル」フォーマットであり、４アクティブバイトチャネルの３２ビットワード４０３から成るフォーマットである。このピクセルフォーマットは４つのチャネルデータとして解釈される。
【０１２３】
図２９に示す次の内部データタイプは「アンパックバイト」フォーマットであり、各ワードは一つのアクティブバイトチャネル４０５と三つの非アクティブバイトチャネルから成るフォーマットである。この際、アクティブバイトチャネルは最小バイトを占める。他の内部データオブジェクトは「他」データフォーマットとして区分される。外部フォーマットの入力データは適切な内部フォーマットに変換される。図３０は、種々のオーガナイザによって実行される外部フォーマット４１０から入力フォーマット４１１への変換形態を示している。図３１は、結果オーガナイザ２４９によって実行される内部フォーマット４１２から外部フォーマット４１３への変換形態を示している。
【０１２４】
以下、変換を実行する処理をより詳細に説明する。まず入力データ外部フォーマットから内部フォーマットへの変換であるが、図３２は変換処理において種々のオーガナイザによって用いられる手法を示している。はじめは外部他フォーマット４１６であるが、これは種々のオーガナイザを経ずに単に通過する。次に、外部アンパックバイトフォーマット４１７は、アンパック正規化４１８を行って内部アンパックバイトと呼ばれるフォーマット４１９を生成する。アンパック正規化４１８処理は、外部アンパックバイトストリームから非アクティブ３バイトを取り除く処理を行う。図３３はアンパック正規化処理を示したものであるが、４バイトチャネルを有する入力のうち１つのバイトチャネルのみが出力フォーマット４１９において有効な結果となっており、単なるバイトを出力している様子を示している。
【０１２５】
図３２において、パック正規化４２１処理は、外部パックストリーム４２２中の要素オブジェクトをバイトストリーム４２３に変換する処理を行う。チャネルの各要素のサイズがバイト以下であれば、サンプルは８ビット値に補間される。例えば、４ビット単位をバイト単位に変換する場合には、４ビット値０ｘＮはバイト値０ｘＮＮに変換される。１バイト以上のオブジェクトの場合には切り捨てが行われる。ストリーム４２２でサポートされる入力オブジェクトサイズは、１、２、４、８、１６ビットサイズである。なお、これらは、本発明が適用されるシステム中のデータオブジェクトやワードの全幅に依存する。
【０１２６】
図３４は、チャネルごとに（図２３のデータフォーマット３８６ごとのように）２ビット有する３チャネルオブジェクト形式の入力データ４２２が入力されたときのパック正規化４２１の様子を示している。出力データはバイトチャネルフォーマット４２３になっている。この際、必要であれば各チャネルに「補間処理」が施され、８ビットサンプルが生成される。
【０１２７】
図３２において、ピクセルストリームはその後、パック処理４２５、アンパック処理４２６、要素選択処理４２７のいずれかに送られる。図３５はパック処理４２５の例を示したもので、単に非アクティブバイトチャネルが取り除かれ、ワードごとの４アクティブバイトにパックされたバイトストリームが生成される様子を示している。即ち、単一の有効バイトストリーム４３０がワードごとの４アクティブバイトを有するフォーマット４３１に圧縮される。アンパック処理４２６はほぼパック処理の反対の処理であり、アンパックバイトがワードの最小バイトとなる。図３６は、パックバイトストリーム４３３がアンパックされ結果４３４が得られる様子を示している。
【０１２８】
図３７は要素選択４２７処理を示したものであり、Ｎを単位ごとの入力チャネル数とすると、入力ストリームからＮ要素を選択する処理である。アンパック処理は「プロトタイプピクセル」、例えば４３７を生成するときに用いられる。なお、ピクセルチャネルは最小バイトから埋められる。図３８は、形式４３６の入力データが要素選択部４２７によって変換され、プロトタイプピクセルフォーマット４３７が生成される様子を示している。
【０１２９】
要素選択が行われると、要素入替処理４４０（図３２）が行われる。図３８は要素入替処理の様子を示したもので、内部データレジスタ４４１に格納された一定値で選択要素を入れ替え、例のように出力要素２４２を生成する様子を示している。図３２において、処理段４２５、５２６、４４０の出力はレーンスワップ処理４４４に送られる。図３９に示されているように、レーンスワップ処理はあるレーンを他のレーンにバイトごとに多重化する処理であり、あるレーンを他のレーンに複製する処理をも含む。図３８の例では、チャネル３とチャネル１とを入れ替え、チャネル３をチャネル２とチャネル１に複製する様子が示されている。
【０１３０】
図３２において、レーンスワップ処理４４４が終わると、データストリームが再読み出しされて複製処理４４６に移る前に、マルチユースト値ＲＡＭ２５０に格納されることもある。複製処理４４６は単にデータオブジェクトを複製する処理である。図４０は、複製処理４４６をピクセルデータに適用した様子であり、複製ファクターは１である。
【０１３１】
図４１は、複製処理をパックバイトデータに適用した様子である。図４２は、出力内部フォーマット３８３から出力外部フォーマット３８４にデータを変換する結果オーガナイザ２４９の処理を示したものである。この処理では、図３２に示した変換処理と同様の処理４２４、４２５、４２６、４４０を含むが、処理４５０では更に要素非選択４５１、非正規化４５２、バイトアドレシング４５３、書き込みマスキング４５４の処理を含んでいる。図４３に示した要素非選択処理４５１は、図３７の要素選択処理の逆処理であり、不必要なデータが削除される。例えば、図４３では、入力中の３つの有効チャネルのみが取り出され、データ項目４５６にパックされる。
【０１３２】
図４４に示した非正規化処理は、図３４で示したパック正規化処理４２１のほぼ反対の動作をする。非正規化処理では、バイト単位で扱われていた各オブジェクトあるいはデータ項目を非バイト値に変換する処理が行われる。図４２のバイトアドレシング処理４５３は、バイトアドレシングに必要なバイトごとの再構成処理を行う。外部アンパックバイト出力ストリームでは、ストリームアドレスの最小２ビットがアクティブストリームに対応する。バイトアドレシング処理４５３では、外部アンパックバイトが用いられているとき（図４５）、１つのバイトチャネルから他のチャネルバイトに出力ストリームが再マップされる。外部パックストリームが用いられているときは（図４６）、バイトアドレシングモジュール４５３は出力ストリームの開始アドレスを図示のように再マップする。
【０１３３】
図４２の書き込みマスク処理４５４を図４７に示す。書き込みされないパックストリームのあるチャネル（例えば４６０）をマスクする処理である。適用される入力／出力データタイプ変換は、以下のデータ操作レジスタの内容に基づいて決められる。
＊ピクセルオーガナイザデータ操作レジスタ（ｐｏ＿ｄｍｒ）
＊オペランドオーガナイザＢとオペランドオーガナイザＣデータ操作レジスタ（ｏｏｒ＿ｄｍｒ，ｏｏｃ＿ｄｍｒ）
＊結果オーガナイザデータ操作レジスタ（ｒｏ＿ｄｍｒ）
命令のための各データ操作レジスタの設定は、以下の２つの方法によってなされる。
１．命令実行の直前にコプロセッサレジスタに書き込む標準手法を用いて設定される
２．現在の命令に基づいてコプロセッサ自身で設定される
命令復号処理では、コプロセッサはデータの命令ワードやデータワードの内容を調べ、種々のデータ操作レジスタをどのように設定するかを決定する処理を他の処理とともに行う。なお、命令とオペランドのすべての組み合わせが有効であるわけではない。いくつかの命令ではオペランドフォーマットを規定しているものもある。不適切なオペランドを含む命令の場合、「定義されていない」結果が生成されることになるが、エラーを生じることなく終了してしまうこともある。対応するデータ記述子の「Ｓ」ビットが０であれば、コプロセッサはデータ操作レジスタをセットし、現命令を反映させる。
【０１３４】
図４８はデータ操作レジスタのフォーマットを示した図である。以下の表は、図４８に示されたレジスタ中の種々のビットフォーマットを示している。
データ操作レジスタフォーマット
【０１３５】
【表８Ａ】
2005348410.tif 000020
【０１３６】
【表８Ｂ】
2005348410.tif 000021
【０１３７】
各１つの命令において、複数の内部／外部データタイプが用いられることがある。オペランド、結果、命令タイプのすべて組み合わせは有効ではあるが、これらの組み合わせの一部のみが意味のある結果を生成する。各命令に対して期待されるオペランドと結果データタイプの具体的な組み合わせを表９に示す。表９は、外部／内部フォーマットにおいて期待されるデータタイプをまとめたものである。
【０１３８】
期待されるデータタイプ
【０１３９】
【表９】
2005348410.tif 000022
【０１４０】
なお、表９において用いたシンボルは以下の通りである。
シンボルの説明
【０１４１】
【表１０】
2005348410.tif 000023
【０１４２】
３．１６ データ正規化回路
図４９は、３つの主機能ブロックを含むコンピュータグラフィックスプロセッサを示している。３つの主機能ブロックは、ピクセルオーガナイザ２４６とオペランドオーガナイザＢ、Ｃ２４７、２４８中のデータ正規化部１０６２、主データパス２４２あるいはＪＰＥＧ部２４１の中央グラフィックスエンジン、命令制御部２３５中のプログラミングエージェント１０６４である。データ正規化部１０６２と中央グラフィックスエンジンの動作は、プログラミングエージェント１０６４への命令ストリーム１０６４によって決定される。各命令ごとに、プログラミングエージェント１０６４は復号処理を行い、内部制御信号１０６７と１０６８をシステム中の他のブロックに出力する。各入力データワード１０６９ごとに、正規化部１０６２は現命令に基づいてデータのフォーマットを行い、処理結果をさらなる処理が実行される中央グラフィックスエンジン１０６３に送出する。
【０１４３】
データ正規化部は、簡潔にはピクセルオーガナイザとオペランドオーガナイザＢ，Ｃを意味する。これらのオーガナイザはデータ正規化回路を含み、入力データを適切に正規化した後、ＪＰＥＧ符号化あるいは主データパス中で中央グラフィックスエンジンに結果を送出する。中央グラフィックスエンジン１０６３は、３２ビットピクセルである標準フォーマットのデータに対して動作する。従って、正規化部は入力データを３２ビットピクセルフォーマットに変換する処理を行う。正規化部への入力データワード１０６９も３２ビット幅を有するが、パック要素あるいはアンパックバイトのいずれかのフォーマットであってもよい。パック要素入力ストリームは、データオブジェクトが１，２，４，８，１６バイト幅であるようなデータワード中での連続するオブジェクトから成る。一方、アンパックバイト入力ストリームは、８ビットのバイトのみが有効であるような３２ビットのワードから成る。更に、正規化部で生成されるピクセルデータ１１は、チャネルが８ビット幅で定義されるような１，２，３，４個の有効チャネルから成る。
【０１４４】
図５０は、データ正規化部１０６２の具体的なハードウェア構成を示した図である。データ正規化部１０６２は、ＦＩＦＯバッファ（ＦＩＦＯ）１０７３、３２ビット入力レジスタ（ＲＥＧ１）、３２ビット出力レジスタ（ＲＥＧ２）、正規化マルチプレクサ１０７５，制御部１０７６から成る。入力データワード１０６９はＦＩＦＯ１０７３に格納された後、（ＲＥＧ１）１０７４にすべての入力ビットが所望出力フォーマットに変換されるまでラッチされる。正規化マルチプレクサ１０７５は、（ＲＥＧ１）１０７４中の値と（ＦＩＦＯ）１０７３の現出力とからのビットを選択することで、ＲＥＧ２にラッチされるピクセルを生成するような３２組み合わせスイッチを備える。即ち、正規化マルチプレクサ１０７５はｘ［６３．．３２］とｘ［３１．．０］とで示される２つの３２ビット入力ワード１０７７、１０７８を入力とする。
【０１４５】
このような手法を用いることで、特に命令処理においてＦＩＦＯが少なくとも２つの有効データワードを有する場合に、装置の全体スループットを向上させることができる。これは、データワードをメモリからフェッチする手法によるものである。所望データワードあるいはオブジェクトがＦＩＦＯバッファ中の隣接する入力データワードに拡散あるいは「ラップ」されていることがあるが、入力レジスタ１０７４を用いることで、ＦＩＦＯバッファ中の隣接データワードからの要素を用いて完全な入力データを再構成することができ、主データ操作処理段に先立って必要となるさらなる記憶装置やビットストリップ処理を省くことができる。類似のタイプの複数データワードが正規化部に入力されるような場合には、このような構成が大きな利点となる。
【０１４６】
制御部は、ＲＥＧ１ １０７４やＲＥＧ２ １０７６を更新するイネーブル信号ＲＥＧ１＿ＥＮ１０８０やＲＥＧ２＿ＥＮ［３．．０］１０８１を生成するとともに、ＦＩＦＯ １０７３や正規化マルチプレクサ１０７５を制御する信号をも生成する。図４９のプログラミングエージェント１０６４はデータ正規化部１０６２に対して次のような構成信号を送出する。ＦＩＦＯ＿ＷＲ４信号、正規化ファクターｎ［２．．０］、ビットオフセットｂ［２．．０］、チャネルカウントｃ［１．．０］、外部フォーマット（Ｅ）といった信号である。入力データは，有効データが存在するクロックサイクルごとにＦＩＦＯ＿ＷＲ信号１０８５を送出することにより、ＦＩＦＯ１０７３に書き込まれる。領域が得られないときには、ＦＩＦＯはｆｉｆｏ＿ｆｕｌｌ状態フラグ１０８６を送出する。３２ビット入力データが与えられると、外部フォーマット信号を用いて、入力がパックストリームフォーマット（Ｅ＝１）であるかアンパックバイト（Ｅ＝０）であるかが調べられる。Ｅ＝１の場合には、正規化ファクターはパックストリームの各要素サイズとなる。即ち、ｎ＝０は１ビット幅の要素、ｎ＝１は２ビット幅要素、ｎ＝２は４ビット幅要素、ｎ＝３は８ビット幅要素、ｎ＞３は１６ビット幅要素を示す。また、チャネルカウントは、所望有効バイト数でピクセルを生成するためにクロックサイクルごとにフォーマットする連続した入力オブジェクトの最大数である。具体的には、ｃ＝１は最小バイトのみが有効であるピクセル、ｃ＝２は最小２バイトが有効であるピクセル、ｃ＝３は最小３バイトが有効であるピクセル、ｃ＝０はすべての４バイトが有効であるピクセルである。
【０１４７】
パックストリームが８ビット幅以下の要素から成る場合には、ビットオフセットがＲＥＧ１に格納されている値であるｘ［３１．．０］中のデータ処理開始位置を決定する。ビットオフセットがはじめの入力バイトの最大ビットからの偏移である場合には、出力データバイトｙ［７．．０］の生成方法は以下の式で与えられる。
ｎ＝０の場合、
ｙ［ｉ］＝ｘ［７−ｂ］ ０≦ｉ≦７のとき
ｎ＝１の場合、
ｙ［ｉ］＝ｘ［７−ｂ］ ｉ＝１，３，５，７のとき
ｙ［ｉ］＝ｘ［６−ｂ］ ｉ＝０，２，４，６のとき
ｎ＝２の場合、
ｙ［３］＝ｘ［７−ｂ］
ｙ［２］＝ｘ［６−ｂ］
ｙ［１］＝ｘ［５−ｂ］
ｙ［０］＝ｘ［４−ｂ］
ｙ［７］＝ｙ［３］
ｙ［６］＝ｙ［２］
ｙ［５］＝ｙ［１］
ｙ［４］＝ｙ［０］
ｎ＝３の場合、
ｙ［ｉ］＝ｘ［ｉ］ ０≦ｉ≦７のとき
ｎ＞３の場合、
ｙ［７．．．０］＝ｘ［１５．．．８］
出力データバイトｙ［１５．．８］，ｙ［２３．．１６］，ｙ［３１．．２４］を生成する式も同様である。
【０１４８】
なお、以上の手法は、入力ストリームの要素を入力し、必要な回数の複製処理を行い標準幅の出力オブジェクトを生成することで、いかなる長さの出力アレイをも生成することができるように拡張できる。また、入力要素の処理順は、リトルエンディアンでもビッグエンディアンでも良い。なお、上述の例では、常に処理が入力バイトの最大ビットから始まるため、ビッグエンディアン要素順を用いている。リトルエンディアン順を用いる場合には、ビットオフセットを入力バイトの最小ビットに対する値として再定義する必要がある。また、入力要素幅が標準出力幅以上のときには、出力要素は入力要素を切り捨てる、一般には適当な数の最小ビットを削除することによって生成される。上式では、１６ビットデータオブジェクトの最大バイトを選択することにより、１６ビット入力要素を切り捨てて８ビット幅標準出力を生成している。
【０１４９】
図５０の制御部はｎ［２．．０］とｃ［１．．０］の復号を行い、これらとｂ［２．．０］とを用いて正規化マルチプレクサのための選択信号やＲＥＧ１やＲＥＧ２のためのイネーブル信号を生成する。また、ＦＩＦＯは命令中において空になることもあるため、制御部はＲＥＧ１中に入力データを選択する現在のビット位置ｉｎ＿ｂｉｔ［４．．０］と、出力データの書き込みを始める現在のバイト位置ｏｕｔ＿ｂｙｔｅ［４．．０］を記憶するカウンタを備える。制御部は、処理が終了した時点で、ｉｎ＿ｂｉｔ［４．．０］の値とＲＥＧ１の最終オブジェクトの位置とを比較することで入力ワードを検出し、ＦＩＦＯが空でない１クロックサイクルにおいてＦＩＦＯ＿ＲＤ信号を送出することでＦＩＦＯ読み出し動作を開始する。信号ｆｉｆｏ＿ｅｍｐｔｙ，ｆｉｆｏ＿ｆｕｌｌはＦＩＦＯ状態フラグであり、ＦＩＦＯが有効なデータを有していないときにｆｉｆｏ＿ｅｍｐｔｙ＝１、ＦＩＦＯがフルのときにｆｉｆｏ＿ｆｕｌｌ＝１となる。ＦＩＦＯ＿ＲＤが送出されたクロックサイクルにおいて、ＲＥＧ１＿ＥＮの送出され、新しいデータがＲＥＧ１に取り込まれる。ＲＥＧ２のイネーブル信号は、それぞれが出力レジスタの各バイトに対応ごとに４つある。制御部は、復号されたｃ［１．．０］、ＲＥＧ１内の処理待機中の有効要素数、ＲＥＧ２において未使用チャネル数の３つの値中での最小値をとることで、ＲＥＧ２＿ＥＮ［３．．０］を計算する。Ｅ＝０の場合には、ＲＥＧ１中には一つの有効要素しか存在しない。ＲＥＧ２を占めるチャネル数が復号されたｃ［３．．０］と等しい場合に、完全な出力ワードが得られる。
【０１５０】
本発明の好適な実施例では、制御部と正規化マルチプレクサにおいて用いられるオフセットの一部のみを用いるなど、ビットオフセットパラメータを制限する機能を付加することにより、図５０の装置が占める回路領域を大幅に低減することができる。このオフセット制限機能は正規化ファクターに依存するものであり、以下の式に応じて動作する。
【０１５１】
ｂ＿ｔｒｕｎｃ［２．．．０］＝０ ｎ≧３の場合
＝ｂ［２．．．０］ ｎ＝０の場合
＝ｂ［２．．．１］ ｎ＝１の場合
＝ｂ［２］＆”００” ｎ＝２の場合
（「＆」はビットごとの結合処理を示す）
このような処理により、図５０においてＭＵＸ０、ＭＵＸ１．．．ＭＵＸ３１で示されている各正規化マルチプレクサのサイズが、制限機能を用いないときの３２−１からビットオフセット制限を行ったときの最大サイズ２０−１まで低減される。このサイズ縮小により回路速度の向上も図ることができる。
【０１５２】
以上のように、好適な実施例では、データをいくつかの正規化形式に変換する効率的な回路を備える。
３．１７ アクセラレータカードの画像処理動作
図２と表２において、命令制御部２３５はコプロセッサ２２４において実行される動作に帰着される命令を「実行する」。実行される命令は、主データパス部２４２において有用な機能が実行されるような種々の命令を含む。これらの有用な命令の１つが合成処理である。
【０１５３】
３．１７．１ 合成
図５１は、主データパス部２４２において実装される合成モデルを示した図である。合成モデル４６２は、一般に３つのデータ入力ソースと出力データ（シンク）４６３を含む。入力ソースの１つは、出力４６３とメモリ内での同じ相手先からのピクセルデータ４６４である。また、色や不透明度などのデータソースとして用いられる命令オペランド４６５を含む。ここで、色や不透明度はフラット、ブレンド、ピクセル、タイルのどれでも良い。なお、フラットやブレンドに関しては、入力／出力を介してフェッチするよりも内部で生成した方が高速であるため、ブレンド生成部４６７において生成される。更に、入力データは、オペランドデータ４６５を減衰させる減衰データ４６６をも含む。
【０１５４】
前述のように、通常ピクセルデータは各チャネルが１バイト幅である４つのチャネルから成る。ここで、最高アドレスの１バイトが不透明チャネルである。なお、合成処理の動作や有用性に関しては、解説論文「Ｔｈｏｍａｓ Ｐｏｒｔｅｒ ａｎｄ Ｔｏｍ Ｄｕｆｆ”Ｃｏｍｐｏｓｉｔｉｎｇ Ｄｉｇｉｔａｌ Ｉｍａｇｅｓ”ｉｎ Ｃｏｍｐｕｔｅｒ Ｇｒａｐｈｉｃｓ，ｖｏｌｕｍｅ １８，ｎｕｍｂｅｒ ３，Ｊｕｌｙ １９８４」などの標準記事を参照されたい。
【０１５５】
コプロセッサはプレ乗算データを用いることもできる。プレ乗算は、各色チャネルと不透明チャネルとを前もって乗算する処理である。そのため、２つのオプションのプレ乗算部４６８、４６９を備え、必要なときに、不透明チャネル４７０、４７１と色データとをプレ乗算し、プレ乗算された出力４７２、４７３を得ることができる。合成部４７５は、現在の命令データに基づいて２つの入力を合成する。以下の表１１に、合成オペレータを示す。
【０１５６】
合成動作
【０１５７】
【表１１】
2005348410.tif 000024
【０１５８】
ここで、（ａｃｏ，ａｏ）は、色ａｃと不透明度ａｏのプレ乗算ピクセルを表す。Ｒはオフセット値であり、「ｗｃ」は以下で説明するラッピング／クランピングオペレータである。なお、上表の各オペレータの逆動作も合成部４７５が備えていることに注意されたい。クランプ／ラッピング部４７６は、制限値０〜２５５内にデータをクランプ、或はラップするための処理部である。また、必要であれば、データをオプションの「アンプレ乗算」４７７処理することもでき、もとのピクセル値に戻すこともできる。最後に、出力データ４６３が生成され、メモリに戻される。
【０１５９】
図５２は、合成処理を行う際に主データパス部に送られる命令形式を示している。主オプコード中のＸフィールドが１であれば、前記の表に従って加算オペレータが適用される。このフィールドが０であれば、加算オペレータ以外の他の命令が適用される。Ｐａフィールドは、第一のデータストリーム４６４（図５１）をプレ乗算するかどうかを示すフィールドである。また、Ｐｂフィールドは第２のデータストリーム４６５をプレ乗算するかどうかを示し、Ｐｒフィールドは部位４７７を用いて結果を「アンプレ乗算」するかどうかを示す。Ｃフィールドは範囲０−２５５内にラップあるいはクランプ、オーバフローあるいはアンダーフローするかどうかを示し、「ｃｏｍ−ｃｏｄｅ」フィールドはどのオペレータを適用するかを示す。加算オペレータはオフセットレジスタ（ｍｄｐ＿ｐｏｒ）を用いることもできる。このオフセットはラッピング／クランピング処理が行われる前に加算動作の結果から引かれる。加算オペレータでは、ｃｏｍ−ｃｏｄｅフィールドはオフセットレジスタのチャネルごとにイネーブルするかどうかを示すフィールドとなる。
【０１６０】
先に述べた図１０の標準命令ワード符号化２８０は、合成オペランドのために変更させられる。出力データの相手先がもとのソースと同じであるため、オペランドＡは常に結果ワードと同一となる。そのため、オペランドＡはオペランドＢとともにオペランドＢをより長く記述することができる。他の命令と同様に、命令中のＡ記述子は入力フォーマットを記述し、Ｒ記述子が出力フォーマットを規定する。
【０１６１】
図５３は、ブレンド命令の命令ワードフォーマットを第一例４７０として示している。ブレンド処理は、各チャネルごとの開始値４７１と終了値４７２とで規定される。同様に、図５４は、タイルアドレス４７６、開始オフセット４７７、長さ４７８によって規定されるタイル命令フォーマットを示している。すべてのタイルアドレスやサイズはバイトごとに特定される。タイル処理はモジュラー的に行われ、図５５は図５４のフィールド４７６〜４７８を説明する図である。タイルアドレス４７６はタイルメモリの開始アドレスを、タイル開始オフセット４７７はタイル開始時に用いられる最初のバイトを、タイル長４７８はラップする全体のタイル長を指定する。
【０１６２】
図５１において、色要素や不透明度は減衰値４６６によって減衰させられることもある。減衰値は以下の３つの手法により得られる。
１．命令のオペランドＣワード中に減衰ファクタをいれることによって、ソフトウエアがフラット減衰を指定することができる。
２．１がオンで、０がオフであるビットマップ減衰は、命令のオペランドＣワード中でビットマップのアドレスを特定するソフトウェアを用いて利用できる。
３．バイトマップ減衰を、命令のオペランドＣワードのバイトマップアドレスに設けてもよい。
４．定するソフトウエアを用いて、１のときにオン、２のときにオフとするビットマップ減衰を行うことができる。
【０１６３】
減衰値は符号なしの０〜２５５の整数であるため、プレ乗算された色チャネルは、
Ｃｏａ＝Ｃｏａ×Ａ／２５５
を計算することで、減衰ファクターと乗算される。ここで、Ａは減衰ファクター、Ｃｏはプレ乗算された色チャネルである。
【０１６４】
３．１７．２ 色空間変換命令
図２と表２において、主データパス部２４２とデータキャッシュ２３０は、主に色変換の処理を行う。色空間変換は第一の色空間フォーマット（例えば、ＲＧＢカラーディスプレイに適したフォーマット）から第二の色空間フォーマット（例えばＣＹＭあるいはＣＹＭＫ印刷に適したフォーマット）への変換処理を行う。色空間変換処理はすべての色空間をサポートするように設計されており、１次元から多次元までのいかなる機能において用いることができる命令制御部２３５はＣＢｕｓ２３１を介して、主データパス部２４２、データキャッシュ制御部２４０、入力インタフェーススイッチ２５２、ピクセルオーガナイザ２４６、ＭＵＶバッファ２５０、オペランドオーガナイザＢ２４７、オペランドオーガナイザＣ２４８、結果オーガナイザ２４９を構成し、色変換モードで動作するように制御する。このモードでは、ピクセルの複数ラインから成る入力画像がピクセルストリームとして主データパス部２４２に１ピクセルラインごとに送出される。主データパス部２４２（図２）は入力インタフェーススイッチ２５２からピクセルオーガナイザ２４６を介してピクセルストリームを受け取り、１ピクセルごとに色空間変換処理を行う。また、インターバル表や分数表がＭＵＶバッファ２５０にあらかじめロードされ、色変換表がデータキャッシュ２３０にロードされる。主データパス２４２はこれらの表にオペランドオーガナイザＢ，Ｃを介してアクセスし、例えばＲＧＢ色空間からＣＹＭあるいはＣＹＭＫ色空間にピクセルを変換し、変換されたピクセルを結果オーガナイザ２４９に送る。主データパス部２４２、データキャッシュ２３０、データ制御部２４０、他の前述のデバイスは、命令制御部２３５の制御のもとで、単一出力一般色空間（ＳＯＧＣＳ）変換モードあるいは複数出力一般色空間（ＭＯＧＣＳ）変換モードのどちらかのモードで動作する。データキャッシュ制御部２４０やデータキャッシュ２３０の詳細に関しては、「データキャッシュ制御部とキャッシュ」２４０、２３０（図２）の項目を参照されたい。
【０１６５】
正確な色空間変換処理は複雑な非線形処理である。例えば、ＲＧＢピクセルからＣＹＭＫ色空間の単一主色要素（即ちシアン）への色空間変換処理は理論的には線形であるが、実際には主にピクセルの色要素を出力する出力デバイスにおいて非線形性が生じてしまう。ＲＧＢピクセルからＣＹＭＫ色空間の他の主色要素（黄、マジェンタ、黒）への色空間変換処理においても同様である。即ち、各色要素において生じてしまう非線形性を補償するために、非線形色空間変換が一般に用いられる。このような複雑な色変換処理の非線形性のために、複雑な伝達関数が組み込まれたり、ルックアップテーブルが用いられる。例えば２４ビットのＲＧＢピクセルの入力色空間が与えられると、これらのピクセルをＣＹＭＫ色空間の８ビット主色要素（シアン）にマッピングするルックアップテーブルは１６メガバイト以上を必要とする。同様に、２４ビットＲＧＢピクセルをＣＹＭＫ色空間の４つの８ビット主色要素にマッピングするルックアップテーブルは６４メガバイト以上となり、膨大な容量が必要なる。これに対して、主データパス２４２（図２）は、データキャッシュ２３０に格納されたルックアップテーブルを用い、入力色空間中の点に粗い出力色値を対応させ、出力色値を補間することで中間出力を得る。
ａ．単一出力一般色空間（ＳＯＧＣＳ）変換モード
単一ならびに複数出力色変換モード（ＳＯＧＣＳ）と（ＭＯＧＣＳ）双方とも、ＲＧＢ色空間は８ビットの赤、緑、青色要素を有する２４ビットピクセルから成る。ＲＧＢ色空間の各ＲＧＢ次元は１５の区間に分割され、それぞれの区間の長さはプリンタのＲＧＢからＣＹＭＫ色空間への非線形性の逆関数となるように設定される。即ち、伝達関数が強い非線形性を示す場合には区間の長さを短くし、伝達関数が線形に近い場合には区間の長さを長くする。このような伝達関数の非線形部位を知るためには、各出力プリンタの色空間を正確に調べることが望ましい。しかし、ノウハウやプリンタタイプ（例えばインクジェット）の測定された特徴に基づいて、伝達関数を近似あるいはモデル化することも可能である。入力ピクセルの各色チャネルごとに、色要素値の１５の区間中の位置が決められる。どの区間に入力色要素値が存在するかを決定するためと、入力色要素値が存在する区間内の位置を決定するためとの２つのテーブルが主データパス部２４２において用いられる。もちろん、異なる伝達関数を有する出力プリンタに対しては異なるテーブルを用いても良い。
【０１６６】
前述のようにＲＧＢの各次元は１５の区間に分割される。即ち、ＲＧＢ色空間は区間で区切られた３次元ラティス構造となっており、区間の両端の入力ピクセルは入力色空間では粗い配置となっている。更に、区間の両端に対応する出力色空間の出力色値のみがルックアップテーブルに格納されている。従って、入力色ピクセルの出力色値は、入力ピクセルが存在する区間の両端に対応する出力色値を決定し、区間内の位置に基づいて出力色値を補間することで求められる。この手法により、大容量のメモリを用いなければならない必要性を低減できる。
【０１６７】
図５６は、入力ＲＧＢ色ピクセルに対して、対応する区間や区間内の位置を決定する例４８０を示している。変換処理は、２４ビット入力ピクセルの８ビット入力色チャネルごとに区間テーブル４８２や区間内位置テーブル４８３を用いて実行される。図５６において、８ビット入力色要素４８１は１０進数の４をバイナリー形式で表示したものであるが、この８ビット入力色要素４８１が区間テーブルや区間内位置テーブルへのルックアップとして用いられる。区間テーブル４８２は、入力色要素値４８１が存在する０から１４までの区間の１つを４ビットで出力する。同様に、区間内テーブル４８２は、入力色値要素４８１が存在する区間内での位置を示す。区間内テーブルは、０から２５５までの範囲の８ビット値を格納しており、この値は２５６の分数として解釈される。従って、１０進数４をバイナリーであらわした入力色値要素４８１の場合には、区間テーブル４８２をルックアップすることで、出力値０が生成される。また、入力値４を区間内位置テーブル４８３でルックアップすることにより、分数１６０／２５６を表わす出力値１６０が生成される。区間テーブル４８２と区間内位置テーブル４８３からわかるように、区間長は均一ではない。前述のように、区間長は伝達関数の非線形性によって決められる。
【０１６８】
上述の通り、各ＲＧＢ色要素に対して区間テーブルと区間内位置テーブルとを用いることで、３つの区間出力と３つの区間内位置出力が得られる。各色要素に対する区間／区間内位置テーブルはＭＵＶバッファ（図２）にロードされ、必要な時点で主データパス２４２によってアクセスされる。色変換処理におけるＭＵＶバッファ２５０の構成を図５７に示す。ＭＵＶバッファ２５０（図５７）は、それぞれが各色要素に対応する３つの領域４８８、４８９、４９０に分けられる。各領域（例えば４８８）は、更に４ビットの区間テーブルと８ビットの区間内位置テーブルとに分けられる。１２ビット出力４９２は主データパス部２４２によってＭＵＶバッファ２５０から各入力色チャネルごとに取り出される。１０進数４の単一入力色要素の上述例では、１２ビット出力は０００００１０１００００となる。
【０１６９】
図５８は、補間処理の例を示した図である。補間処理は、１つの３次元空間５００（例えばＲＧＢ色空間）から他の色空間（例えばＣＭＹあるいはＣＭＹＫ）への補間が主な処理である。ピクセルＰ０からＰ７はＲＧＢ入力色空間内で粗く存在しており、出力色空間において対応する出力色値ＣＶ（Ｐ０）からＣＶ（Ｐ７）を有する。ピクセルＰ０からＰ７の間に位置する入力ピクセルＰｉの出力色要素値は、以下のようにして決定される。まず、入力ピクセルＰｉを取り囲む区間の両端Ｐ０，Ｐ１，．．．，Ｐ７を決定する。次に、区間内位置要素ｆｒａｃ＿ｒ，ｆｒａｃ＿ｇ，ｆｒａｃ＿ｂを決定し、最後に、Ｐ０からＰ７の両端に対応する出力色値ＣＶ（Ｐ０）からＣＶ（Ｐ７）の間を区間内位置要素を用いて補間する。
【０１７０】
補間処理は、まず赤（Ｒ）方向の１次元補間を行い、ｔｅｍｐ１１，ｔｅｍｐ１２，ｔｅｍｐ１３，ｔｅｍｐ１４の値を以下の式から求める。
ｔｅｍｐ１１＝ＣＶ（Ｐ０）＋ｆｒａｃ＿ｒ（ＣＶ（Ｐ１）−ＣＶ（Ｐ０））
ｔｅｍｐ１２＝ＣＶ（Ｐ２）＋ｆｒａｃ＿ｒ（ＣＶ（Ｐ３）−ＣＶ（Ｐ２））
ｔｅｍｐ１３＝ＣＶ（Ｐ４）＋ｆｒａｃ＿ｒ（ＣＶ（Ｐ５）−ＣＶ（Ｐ４））
ｔｅｍｐ１４＝ＣＶ（Ｐ６）＋ｆｒａｃ＿ｒ（ＣＶ（Ｐ７）−ＣＶ（Ｐ６））
次に、補間処理は、以下の式を用いてｔｅｍｐ２１，ｔｅｍｐ２２を求め、緑（Ｇ）方向の１次元補間の計算をする。
【０１７１】
ｔｅｍｐ２１＝ｔｅｍｐ１１＋ｆｒａｃ＿ｇ（ｔｅｍｐ１２−ｔｅｍｐ１１）
ｔｅｍｐ２２＝ｔｅｍｐ１３＋ｆｒａｃ＿ｇ（ｔｅｍｐ１４−ｔｅｍｐ１３）
最後に、以下の式に基づいて最終色出力値を求め、青（Ｂ）方向の最終次元補間を行う。
ｆｉｎａｌ＝ｔｅｍｐ２１＋ｆｒａｇ＿ｂ（ｔｅｍｐ２２−ｔｅｍｐ２１）
入力と出力との範囲が一致しない場合もしばしば有り得る。ここで、出力範囲が入力範囲よりも狭いと、両端で範囲をクランプしなければならないことが多い。即ち、範囲の端あたりの色を変換した際に望ましくないひずみが生じることが多い。図５９は、この問題が生じる例を説明しており、入力範囲値を出力範囲値に１次元マッピングする様子が示されている。ここで、入力値に対する出力値が点５１０と５１１とで定まっているものとする。最大の出力値が点５１２でクランプされるとすると、点５１１はこの大きさの出力でなければならない。従って、５１０と５１１の２つの点を補間する場合には、線５１５が補間線となり、入力点５１６には出力値５１７が対応する。しかし、範囲の制約が存在しないときに出力値が点５１８になるような場合には、この手法が必ずしも最適な色マッピングであるとは限らない。５１０と５１８との補間線は、入力点５１６に対して出力値５１９を生成する。このような２つの出力値５１７と５１９の差異は、特に範囲の端あたりの色を印刷する場合などしばしば目につくひずみとなる、この問題を避けるために、主データパス部は、拡張出力色空間で計算し、以下の式に用いて適切な範囲にスケールやクランプすることも可能である。
【０１７２】
2005348410.tif 000025
図５８において、補間処理は、ＲＧＢピクセルを単一出力色要素（例えばシアン）に変換するＳＯＣＧＳ変換モードでも、ＲＧＢピクセルをすべての出力色要素に同時に変換するＭＯＧＣＳモードのどちらでも実行される。色変換が画像中の各ピクセルに対して行われる場合には、数１００万ピクセルがそれぞれ独立に色変換されることになる。従って、高速に動作するためには、入力値周辺の８つの値（Ｐ０−Ｐ７）を素早く見つけることが望ましい。
【０１７３】
図５７において説明した通り、主データパス部２４２は、各色入力チャネルごとに４ビット区間部位と８ビット区間内位置部位とから成る１２ビット出力を取り出す。主データパス部２４２は赤、緑、青色チャネルの４ビット区間部位を結合し、図６０中の５２０のように単一の１２ビットアドレス（ＩＲ，ＩＧ，ＩＢ）を生成する。図６０は、単一１２ビットアドレス５２０から単一出力色要素５６３が得られる様子を示したデータフロー図である。１２ビットアドレス５２０は、まず生成部１８８１（図１４１）のようなデータキャッシュ制御部２４０のアドレス生成部に送られ、メモリバンク（Ｂ０，Ｂ１，．．．，Ｂ７）に対する８個の９ビットライン／バイトアドレス５２１を生成する。データキャッシュ（図２）は、８個の独立のメモリバンク５２２に分割され、それぞれは８個のライン／バイトアドレスによって独立にアドレシングされる。アドレス生成部における１２ビットアドレス５２０から８ライン／バイトアドレスへの変換は、以下の表に従って行われる。
【０１７４】
ＳＯＧＣＳモードにおけるアドレス合成
【０１７５】
【表１２Ａ】
2005348410.tif 000026
【０１７６】
ここで、ＢＩＴ［８：６］，ＢＩＴ［５：３］，ＢＩＴ［２：０］は、それぞれ９ビットバンクアドレスの６から８ビット、３から５ビット、０から２ビットを示す。また、Ｒ［３：１］，Ｇ［３：１］，Ｂ［３：１］は１２ビットアドレス５２０の４ビット区間ＩＲ，ＩＧ，ＩＢの第１から第３ビットまでを示す。表１２のメモリバンク５に関して、１２ビットから９ビットへのマッピングを詳細に説明する。１２ビットアドレス５２０中の４ビット赤区間Ｉｒの１〜３ビットが９ビットアドレスＢ５の６〜８ビットにマッピングされ、４ビット緑区間Ｉｇの１〜３ビットが加算されて９ビットアドレスＢ５の３〜５ビットにマッピングされ、４ビット青区間Ｉｂの１〜３ビットが９ビットアドレスＢ５の０〜２ビットにマッピングされる。
【０１７７】
８つのライン／バイトアドレス５２１は、５１２×８ビットから成る対応するメモリバンク５２２へのアドレスとして用いられ、対応する８ビット出力色要素５２３が各メモリバンク５２２からラッチされる。このアドレシング処理によれば、端点Ｐ０〜Ｐ７に対応する出力色値ＣＶ（Ｐ０）〜ＣＶ（Ｐ７）がメモリバンク中での異なるアドレスとなることがある。例えば、１２ビットアドレス００００ ００００ ００００は、すべてのバンクで０００ ０００ ０００という同一のバンクアドレスが得られるが、１２ビットアドレス００００ ０００００００１の場合には、バンク７、５、３、１ではバンクアドレス０００ ００００００となり、バンク６、４、２、０ではバンクアドレス０００ ０００ ００１となるように異なるバンクアドレスが得られる。このようにして、入力ピクセル値を取り囲む８つの単一出力色値ＣＶ（Ｐ０）〜ＣＶ（Ｐ７）が同時に各メモリバンクから得られ、メモリバンクにおいて出力色値が二重になることを防ぐことができる。
【０１７８】
図６１は、単一色変換モードにおいて用いられるデータキャッシュ２３０のメモリバンクの構成を示している。各メモリバンクは１２８ラインエントリから成り、各ラインエントリは３２ビット長で４×８ビットメモリ５３３〜５３６から構成される。メモリアドレス５２１の上７ビットは、メモリアドレス中の対応するデータ列を決定し、メモリバンク出力としてラッチ５４２するために用いられる。下２ビットはバイトアドレスで、マルチプレクサ５４３への入力となり、どの４×８ビットエントリを出力として選択５４４するかを決定するために用いられる。クロックサイクルごとに８つの各メモリバンクのためのデータが出力され、主データパス部２４２に送られる。即ち、データキャッシュ制御部はオペランドオーガナイザ２４８（図２）から１２ビットのバイトアドレスを受け取り、主データパス部２４２における補間処理のための８ビット出力色値をオペランドオーガナイザ２４７、２４８に出力する。
【０１７９】
図６０において、主データパス部２４２（図２）は補間処理を３ステップで実行する。主データパス部における第１ステップにおいて、乗算／加算部（例えば５５０）は対応するメモリバンク（例えば５２２）から出力される色値と赤区間位置要素５５１を入力とし、前記の式の第１ステップに従って４つの出力値を計算する。第１ステップの出力（例えば５５３、５５４）は第２ステップ５５６に送られ、ｆｒａｃ＿ｇ入力５５７を用いて第２ステップの前式に従って出力５５８を計算する。最後に、第２ステップ出力５５８、５５９とｆｒａｃ＿ｂ入力５６２とを用いて、前式に基づいて最終出力色５６３を計算する。
【０１８０】
図６０に示した処理は、全体で最大のスループットを得るためにパイプライン化されている。更に、図６０の手法は単一出力色要素５６３が必要なときに用いられる。例えば、図６０の手法は、まず出力画像のシアン色要素を生成し、その後でパス間のキャッシュテーブルを再ロードして出力画像のマジェンタ、黄、黒要素を生成するような場合に用いられる。これは、特に、それぞれの出力色が独立パスとなるような４パス印刷処理に適している。
ｂ．複数出力一般色空間モード
コプロセッサ２２４はＭＯＧＣＳモードでの動作も行うが、ＭＯＧＣＳモードはいくつかの点を除いてＳＯＣＧＳモードとほぼ同様に動作する。ＭＯＧＣＳモードでは、図２の主データパス部２４２、データキャッシュ制御部２４０、データキャッシュが協調して、出力される４つの主色要素を同時に出力する。このためにはデータキャッシュ２３０のサイズが４倍必要となるが、記憶領域を節約するためにＭＯＧＣＳ動作モードでは、データキャッシュ制御部２４０は出力色空間のすべての出力色値の１／４のみを格納する。出力色空間の残りの出力色値は低速度の外部メモリに格納され、必要な時点で取り出される。なお、本装置や手法は、キャッシュシステムにある粗い色変換テーブルのミス率が非常に小さいという驚くべき事実に基づいている。これは、多くのカラー画像では、１つのピクセルと他のピクセルとの色値の分散が小さいという知見に基づいたものである。また、粗い出力色値は近隣のピクセルにおいても同じになる確率が非常に高い。
【０１８１】
図６２は、コプロセッサが複数チャネルキャッシュ色変換を実行する手法を示している。各入力ピクセルは色要素に分解された後、対応する区間テーブル値（図５６）が前述のように決定され、Ｉｒ，Ｉｇ，Ｉｂ５７０といった３つの４ビット区間が得られる。結合された１２ビット数５７０は前述の表１２に従って変換され、８個の９ビットアドレスが得られる。アドレス（例えば５７２）は図６３において以下で説明するように再マッピングされ、対応するメモリバンク５７３をルックアップして４つの色出力チャネル５７４が得られる。メモリバンク５７３は、全体で５１２×３２ビットエントリとなり得るが、そのうちの１２８×３２ビットエントリを格納する。メモリバンク５７３はデータキャッシュ２３０の一部をなし、図６３で説明するようにキャッシュとして用いられる。
【０１８２】
図６３は、９ビットバンク入力５７８が５７９に再マッピングされる様子を示しており、ビット５８０〜５８２の順番を入れ替えることによりメモリパターンのエイリアスを取り除くことができる。これにより、隣接するピクセル値が同じキャッシュ要素のエイリアスされる確率を低減することができる。再構成されたメモリアドレス５７９は、それぞれが３２ビットの１２８エントリから成る対応するメモリバンク（例えば５８５）へのアドレスとして用いられる。７ビットラインアドレスを用いてメモリ５８５にアクセスすることで、メモリバンクごとにラッチ５８６される出力が得られる。各メモリバンク（例えば５８５）は、それぞれが２ビットの１２８エントリから成る関連タグメモリを有する。７ビットラインアドレスは、このタグメモリ５８７中の対応するタグにアクセスするためにも用いられる。アドレス５７９の最大２ビットをタグメモリ５８７中の対応するタグと比較することで、出力色値がキャッシュ中に格納されているかどうかが決定される。この９ビットアドレス中の最大２ビットは、赤と緑データ区間の最大ビットに対応する（表１２参照）。従って、ＭＯＧＣＳモードでは、ＲＧＢ入力色空間が赤と緑次元において効率よく４象限に分割され、９ビットアドレスの最大２ビットがＲＧＢ入力色区間中の象限を指定することになる。即ち、２つのビットタグによって指定された４つの象限に、出力色値が効率的に分割される。このため、あるラインの各タグ値に対応する色出力値は出力色空間で離れて位置することになり、メモリパターンのエイリアスを削減することができる。
【０１８３】
２つのビットタグが一致しない場合には、データキャッシュ制御部はキャッシュミスを記録し、必要なメモリ読み出しがキャッシュルックアップ処理とともにデータキャッシュ制御部によって起動される。なお、キャッシュルックアップ処理は、２ビットタグエントリに対応するラインのすべての値が外部メモリから読み出され、キャッシュに格納されるまで停止状態にある。この処理においては、外部メモリに格納されている色変換テーブルの関連ラインを読み出す処理が含まれる。図６３の処理５７５は図６２の各メモリバンク（例えば５７３）ごとに実行されるため、キャッシュ内容によってはメモリバンクから結果（例えば５８６）が出力されるまでに時間が必要となることもある。データ５８６の８つの３２ビットセットは、この後主データパス部（２４２）に転送され、上述の補間処理（図６２）の３ステップ５９０−５９２がすべての色チャネル同時にかつパイプライン処理で実行され、プリンタデバイスに送る４つの色書津力５９５が生成される。
【０１８４】
実験によれば、一般的な画像におけるキャッシュのミス率が平均で０．０１から０．０３のピクセルごとのキャッシュラインフェッチであるので、図６２と図６３において示したキャッシュ機構が有効であることが示されている。このようなキャッシュ機構を用いることで、多くの場合、データキャッシュ外部のメモリアクセスに対する要求を大幅に低減することができる。
【０１８５】
コプロセッサが行う２つの色空間変換モード（図１０）での命令符号化は以下の構造を有する。
色空間変換における命令符号化
【０１８６】
【表１２Ｂ】
2005348410.tif 000027
【０１８７】
図６４は、色空間変換命令における命令フィールド符号化を示したものであり、色変換命令におけるマイナーオプコード符号化は以下のようになる。
色変換命令におけるマイナーオプコード符号化
【０１８８】
【表１３】
2005348410.tif 000028
【０１８９】
図６５は、ＭＯＧＣＳモードにおいて、ＲＧＢピクセルストリームをＣＹＭＫ色値に変換する手法を示している。ステップＳ１において、２４ビットＲＧＢピクセルストリームがピクセルオーガナイザ２４６（図２）に入力される。ステップＳ２では、図５６と図５７で説明したように、ピクセルオーガナイザ２４６がルックアップテーブルを用いて各入力画素の４ビット区間値と８ビット区間内位置とを決定する。入力ピクセルの区間値と区間内位置は、入力ピクセルがどの区間に存在するのか、また区間内のどの位置に存在するのかを表すものである。ステップＳ３では、主データパス部２４２が入力ピクセルの赤、緑、青色要素の４ビット区間を結合して、１２ビットアドレスワードを生成し、この１２ビットアドレスワードをデータキャッシュ制御部２４０（図２）に送る。ステップＳ４では、表１２と図６２において説明したように、データキャッシュ制御部２４０がこの１２ビットアドレスワードを８つの９ビットアドレスに変換する。これらの８つのアドレスは、８つの出力値ＣＶ（Ｐ０）−ＣＶ（Ｐ７）のメモリバンク５７３（図６２）中の位置を示す。ステップＳ５では、データキャッシュ制御部２４０（図２）が８つの９ビットアドレスを、図６３で説明したように再マッピングする。このようにして、赤と緑の４ビット区間の最大ビットが、９ビットアドレスの最大２ビットにマッピングされる。
【０１９０】
ステップＳ６では、データキャッシュ制御部２４０が９ビットアドレスの最大２ビットと、メモリ５８７（図６３）中の２ビットタグとを比較する。２ビットタグが９ビットアドレスの最大２ビットと一致しなければ、出力色値ＣＶ（Ｐ０）−ＣＶ（Ｐ７）はキャッシュメモリ２３０に存在しない。従ってステップＳ７において、２ビットタグエントリに対応する出力色値が外部メモリからデータキャッシュ２３０に読み込まれる。２ビットタグが９ビットアドレスの最大２ビットと一致する際には、データキャッシュ制御部２４０はステップＳ８において図６２において説明した要領で８つの出力色値ＣＶ（Ｐ０）−ＣＶ（Ｐ７）を取り出す。このようにして、入力ピクセルを取り囲む８つの出力色値ＣＶ（Ｐ０）−ＣＶ（Ｐ７）が主データパス部２４２によってデータキャッシュ２３０から取り込まれる。ステップＳ７では、ステップＳ２で決定された区間内位置を用いて出力色値ＣＶ（Ｐ０）−ＣＶ（Ｐ７）が主データパス部２４２において補間され、補間された出力色値が出力される。
【０１９１】
ここで、ＲＧＢ色空間や対応する出力色値を４象限以上、例えば３２ブロックに更に分割することにより、データキャッシュ容量の格納領域を低減することができることは、専門家にとっては明らかである。３２ブロックに分割する場合には、データキャッシュの格納容量は出力色値の１／３２ブロックのみで良い。また、ＭＯＧＣＳモードで用いられるデータキャッシュ機構を単一出力一般変換モードにおいて用いることもできることも、専門家にとっては明らかである。この場合にも、データキャッシュの格納領域を低減することができる。
【０１９２】
３．１７．３ ＪＰＥＧ符号化／復号
特にメモリの節約やある場所から他の場所への画像転送速度の観点において、画像を符号化して格納することによる利点は計り知れない。画像符号化としてはさまざまな広く流布している標準が生まれている。非常に有名な標準の１つがＪＰＥＧ標準であるが、ＪＰＥＧ標準に関する詳細な説明はＶａｎ Ｎｏｓｔｒａｎｄ Ｒｅｉｎｈｏｌｄにより１９９３年に出版されたＰｅｎｎｅｂａｋｅｒとＭｉｔｃｈｅｌｌによる著名な本「ＪＰＥＧ：Ｓｔｉｌｌ Ｉｍａｇｅ Ｄａｔａ Ｃｏｍｐｒｅｓｓｉｏｎ Ｓｔａｎｄａｒｄ」を参照されたい。コプロセッサ２２４はＪＰＥＧ標準のサブセットを用いて画像を格納する。ＪＰＥＧ標準の利点は、画質を維持したまま大幅な圧縮率が得られる点である。もちろん、画像を圧縮して格納するためには他の標準を用いても良い。ＪＰＥＧ標準は専門家には良く知られた標準であり、ＡＳＩＣＳに用いることができるようなＪＰＥＧを実装した種々の製品がＪＰＥＧコア製品などを含む製造業者から市販されている。
【０１９３】
コプロセッサ２２４は、１、３、４色要素から成る画像をＪＰＥＧ符号化／復号する機能を備えている。１色要素画像はメッシュでもメッシュでなくても良い。即ち、１色要素を、メッシュデータあるいはメッシュされていないデータのどちらかでも取り出すことができる。メッシュデータの例としてピクセルデータごとの３色要素（即ち、ピクセルデータごとのＲＧＢ）があり、メッシュされていないデータの例として、画像の各色要素が別々に格納されており各色要素を独立に処理できるようなデータが挙げられる。３色要素画像の場合には、コプロセッサ２２４は３色チャネルが最小３バイトに符号化されていると仮定して、ワードごとに１ピクセルを用いる。
【０１９４】
ＪＰＥＧ標準は画像を最小符号化部位（ＭＣＵ）と呼ばれる小さな２次元部位に分割する。ここで、各最小符号化部位は独立に処理される。ＪＰＥＧ符号化器（図２）は、ダウンサンプリングされた画像の横１６ピクセル、縦８ピクセルのＭＣＵでも良いし、ダウンサンプリングされていない画像の場合の横８ピクセル、縦８ピクセルのＭＣＵでも良い。
【０１９５】
図６６は、３要素画像をダウンサンプリングする手法を示している。元のピクセルデータ６００は、各ピクセルは６０１がＹＵＶ色空間でのＹ，Ｕ，Ｖ要素から成るピクセル形式でＭＵＶバッファ２５０（図２）に格納されている。このデータはまず４つのデータブロック６０１〜６０４から成るＭＣＵ部位に変換される。データブロックは種々の色要素を含み、ブロック６０１，６０２は直接サンプルされたＹ要素であり、ブロック６０３、６０４は図３の例においてサブサンプルされたＵ，Ｖ要素である。ここで、コプロセッサ２２４は２種類のサブサンプリング機能を備える。１つはフィルタリングしない直接サンプリングであり、奇数のピクセルデータを残し、偶数のピクセルデータを削除するものである。なお、隣接値の平均をとりＵ，Ｖ要素をフィルタリングすることもできる。
【０１９６】
もう一つのＪＰＥＧサブサンプリングは、図６７に示した４色チャネルサブサンプリングである。このサブサンプリングでは、１６×８ピクセル６１０のピクセルデータブロックが通常のＹ，Ｕ，Ｖ要素に加えて不透明度要素（Ｏ）を含む４要素６１１を有している。このピクセルデータ６１０も図６６と同様にサブサンプルされる。しかし、この場合には、不透明チャネルを用いてデータブロック６１２、６１３が作成される。
【０１９７】
図６８は、図２のＪＰＥＧ符号化器２４１をより詳細に説明した図である。ＪＰＥＧ符号化／復号器２４１は、ＪＰＥＧ符号化と復号との双方を行う。符号化処理は、バス６２０を介してピクセルオーガナイザ２４６（図２）からブロックデータを受信する。ブロックデータはＭＵＶバッファ２５０に格納され、ブロックごとに処理がなされる。ＪＰＥＧ符号化処理はいくつかの明確なステップに分割される。これらのステップは、
１．ＤＣＴ部における離散コサイン変換の実行６２１
２．ＤＣＴ出力の量子化６２２
３．量子化器６２２で実行されるジグザグスキャンによるＤＣＴ係数の配置
４．係数符号化器６２３で実行されるＤＣ ＤＣＴ係数の予測符号化とＡＣ ＤＣＴ係数のランレンクス符号化
５．ハフマン符号化器６２４で実行される係数符号化器の出力の可変長符号化。出力はマルチプレクサ６２５とＲｂｕｓ６２６を介して結果オーガナイザ６２９（図２）に送られる。
【０１９８】
ＪＰＥＧ復号処理は、ＪＰＥＧ符号化動作を逆にしたものである。即ち、ＪＰＥＧ復号処理は、Ｂｕｓ６２０から圧縮されたＪＰＥＧブロックを入力する処理を含む。圧縮データはＢｕｓ６３０を介してハフマン符号化器６２４に送られ、データがＤＣ差分とＡＣランレンクスとに復号される。次に、データは係数符号化器６２３に送られ、ＡＣとＤＣ係数が復号され、通常のスキャンに戻される。その後、量子化器６２２においてＤＣ係数に対応する量子化値を乗算することでＤＣ係数の逆量子化が行われる。最後に、ＤＣＴ部６２１において逆離散コサイン変換が施されもとのデータが復元され、Ｂｕｓ６３１を介してマルチプレクサ６２５、Ｂｕｓ６２６を介して結果オーガナイザに送られる。ＪＰＥＧ符号化器２４１は、ＪＰＥＧ符号化器の動作を開始させるために命令制御部によってセットされたレジスタを含むような標準Ｃｂｕｓインタフェース６３２を介しての通常の方法で動作する。また、量子化器６２２とハフマン符号化器６２４はテーブルを必要とするが、これは必要時にデータキャッシュ２３０からロードされる。テーブルデータは、Ｏｂｕｓインタフェース部６３４を介してアクセスされる。ここでＯｂｕｓインタフェース部６３４はオペランドオーガナイザＢ２４７に接続され、データキャッシュ制御部２４０と作用しあう。
【０１９９】
ＤＣＴ部６２１はピクセルデータに対して離散コサイン変換と逆離散コサイン変換とを行う。ＤＣＴに関しては、さまざまな種類のＤＣＴ変換実現手法が知られており、「Ｓｔｉｌｌ Ｉｍａｇｅ Ｄａｔａ Ｃｏｍｐｒｅｓｓｉｏｎ Ｓｔａｎｄａｒｄ」（同上）の中にも記されているものの、ＤＣＴ６２１は以下の項「高速ＤＣＴ装置」で詳述する高速手法を用いている。なお、ＤＣＴ変換動作においては、Ｔｈｅ Ｔｒａｎｓａｃｔｉｏｎｓ ｏｆ ｔｈｅ ＩＥＩＣＥ，ｖｏｌ．Ｅ７１，ｎｏ．１１，Ｎｏｖｅｍｂｅｒ １９８８の１０９５ページに掲載されたにＡｒａｉらによる論文「Ａ Ｆａｓｔ ＤＣＴ−ＳＱ Ｓｃｈｅｍｅ ｆｏｒ Ｉｍａｇｅｓ」に基づくＤＣＴ変換手法を用いることもできる。
【０２００】
量子化器６２２はＤＣＴ係数の量子化と逆量子化を行い、データキャッシュに格納された対応するテーブルから関連値をＯｂｕｓインタフェース部６３４を介して取り出すことで動作する。量子化処理においては、入力データストリームは、データキャッシュ中の量子化テーブルから読み出された値でもって除算される。この除算は固定小数点の乗算として実装される。また、逆量子化処理では、データストリームは逆量子化テーブル中の値と乗算される。
【０２０１】
図６９は、逆量子化６２２をより詳細に説明した図である。量子化器６２２は、ローカルバスを介してＤＣＴモジュール６２１にデータを渡したり、ＤＣＴモジュール６２１からデータを受け取ったりするＤＣＴインタフェース６４０を備える。量子化処理においては、量子化器６２２はクロックサイクルごとに２つのＤＣＴ係数を受信する。これらの値は量子化器の内部バッファ６４１、６４２の１つに書き込まれる。バッファ６４１、６４２は入力データをバッファするための２つのポートを備えたバッファである。量子化処理において、ＤＣＴサブモジュール６２１からの係数データはバッファ６４１、６４２の１つに格納される。バッファがフルになると、データはバッファからジグザグスキャンで読み出され、Ｏｂｕｓインタフェース部６３４を介して受信した量子化値でもって乗算器６４３で乗算される。この出力は係数符号化インタフェース６４５を介して係数符号化器６２３（図６８）に転送される。これらの処理を行っている間、次のブロックの係数が他のバッファに書き込まれている。ＪＰＥＧ復号処理において、量子化モジュールは、テーブルに格納された値でもって復号されたＤＣＴ係数を乗算することで逆量子化処理を行う。量子化と逆量子化とはそれぞれ排他的な動作をするため、乗算器６４３は量子化と逆量子化との双方において用いられる。なお、逆量子化テーブルへのインデックスとして、８×８のブロック中の係数の位置を用いる。
【０２０２】
量子化処理と同様に、２つのバッファ６４１、６４２が係数符号化器６２３（図６８）からの入力係数データをバッファするために用いられる。データは量子化値と乗算され、逆ジグザグスキャン順にバッファに書き込まれる。バッファがフルになると、逆量子化された係数が通常の順番でバッファから２つ同時に読み出され、ＤＣＴインタフェース６４０を介してＤＣＴサブモジュール６２１（図６８）に送られる。従って、係数符号化器インタフェースモジュール６４５は、係数符号化器とのインタフェースとなっており、ローカルバスを介して符号化器にデータを送ったり符号化器からデータを読み出したりする。このモジュールは、符号化時にはジグザグスキャン順でバッファからデータを読み出し、復号時には逆ジグザグスキャン順でバッファにデータを書き込む。ＤＣＴインタフェースモジュール６４０とＣＣインタフェースモジュール６４５ともバッファからの読み出しや書き込みを行うことができる。そのため、アドレス／制御マルチプレクサ６４７を用いて、各インタフェースがどちらのバッファと動作しているのかを、量子化器のすべてのモジュールを制御するための状態マシンから成る制御モジュール６４８の制御のもとで、決定する。乗算器６４３は、１６×８の２の補数の乗算器を用いてＤＣＴ係数を量子化テーブル値と乗算しても良い。
【０２０３】
図６８において、係数符号化器６２３は以下の機能を実行する。
（ａ） ＪＰＥＧモードにおけるＤＣ係数の予測符号化／復号
（ｂ） ＪＰＥＧモードにおけるＡＣ係数のランレンクス符号化／復号
なお、係数符号化器６２３は、ＪＰＥＧモード動作とは別に、必要な時点でピクセルの予測符号化／復号やメモリコピー動作のために用いることができると好ましい。係数符号化器６２３は、ピンクブックに規定されているように、ＤＣ／ＡＣ係数の予測／ランレンクス符号化／復号を行う。また、ＪＰＥＧ標準に規定されているようなＪＰＥＧ ＡＣ係数のランレンクス符号化／復号に加えて、標準の予測符号化／復号機能も備えている。
【０２０４】
ハフマン符号化器６２４は、ＪＰＥＧデータ列のハフマン符号化／復号を行う。ハフマン符号化モードでは、係数符号化器６２３からランレンクス符号化されたデータが受信され、パックバイトのハフマンストリームが生成される。また、ハフマン復号モードでは、ハフマンストリームがＰｂｕｓインタフェース６２０からパックバイト形式で読み出され、ハフマン復号された係数が係数符号化モジュール６２３に送られる。ハフマン符号化器６２４は、データキャッシュに格納され、Ｏｂｕｓインタフェース６３４を介してアクセスされるハフマンテーブルを利用する。或は、ハフマンテーブルをハードで構成して高速にすることもできる。
【０２０５】
ハフマン符号化においてデータキャッシュを用いるときには、データキャッシュの８つのバンクは、以下に各テーブルごとに詳細に説明されているようにデータテーブルを格納する。
データキャッシュに格納されているハフマン、量子化テーブル
【０２０６】
【表１４】
2005348410.tif 000029
【０２０７】
図７０において、ハフマン符号化器６２４は、符号化器６６０と復号器６６１との２つの独立のブロックから主に構成される。双方のブロック６６０、６６１はマルチプレクサモジュール６６２を介して同じＯｂｕｓインタフェースを共有する。各ブロックは、それぞれ入力と出力を有し、ＪＰＥＧ符号化器で実行される機能に応じて、一時点ではどちらか１つのブロックのみがアクティブとなる。
ａ．符号化
ＪＰＥＧモードにおける符号化においては、ハフマンテーブルを用いて、ＤＣ差分値やＡＣランレンクス値に可変長コード（コードごとに１６ビットまで）を割り当てられる。割り当てられたコードは、ＣＣサブモジュールからＨＣサブモジュールに送られる。また、ハフマンテーブルは動作開始前にデータキャッシュから予めロードされていなければならない。そして、可変長コードをＣＣサブモジュールから送られてきたＤＣやＡＣ係数の他のビットと結合し、パックバイト形式が生成される。パック処理の結果、Ｘ’ＦＦバイトが得られたとすると、Ｘ’００バイトが挿入される。ＲＳＴｍマーカが必要なときはマーカが挿入されるが、この際には、最後のハフマン符号の「１」ビットでのバイト詰込処理と、詰込まれたバイトがＸ’ＦＦになったときのＸ’００バイト挿入処理が行われる。ＲＳＴｍマーカが必要かどうかは、ＣＣサブモジュールによって指示される。また、ＨＣサブモジュールは、Ｐｂｕｓ−ＣＣスレーブインタフェース上の「最後の」信号での指示により、画像の最後にＥＯＩマーカを挿入する。ＥＯＩマーカの挿入処理においては、ＲＳＴｍマーカと同様のパック処理、詰込み処理、挿入処理が必要となる。最後に、出力ストリームはパックバイトとして結果オーガナイザ２４９に送られ、外部メモリに書き込まれる。
【０２０８】
非ＪＰＥＧモードの場合には、ＣＣサブモジュール（Ｐｂｕｓ−ＣＣスレーブインタフェース）からアンパックデータとして符号化器にデータが送られる。各バイトは（ＪＰＥＧモードと同様に）キャッシュにあらかじめロードされたテーブルを用いて独立に符号化され、可変長シンボルがパックバイト形式にまとめられ、結果オーガナイザ２４９に送られる。なお、出力ストリームの最後のバイトは１での詰込処理が行われる。
ｂ．復号
復号アルゴリズムは、高速（リアルタイム）のものと低速のものとを備える。高速アルゴリズムはＪＰＥＧモードのみで動作し、低速アルゴリズムはＪＰＥＧモードでも非ＪＰＥＧモードでも動作する。
【０２０９】
高速ＪＰＥＧハフマン復号アルゴリズムは、ハフマンシンボルをＤＣ差分値あるいはＡＣランレンクス値のどちらかにマッピングする。これは特にＪＰＥＧに適するように設計されており、符号化時において例のハフマンテーブル（Ｋ３，Ｋ４，Ｋ５，Ｋ６）が用いられることを想定している。なお、これらのテーブルは、キャッシュメモリを参照することなく復号できるように、アルゴリズム中にハード的に埋め込まれている。このような復号処理は、あるデータレートを保証しつつ復号画像を印刷しなければならないような場合を想定したものである。バンド（ＲＳＴｍマーカで区切られたブロック）を復号するＨＣサブモジュールのデータレートは、１クロックサイクルでほぼ１つのＤＣ／ＡＣ係数である。ＨＣサブモジュールとＣＣサブモジュール間では、データストリームからＸ’００挿入バイトを削除するために、１クロックサイクル必要になることもあるが、これはデータに強く依存している。
【０２１０】
ハフマン復号器は高速モードで動作し、クロックサイクルごとに１ハフマンシンボルを抽出する。なお、高速ハフマン復号器については、以下の「可変長符号の復号器」において記している。また、ハフマン復号器６６１は、ヒープに基づく低速復号アルゴリズムを備えており、図７１に示す構造６７０となっている。
【０２１１】
ＪＰＥＧ符号化ストリームに対して、ストリッパー６７１においてＸ’００挿入バイト、Ｘ’ＦＦ詰込バイト、ＲＳＴｍマーカが取り除かれ、結合された他のビットとともにハフマンシンボルがシフター６７２に送られる。なお、ハフマンのみの符号化ストリームではこの処理は行われない。ハフマンシンボル復号の最初のステップは、ハフマンデータストリームの最初の８ビットでアドレシングされたキャッシュに格納されたＨＵＦＶＡＬテーブルの２５６のエントリをルックアップする処理である。この値が対応するハフマンシンボルの真の長さである場合には、当該値が出力フォーマッター６７６に転送され、復号値のシンボル長と付加ビット数とがシフター６７２にフィードバックされ、関連する付加ビットを出力フォーマッター６７６に転送し、復号部６７３に送るハフマンストリームの新しい開始部位を整列する。ここで、付加ビット数は復号値の関数である。最初のルックアップが復号値にならなかった場合、即ちハフマンシンボルが８ビット以上であった場合には、ヒープアドレスが計算され、一致するまで、あるいは「不適切ハフマンシンボル」条件が満たされるまで、引き続きヒープ（キャッシュ内に位置）アクセスが実行される。ルックアップが一致すると上記と同様の処理が行われ、「不適切ハフマンシンボル」条件が満たされた場合にはインタラプト状態となる。
【０２１２】
ヒープに基づく復号アルゴリズムは以下の通りである。
画像の最後までループ
シンボル長Ｎを８にセット
入力ストリームの最初の８ビットをＩＮＤＥＸに格納
ＨＵＦＶＡＬ（ＩＮＤＥＸ）をフェッチ
Ｉｆ ＨＵＦＶＡＬ（ＩＮＤＥＸ）＝＝００ｘｘ０００１１１．．（ＩＬＬ）
「不適切ハフマンシンボル」信号の送出
ｅｘｉｔ
ｅｌｓｅｉｆ ＨＵＦＶＡＬ（ＩＮＤＥＸ）＝＝１ｎｎｎ ｅｅｅｅ ｅｅｅ
ｅ−−（ＨＩＴ）
ｎｎｎビットをｅｅｅｅ ｅｅｅｅに値として転送
シンボル長Ｎ＝ｄｅｃｉｍａｌ（ｎｎｎ）を転送
／＊０００がシンボル長８として＊／
入力ストリームの調整
ｂｒｅａｋ
ｅｌｓｅ／＊ＨＵＦＶＡＬ（ＩＮＤＥＸ）＝＝０１ｉｉｉ ｉｉｉｉ ｉｉｉ
ｉ−−（ＭＩＳＳ）
ＨＥＡＰＩＮＤＥＸ＝＝ｉｉ ｉｉｉｉ ｉｉｉｉにセット（ヒープベース
を０に仮定）
Ｎ＝９にセット
Ｉｆ 入力ストリームの第９ビットが０である
ＨＥＡＰＩＮＤＥＸを１増加
ｆｉ
ＶＡＬＵＥ＝ＨＥＡＰ（ＨＥＡＰＩＮＤＥＸ）のフェッチ（第９ビットの
符号）
Ｌｏｏｐ
Ｉｆ ＶＡＬＵＥ＝＝０００１ ００００ １１１１−−（ＮＬ）
「不適切ハフマンシンボル」信号の送出
ｅｘｉｔ
ｅｌｓｅｉｆ ＶＡＬＵＥ＝＝＝１０００ ｅｅｅｅ ｅｅｅｅ
ｅｅｅｅ ｅｅｅｅを値として転送
シンボル長Ｎを転送
入力ストリームの調整
ｂｒｅａｋ
ｅｌｓｅ／＊ＶＡＬＵＥ＝＝０１ｉｉｉ ｉｉｉｉ ｉｉｉｉ−−（
ＭＩＳＳ）
Ｎ＝Ｎ＋１にセット（ＨＥＡＰＩＮＤＥＸ＝ｉｉ ｉｉｉｉ ｉｉ
ｉｉ）
Ｉｆ 入力ストリームの第Ｎビットが０
ＨＥＡＰＩＮＤＥＸを１増加
ｆｉ
ＶＡＬＵＥ＝ＨＥＡＰ（ＨＥＡＰＩＮＤＥＸ）のフェッチ
ｐｏｏｌ
ｐｏｏｌ
ストリッパ６７１は、入力ＪＰＥＧ６７１符号化ストリームからＸ’００挿入バイト、Ｘ’ＦＦ詰込みバイト、ＲＳＴｍマーカを削除し、「きれいな」ハフマンシンボルを連結された付加ビットとともにシフタ６７２に転送する。ハフマンのみの符号化においては他の付加ビットは存在しないため、このモードにおいては転送されたストリームはハフマンシンボルのみから成る。
【０２１３】
シフタ６７２ブロックは１６ビット出力レジスタを備え、次のハフマンシンボルを復号部６７３に（ＭＳＢからＬＳＢの順番のビットストリームで）転送する。シンボルは１６ビット以下であることも多いが、どれだけのビットを解析するかを決定するのは復号部６７３に任されている。シフタ６７２は復号部６７３からフィードバック６７８、即ち現在のシンボル長と（ＪＰＥＧモードにおける）現シンボルに続く付加ビット長とを受信し、シフタ６７２における次のシンボルの開始時点を適切に整列させる。
【０２１４】
復号部６７３はヒープに基づくアルゴリズムのコアを実装しており、Ｏｂｕｓ６７４経由でデータキャッシュに接続されている。復号部６７３は、データキャッシュフェッチブロック、ルックアップ値比較部、シンボル長カウンター、ヒープインデックス加算部、付加ビット数の復号部（復号は復号値に基づいて行われる）を備える。ここで、フェッチアドレスは以下のように解釈される。
【０２１５】
フェッチアドレス
【０２１６】
【表１５】
2005348410.tif 000030
【０２１７】
出力フォーマッターブロック６７６は８ビット値の復号や（スタンドアロンハフマンモード）、２４ビット値と付加ビットとＲＳＴｍマーカ情報との３２ビットワードへの結合（ＪＰＥＧモード）を行う。付加ビットは、復号部６７３が現シンボルに対する付加ビットの開始位置を決定した後に、シフタ６７２によって出力フォーマッタ６７６に転送される。また、出力フォーマッタ６７３は、最終値ワードを予測するために１ワード遅延を用いた２ディープＦＩＦＯバッファを備えている。復号処理においては、（高速、低速どちらでも）シフタ６７２が入力ビットストリームの最後部の詰込みビットを復号しようと試みることが生じる。このような状態はシフタによって通常検出され、「不適切シンボル」インタラプトを送出する替わりに、「強制終了」信号を送出する。アクティブな「強制終了」信号が送出されると、出力フォーマッタ６７６は最近の１復号ワード（ＦＩＦＯにまだ存在している）を「最後」として送出し、復号ストリームに属していない更に最近のワードを削除する。
【０２１８】
図７０におけるハフマン符号化器６６０の詳細を図７２に示す。ハフマン符号化器６６０はルックアップテーブルを介してバイトデータをハフマンシンボルにマッピングし、符号化部６８１、シフタ６８２、出力フォーマッタ６８３、キャッシュからアクセスされるルックアップテーブルを備える。入力値６８５はデータキャッシュに格納された符号化テーブルを用いて符号化部６８１において符号化される。テーブルとしては、符号化すべき値ごとに対応コードを含むテーブルとコード長を含むテーブルとの２つのテーブルが必要となるが、シンボルを符号化する際にはキャッシュ２３０へのアクセスは一度で良い。なお、ＪＰＥＧ圧縮においては、ＡＣ係数とＤＣ係数ごとに別のテーブルが必要となる。また、サブサンプリングが実行されている場合には、サブサンプル要素と非サブサンプル要素ごとに別のテーブルが必要となる。非ＪＰＥＧ圧縮では、２つのテーブル（符号とサイズ）のみが必要である。符号はシフタ６８２によって処理されて、出力ストリームをビットレベルで構成する。また、シフタ６８２は、必要時のバイトパディング処理であるＲＳＴｍとＥＯＩマーカ挿入処理をも行う。そして、データバイトは出力フォーマッタ６８３に転送され、Ｘ’００バイトでの挿入処理、Ｘ’ＦＦバイトやマーカ符号に先立つＦＦバイトでの詰込処理、パッキングされたバイトのフォーマット処理を行う。なお、非ＪＰＥＧモードでは、パッキングされたバイトのフォーマット処理のみが行われる。
【０２１９】
Ｘ’ＦＦバイトの挿入処理はシフター６８２によって行われるため、出力フォーマッタ６８３はＸ’ＦＦバイトを前に挿入するために、シフタ６８２からのどのバイトがマーカであるのかを知る必要がある。これは、バイトに対応しているタグレジスタをシフター６８２内に備えることによって行われる。バイト境界に存在する各マーカは、マーカ挿入処理においてシフター６８２によってタグ付けされる。結合処理部６８３はマーカに先立つＸ”ＦＦ”バイト以降には挿入処理を行わない。タグは、主シフトレジスタと同期してシフトされる。
【０２２０】
ハフマン符号化器はＪＰＥＧ圧縮において４あるいは８つのテーブルを用い、２つのテーブルを直接ハフマン符号化に用いる。用いるテーブルを以下に示す。
ハフマン符号化器において用いられるテーブル
【０２２１】
【表１６】
2005348410.tif 000031
【０２２２】
３．１７．４ テーブルインデックシング
ハフマンテーブルは、コプロセッサデータキャッシュ２３０において局所的に格納されている。データキャッシュ２３０は、各ラインが８ワードから成る１２８ラインの直接マッピングキャッシュとして構成される。キャッシュライン中の各ワードは独立にアドレスすることができ、この特徴をハフマン復号器が利用して同時に複数のテーブルにアクセスする。テーブルは小さい（≦２５６項目）なので、Ｏｂｕｓの３２ビットアドレスフィールドで複数のテーブルへのインデックスを含めることができる。
【０２２３】
上述のように、ＪＰＥＧ低速復号モードでは、様々なハフマンテーブルを格納するためにデータキャッシュが用いられる。データキャッシュのフォーマットを以下に示す。
ハフマン／量子化テーブルのバンクアドレス
【０２２４】
【表１７】
2005348410.tif 000032
【０２２５】
ＪＰＥＧ符号化器２４１（図２）においてＪＰＥＧ命令が実行されるのに先立ち、画像次元レジスタ（ＰＯ＿ＩＤＲ）あるいは（ＲＯ＿ＩＤＲ）に適切な画像幅値がセットされなければならない。他の命令とともに、命令の長さは処理すべき入力データ項目数に関係する。これはいかなるパディングデータをも含み、用いられているサブサンプリングオプションや色チャネル数にも関連する。
【０２２６】
コプロセッサ２２４により出されたすべての命令は、生成する出力データ量を制限するために２つの機能を用いる。これらの機能は、入力と出力データのサイズが異なるときにもっとも有効であり、特にＪＰＥＧ符号化／復号のように出力データサイズが未知であるときに有効である。これらの機能は、出力データを書き出すか、命令が適切に実行されたように見せながら単にデータを削除するかを決定する。デフォルトではこの機能はオフになっており、ＲＯ＿ＣＦＧレジスタ中の適切なビットをイネーブルにすることでオンとなる。しかし、ＪＰＥＧ命令ではこのビットをセットする特別なオプションが用意されている。なお、ＪＰＥＧ圧縮を用いる際には、コプロセッサ２２４は出力データの「削除」や「制限」機能をサポートすることが望ましい。
【０２２７】
図７３を用いて、削除、制限処理を説明する。入力画像６９０は、ある高さ６９１とある幅６９２とを有する。ここで、画像の一部分のみに関心があり、他の部位は印刷するのには関係がないというような状況がしばしば存在する。しかしながら、ＪＰＥＧ符号化システムでは８×８ピクセルブロックを対象とする。そのため、画像の幅が８の倍数とならない場合や、ＭＣＵ６９５を構成する関心部位領域がきちんと境界と一致しない場合が生じる。そこで、出力削除レジスタＲＯ＿ＣＵＴは、出力データストリームのはじめの部位６９６において削除する出力バイト数を決定する。また、出力制限レジスタＲＯ＿ＬＭＴは、生成する最大出力バイト数を決定する。この最大出力バイト数は、削除レジスタの結果に基づいてメモリに書込まれないバイトをも含む。このような処理により、最終出力バイト６９８以降のデータは出力されないような最終出力バイトを求めることができる。
【０２２８】
ＪＰＥＧ復号器における削除、制限機能が特に有効であるケースとして２つの場合がある。第１のケースは、図７４に示すように、復号画像の１ストリップ７０１の一部位７００を抽出あるいは解凍する場合である。第２のケースは、図７５に示すように、全体の画像７１４において、複数の完全なストリップ（例えば、７１１、７１２、７１３）の抽出あるいは解凍が必要となる場合である。
【０２２９】
ＪＰＥＧ命令の命令フォーマットやフィールド符号化を図７６に示す。マイナーオプコードフィールドの説明を以下に記す。
命令ワード−マイナーオプコードフィールド
【０２３０】
【表１８】
2005348410.tif 000033
【０２３１】
３．１７．５ データ符号化命令
コプロセッサ２２４は図２のＪＰＥＧ符号化器の一部を他の用途で用いることができる機能を備えることが望ましい。例えば、ハフマン符号化はＪＰＥＧのみならず他の圧縮手法においても用いられる。また、階層的画像復号のためのみにハフマン符号化部を制御するデータ符号化命令が備わっていることも望ましい。更に、ランレンクス符号化器／復号器、予測符号化器も同様の命令でもって独立に用いられることができる。
【０２３２】
３．１７．６ 高速ＤＣＴ装置
従来の図７７に示したような離散コサイン変換（ＤＣＴ）装置では、まず８×８ブロックの列方向に対して１次元ＤＣＴを実行し、次いで８×８ピクセルブロックの行方向に更に１次元ＤＣＴすることにより、８×８ピクセルブロックの２次元変換を実行する。このような装置では、入力回路１０９６、算術回路１１０４、制御回路１０９８、置換メモリ回路１０９０、出力回路１０９２を一般に備える。
【０２３３】
入力回路１０９６は８×８ブロックから８ビットピクセルを受信する。入力回路１０９６は、中間マルチプレクサ１１００、１１０２を介して算術回路１１０４に接続されている。算術回路１１０４は、８×８ブロックの完全な列あるいは行に対して算術処理を行う。制御回路１０９８は、他の全ての回路を制御し、ＤＣＴアルゴリズムを実行する。算術回路の出力は、置換メモリ１０９０、レジスタ１０９５、出力回路１０９２に送られる。置換メモリは更にマルチプレクサ１１００に接続され、マルチプレクサ１１００は次のマルチプレクサ１１０２に出力を送出する。また、マルチプレクサ１１０２はレジスタ１０９４からのデータをも受信する。置換回路１０９０は８×８ブロックデータを列形式で入力し、行形式でデータを出力する。出力回路１０９２はピクセルデータの８×８ブロックに対するＤＣＴ係数を出力する。
【０２３４】
通常のＤＣＴ装置では、算術回路１１０４がもっとも複雑であるため、算術回路１１０４の速度が全体の装置速度を決定する。図７７の算術回路１１０４は、一般に算術処理を図７８を用いて説明するように複数の処理段階に分割して処理を行う。従って、各処理段階１１４４、１１４８、１１５２、１１５６を加算器や乗算器などの通常の資源を用いて実行するような単一回路が用いられる。このような算術回路１１０４では、単一の共通回路が回路１１０４の種々の処理段階を実行するために用いられるため、最適速度に比べて速度が遅くなるという欠点を有する。また、中間結果を蓄える格納手段もこれに含まれる。回路のクロックサイクル時間は少なくとも最も遅い回路段階以上でなければならないため、全体の処理に要する時間は各処理段階に要する時間の和以上となり得る。
【０２３５】
図７８は、図７７の装置における通常の算術データパスを示したものであり、ＤＣＴを４処理段階で行う処理の一部を示している。なお、本図は実際の実装を示したものでなく、機能を示したものである。４処理段階１１４４、１１４８、１１５２、１１５６のそれぞれは、単一の再構成可能な回路として構築される。サイクルごとに、１次元ＤＣＴの４処理段階１１４４、１１４８、１１５２、１１５６のそれぞれが再構成される。また、この回路においては、４処理段階１１４４、１１４８、１１５２、１１５６のそれぞれが共通の資源（加算器や乗算器など）のプールを用いることで、ハードウェア規模を小さくしてえる。
【０２３６】
しかしながら、この回路の欠点は速度が最適になっていないことである。４処理段階１１４４、１１４８、１１５２、１１５６はそれぞれが加算器や乗算器の同一プールから構成されている。そのため、クロックピリオドは最も遅い処理段階によって決定される（この例ではブロック１１４４の２０ｎｓ）。入力と出力マルチプレクサ１１４６と１１５４の遅延（それぞれ２ｎｓ）と、フリップフロップ１１５０の遅延（３ｎｓ）を足すと、全体の遅延が２７ｎｓとなる。従って、このＤＣＴ構成では最速２７ｎｓで動作する。
【０２３７】
パイプライン形式のＤＣＴ構成もよく知られている。この構成の欠点は、多量のハードウェアを必要とする点である。スループットの観点では本発明の構成ではパイプライン構成に及ばないものの、現在のほとんどのＤＣＴ構成と比べてきわめて良好な性能／サイズ特性や速度特性を示す。図７９は、ピクセルデータが入力回路１１２６に入力され、８ビットピクセルデータの列を格納するようなＪＰＥＧ符号化器（図２）において用いられる好適な離散コサイン変換部の構成を示した図である。置換メモリは、２次元離散コサイン変換の２回目のパスを実施するために、列形式データを行形式データに変換する。入力回路１１２６と置換メモリ１１１８からのメモリは、マルチプレクサ１１２４においてマルチプレキシングされ、出力データが算術回路１１２２に送られる。算術回路１１２２の結果は、２回目のパスの終了後出力回路１１２０に送られる。制御回路１１１６は、離散コサイン変換装置中のデータの流れを制御する。
【０２３８】
離散コサイン変換処理の第１回目のパスでは、変換すべき画像の列データあるいはピクセルデータに逆変換される変換画像係数が、入力回路１１２６に送られる。このパスでは、マルチプレクサ１１２４は制御回路１１１６によって設定され、入力回路１１２６から算術回路１１２２にデータが送られる。図８０は、算術回路１１２２の構成をより詳細に示した図である。フォワード離散コサイン変換の実行の場合には、フォワード離散コサイン変換を実行するフォワード回路１１３８の結果がマルチプレクサ１１２４において選択される。ここで、マルチプレクサ１１２４は制御回路１１１６によって設定される。逆離散コサイン変換の実行の場合には、制御回路１１２６の設定に基づいて、逆回路１１４０からの出力がマルチプレクサ１１４２において選択される。１回目のパスでは、各列ベクトルが算術回路１１２２（制御回路１１６６によって適切に設定される）によって処理された後、当該ベクトルが置換メモリ１１１８に書込まれる。８×８ブロック中のすべての８列ベクトルの処理が終わり、置換メモリ１１１８に書込まれると、離散コサイン変換の２回目のパスが開始される。
【０２３９】
フォワードあるいは逆離散コサイン変換の２回目のパスでは、行形式のベクトルが置換メモリ１１１８から読み出され、マルチプレクサ１１２４を介して算術回路１１２２に送られる。このパスでは、マルチプレクサ１１２４は入力回路１１３６からのデータを無視し、置換メモリ１１１８からの行ベクトルデータを算術回路１１２２に転送するように、制御回路によって設定される。算術回路１１２２中のマルチプレクサ１１４２は、逆回路１１４０からの結果データを算術回路１１２２の出力に送る。算術回路１１２２からの結果が得られた時点で、制御回路１１１６からの指令に基づいて出力回路１１２０は結果を取り込み、以降の時点で出力する。
【０２４０】
算術回路１１２２は、中間結果を格納する記憶部位を持たないという点で、組み合わせ回路となっている。制御回路１１１６は、データが入力回路１１３６からマルチプレクサ１１２４や算術回路１１２２を介して出力されるまでに要する時間を把握しているため、算術回路１１２２の出力からの結果ベクトルを出力回路１１２０に取り込む時点を正確に指示することができる。算術回路１１２２において中間記憶を持たない利点は、中間記憶要素との間でのデータのやり取りに必要な時間を省くことができるとともに、算術回路１１２２をデータが通過するのに要する時間が内部処理段すべての和となり、最大の時間を要する処理段のＮ倍（従来の離散コサイン変換装置のように）にはならないことが挙げられる。なお、ここで、Ｎは算術回路中の処理段数である。
【０２４１】
図８１は、全体の遅延が単に４つの処理段１１５８、１１６０、１１６２、１１６４の和、２０ｎｓ＋１０ｎｓ＋１２ｎｓ＋１５ｎｓ＝５７ｎｓとなり、図７８の回路よりも高速となることを示している。このような回路によれば、全体のシステムクロックサイクルを短くすることができる。図８１の回路において、結果を得るのに４クロックサイクルが必要であるとすると、全体のＤＣＴシステムにおいて最小実行時間は５７／４ｎｓ（１４．２５ｎｓ）となり、図７８ではＤＣＴクロックサイクルが２７ｎｓとせざるを得ないことを鑑みると大幅な性能向上となることがわかる。
【０２４２】
本ＤＣＴ装置の実際の実行時においては、Ｙｕｋｉｈｉｒｏ Ａｒａｉ，Ｔａｋｅｓｈｉ Ａｇｕｉ，Ｍａｓａｙｕｋｉ ＮａｋａｊｉｍａらによるＴｈｅＴｒａｎｓａｃｔｉｏｎｓ ｏｆ ｔｈｅ ＩＥＩＣＥ，ｖｏｌ，Ｅ７１，ｎｏ．１１，１９８８年１１月のページ１０９５に掲載された論文「画像のための高速ＤＣＴ−ＳＱ手法」で示されたＤＣＴアルゴリズムを用いることもできる。このアルゴリズムをハードウェアで実行することで、本ＤＣＴ装置中の算術回路１１２２に容易に配置することができる。同様に、他のＤＣＴアルゴリズムを算術回路１１２２中にハードウェアとして配置することも可能である。
【０２４３】
３．１７．７ ハフマン復号器
以下の実施例は、種々の長さのビットフィールドがインターリーブされた可変長符号に対する手法と装置に関するものである。特に、本発明の実施例は、可変長符号化データの効率の良い、高速な、単一処理段（クロックサイクル）の復号を提供するものである。ここで、可変長符号化されていず整列されているようなデータとは、既に別の前処理ブロックにおいて符号化データストリームから削除されているものとする。更に、削除されたバイト整列データの位置情報は、復号されるデータと同時に復号器の出力に送られる。また、前処理された入力データ中に残っているバイト整列、非可変長符号化ビットフィールドの高速な検出、並びに削除をも提供するものである。
【０２４４】
本発明の好適な実施例では、マーカ符号間のクロックサイクルごとに１ハフマンシンボルといったレートで、ＪＰＥＧ符号化データを復号することのできる高速ハフマン復号器を備えることが望ましい。これは、別の前処理ブロックにおいて、入力データからバイト整列されハフマン符号化されていないマーカヘッダ、マーカ符号、挿入バイトを分離し、除去する手法によって実現できる。バイト整列されたデータが除去されると、入力データはデータシフト組み合わせ回路ブロックに送られ、データ復号レジスタの連続的な挿入処理を行い、復号部位にデータが送られる。もとの入力データから除去されたマーカの位置はマーカシフトブロックに送られ、データシフトブロックにおいてシフトされた入力データと同時にマーカ位置ビットのシフトが行われる。
【０２４５】
復号部は、データ復号レジスタから入力された符号化ビットフィールドを組合せ回路で復号する。復号部の出力は、復号値（ｖ）と入力符号の実際の長さ（ｍ）である。ここで、ｍはｎ以下である。また、可変長ビットフィールドの長さ（ａ）も出力する。ここで、ａは０以上の値である。可変長ビットフィールドはハフマン符号化されていないため、すぐにハフマン符号化される。復号部の入力中の長さｎのビットフィールドは実際の符号以上の長さを有する。復号部では、実際のコード長（ｍ）を決定し、他のビット（ａ）の長さとともに制御ブロックに転送する。制御ブロックはシフト値（ａ＋ｍ）を決定し、データ／マーカシフトブロックを起動して次の復号サイクルに備えて入力データをシフトする。
【０２４６】
本発明の装置では、復号値、入力符号の実際の長さ、ハフマン符号化されていないビットフィールドの長さを所定の時間内に出力するものであれば、ＲＯＭ，ＲＡＭ，ＰＬＡなどのいかなる組合せ回路の復号部を用いることができる。本実施例では、復号部は、ＪＰＥＧ標準で規定されているように予測符号化ＤＣ係数値やＡＣランレンクス値を出力する。また、ＪＰＥＧ標準で規定されているように、復号値と同時に入力データから除去されたハフマン符号化されていないビットフィールドは、ＤＣとＡＣ係数の値を決定する付加ビットを示す。データ復号レジスタ中のデータから除去されたハフマン符号化されていないビットフィールドの他の種別としては、ＪＰＥＧ標準に規定されているようにもとの入力データストリーム中のバイト整列マーカに先立つパディングビットがある。これらのビットは、制御ブロックがデータレジスタのパディング領域の内容をチェックすることによって検出される。パディング領域はデータレジスタのｋ最大ビットから成り、マーカレジスタの最大ビット中のマーカビットの存在によって示される。パディング領域中のすべてのビットが同一（ＪＰＥＧ標準では１）であれば、パディングビットとして判断され、復号されることなくデータレジスタから除去される。そして、次の復号サイクルに向けて、データとマーカレジスタの内容は更新される。
【０２４７】
装置の実施例では、本発明の好適な実施例の要求に応じて、出力データのフォーマット処理を行う出力ブロックを備える。出力ブロックは、ＪＰＥＧにおける付加ビットなどのように、対応する可変長符号化されていないビットフィールドや、ＪＰＥＧにおけるマーカのように整列された入力バイトや符号化されていないビットフィールドの位置を示す信号とともに、復号値を出力する。
【０２４８】
ＪＰＥＧ符号化器２４１（図２）によって復号されたデータは、ＪＰＥＧコンパチブルであり、「付加ビット」と呼ばれる可変長符号化されていないビットフィールド、「パディングフィールド」と呼ばれる可変長符号化されていないニットフィールド、「マーカ」「挿入バイト」「詰込バイト」と呼ばれる固定長の、バイト整列された、符号化されていないビットフィールドがインタリーブされた可変長ハフマン符号化コードから構成される。図８２に代表的な入力データを示す。
【０２４９】
ＪＰＥＧ符号化器２４１のハフマン復号器中の全体構成やデータフローを図８３と図８４に示す。図８３は、ＪＰＥＧデータのハフマン復号器の構成を詳細に示している。ストリッパ１１７１はマーカ符号（符号ＦＦＸＸｈｅｘ，ＸＸは非零）を除去し、バイト（符号ＦＦｈｅｘ）を挿入し、バイト（符号Ｆｆｈｅｘに続く符号００ｈｅｘ）を詰込む。これらはすべて入力データのバイト整列された要素であり、３２ビットワードとしてストリッパに送られる。処理すべき第１ワードの最大ビットは、入力ビットストリームの先頭になる。ストリッパ１１７１では、バイト整列されたビットフィールドが、ハフマン符号の復号処理が復号器のダウンストリーム部位において実際に行われる前に、入力データから除去される。
【０２５０】
入力データはストリッパ１１７１にクロックサイクルに１つごとの３２ビットワードとして入力される。入力バイト１２１１を０から３への番号付けを図８５に示す。番号（ｉ）のバイトが挿入バイト、詰込バイト、あるいはマーカであるため除去されたとすると、番号（ｉ−１）から０の残りのバイトがストリッパ１１７１の出力で左にシフトされ、番号（ｉ）を１減らす。この際、バイト０は「無関係な」バイトとなる。ストリッパ１１７１から出力されたバイトの有効性は、図８５に示されている別の出力タグ１２１２によって符号化される。ストリッパ１１７１によって除去されないバイトはストリッパにおいて左詰めで出力される。出力中の各バイトは、対応するバイトが有効（ストリッパ１１７１を通過する）か、無効（ストリッパ１１７１で除去される）か、有効かつマーカの後部か、を示すタグが付加される。タグ１２１２は、データシフタを通してデータレジスタ１１８２へのデータバイトのロードを制御するとともに、マーカシフタを通してマーカレジスタ１１８３へのマーカ位置のロードを制御する。入力ワードから１バイト以上削除された場合でも同様の手法が実行される。すなわち、すべての残りの有効バイトが左詰めされ、対応する出力タグが出力バイトの有効性を示す。図８５には、種々の入力バイトの組み合わせに対する出力バイトと出力タグの例１２１３が示されている。
【０２５１】
図８３において、プレシフタとポストシフタブロック１１７２、１１７３、１１８０、１１８１の役割は、データレジスタ１１８２とマーカレジスタ１１８３に十分な空き領域がある場合にデータレジスタとマーカレジスタとに連続的にデータをロードすることである。データシフタとマーカシフタブロックは、プレシフタブロックとポストシフタブロックとから成るが、それぞれは同一であり同様に制御される。差異は、データシフタがストリッパ１１７１からのデータを処理するのに対し、マーカシフタはタグのみを処理し、マーカ位置を復号されたハフマン値と同時に復号器に出力する点にある。ポストシフタ１１８０、１１８１の出力は、図８３に示されているように対応するレジスタ１１８２、１１８３に直接転送される。
【０２５２】
図８６にもデータプレシフタ１１７２が示されているが、データプレシフタ１１７２は、ストリッパ１１７１からのデータに３２個のゼロを最小ビット１２５１に付加し、６４ビットにデータを拡張する。次いで、拡張データは６４ビット幅のバレルシフタ１２５２で右にデータレジスタ１１８２に現在存在するビット数だけシフトされる。この際、ビット数は、データ１１８２、マーカ１１８３レジスタ内にどれだけの有効ビットが存在するかを常に把握している制御ロジック１１８５から与えられる。そして、バレルレジスタ１２５２は、６４ビットを、６４個の２×１基本マルチプレクサ１２５４から成るマルチプレクサブロック１２５３に転送する。各基本２×１マルチプレクサ１２５４は、バレルシフタ１２５２からの１ビットとデータレジスタ１１８２からの１ビットを入力とする。データレジスタ中のビットが有効であるときにデータレジスタビットを出力する。一方、無効である場合には、バレルシフタ１２５２のビットを出力する。すべての基本マルチプレクサ１２５４への制御信号は、図８６ならびに図８７におけるレジスタ１２２３のプレシフタ制御ビット０．．．５として示されているように制御ブロックのシフト制御１信号より復号される。基本マルチプレクサ１２５４の出力はバレルシフタ１２５５に送られ、図８６に示されるように５ビット制御信号シフト制御２より与えられるビット数分左にシフトされる。これらのビットは、データレジスタ１１８２において現データの復号によって使用されるビット数を示したものであり、現復号ハフマンコード長と続く付加ビット数、あるいはパディングビットが検出されていれば削除されるパディングビット数、あるいはデータレジスタ１１８２中の有効ビット数が削除されるビット数以下であれば０を足したものとなる。このようにして、バレルシフタ１２５５から出力されるデータには、単一復号サイクルの後にデータレジスタ１１８２にロードされる新しいデータが含まれることになる。データレジスタ１１８２の内容は、最大ビットが復号されるためにレジスタからシフトアウトされ、ストリッパ１１７１から０、８、１６、２４、３２ビットがデータレジスタ１１８２に付加されるといった具合に変更される。データレジスタ１１８２に復号できるだけの十分なビットが存在しない場合には、ストリッパ１１７１からのデータが存在すれば現サイクルにおいてロードされる。現サイクルにおいてストリッパ１１７１からのデータが存在しない場合には、データレジスタ１１８２からの復号ビットは、十分なビット数であれば削除され、十分なビット数でなければデータレジスタ１１８２の内容は変更されない。
【０２５３】
マーカプレシフタ１１７３、ポストシフタ１１８１、マーカレジスタ１１８３は、データプレシフタ１１７２、データポストシフタ１１８０、データレジスタ１１８２とそれぞれ同一の部位である。部位１１７３、１１８１、１１８３内のデータフローならびにこれらの部位間のデータフローも、部位１１７２、１１８０、１１８２間でのデータフローと同一である。同様の制御信号が制御部１１８５より双方の部位セットに送られる。これらの部位の差異は、マーカプレシフタ１１７３とデータプレシフタ１１７２の入力データ種別と、マーカレジスタ１１８３とデータレジスタ１１８２の内容がどのように用いられるか、という点である。図８８に示すように、ストリッパ１１７１からのタグ１２６１は８ビットワードとして入力され、データレジスタ１１８２に向かうデータバイトごとに２ビット割り当てられている。図８５に示した符号化手法によれば、有効かつマーカ後部であるバイトを示す２ビットタグの最大ビットは１である。ストリッパ１１７１から同時に送られる４つのタグの最大ビット位置のみが、マーカプレシフタ１１７３の入力１２６２として送出される。このようにして、マーカプレシフタへの入力には、はじめに符号化されたデータビットでマーカの後部に位置する位置を示す１がセットされたビットが存在することになる。同時に、これらはデータレジスタ１１８２中でマーカが後に続くはじめに符号化されたデータビットの位置をマークしている。マーカレジスタ１１８３中のマーカ位置ビットとデータレジスタ１１８２中のデータビットの同期的な振る舞いによって、制御ブロック１１８５はパディングビットの検出や削除を行うことができるとともに、復号データと同時にマーカ位置を復号器の出力に送出することができる。上述の通り、２つのプレシフタ（データ１１７２とマーカ１１７３）、ポストシフタ（データ１１８０とマーカ１１８１）、レジスタ（データ１１８２とマーカ１１８３）は同一の制御信号を与えられているため、完全な並列、同期動作が可能となる。
【０２５４】
復号部１１８４（図８９にも示されている）は、データレジスタ１１８２の最大１６ビットを入力し、復号されたハフマン値、復号される現在の入力符号長、入力符号に続く付加ビット長（復号値の関数となる）を抽出するための組み合わせ回路復号部１１８４に送られる。付加ビット長は、対応する前のハフマンシンボルが復号された時点で明らかになり、次のハフマンシンボルの開始位置となる。従って、クロックサイクルごとに１つの値が復号される速度を維持する場合には、ハフマン値の復号を組み合わせ回路ブロックで行わなければならない。復号部は、図８９に示すように、１６ビットトークンをデータレジスタ１１８２から入力し、ハフマン値（８ビット）、対応するハフマン符号化されたシンボル（４ビット）、付加ビット（４ビット）を生成するような組み合わせ回路ブロックとしてハードワイヤされた４つのＰＬＡスタイルの復号テーブルを備えることが望ましい。
【０２５５】
パディングビットの削除処理は、制御部１１８５の一部であるパディングビットの復号部においてデータレジスタ１１８２中でパディングビット列が検出された際の実際の復号処理において行われる。図９０にパディングビットの復号部を示す。マーカレジスタ１１８３、１２４２の８最大ビット中にマーカ位置ビットが存在するかどうかが調べられる。マーカ位置ビットが存在した場合には、マーカレジスタ１２４２中のマーカビットに先立つビットに対応するデータレジスタ１１８２、１２４１中のすべてのビットが現在のパディング領域として判断される。現在のパディング領域の内容は、パディングビット検出部１２４３によってすべて１であるかどうかがチェックされる。現パディング領域のすべてのビットが１である場合には、パディングビットであると判断されデータレジスタから削除される。ここで、削除処理は、データレジスタ１１８２、１２４１（同時にマーカレジスタ１１８３、１２４２）の内容を対応するシフタ１１７２、１１７３、１１８０、１１８１を用いて１クロックサイクルで左にシフトさせることで行われる。この処理は、復号値が出力されないことを除いて通常の復号モードと同一である。現パディング領域のすべてのビットが１でない場合には、パディングビット削除サイクルではなく通常の復号サイクルが実行される。パディングビットの検出は上述のように各サイクルごとに行われ、データレジスタ１１８２にパディングビットが存在する場合には削除される。
【０２５６】
図８７は、制御部１１８５を詳細に示したものである。制御部の中心部位はレジスタ１２２３であり、データレジスタ１１８２中の現有効ビット数を保持している。マーカレジスタ１１８３中の有効ビット数は常にデータレジスタ１１８２中の有効ビット数と等しい。制御部は３つの機能を実行する。第一の機能は、レジスタ１２２３に格納されるデータレジスタ１１８２中の新しいビット数の計算である。第二の機能は、シフタ１１７２、１１７３、１１８０、１１８１、１１８６、１１８７、復号部１１８４、出力フォーマット部１１８８への制御信号の生成である。第三の機能は、上述のようにデータレジスタ１１８２中のパディングビットの検出である。
【０２５７】
データレジスタ１１８２中の新しいビット数（ｎｅｗ＿ｎｏｂ）は、データレジスタ１１８２（ｎｏｂ）中の現ビット数と現サイクルにおいてストリッパ１１７１からロード可能なビット数（ｎｏｓ）との加算し、現サイクルにおいてデータレジスタ１１８２から削除されるビット数（ｎｏｒ）を減算したものとして計算される。ここで、現サイクルは、復号サイクルあるいはパディングビット削除サイクルである。従って、新しいビット数は以下のように計算される。
【０２５８】
ｎｅｗ＿ｎｏｂ＝ｎｏｂ＋ｎｏｓ−ｎｏｒ
これらの処理は加算器１２２１と減算器１２２２とで実行される。なお、現サイクルにおいてストリッパ１１７１からデータが入力されない場合には（ｎｏｓ）が０となる。また、データレジスタ１１８２においてビットが足りない、即ちデータレジスタ中のビットが制御部１１８５からの現符号長と続く付加ビット長との和以下であることにより、現サイクルにおいて復号処理が行われない場合にも（ｎｏｓ）は０となる。値（ｎｅｗ＿ｎｏｂ）は６４を越えることがあり、ブロック１２２４において越えているかどうかがチェックされる。このような場合には、ストリッパ１１７１は停止状態となり、新しいデータのロードがなされない。マルチプレクサ１２３３は、ストリッパ１１７１からロードされたビット数をゼロにするために用いられる。ここで、ストリッパ１１７１を停止させる信号は図示されていない。復号部１２３１からの信号「パディングサイクル」はマルチプレクサ１２３４を制御し、パディングビット数あるいは復号ビット数（符号ビットと付加ビットとの長さ）を削除すべきビット数（ｎｏｒ）として選択する。復号ビット数がデータレジスタ中のビット数（ｎｏｂ）以上であると、比較器１２２８において判断されると、マルチプレクサ１２３４に与えられるシフトすべき有効ビット数はＮＡＮＤゲート１２３０においてゼロに設定される。すなわち、（ｎｏｒ）はゼロに設定され、データレジスタのビットの削除は行われない。マルチプレクサ１２３４の出力は、ポストシフタ１１８２と１１８３の制御にも用いられる。データレジスタ１１８２の幅はデッドロック状態を避けるように設定される。すなわち、ストリッパ１１７１からの最大ビット数を収容するだけの領域をデータレジスタに確保するように、あるいは復号／パディングビット削除サイクルの結果として十分な有効ビット数が削除されるように設定される。
【０２５９】
復号サイクルにおいて削除されるビット数の計算は加算器１２２６において実行される。オペランドは組み合わせ回路復号部１１８４から入力される。１６ビットの符号長は復号部において”００００”と符号化されるため、”ｏｕ＿ｒｅｄｕｃｅ”ロジック１２２５では”００００”が”１００００”に符号化され、現在の符号なしのオペランドが得られる。このオペランドと減算器１２２７の出力とが、出力フォーマットシフタ１１８６と１１８７への制御信号を与える。
【０２６０】
ブロック１２２９はＥＯＩ（画像終了）マーカ位置の検出に用いられる。ＥＯＩマーカ自身はストリッパ１１７１において削除されるが、ストリッパ１１７１で削除される以前にＥＯＩマーカに先立つ位置に存在していたデータの最終ビットとなるパディングビットは存在する。比較器１２２９では、レジスタ１２２３に格納されているデータレジスタ１１８２中のビット数が８以下であるかどうかをチェックする。８以下であれば、ストリッパ１１７１から新しいデータは入力されず（データレジスタ１１８２が復号されるデータ部の残りのビットを保持している）、残りのビットが削除されたＥＯＩマーカの前のパディング領域サイズを示すことになる。さらなるパディング領域の処理やパディングビットの削除などは、上述のＲＳＴマーカの前のパディングビットの場合に用いた手順と同一である。
【０２６１】
バレルシフタ１１８６、１１８７と出力フォーマット部１１８８とはサポートする投割を有し、実施例に応じたさまざまな実装を考えることができる。また、まったく実装されないこともあり得る。これらへの制御信号は上述のように制御部１１８５より与えられる。付加ビットプレシフタ１１８６はデータレジスタから３２ビットを入力し、現在復号されているハフマン符号長だけ左にシフトする。このようにして、現在復号されている符号に続くすべての付加ビットは、バレルシフタ１１８６の出力に合わせて左に位置することになり、バレルシフタ１１８７への入力として送られる。付加ビットポストシフタ１１８７は、データの出力フォーマットとして用いられ図９１にも示されている１１ビットフィールドにおいて、左整列から右整列に付加ビット位置を調整する。付加ビットフィールドは出力ワードフォーマット１１９６においてビット８からビット１８に拡張され、実際の付加ビット数に応じて最大ビットのいくつかは無効であることもある。このビット数はＪＰＥＧ標準で規定されているように１１９６のビット０から３に符号化される。出力データフォーマットとして異なるフォーマットを用いる場合には、フォーマットに応じてバレルシフタ１１８６、１１８７とその機能を変更することになる。
【０２６２】
出力フォーマットブロック１１８８は復号値をパックする処理を行い、ＪＰＥＧ標準では制御部１１８５から与えられるＤＣ／ＡＣ係数（１１９６，ビット０から７）とＤＣ係数指示ビット（１１９６，ビット１９）、付加ビットポストシフタ１１８７から与えられる付加ビット（１１９６，ビット８から１８）、マーカレジスタ１１８３から与えられるマーカ位置ビット（１１９６、ビット２３）とを図９１に示すフォーマットに従ってワードに構成する処理を行う。出力フォーマット部１１８８は、復号部の出力インタフェースに関する機能要件にも対処する。出力フォーマット部の実装は、異なる機能要件の結果として出力インタフェースを変更することになると、通常それに応じて変更される。上述のハフマン復号器は非常に効果的な復号処理を提供し、高速復号処理を実現する。
【０２６３】
３．１７．８ 画像変換命令
これらの命令はソース画像の一般アフィン変換を行うためのものである。変換画像の一部を生成する処理は大きく２つのエリアに分けられる。一つはソース画像のどの部位が現在の出力スキャンラインと関連するかを決定するステップ、もう一つは必要なサブサンプリング／補間処理を行ってピクセルごとに出力画像を生成するステップである。
【０２６４】
図９２は、ソース画像の適切な領域が復号されているものとして、目的ピクセル値を計算するために必要なステップ７２０のフローチャートを示している。まず、サブサンプリングが行われていればサブサンプルが７２１で考慮される。次に、他の補間処理７２２と他のサブサンプリング処理といった２つの処理が通常実装されている。通常、補間とサブサンプリングとは別のステップであるが、補間とサブサンプリングとを一緒に行う場合もある。補間処理においては、まず周囲の４ピクセルを探し、プレ乗算７２３が必要であるかどうかを、双線形補間７２４を行う前に決定する。双線形補間処理７２４は一般に計算量が非常に多くなるため、これにより画像変換処理動作が制約される。目的ピクセル値を計算する最後のステップは、ソース画像から双線形補間されたサブサンプルを加算する処理である。加算されたピクセル値はさまざまな方法で積分７２７され、目的画像ピクセル７２８が生成される。
【０２６５】
画像変換命令のための命令ワード符号を図９３に示すとともに、マイナーオプコードフィールドの説明を以下の表に示す。
命令ワード：マイナーオプコードフィールド
【０２６６】
【表１９】
2005348410.tif 000034
【０２６７】
命令オペランドや結果フィールドの説明を以下に示す。
命令オペランドと結果ワード
【０２６８】
【表２０】
2005348410.tif 000035
【０２６９】
オペランドＡは、実際の変換を定義するために必要なすべての情報を記述している「カーネル記述子」として知られているデータストラクチャを指す。このデータストラクチャは２つのフォーマットのうちの１つとなる（Ａ記述子のＬビットで定義される）。図９４はカーネル記述子の長い符号フォーマットを示し、図９５は短い符号フォーマットを示す。カーネル記述子は、以下の情報を記述する。
１． ソース画像開始座標７３０（符号なしの固定長、２４．２４解像度）。位置（０、０）が画像の左上。
２． 水平７３１と垂直７３２（サブサンプル）デルタ（２の補数、固定長、２４．２４解像度）
３． 後述の固定長行列係数中のバイナリポイントの位置を示す３ビットのｂｐフィールド７３３
４． （存在する場合には）積分行列係数７３５。これらは、ｂｐフィールドによって暗黙的に指定されたバイナリ点の位置である２０のバイナリ点の「可変」ポイント解像度（２の補数）である。
５． カーネル記述子中の残りのワード数を示すｒｌフィールド７３６。この値は列数と行数とを掛けたものから１を引いた値となる。
【０２７０】
記述子のカーネル係数は列ごとに並べられるが、ジグザグスキャンとなるように隣り合う列は逆方向に並べられる。図９６において、オペランドＢはソース画像のスキャンラインを指すインデックステーブルへのポインターから成る。インデックステーブルの構造は図９６に示されているように、オペランドＢ７４０がインデックステーブル７４１を指し、インデックステーブルが必要なソース画像ピクセルのスキャンライン（例えば７４２）を指すという構造である。一般に、インデックステーブルとソース画像ピクセルとはキャッシュ可能であり、ローカルメモリに位置している。
【０２７１】
オペランドＣは水平／垂直サブサンプルレートを保持している。水平／垂直サブサンプルレートは、Ｃ記述子が存在する際に指定されるサブサンプル重み行列の次元によって定義される。行列ｒとｃの次元は、図９７に示すように画像変換命令のデータワードに符号化されている。結果ピクセルＰ［Ｎ］のチャネルＮは以下の式に基づいて計算される。
【０２７２】
【数４】
2005348410.tif 000036
【０２７３】
内部的には、積分値は各チャネルごとの３６のバイナリ点として保持される。フィールド中のバイナリ点の位置は、ＢＰフィールドによって指定される。ＢＰフィールドは削除する積分結果の先のビット数を示している。３６ビットの積分値は符号付きの２の補数として表現され、指定されたようにクランプ処理あるいはラップ処理される。図９８に、係数符号におけるＢＰフィールドの解釈例を示す。
【０２７４】
３．１７．９ 畳込み命令
レンダリング画像に適用される畳込み処理は、２次元畳込みカーネルをソース画像に適用して結果画像を生成するものである。畳込み処理は通常、エッジ先鋭化やいろいろな画像フィルタにおいて用いられる。畳込み処理はコプロセッサ２２４において実装され、画像変換処理ではカーネルが各出力ピクセルごとにカーネル幅だけ移されるのに対し、畳込み処理では各出力ピクセルごとに１ソースピクセルが移動するといった点以外は、画像変換処理と同様の処理である。
【０２７５】
ソース画像が値Ｓ（ｘ，ｙ）を有し、ｎｘｍ畳込みカーネルが値Ｃ（ｘ，ｙ）を有すると、ＳとＣの畳込みＨ［ｎ］のｎ番目のチャネルは、
【０２７６】
【数５】
2005348410.tif 000037
【０２７７】
で与えられる。ここで、ｉ∈［０，ｃ］，ｊ∈［０，ｒ］である。オフセット値の意味、中間結果の解像度、ｂｐフィールドの意味は画像変換命令と同一である。図９９は、畳込みカーネル７５０がソース画像７５１に適用し、結果画像７５２を生成する例を示した図である。ソース画像アドレス生成や出力ピクセル計算は、画像変換命令と同様に行われる。命令オペランドも画像変換と同様の形式である。図１００は、畳込み命令の命令ワード符号を示したものであり、以下の表が種々のフィールドの説明である。
【０２７８】
命令ワード
【０２７９】
【表２１】
2005348410.tif 000038
【０２８０】
３．１７．１０ 行列乗算
行列乗算は、２つの色空間においてアフィン変換の関係が存在するような色空間変換処理などに用いられる。行列乗算は以下の式で定義される。
【０２８１】
【数６】
2005348410.tif 000039
【０２８２】
行列乗算命令オペランドと結果ワードは以下のフォーマットを有する。
命令オペランドと結果ワード
【０２８３】
【表２２】
2005348410.tif 000040
【０２８４】
図１０１に行列乗算命令のための命令ワード符号を示すとともに、以下の表にマイナーオプコードフィールドを示す
命令ワード
【０２８５】
【表２３】
2005348410.tif 000041
【０２８６】
３．１７．１１ ハーフトーン化
コプロセッサ２２４はハーフトーン処理のための多値レベルディザーを備える。２から２５５までの値は意味のあるハーフトーンレベルとなる。ハーフトーンするデータは、スクリーンが対応してメッシュあるいはアンメッシュである限り、バイト（アンメッシュあるいはメッシュデータからの１チャネル）あるいはピクセル（メッシュ）のどちらでも良い。４つの出力チャネル（あるいは同一チャネルから４バイト）まで、一緒にパックされたようなあるいはバイトごとに１符号にアンパックされたようなパックビット（２レベルハーフトーンの場合）あるいは符号（２出力レベル以上の場合）生成することができる。
【０２８７】
出力ハーフトーン値は以下の式を用いて計算される。
（Ｐ×（ｌ−１）＋ｄ）／２５５
ここで、ｐはピクセル値（０≦ｐ≦２５５）、ｌはレベル数（２≦ｌ≦２５５）、ｄはディザ行列値（０≦ｄ≦２５４）である。オペランド符号は以下の通りである。
命令オペランドと結果ワード
【０２８８】
【表２４】
2005348410.tif 000042
【０２８９】
命令ワード符号では、マイナーオプコードはハーフトーンレベル数を指定する。オペランドＢ符号はハーフトーンスクリーンのためのものであり、タイル合成と同様に符号化される。
３．１７．１２ 階層的画像フォーマット復号
階層的画像フォーマット復号処理は複数のステップを含む。これらのステップは、水平補間、垂直補間、ハフマン復号、残部融合である。各ステップは別の命令でもって実行される。ハフマン復号ステップでは、補間ステップからの補間された値に付加される残りの値がハフマン符号化される。従って、ＪＰＥＧ復号部がハフマン復号において用いられる。
【０２９０】
図１０２に、水平補間処理を示す。出力ストリーム７６１は入力ストリーム６７２の２倍のデータとなり、最後のデータ値７６３は複製されている７６４。図１０３は４倍の水平補間を行う例である。階層的画像フォーマット復号の第２ステップでは、線形補間によりピクセル列を２倍あるいは４倍に垂直にアップサンプルする。このステップでは、１ピクセル列がオペランドＡ，他の列がオペランドＢとなる。
【０２９１】
垂直補間の場合には２倍、４倍どちらの場合でも、出力データストリームは入力ストリームと同数のピクセルとなる。図１０４に、２つの入力データストリーム７７０、７７１を用いて２倍補間の出力ストリーム７７２と４倍補間の出力ストリーム７７３を生成する垂直補間の例が示されている。ピクセル補間の場合には、補間処理は４つのチャネルピクセルの４チャネルごとに別々に行われる。
【０２９２】
残部融合処理は、２つのデータストリームのバイトごとの加算を含む。第一ストリーム（オペランドＡ）はベース値ストリームであり、第二ストリーム（オペランドＢ）は残値ストリームである。図１０５に、残部融合処理を用いた場合の２つの入力ストリーム７８０、７８１と対応する出力ストリーム７８２を示す。
【０２９３】
図１０６は、階層的画像フォーマット命令の命令ワード符号を示したものであり、以下の表にマイナーオプコードフィールドの詳細を示す。
命令ワード−マイナーオプコードフィールド
【０２９４】
【表２５】
2005348410.tif 000043
【０２９５】
３．１７．１３ 命令コピー命令
これらの命令は２つのそれぞれ別のグループに分けられる。
ａ．汎用データ移動命令
これらの命令は、入力インタフェースモジュール、入力インタフェーススイッチ２５２、ピクセルオーガナイザ２４６、ＪＰＥＧ符号化部２４１、結果オーガナイザ２４９、出力インタフェースモジュールからなるコプロセッサ２２４内の通常のデータフローパスを用いる。この場合、ＪＰＥＧ符号化モジュールはデータを処理を行わずに直接送る。
【０２９６】
データ操作動作の他の命令としては以下のものが挙げられる。
・サブバイト値（ビット、２ビット値、４ビット値）のバイトへのパッキング、アンパッキング
・ワード内でのバイトのパッキングとアンパッキング
・整列
・バイトレーンスワッピングと複製
・メモリクリア
・値の複製
データ操作動作は、ピクセルオーガナイザ（入力）と結果オーガナイザ（出力）の組み合わせで実行される。多くの場合、これらの命令は他の命令と組み合わせて用いられる。
ｂ．ローカルＤＭＡ命令
データ操作は行われない。図２に示すように、ローカルメモリ２３６と周辺インタフェース２３７間でデータ転送（双方向）が行われる。これらの命令は実行が他の命令とオーバラップする唯一の命令である。最大これらの命令の１つが「オーバラップしていない」命令と同時に実行することができる。
【０２９７】
メモリコピー動作では、オペランドＡはコピーするデータを示し、結果オペランドはメモリコピー命令の目的アドレスを示す。汎用のメモリコピー命令では、オペランドＢによって入力へのデータ操作動作が規定され、オペランドＣによって出力オペランドワードへの動作が規定される。
３．１７．１４ フロー制御命令
フロー制御命令は、図９に示したような命令実行モデルのさまざまな部位を制御するための命令群である。フロー制御命令としては、命令ストリームを実行しちえるときに１つの仮想アドレスから他のアドレスへの移動を可能にする条件付きジャンプあるいは条件なしジャンプを含む。条件付きジャンプ命令は、コプロセッサやレジスタでもって関連するフィールドをマスクし、所定の値と比較することにより決定される。これにより命令の一般性を保つことができる。更に、フロー制御命令は、オーバラップ命令と非オーバラップ命令との間の同期をとるために、あるいはマイクロプログラミングの一部として用いられる待機命令をも含む。
【０２９８】
図１０７に、フロー制御命令の符号を示す。また、以下の表はマイナーオプコードの説明である。
命令ワード−マイナーオプコードフィールド
【０２９９】
【表２６】
2005348410.tif 000044
【０３００】
ジャンプ命令においては、オペランドＡワードはジャンプ命令の目的アドレスを指定する。マイナーオプコードのＳビットが０にセットされれば、オペランドＢはコプロセッサレジスタを指定し、条件のソースとして用いる。オペランドＢ記述子の値はレジスタのアドレスを指定し、オペランドＢワードの値がレジスタ内容を比較する値となる。オペランドＣワードは結果に適用されるビットごとのマスクを指定する。すなわち、ジャンプ命令条件は以下のビットごとの式が満たされていれば真となる。
【０３０１】
（（（ｒｅｇｉｓｔｅｒ＿ｖａｌｕｅ ｘｏｒ Ｏｐｅｒａｎｄ Ｂ）ａｎｄＯｐｅｒａｎｄ Ｃ）＝０ｘ００００００００）
更に、マイクロプログラミングレベルで十分に制御するためのレジスタアクセスのためにも当該命令が用いられる。
３．１８ アクセラレータカードのモジュール
図２において、種々のモジュールを更に説明する。
【０３０２】
３．１８．１ ピクセルオーガナイザ
ピクセルオーガナイザ２４６は入力インタフェーススイッチ２５２からのデータストリームのアドレスを指定してバッファに格納する。入力データはピクセルオーガナイザの内部メモリに格納されるか、あるいはＭＵＶバッファ２５０に格納される。入力ストリームに対する必要なのデータ処理を全部済ませた後、必要に応じて入力ストリームを主データパス２４２あるいはＪＰＥＧ符号化器２４１に渡す。ピクセルオーガナイザの動作モードは通常のＣＢｕｓインタフェースによって構成することができる。ピクセルオーガナイザ２４６はＰＯ＿ＣＦＧ制御レジスタの指定するような五つのモードのうちの一つのモードで動作する。これらのモードは次のとおりである。
（ａ）アイドルモード：ピクセルオーガナイザ２４６が動作しないモード。
（ｂ）シーケンシャルモード：入力データは内部ＦＩＦＯに格納されるようになり、ピクセルオーガナイザ２４６はデータの３２ビットアドレスを生成して入力インタフェーススイッチ２５２にデータを要求するモード。
（ｃ）色空間変換モード：ピクセルオーガナイザが色空間変換のためにピクセルをバッファするモード。更に、ＭＵＶバッファ２５０に格納されているインターバルおよび分数値を要求する。
（ｄ）ＪＰＥＧ圧縮モード：ピクセルオーガナイザ２４６が画像データをＭＣＵの形式でＭＵＶバッファに格納するモード。
（ｅ）畳込み演算および画像変換モード：ピクセルオーガナイザ２４６が行列係数をＭＵＶバッファ２５０に格納し、必要であれば主データパス２４２にもそれを伝えるモード。
【０３０３】
ピクセルオーガナイザ２４６は主データパス２４２とＪＰＥＧ符号化器２４１の両方ともの動作のためにＭＵＶバッファ２５０を使う。色空間変換において、インターバルおよび分数テーブルはＭＵＶ ＲＡＭ２５０によって格納され、３６ビットのデータ（４つのカラーチャネル）×（４ビットのインターバル値と８ビットの分数値）としてアクセスされる。画像変換および畳込み演算のために、ＭＵＶ ＲＡＭ２５０は行列係数および関連する構成データを格納する。係数行列は１６行×１６列に制限され、各係数の幅は最大２０ビットである。ＭＵＶＲＡＭ２５０は１クロックサイクルあたり１つの係数を必要とする。係数データに加えて、バイナリポイント、ソーススタート座標、サブサンプルデルタ等の制御情報も主データパス２４２に伝えなければならない。この制御情報は、行列係数より先にピクセルオーガナイザ２４６によってフェッチされる。
【０３０４】
ＪＰＥＧ圧縮において、ピクセルオーガナイザ２４６は、ＭＵＶバッファ２５０を使ってＭＣＵをダブルバッファする。ＪＰＥＧ圧縮の性能向上のためには、ダブルバッファ技術を使うことが望ましい。ＭＵＶ ＲＡＭ２５０の１半分は入力インタフェーススイッチ２５２からのデータを使って書き込まれる。一方、もう一方の半分は、ＪＰＥＧ符号化器２４１に送るべきデータを得るためにピクセルオーガナイザによって読み出される。ピクセルオーガナイザ２４６は、必要とされる所におけるカラー成分の水平サブサンプリングを行うとともに、入力画像のサイズがＭＣＵの整数倍でない場合にはＭＣＵをパディングする。
【０３０５】
ピクセルオーガナイザ２４６は、図３２において前述した、バイトレーンスワップと、正規化と、バイト入り代えと、バイトパックおよびアンパックと、複写動作とを含む入力データのフォーマットをも行う。動作はピクセルオーガナイザレジスタを設定することにより必要に応じて行われる。図１０８において、ピクセルオーガナイザ２４６をより詳細に説明する。ピクセルオーガナイザ２４６は、ＣＢｕｓインタフェース制御部８０１に含まれている自身のレジスタセットの制御に従い作動しており、ＣＢｕｓインタフェース制御部８０１はグローバルＣＢｕｓを経由して命令制御部２３５に接続されている。ピクセルオーガナイザ２４６にはオペランドフェッチ部８０２が含まれており、ピクセルオーガナイザ２４６が必要とするオペランドデータを入力インタフェーススイッチ２５２から要求する。、オペランドデータのスタートアドレスは、実行直前にセットされるＰＯ＿ＳＡＩＤレジスタによって指定される。ＰＯ＿ＳＡＩＤレジスタは、ＰＯ＿ＤＭＲレジスタのＬビットによる指定に応じて、即座のデータを保持することもある。現在アドレスポインタはＰＯ＿ＣＤＰレジスタに格納され、入力インタフェーススイッチの要求があればそのバースト長さだけ増加される。データがＭＵＶ ＲＡＭ２５０にフェッチされるとき、データの現在オフセットはＰＬ＿ＭＵＶレジスタによって指定されるＭＵＶ ＲＡＭ２５０のベースアドレスと連結される。
【０３０６】
オペランドフェッチ部８０２によってフェッチされたシーケンシャル入力データをバッファするために、ＦＩＦＯ８０３が用いられる。データ操作部８０４は、図３２において説明したような様々な操作を実行する。データ操作部の出力はＭＵＶアドレス生成部８０５に伝えられる。ＭＵＶアドレス生成部８０５は構成レジスタに従ってデータをＭＵＶ ＲＡＭ２５０、主データパス２４２、ＪＰＥＧ符号化器２４１のどちらかに伝える。ピクセルオーガナイザ制御部８０６は、ピクセルオーガナイザ２４６のサブモジュール全てのために必要な制御信号を生成する状態機械である。必要な信号の中では、種々のＢｕｓインタフェース上での通信を制御する信号も含まれる。ピクセルオーガナイザ制御部は、状態レジスタの設定に従い他モジュール２３９が必要とする診断情報を出力する。
【０３０７】
図１０９において、図１０８のオペランドフェッチ部８０２をより詳細に示す。オペランドフェッチ部８０２には、命令バスアドレス生成部（ＩＡＧ）８１０が含まれており、オペランドデータをフェッチせよという要求を生成する状態機械を含む。この要求は要求仲裁部８１１に送られが、要求仲裁部８１１はアドレス生成部８１０の要求とＭＵＶアドレス生成部８０５の要求（図１０８）との間を仲裁しており、勝ちの要求を入力（ＭＡＧ）インタフェーススイッチ２５２に送るようにしている。要求仲裁部８１１は要求を扱うための状態機械を含んでいる。これは、ＦＩＦＯカウント部８１４を用いてＦＩＦＯの状態をモニタし、次の要求をいつデスパッチすべきかを決定する。バイトイネーブル生成部８１２はＩＡＧ８１０の情報を受け取り、入力インタフェーススイッチ２５２がリターンする各オペランドにおける有効なバイトを指定するバイトイネーブルパタン８１６を生成する。バイトイネーブルパタンは関連するオペランドデータとともにＦＩＦＯに格納される。ＭＡＧ要求とＩＡＧ要求が同時に到着したとき、要求仲裁部８１１はＭＡＧ要求をＩＡＧ要求より優先して処理する。
【０３０８】
図１０８において、ＭＵＶアドレス生成部８０５は異なるいくつかのモードで動作する。これらのモードにおいて、第１はＪＰＥＧ（圧縮）モードである。このモードでは、ＪＰＥＧ圧縮のための入力データがデータ操作部８０４によって供給され、ＭＵＶバッファ２５０はダブルバッファとして使われる。ＭＵＶ ＲＡＭ２５０アドレス生成部８０５は、データ操作部８０４によって処理された入力データを格納するに適するＭＵＶバッファのアドレスを生成する。ＭＡＧ８０５は、格納されたピクセルからカラー成分データを取り出すための読み出しアドレスを生成するとともに、ＪＰＥＧ圧縮用の８×８ブロークを形成するように動作する。ＭＡＧ８０５は、ＭＣＵが画像と一部重なっている場合も扱う。図１１０は、ＭＡＧ８０５が行うパディング動作の一例を示す。
【０３０９】
普通のピクセルデータにおいて、ＭＡＧ８０５は、４つの８ビットＲＡＭのＭＵＶ ＲＡＭ２５０における同じアドレス内に、４つのカラー成分を格納する。同じカラーチャネルからデータを同時に取り出すために、ＭＣＵデータは左にバレルシフトされてからＭＵＶ ＲＡＭ２５０に格納される。データの左にシフトされるバイト数は、書き込みアドレスの下位２ビットによって決定される。例えば、図１１１は、サブサンプリングの要らない場合３２ビットピクセルデータがＭＵＶ ＲＡＭ２５０内で配置されるデータ構造を示す。３チャネル又は４チャネルインタリーブＪＰＥＧモードにおいては、入力データのサブサンプリングが選択されることもあり得る。サブサンプリングを伴うマルチチャネルＪＰＥＧ圧縮モードにおいて、ＭＡＧ８０５（図１０８）は、ＪＰＥＧ符号化器の最適性能のために３２ビットデータがＭＵＶ ＲＡＭ２５０に格納される前にサブサンプリングを行うようになっている。最初四つの入力ピクセルの中で、ＭＵＶ ＲＡＭ２５０に格納される第１および第４番目のチャネルだけが有用なデータを含んでいる。第２および第３番目のチャネルのデータはサブサンプリングされ、ピクセルオーガナイザ２４６のレジスタに格納される。次の４つの入力ピクセルにおいて、第２および第３番目のチャネルはサブサンプリングされたデータをもって埋められる。図１１２は、マルチチャネルサブサンプリングモードにおけるＭＣＵデータ構成の一例を示す。ＭＡＧは単一チャネルアンパックデータ全てをマルチチャネルピクセルデータと全く同様に扱う。ＭＵＶ ＲＡＭから読み出された単一チャネルパックデータの一例が図１１３に示されている。
【０３１０】
書き込みプロセスによって入力ＭＣＵがＭＵＶ ＲＡＭに格納されている間、読み出しプロセスはＭＵＶ ＲＡＭから８×８ブロックを読み出す。一般的に、前記ブロックは各チャネルに対してデータを順次読み出すことによって、四つの係数ずつＭＡＧ８０５によって生成される。ピクセルデータとアンパック入力データにおいて、格納されるデータは図１１１に示すように整理される。従って、サンプルされなかったピクセルデータからなる８×８ブロックを合成するためには、読み出しプロセスはＭＵＶ ＲＡＭからデータを斜行しながら読み出す。図１１４は、このようなプロセスの一例を示す。図１１４には、四つのチャネルデータにおける読み出しシケンス示されており、ＭＵＶ ＲＡＭ２５０の格納形式が同一チャネルから多数の値を同時に読み出すことを容易にしていることが分かる。
【０３１１】
色変換モードにおいて、ＭＵＶ ＲＡＭ２５０はインターバルおよび分数値を格納するキャッシュとして用いられ、ＭＡＧ８０５はそのキャッシュの制御部として働くようになっている。ＭＵＶ ＲＡＭ２５０は３つのカラーチャネル値をキャッシュする。ここで、各カラーチャネルは２５６対の４ビットインターバルおよび分数値を有する。ＤＭＵを通じた各ピクセル出力において、ＭＵＶ ＲＡＭ２５０から前記値を得るためにＭＡＧ８０５が使われる。この値が得られないときに、ＭＡＧ８０５は欠けているインターバルおよび分数値をフェッチせよというメモリ読み出し要求を出す。帯域の有効利用のために、要求あたりエントリ一つだけをフェッチする手法のかわりに、多数のエントリをフェッチするような手法を取る。
【０３１２】
画像変換および畳込み演算のために、ＭＵＶ ＲＡＭ２５０はＭＤＰの行列係数を記憶している。ＭＡＧはＭＵＶ ＲＡＭ２５０に格納されている全ての行列係数をスキャンする。画像変換および畳込み命令の始めにおたって、ＭＡＧ８０５はオペランドフェッチ部に要求を出し、オペランドフェッチ部がカーネル記述“ヘッダ”（図９４）とバスト要求の第１行列係数とをフェッチするようにする。
【０３１３】
図１１５において、図１０８のＭＵＶアドレス生成部（ＭＡＧ）８０５をより詳細に示す。ＭＡＧ８０５はＩＢｕｓ要求を多重化するＩＢｕｓ要求モジュール８２０を備えており、ＩＢｕｓ要求は画像変換制御部（ＩＴＸ）８２１と色空間変換（ＣＳＣ）制御部８２２によって生成される。この要求は、要求を実行するようになっているオペランドフェッチ部に送られる。ピクセルオーガナイザ２４６は画像変換、色空間変換のどちらか１つのモードで動作するようになっているため、制御部８２１，８２２の間では仲裁が要らないことになる。ＩＢｕｓ要求モジュール８２０は、オペランドフェッチ部への要求を生成するのに必要なバストアドレスとバスト長さとを含む情報を、関連するピクセルオーガナイザから導出する。
【０３１４】
ＪＰＥＧ制御部８２４は、ＪＰＥＧ書き込み制御部とＪＰＥＧ読み出し制御部という２つの状態機械を備えており、ＪＰＥＧモードにおいて使われる。前記二つの制御部は同時に作動するようになっており、内部レジスタを用いることによってお互いに同期を取る。ＪＰＥＧ圧縮動作において、ＤＭＵはＭＣＵデータを出力しＭＵＶ ＲＡＭに格納する。ＪＰＥＧ書き込み制御部は水平パディングとピクセルサブサンプリングの制御とを担当しており、ＪＰＥＧ読み出し制御部は垂直パディングを担当する。水平パディングはＤＭＵ出力を停止することによって行われ、垂直パディングは既に読み出した８×８ブロックを再び読み出すことによって行われる。
【０３１５】
ＪＰＥＧ書き込み制御部は、ソース画像におけるＤＣＵおよびＤＭＵ出力ピクセルの現在位置をトラッキングしており、水平パディングのためにいつＤＭＵを停止すべきかを決定するのにその情報を用いる。ＭＣＵがＭＵＶ ＲＡＭ２５０に書き込まれたときに、ＪＰＥＧ書き込み制御部は内部レジスタをセットするかまたはリセットすることによって、ＭＣＵが画像の右エッジにあるかあるいは画像の最低エッジにあるかを表す。ＪＰＥＧ読み出し制御部は、前記レジスタの内容に基づき、垂直パディングが必要であるかや画像の最後のＭＣＵまで読んだのかを判断する。
【０３１６】
ＪＰＥＧ書き込み制御部はＤＭＵ出力データをトラッキングし、ＤＭＵ出力データをＭＵＶ ＲＡＭ２５０に格納する。前記制御部は、レジスタセットを用いて入力ピクセルの現在位置を記憶する。この情報はＤＭＵ出力を停止して水平パディングを行うときに使われる。全てのＭＣＵがＭＵＶ ＲＡＭ２５０に書き込まれたときに、前記制御部はＭＣＵ情報をＪＰＥＧ−ＲＷ−ＩＰＣレジスタに書き込み、以後ＪＰＥＧ読み出し制御部によって利用し得るようにする。
【０３１７】
この制御部は、最後のＭＣＵがＭＵＶ ＲＡＭ２５０に書き込まれた後、ＳＬＥＥＰ状態に入り現在の命令が終了するまでその状態に残る。ＪＰＥＧ読み出し制御部は、ＭＵＶ ＲＡＭ２５０に格納されているＭＣＵから８×８ブロックを読み出す。マルチチャネルピクセルにおいては、制御部がＭＣＵを数回に渡って読み出すようになっており、ＭＵＶ ＲＡＭに格納されている各ピクセルから、各読み出しにおける異なるバイトを抽出する。
【０３１８】
この制御部はＪＰＥＧ−ＲＷ−ＩＰＣによって提供される情報を用いて、垂直パディングを行うべきかを検出する。垂直パディングはＭＵＶ ＲＡＭ２５０から読み出した直前の８バイトを再び読み出すことによって行われる。画像変換制御部８２１はＩＢｕｓからカーネルディスクリプタを読み出し、カーネルヘッダをＭＤＰ２４２に伝える。そして、ｐｏ．ｌｅｎレジスタで指定された回数だけ行列係数をスキャンする。画像変換および畳込み命令において、ＰＯ２４６による全てのデータ出力はＩＢｕｓから直接フェッチされるようになっており、ＤＭＵには伝えられない。
【０３１９】
カーネルヘッダの直後フェッチされる第１行列係数の最初８ビットは、フェッチすべき残りの行列係数の数を表す。カーネルヘッダは修正されずに直接ＭＤＰに伝えられるが、行列係数はＭＤＰに伝えられる前にサイン拡張される。ピクセルサブサンプラ８２５は、それぞれが入力ワードの１バイトに対して動作する二つの同じチャネルサブサンプラを備える。関連する構成レジスタが起動されていないときに、ピクセルサブサンプラは自身の入力をそのまま自身の出力にコピーする。一方、構成レジスタが起動されているときに、サブサンプラは入力データに対して平均を取るか又は間引きを行うかすることによって入力データをサブサンプルする。
【０３２０】
ＭＵＶ多重化モジュール８２６は現在アクティブである制御部からＭＵＶ読み出しおよび書き込み信号を選ぶ。内部多重化部は、ＭＵＶ ＲＡＭ２５０を使う種々の制御部を経由して、読み出しアドレス出力を選ぶ。ＭＵＶ ＲＡＭ書き込みアドレスはＭＵＶ多重化モジュールの８ビットレジスタに格納されている。ＭＵＶ ＲＡＭ２５０を用いる制御部は次のＭＵＶ ＲＡＭアドレスを決定するための制御を行うとともに、書き込みアドレスレジスタをロードする。
【０３２１】
ＭＵＶ有効アクセスモジュール８２７は色空間変換制御部によって用いられ、データ操作部による現在ピクセル出力のインターバルおよび分数値がＭＵＶ ＲＡＭ２５０において利用できるかを決定する。一つ以上のカラーチャネルが欠けているとき、ＭＵＶ有効アクセスモジュール８２７は関連するアドレスをＩＢｕｓ要求モジュール８２０に伝え、インターバルおよび分数値をバーストモードでロードする。キャッシュミスがサービスされると、ＭＵＶ有効アクセスモジュール８２７は今までフェッチされたインターバルおよび分数値のセットを表す内部有効ビットをセットする。
【０３２２】
複写モジュール８２９は、内部ピクセルレジスタが定める回数だけ、入力データを複写する。複写モジュールが現在の入力ワードを複写している間、入力ストリームは停止されるようになる。ＰＢｕｓインタフェースモジュール８３０は、ピクセルオーガナイザ２４６を主データパス２４２およびＪＰＥＧ符号化器２４１にリタイムするか或いはその逆の処理をするのに使われる。最後に、ＭＡＧ制御部８３１は種々のサブモジュールをイニシエイトする信号とシャットダウンする信号とを生成する。なお、ＭＡＧ制御部８３１は、主データパス２４２およびＪＰＥＧ符号化器２４１からの入力ＰＢｕｓ信号に対する多重化をも行う。
【０３２３】
３．１８．２ ＭＵＶバッファ
図２においては、これまでの説明から明らかなようにピクセルオーガナイザ２４６はＭＵＶバッファ２５０と相互関係にある。再コンフィギュレーション可能なＭＵＶバッファ２５０は単純ルックアップテーブルモード（モード０）、多重ルックアップテーブルモード（モード１）、ＪＰＥＧモード（モード２）を含む様々な処理モードをサポートしている。それぞれのモードで、バッファには異なるタイプのデータオブジェクトが格納される。例えば、バッファに格納されているデータワード、様々な検索テーブルの値、単一チャネルデータ、複数チャネルデータはデータオブジェクトである。一般的に、データオブジェクトは異なるサイズを持つ。更に再コンフィギュレーション可能なＭＵＶバッファ２５０に格納されたデータオブジェクトはバッファのオペレーティングモードに依存した様々な方法で実際にアクセスできる。
【０３２４】
異なるタイプのデータを書き戻したり及び格納するのに必要な様々な方法を適切にするために、データオブジェクトはしばしば、格納される前に符号化される。データオブジェクトのコーディングに用いられる方法はデータオブジェクトのサイズ、表現されているデータオブジェクトのフォーマット、どのようにデータオブジェクトがバッファから書き戻されるのか、バッファ上に形成されたメモリモジュールの構成状態によって決定される。
【０３２５】
図１１６は再コンフィギュレーション可能なＭＵＶバッファ２５０を実装するために用いられるコンポーネントのブロックダイアグラムである。再コンフィギュレーション可能なＭＵＶバッファ２５０はエンコーダ１２９０、ストレージデバイス１２９３、デコーダ１２９１、アドレス読み込み・ローテーション信号発生器１２９２からなる。入力データストリーム１２９５にデータオブジェクトが入力された時には、データオブジェクトはエンコーダ１２９０により内部データに符号化され、内部データストリーム１２９６に配置される。符号化されたデータオブジェクトはストレージデバイス１２９３に格納される。
【０３２６】
格納されたデータオブジェクトを復号化する場合には、符号化されたデータは符号化データ出力ストリーム１２９７によりストレージデバイスから取り出される。符号化データ出力ストリーム１２９７上の符号化されたデータはデコーダ１２９１によって復号化される。復号化されたデータオブジェクトは出力データストリーム１２９８上に現れる。
【０３２７】
ストレージデバイス１２９３への書き込みアドレス１０３５はＭＡＧ８０５（図１０８）により与えられる。書き込みアドレス１２９９，１３００，１３０１も同様にＭＡＧ８０５（図１０８）によって与えられ、アドレス読み込み・ローテーション信号発生器１２９２によってストレージデバイス１２９３に分配される。アドレス読み込み・ローテーション信号発生器１２９２はまた、入力・出力ローテーション信号１３０３，１３０４をエンコーダ、デコーダそれぞれに対して生成する。書き込み有効信号１３０６と１３０７は外部ソースから与えられる。コントローラ８０１（図１０８）によって与えられる処理モード信号１３０２はエンコーダ１２９０、デコーダ１２９１、アドレス読み込み・ローテーション信号発生器１２９２、ストレージデバイス１２９３に接続される。インクリメント信号１３０８はアドレス読み込み・ローテーション信号発生器内の内部カウンタをインクリメントし、ＪＰＥＧモード（モード２）でも用いられることがある。
【０３２８】
再コンフィギュレーション可能なＭＵＶバッファ２５０が単純ルックアップテーブルモード（モード０）である場合には、本質的にバッファ２５０はむしろ、単一モードのメモリモジュールの様に動作する。データオブジェクトは本質的にメモリモジュールにアクセスする方法と同様な方法でバッファに格納あるいはバッファから取り出せる。
【０３２９】
再コンフィギュレーション可能なＭＵＶバッファ２５０が多重ルックアップテーブルモード（モード１）で動作中の時、バッファ２５０はストレージデバイス１２９３に格納されている最大３つの検索テーブルをもちいて複数のテーブルに分割される。検索テーブルは同時かつ独立にアクセスすることができる。一例を挙げると、インターバルおよびフラクションの値は多重ルックアップテーブルモードのストレージデバイス１２９３に格納される、テーブルは入力データストリーム１２９５の下位３バイトを利用してインデックスがつけられる。３バイトのそれぞれはストレージデバイス１２９３に格納された独立の検索テーブルに発行される。
【０３３０】
画像がＪＰＥＧ圧縮されているとき、画像は符号化されたデータストリームに変換される。ピクセルは原画像からＭＣＵのフォーマットで取り出される。ＭＣＵは画像の左から右に、上から下に読み出される。それぞれのＭＣＵは多数の８×８のブロックに再合成される。多数の８×８ブロックはＭＣＵから抽出される。ＭＣＵは原画像のカラーコンポーネント、複数チャネルのＪＰＥＧモード、サブサンプリングの必要性等のいくつかの要因に依存している。８×８のブロックはその後フォワードＤＣＴ（ＦＤＣＴ）、量子化、エントロピー符号化される。ＪＰＥＧ圧縮の場合には、符号化されたデータはデータストリームからシーケンシャルに読み込まれる。データストリームはエントロピー復号化、逆量子化、逆ＤＣＴ（ＩＤＣＴ）が行われる。ＩＤＣＴ処理の出力は８×８のブロックである。多数の８×８ブロックはＭＣＵを再構成するように統合される。ＪＰＥＧ圧縮を用いるとき、多数の８×８ブロックは前述の要因に依存する。再コンフィギュレーション可能なＭＵＶバッファ２５０はＭＣＵを多数の８×８ブロックに分解したり、多数の８×８ブロックをＭＣＵに再構成したりするときにも用いられる。
【０３３１】
再コンフィギュレーション可能なＭＵＶバッファ２５０がＪＰＥＧモードの処理を行っているときはバッファ２５０への入力データストリーム１２９５はＪＰＥＧ圧縮処理を行っているピクセルあるいはＪＰＥＧ圧縮処理を行っている単一のコンポーネントを含んでいる。バッファ２５０の出力データストリームはＪＰＥＧ伸長処理の単一チャネルデータブロックあるいはＪＰＥＧ伸長処理のピクセルデータを含んでいる。このＪＰＥＧ圧縮の例では、入力ピクセルはＹ，Ｕ，Ｖ，Ｏの４チャネルまで構成できる。指定の数のピクセルが完成したピクセルブロックとして処理処理されたときには、単一のコンポーネントデータブロックの抽出が開始できる。それぞれの単一のコンポーネントデータブロックはバッファに格納された同チャネルのピクセルからなるデータにより構成される。従ってこの例では、４つまでの単一のコンポーネントデータブロックをひとつのピクセルデータブロックから抽出できる。この具体例では、再コンフィギュレーション可能なＭＵＶバッファ２５０がＪＰＥＧ圧縮用のＪＰＥＧモード（モード２）で処理を行っているときには、多数の単位最小コード（ＭＣＵ）はそれぞれ６４の単一あるいは複数チャネルのピクセルをバッファに格納でき、多数の６４バイト長の単一チャネルのコンポーネントデータブロックをバッファに格納されたそれぞれのＭＣＵから抽出できる。例えば、バッファ１２８９がＪＰＥＧ伸長を行うためにＪＰＥＧモード（モード２）である間は、出力データストリームは、Ｙ，Ｕ，Ｖ，Ｏの最大４つのコンポーネントを持つ出力ピクセルから構成される。要求された数の完成した単一のコンポーネントデータブロックをバッファに書き込んだときは、ピクセルデータの抽出ができる。異なる色のコンポーネントに対応する４つの単一のコンポーネントデータブロックからのバイトは出力ピクセルとして取り出される。
【０３３２】
図１１７は図１１６のエンコーダ１２９０の詳細図である。ピクセルブロックの伸長のでは、入力データオブジェクトそれぞれはストレージデバイス１２９３に格納される前にバイト方向のローテーションにより符号化される（図１２９）。ローテーションの大きさは入力ローテーション制御信号１３０３により決定される。この例ではピクセルデータが最大の４バイトであったときは、３２ビットの４入力１出力のマルチプレクサ１３２０および１３２５が、４つのうちの１つの可能な入力ピクセルのローテーションの選択に用いられる。例えば、もしピクセルの４つのバイトが（３，２，１，０）のようにラベルが付けられていたとすると、このピクセルのローテーションは（３，２，１，０）（０，３，２，１）（１，０，３，２）（２，１，０，３）となる。４つの符号化されたバイトはストレージデバイスの１２９０に出力される。
【０３３３】
バッファがＪＰＥＧモード（モード２）以外のモード、例えば、単一ルックアップテーブルモード（モード０）、多重ルックアップテーブルモードである時には、バイト方向のローテーションは必要ではなく、また入力データオブジェクトに対して行えない。入力データオブジェクトは後者の場合に、ノーローテーションの値をもつ入力ローテーション制御信号を無視することによって、ローテーションにより妨害を受ける。この値１３２３はである。２入力１出力のマルチプレクサ１３２１は制御信号１３２６を入力ローテーション制御信号１３０３とノーオペレーション値１３２３の選択をすることによって生成する。現在の処理モード１３０２はマルチプレクサ選択信号を生成するために、ピクセルブロック分解モードの値と比較される。。信号１３２６によって制御される４入力１出力のマルチプレクサ１３２０は入力データオブジェクトの４つのローテーションのうち１つを選択し、符号化された入力データストリーム１３２６上に符号化された有力データオブジェクトを生成する。
【０３３４】
図１１８は符号化された出力データストリーム１２９７を復号化するデコーダ１２９１を実装する組み合わせ回路の回路図である。デコーダ１３２１はエンコーダと本質的に同様な方法で動作する。デコーダはデータバッファがＪＰＥＧモード（モード２）である場合のみにデータを操作する。下部の符号化されたデータストリーム１２９７内の符号化された出力データオブジェクトの下位３２ビットはデコーダに渡される。データはエンコーダ１２９０でローテーションするのとは逆の感覚でバイト方向のローテーションを用いて復号化される。３２ビットの４入力１出力のマルチプレクサは、可能な４つの種類の符号化データのうちの１つを選択するために用いられる。例えば４バイトの入力ピクセルが（３，２，１，０）の様にラベルが付けられているとすると、このピクセルのローテーションの種類は（３，２，１，０）（２，１，０，３）（１，０，３，２）（０，３，２，１）の４つが可能である。出力ローテーション制御信号１３０４はバッファがピクセルブロック分解ノードの時と、他のオペレーションモードでノーオペレーション値が無視されたときに使用される。ノーオペレーション値１３３３は０である。２入力１出力のマルチプレクサ１３３１は、出力ローテーション制御信号１３０４とノーオペレーション値１３３３の選択を行うことで信号１３３４を生成する。現在の処理モード１３０２はマルチプレクサ選択信号１３３２を生成するために、ピクセルブロック分解モードの値と比較される。信号１３３４よって制御される４入力１出力のマルチプレクサ１３３０は符号化された出力データストリーム１２９７上の符号化された出力データオブジェクトの４種類のローテーションを選択し、出力データストリーム１２９８上に出力データを生成する。
【０３３５】
図１１６において、回路で用いられる内部読み込みアドレス生成の方法は、再コンフィギュレーション可能なＭＵＶバッファ２５０の処理モード１３０２によって選択される。単一ルックアップテーブルモード（モード０）と多重ルックアップテーブルモード（モード１）では読み込みアドレスは外部読み込みアドレス１２９９，１３００，１３０１の形でＭＡＧ８０５（図１０８）によって生成される。単純ルックアップテーブルモード（モード０）ではストレージデバイス１２９３上にメモリモジュール１３８０，１３８１，１３８２，１３８３，１３８４，１３８５（図１２１）は一緒に処理する。メモリモジュール１３８０から１３８５（図１２１）に与えられる書き込みアドレスと読み込みアドレスは本質的に同じである。即ち、ストレージデバイス１２９３は外部回路に１つの読み込みアドレスと１つの書き込みアドレスの供給のみを必要とし、これらのアドレスをメモリモジュール１３８０から空１３８５（図１２１）に分配するために内部ロジックを使用する。モード０では、読み込みアドレスは外部アドレス１２９９（図１１６）により与えられ、本質的に変化しないまま内部アドレス１３４８（図１２１）に分配される。外部読み込みアドレス１３４９，１３５０，１３５１（図１２１）はモード０では使用されない。書き込みアドレスは外部書き込みアドレス１３０５（図１１６）により与えられ、本質的に修正なしで各メモリモジュール１３８０から１３８５（図１２１）の書き込みアドレスに接続される。
【０３３６】
ここでは、多重ルックアップテーブルモード（モード１）における３ルックアップテーブルの構成を示す。３つのテーブルが独立にアクセスされるとき、符号化された入力データは１３８０から１３８５（図１２１）までのすべてのメモりもジュールに同時に書き込まれ、従って３つのテーブルそれぞれに１つのインデックスが必要となる。メモリモジュール１３８０から１３８５（図２１２）への３つのインデックス、即ち読み込みアドレスはストレージデバイス１２９３により与えられる。これらの読み込みアドレスは、内部ロジックを用いて１３８０から１３８５の適切なメモリモジュールに分配される。本質的に単一ルックアップテーブルモードのときと同様な手法で、外部から与えられる書き込みアドレスは、本質的な変更なしに１３０８から１３８５のそれぞれのメモリモジュールのアドレスに接続される。その結果、多重ルックアップテーブルモード（モード１）では外部読み込みアドレス１２９９，１３００，１３１１は内部読み込みアドレス１３４８，１３４９，１３５０にそれぞれ分配される。内部読み込みアドレス１３５２はモード１では使用されない。ＪＰＥＧモード（モード２）で使用される内部アドレス生成方法は前述の方法とは異なる。
【０３３７】
図１１９はＪＰＥＧ圧縮を行うＪＰＥＧモード（モード２）における、再コンフィギュレーション可能なデータバッファ用の、読み込みアドレスおよびローテーション信号生成回路１２９２を実装する組み合わせ回路の回路図である。ＪＰＥＧモード（モード２）では、信号生成器１２９２はコンポーネントカウンタ１３４０とデータバイトカウンタ１３４１の出力を、ストレージデバイス１２９３を含むメモリーモジュールの内部読み込みアドレスを計算するために用いている。コンポーネントブロックカウンタ１３４０はストレージデバイスに格納されている、ピクセルデータブロックから抽出したコンポーネントブロック数を生成する。そのブロック数はデータバイトカウンタ１３４１の出力を４倍することで与えられる。具体的には、ピクセルブロック分解モードにおける内部読み込みアドレス１３４８、１３４９、１３５０、１３５１は次のように計算される。コンポーネントブロックカウンタはオフセット値１３４３、１３４４、１３４５、１３４７を計算するために使用され、また出力データバイトカウンタ１３４１はベース読み込みアドレス１３５４を生成するために用いられる。オフセット値１３４３はベース読み込みアドレス１３５４に加算された１３５８で、加算値は内部読み込みアドレス１３４８（あるいは１３４９，１３５０，１３５１）である。メモリモジュールのオフセット値は、多重メモリモジュールで実行される同時読み込みに対して一般的に異なる値をとるが、コンポーネントブロックの抽出においては本質的に同じである。ピクセルデータブロック分解モードにおける４つの内部読み込みアドレスを計算するのに用いられるベースアドレス１３５４も同様である。インクリメント信号１３０８はコンポーネントバイトカウンタのインクリメント信号として使用される。カウンタは読み込みが成功する度にインクリメントされる。コンポーネントブロックカウンタインクリメント信号１３５６は、単一校正用をデータブロックが正常にバッファから取り出された後、コンポーネントブロックカウンタ１３４０をインクリメントするのに用いられる。
【０３３８】
出力ローテーション制御信号１３０４（図１１６）はコンポーネントブロックカウンタの出力と出力データバイトカウンタの出力から取り出され、本質的に内部アドレスの生成と同じ方法である。コンポーネントブロックカウンタの出力はローテーションオフセット１３４７を計算するのに用いられる。出力ローテーション制御信号１３０４はローテーションオフセット１３５５とベース読み込みアドレス１３５４の和の最下位２ビットにより与えられる。入力ローテーション制御信号は、アドレス及びローテーション制御信号生成器の例の様に、外部書き込みアドレス１３０５の最下位２ビットにより与えられる。
【０３３９】
図１２０は、再コンフィギュレーション可能なＭＵＶバッファ２５０に格納された単一コンポーネントデータからの多重チャネルピクセルデータの再構成に用いられるもう１つのアドレス生成器１２９２である。この場合、バッファはＪＰＥＧ伸長のためのＪＰＥＧモード（モード２）となる。この場合、単一コンポーネントデータブロックはバッファに格納され、ピクセルデータブロックはバッファから取り出される。この例では、メモリモジュールへの書き込みアドレスは、本質的変更なしで外部書き込みアドレス１３０５によって与えられる。単一コンポーネントブロックは連続したメモリに格納される。この例の入力ローテーション制御信号１３０３は単に書き込みアドレスの最下位２ビットによってセットされる。ピクセルカウンタ１３６０は、バッファ内に格納されている単一コンポーネントブロックから抽出されたピクセル数の記録を保持するために用いられる。ピクセルカウンタの出力は、読み込みアドレス１３４８、１３４９、１３５０、１３５１及び出力ローテーション制御信号１３０４を生成するために用いられる。一般に読み込みアドレスは、ストレージデバイス１２９３を構成するそれぞれのモジュール毎に異なっている。この例では、読み込みアドレスは単一コンポーネントブロックインデックス１３６２、１３６３、１３６４、１３６５あるいは１３６５とバイトインデックス１３６１の２つの部分からなる。特定のブロックの単一コンポーネントブロックインデックスを計算するために、オフセットが出力ピクセルカウンタのビット３と４に加えられる。一般にオフセット１３６６、１３６７、１３６８、１３６９はそれぞれの読み込みアドレスで異なる。ピクセルカウンタのビット２からビット０は読み込みアドレスのバイトインデックス１３６１に用いられる。読み込みアドレスは図１２０に示されるように、単一コンポーネントブロックインデックス１３６２、１３６３、１３６４、１３６５あるいは１３６５とバイトインデックス１３６１の結合の結果である。この例では、出力ローテーション制御信号１３０４は、本質的な変化なしにピクセルカウンタの出力のビット４とビット３により生成される。インクリメント信号１３０８はピクセルカウンタ１３６０をインクリメントするためのピクセルカウンタインクリメント信号として使用される。ピクセルカウンタ１３６０はピクセルが正常にバッファから取り出されたときにインクリメントされる。
【０３４０】
図１２１はストレージデバイス１２９３の構造である。ストレージデバイス１２９３は１３８３、１３８４、１３８５の３つの４ビットワイドメモリモジュールと１３８０，１３８１、１３８２の３つの８ビットワイドメモリモジュールを持つことができる。メモリモジュールは単一ルックアップテーブルモード（モード０）の３６ビットのワード、多重ルックアップテーブルモード（モード１）の１２×３ビットのワード、ＪＰＥＧモード（モード２）における３２ビットのピクセルあるいは４×８ビットの単一コンポーネントデータを格納するために結合できる。通常それぞれのメモリモジュールは符号化された入力及び出力データストリーム（１２９６と１２９７）の異なる部分に関連づけられる。たとえば、メモリモジュール１３８０は符号化された入力データストリーム１２９６のビット０からビット７に接続されデータ入力ポートと符号化された出力データストリーム１２９７のビット０からビット７に接続されたデータ出力ポートをもつ。この例ですべてのメモリモジュールの書き込みアドレスは一緒に接続され、同時に同じ値を共有する。一方、図１２１に示されるメモリモジュールの読み込みアドレス１３８６，１３８７，１３８８，１３９０，１３９１は読み込みアドレス生成器１２９２により与えられ、これらは一般に異なる値をとる。例では、共通の書き込み有効信号はすべての８ビットメモリモジュールに対して書き込み有効信号を出すために用いられ、第二の共通の書き込み有効信号はすべての４ビットメモリモジュールに対して書き込み有効信号を出すために用いられる。
【０３４１】
図１２２はストレージデバイス１２９３内のメモリモジュールにアクセスするための読み込みアドレス１３８６，１３８７，１３８８，１３８９，１３９０を生成するための組み合わせ回路の回路図である。符号化されたそれぞれの入力データオブジェクトは部分部分に分解され、それぞれの部分はストレージデバイスの独立したメモリモジュール内に格納される。従って通常、すべての処理モードにおけるすべてのメモリモジュールの書き込みアドレスは本質的には同じであり、メモリモジュールの書き込みアドレスを計算するために実質的にロジックは必要ない。一方、読み込みアドレスは通常、処理毎に異なり、それぞれの処理モードにおけるメモリモジュールそれぞれに対しても異なる。再コンフィギュレーション可能なＭＵＶバッファ２５０の出力データストリーム１２９８内のすべてのバイトはＪＰＥＧ圧縮のＪＰＥＧモード（モード２）のバッファに格納されているピクセルデータから抽出された単位コンポーネントデータ、あるいはＪＰＥＧ伸長のＪＰＥＧモードのバッファ内に格納されて単一コンポーネントデータから抽出されたピクセルデータを含まなくてはならない。出力データに対する要求はバッファへの４つの読み込みアドレス１３４８、１３４９、１３５０、１３５１の生成によって満たされる。多重ルックアップテーブルモード（モード１）においては、最大３つの検索テーブルがバッファに格納され、従って最大３つまでの読み込みアドレス１３４８、１３４９、１３５０が３つの検索テーブルにインデックスをつけるために必要である。すべてのメモリモジュールの読み込みアドレスは単一ルックアップテーブルモード（モード０）の場合と同じであり、読み込みアドレス２４８のみがこのモードで用いられる。図１２２に示されている制御回路の例はストレージデバイス１２９３を構成する６つのメモリモジュールそれぞれの読み込みアドレス１３８６−１３９１を計算するために、バッファの処理モード信号と最大４つの読み込みアドレスを用いる。読み込みアドレス生成器１２９２は入力信号として外部アドレスバス１３４８，１３４９、１３５０、１３５１からなる外部読み込み信号をもちい、ストレージデバイス１２９３を構成するメモリモジュールの内部読み込みアドレス１３８６，１３８７、１３８９、１３９０を生成する。
【０３４２】
図１２３はバッファ２５０が単一ルックアップテーブルモードにある時に、どのようにして２０ビットの行列係数がバッファ２５０に格納されるのかを示した図である。この場合、データオブジェクトが再コンフィギュレーション可能なＭＵＶバッファに書き込まれるときにはキャッシュ上のデータオブジェクトに対してエンコーディングは通常行われない。行列係数は８ビットメモリモジュール１３８０，１３８１，１３８２に格納される。行列係数のビット７からビット０はメモリモジュール１３８０に格納され、ビット１５からビット８はメモリモジュール１３８１に格納され、ビット１９からビット１６はメモリモジュール１３８２の下位４ビットに格納される。命令の残りのために必要であるようなバッファに格納されたデータオブジェクトは何回も取り出される。単一ルックアップテーブルモードにおける、すべてのメモリモジュールの読み込みと書き込みのアドレスは本質的に同じである。
【０３４３】
図１２４は多重ルックアップテーブルモード（モード１）において、どのようにしてバッファにテーブルエントリが格納されるかを示した図である。この場合、３つの検索テーブルはバッファに格納され、それぞれの検索テーブルは４ビットのインターバル値と８ビットの小数値をもつ。通常インターバール値は４ビットのメモリモジュールに格納され、小数値は８ビットのメモリモジュールに格納される。この場合３つの検索テーブル１４１０，１４１１，１４１２はメモリバンク１３８０と１３８３、１３８１と１３８４、１３８２と１３８５に格納される。分離過去も未有効制御信号１３０６と１３０７（図１２１）はストレージデバイスに格納されている小数値に影響せずにストレージデバイス１２９３にインターバル値を書き込むことができる。本質的に同様な方法でインターバル値に影響を与えずに小数値を書き込むことができる。
【０３４４】
図１２５はピクセルデータブロックを単一要素データブロックに分解するＪＰＥＧモード（モード２）の状態の再コンフィギュレーション可能なＭＵＶバッファ２５０にどのようにしてピクセルデータが書き込まれるのかを示した図である。ストレージデバイス１２９３は、８ビットメモリモジュールと同様な方法で統合して扱われるメモリモジュール、１３８１と１３８４を含むメモリモジュール１３８０、１３８１、１３８２、１３８３、１３８４からなる４つの８ビットメモリバンクとして統括される。メモリモジュール１３８５はＪＰＥＧモード（モード２）では使用されない。３２ビットの符号化されたピクセルは４つのバイトに分解され、それぞれが異なる８ビットのメモリモジュールに格納される。
【０３４５】
図１２６は単一コンポーネントモードであるストレージデバイス１２９３にどのようにして単一コンポーネントデータブロックが格納されるのかを示した図である。ストレージデバイス１２９３は、８ビットメモリモジュールと同様な方法で統合して扱われるメモリモジュール、１３８１と１３８４を含むメモリモジュール１３８０、１３８１、１３８２、１３８３、１３８４からなる４つの８ビットメモリバンクとして統括される。メモリモジュール１３８５はＪＰＥＧモード（モード２）では使用されない。３２ビットの符号化されたピクセルは４つのバイトに分解され、それぞれが異なる８ビットのメモリモジュールに格納される。この場合、単一コンポーネントブロックは６４バイトからなる。単いるコンポーネントブロックが亜バッファに書き込まれるときは、それぞれに異なる量のバイトローテーションが適用される。３２ビットの符号化されたピクセルデータはバッファ内の異なる単一コンポーネントデータブロックを読むことで取り出される。
【０３４６】
より詳細な再コンフィギュレーション可能なデータバッファ２５０の統括方法は、ピクセルオーガナイザの節を参照せよ。以上の具体例では、再コンフィギュレーション可能はデータバッファが、異なる命令と関係するデータの処理に用いられることを示した。３つの処理モードのある再コンフィギュレーション可能なデータバッファが明らかにされた。異なるアドレスの生成技術がバッファの処理モードのそれぞれにおいて必要となる。単一ルックアップテーブルモード（モード０）は画像変換において、行列係数をバッファに格納するのに用いられる。多重ルックアップテーブルモード（モード１）では多チャネルの色空間変換（ＣＳＣ）における多数のインターバル及びフラクション検索テーブルをバッファに格納するのに用いられる。ＪＰＥＧモード（モード２）はＪＰＥＧ圧縮、ＪＰＥＧ伸長それぞれにおいて、ＭＣＵデータを８×８の単一コンポーネントブロックに分解、あるいは８×８の単一コンポーネントブロックをＭＣＵに再合成するのに用いられる。
【０３４７】
３．１８．３ 結果オーガナイザ
ＭＵＶバッファ２５０は結果オーガナイザ２４９においても用いられる。結果オーガナイザ２４９は、メインデータパス２４２あるいはＪＰＥＧコーダ２４１のストリームをバッファしてフォーマットする。結果オーガナイザ２４９はまた、図４２で説明した結果データの圧縮、非圧縮、非正規化、バイトレーンスワップ、再編成にも関係する。更に結果オーガナイザ２４９は外部インターフェースコントローラ２３８、ローカルメモリコントローラ２３６、周辺インターフェースコントローラ２３７の要求に対し、その結果を転送する。
【０３４８】
ＪＰＥＧ伸長モードの時、結果オーガナイザ２４９はＭＵＶ ＲＡＭ２５０をＪＰＥＧコーダ２４９の画像データをダブルバッファするために用いる。ダブルバッファはＭＵＶＲＡＭ２５０の半分に書き込まれているＪＰＥＧコーダ２４１のデータを用いてＪＰＥＧ伸長する場合に、同時に残りの半分に書きこまれた画像データが指定の格納場所に出力されるとき、そのパフォーマンスをあげることができる。
【０３４９】
１，３及び４チャネル画像データは、同一チャネルからの８ビットのコンポーネントを含む８×８ブロックの形のＪＰＥＧ伸長を行っている間に、結果オーガナイザ２４９に渡される。結果オーガナイザはこれらのブロックを指定の順番でＭＵＶＲＡＭ２５０に格納し、また複数チャネルのインターリーブ画像のために、データをＭＵＶＲＡＭ２５０から読みこみを行っている時のチャネルのメッシュを格納する。例えば、ＹＵＶによる３チャネルのＪＰＥＧ圧縮ではＪＰＥＧコーダ２４１は３つの８×８ブロックを、初めにＹ、次にＵ、最後にＶの順で出力する。メッシュ処理がはそれぞれブロックか１つのコンポーネントを取り出すことによって行われ、ピクセルを（ＹＵＶＸ）の形で構成する。ここでＸは未使用チャネルである。バイトスワッピングは出力チャネルのスワップが必要となったときに行われる。結果オーガナイザはまた、伸長された出力データのクロマデータの再構成のための必要なサブサンプリング処理を行う必要がある。このことは生成するためにそれぞれのプログラムチャネルを繰り返すという意味を含んでいる。
【０３５０】
図１２７にもどると図２の結果オーガナイザ２４９の詳細が示されている。結果オーガナイザ２４９は、その処理に設定されるレジスタのレジスタファイルを含む通常の標準ＣＢｕｓインターフェース８４０周辺に基礎をおいている。結果オーガナイザ２４９の処理はピクセルオーガナイザ２４９と同様であるが、リバースデータ操作が行われる。データ操作ユニット８４２はバイトレーンスワッピング、コンポーネント代入、コンポーネント解放、非正規化をＭＵＶアドレス発生器８０５により生成されるデータに対して行う。実行された処理は図４２を参照して前述の通り説明され、内部レジスタにセットされた様々なフィールドに従って処理が行われる。ＦＩＦＯキュー８４３は出力データをそれがＲＢｕｓ制御ユニット８４４を用いて出力される前にバッファを行う。ＲＢｕｓ制御ユニット８４４はアドレスデコーダとアドレス生成器によって構成される。格納モジュール用のアドレスは、必要な出力バイト数のデータに加えて、内部レジスタに格納される。更に、内部ＲＯ＿ＣＵＴレジスタはいくつくらいの出力バイトが出力バスのバイトストリーム上に送られる前に欠落したかを決定する。加えて、ＲＯ＿ＬＭＴレジスタは出力制限が中止された後の次のデータを用いて最大いくつのデータ項目が出力されるかを決定する。ＭＡＧ８０５はＪＰＥＧ伸長時にＭＵＶＲＡＭ２５０のアドレスを生成する。ＭＵＶＲＡＭ２５０はＪＰＥＧコーダからの出力をダブルバッファするために用いられる。ＭＡＧ８０５は内部コンフィギュレーションレジスタに依存するＭＵＶＲＡＭ２５０におけるコンポーネントのメッシュを行い、ピクセルの入った単一チャネル、３チャネル、４チャネルの出力を行う。バイトレーンスワッピングがピクセルデータを適切な場所に格納する前に必要となるので、ＭＵＶＲＡＭ２５０から得られるデータはデータ操作ユニットを通して渡される。結果オーガナイザ２４９がＪＰＥＧモードになっていないときはＭＡＧ８０５は単にＰＢｕｓレシーバ８４５のデータをデータ操作ユニット８４２にダイレクトに送る。
【０３５１】
３．１８．４ オペランドオーガナイザＢ及びＣ
図２に再び戻って、２つの独立なオペランドオーガナイザ２４７と２４８はデータキャッシュコントロール２４０のデータバッファの機能と、ＪＰＥＧコーダ２４１あるいはメインデータパス２４２にデータを転送する機能を持つ。オペランドオーガナイザ２４７と２４８は様々なモードで操作される。
（ａ） オペランドオーガナイザがＣＢｕｓ要求にたいしてのみ応答するアイドルモード
（ｂ） 現在の命令のデータがオペランドレジスタの内部レジスタに格納されている時の直接モード
（ｃ） オペレータオーガナイザがシーケンシャルアドレスおよびデータキャッシュコントローラ２４０のバッファが満杯である時のデータを生成するシーケンシャルモード。
【０３５２】
多数のメインデータパス２４２の処理モードは、少なくともどちらかのオペランドオーガナイザにシーケンシャルモードであることを要求する。オペランドオーガナイザＢ２４７における、合成を含むこれらのモードは、ほかのイメージを用いて合成されるバッファピクセルで必要である。オペランドオーガナイザＣ２４８はそれぞれのデータチャネルの値の減衰を行う合成処理に用いられる。ハーフトーンモードではオペランドオーガナイザＢ２４７は８ビットの行列係数のバッファを行い、階層的画像フォーマット分解モードではオペランドオーガナイザＢ２４７は垂直補間と残部融合命令の両方のデータのバッファを行う。
（ｄ） 定常モードではオペランドオーガナイザＢは単一の内部データワードの組立とそのワードを内部レジスタによって指定された回数繰返すことを行う。
（ｅ） タイルモードではオペランドオーガナイザＢはピクセルタイルを構成するデータのバッファを行う。
（ｆ） ランダムモードでは、オペランドオーガナイザはデータキャッシュコントローラにＭＤＰ２４２あるいはＪＰＥＧコーダ２４１のアドレスをダイレクトに転送する。
【０３５３】
内部長さレジスタは、シーケンシャル、タイル、定常の各モードの処理の時に、オペランドオーガナイザ２４７、２４８の個々で生成される項目の数を決定する。オペランドオーガナイザ２４７、２４８それぞれは、はそれまでに処理されたデータ項目の数を保持し、内部レジスタによって決定される値に達したら停止する。オペランドオーガナイザそれぞれは、バイトレーンスワッピングを用いた入力データのフォーマット、コンポーネントの代入、圧縮・非圧縮・正規化機能、にたいしてより信頼がある。要求された処理は内部レジスタを用いてコンフィギュレーションされる。更に、オペランドオーガナイザ２４７と２４８それぞれはデータ項目を制限するためにコンフィギュレーションされる。
【０３５４】
図１２８では、オペランドオーガナイザ（２４７、２４８）のより詳細な構成が示されている。オペランドオーガナイザ２４７、２４８は通常の標準ＣＢｕｓインターフェースとオペランドオーガナイザ全体の制御を司るレジスタ８５０を含む。更に、ＯＢｕｓ制御ユニット８５１はデータキャッシュコントローラに接続され、シーケンシャル、タイル、定常の各モードのアドレス生成、オペランドオーガナイザ２４７，２４８のＯＢｕｓインターフェースの通信を可能にする制御信号の生成、入力ストリームの過去のクロックサイクルから保存される状態を必要とする、正規化、繰り返し等を行うデータ操作ユニットの制御を行う。オペランドオーガナイザ２４７、２４８がシーケンシャル、あるいはタイルモードであるときには、ＯＢｕｓコントローラユニット８５１はデータの要求をデータキャッシュコントローラに送る。このときアドレスは内部レジスタによって決定されている。
【０３５５】
それぞれのオペランドオーガナイザは更に、様々なモードの処理において、データキャッシュコントローラ２４０からのデータをバッファするために用いられる３６ビット幅のＦＩＦＯバッファ８５２を含んでいる。データ操作ユニット８５３は、ピクセルオーガナイザ２４６のデータ操作ユニット８０４に対応する機能と同じ機能を行う。
【０３５６】
メインデータパス／ＪＰＥＧコーダインターフェース８５４は通常処理モードにおいてメインデータパスやＪＰＥＧコーダモジュール２４２、２４１でやりとりされるデータ及びアドレスを分配する。ＭＤＰ／ＪＣインターフェース８５４はデータ操作ユニット８５３からのデータをメインデータパス及びそのデータを繰り返すように構成されたプロセスに送る。色変換モードの場合には、ユニット８５１、８５４はデータキャッシュコントローラ２４０と色変換テーブルの高速アクセスを確立するためにバイパスされる。
【０３５７】
３．１８．５ 主データパス部
以下の実施例の特徴は、複数の画像処理動作を高速で行うことのできる低価格のコンピュータアーキテクチャを提供する画像プロセッサに関するものである。更に、画像プロセッサは、元々は規定されなかった画像処理動作を行うように構成されることのできる、柔軟性のあるコンピュータアーキテクチャを提供することを目的とする。また、画像プロセッサは、同じロジックをたくさん持っていて、設計プロセスが簡単で安くなるような、コンピュータアーキテクチャを提供することをも目的とする。
【０３５８】
コンピュータアーキテクチャは制御レジスタブロック、復号ブロック、データオブジェクトプロセッサ、および、フロー制御ロジックを具備する。制御レジスタブロックは画像処理動作に関する全ての情報を格納する。復号ブロックは情報を構成信号に復号し、入力データオブジェクトインターフェースを構成する。入力データオブジェクトインターフェースはデータオブジェクトを外部から受け取り格納する。そして、これらのデータオブジェクトをデータオブジェクトプロセッサに配分する。ある画像処理動作においては、入力データオブジェクトインターフェースがデータオブジェクトのアドレスを生成することもあり、これらのデータオブジェクトのソースが正しいデータオブジェクトを提供できるようになる。データオブジェクトプロセッサは、受け取ったデータオブジェクトに対して算術演算を行う。フロー制御ロジックは、データオブジェクト処理ロジックの中のデータオブジェクトフローを制御する。
【０３５９】
特に、データオブジェクトプロセッサは、いくつかの同一なデータオブジェクトサブプロセッサを備えることができ、各サブプロセッサは、入力データオブジェクトの一部を処理する。データオブジェクトサブプロセッサは、データオブジェクトの当該部分に対し算術演算を行ういくつかの同一な多機能算術部、出力データオブジェクトを処理する後処理ロジック、および、多機能算術部と後処理部とを接続する多重化ロジックを有する。多機能算術部は計算されたデータオブジェクトのための記憶装置を具備する。この記憶装置は、フロー制御ロジックによってイネーブルされるか又はデスエーブルされる。多機能算術部および多重化ロジックは、復号ロジックによって生成された構成信号によって構成される。
【０３６０】
なお、復号ロジックからの構成信号は外部プログラミングエージェントによって変化されることができる。このメカニズムを通じて、どのような多機能ブロックおよび多重化ロジックであっても、外部プログラミングエージェントによって個々に構成することができ、前もって規定されなかった画像処理動作を行うように画像プロセッサを構成することを可能にする。本発明の実施例が持つこれらの特徴およびその他の特徴を以下で詳述する。
【０３６１】
図２において、前述したように、主データパス部２４２はＪＰＥＧデータ符号化以外の全てのデータ操作動作および命令を行う。これらの命令には、合成、色空間変換、画像変換、畳込み演算、行列の乗算、ハーフトーン処理、メモリ複写、および階層画像フォーマットの解凍が含まれる。主データパス２４２はピクセルオーガナイザ２４６およびオペランドオーガナイザ２４７、２４８から、ピクセルとオペランドデータとを受け取り、結果出力を結果オーガナイザ２４９に送る。
【０３６２】
図１２９は、主データパス部２４２のブロック図である。主データパス部２４２は汎用の画像プロセッサであって、入力インターフェース１４６０、画像データプロセッサ１４６２、命令ワードレジスタ１４６４、命令ワード復号器１４６８、制御信号レジスタ１４７０、レジスタファイル１４７２、および、ＲＯＭ１４７５を備える。
【０３６３】
命令制御部２３５は、バス１４５４を通じて、命令ワードを命令ワードレジスタ１４６４へ移す。それぞれの命令ワードは、実行すべき画像処理動作の種類や画像処理動作の様々なオプションを選択するプラグなどの情報を含んでいる。命令ワードは、バス１４６５を経由して命令ワード復号器１４６８に運ばれる。それで、命令制御部２３５は、命令ワードを復号するように命令ワード復号器１４６８に指示することができる。その指示を受けると、命令復号器１４６８は命令ワードを制御信号に復号する。それから、これらの制御信号はバス１４６９を経由して制御信号レジスタ１４７０に運ばれる。それから、制御信号レジスタの出力は、バス１４７１を経由して入力インターフェース１４６０および画像データプロセッサ１４６２に接続される。
【０３６４】
主データパス部２４２をより柔軟性のあるものにするために、命令制御部２３５が制御信号レジスタ１４７０に直接書き込むこともできる。これによって、主データパス部２４２の構造を熟知している誰でも、主データパス部２４２の細かい構成を行えるようになり、主データパス部２４２は命令ワードで記述されていない画像処理動作をも実行できるようになる。
【０３６５】
所望の画像処理動作を実行するために必要な全ての情報を命令ワードに収容できない場合、命令制御部２３５は、その収容できない必要な全ての情報をレジスタファイル１４７２のいくつかの選ばれたレジスタに書き込むことができる。この情報は、バス１４７３を経由して、入力インターフェース１４６０および画像データプロセッサ１４６２に伝えられる。ある画像処理動作において、入力インターフェース１４６０は主データパス部２４２の現在状態を反映するために、レジスタファイル１４７２の選ばれたレジスタの内容を更新することもあり得る。画像処理動作を実行するときに問題が生じたとき、命令制御部２３５は前述の特徴を用いて、問題を容易に発見できるようになる。
【０３６６】
命令ワードの復号が終了し、制御信号レジスタに所望する制御信号がロードされたとき、命令制御部２３５は主データパス部２４２に所望画像処理動作の実行を始めるように指示することができる。この指示を受けると、入力インターフェース１４６０はバス１４５１からのデータオブジェクトを受け取り始める。入力インターフェース１４６０は、実行される画像処理動作の種類に応じて、オペランドバス１４５２又はオペランドバス１４５３からのオペランドデータを受け取り始めるか、或は、オペランドデータのアドレスを生成してオペランドバス１４５２又はオペランドバス１４５３からのオペランドデータを受け取り始める。入力インターフェース１４６０は、制御信号レジスタ１４７０の出力に応じて、入力データを格納して配列し直す。アフィン画像変換動作および畳込み演算のような計算を行うとき、入力インターフェース１４６０はバス１４５２および１４５３を経由してフェッチされるべき座標をも生成する。
【０３６７】
画像データプロセッサ１４６２は、入力インターフェース１４６０に配列し直してもらったデータオブジェクトに対して主算術演算を行う。画像プロセッサ１４６２は、所定の補間ファクタで行われる２つのデータオブジェクトの間の補間、２つのデータオブジェクトの乗算、及びその結果を２５５で割る割算、２つのデータオブジェクトに対する通常の乗算及び足し算、データオブジェクトの分数部に対する様々な精度での切り捨て、データオブジェクトのオーバフローをある最大値に、そしてデータオブジェクトのアンダフローをある最低値にそれぞれ抑えるクランプ、データオブジェクトのスケーリング及びクランピングというような処理を行うことができる。バス１４７１の制御信号は、前記の算術演算中のどれがデータオブジェクトに対して行われるか、及びその動作の順序などを制御する。
【０３６８】
ＲＯＭ１４７５は、８．８フォーマットで切り捨てられた２５５／ｘの被除数を有するが、ここで、ｘは０から２５５までの数である。ＲＯＭ１４７５は、バス１４７６を経由して、入力インターフェース１４６０および画像データプロセッサ１４６２に接続される。ＲＯＭ１４７５は短い長さのブレンドを生成し、データオブジェクトに２５５を掛け、その結果を他のデータオブジェクトで割るというような動作に用いられる。
【０３６９】
オペランドバス、例えば１４５２の数は２に制限されるが、大多数の画像処理動作においては十分である。図１３０は、入力インターフェース１４６０をより詳細に示す。入力インターフェース１４６０は、データオブジェクトインターフェース部１４８０、オペランドインターフェース部１４８２および１４８４、アドレス生成状態器１４８６、ブレンド生成状態器１４８８、行列乗算状態器１４９０、補間状態器１４９４、データ同期部１５００、算術部１４９６、他レジスタ１４９８、並びに、データ分配ロジック１５０５を備える。
【０３７０】
データオブジェクトインターフェース部１４８０と、オペランドインターフェース部１４８２及び１４８４とは、外部からデータオブジェクト及びオペランドを受け取る。インターフェース部１４８２，１４８４は、２つとも制御バス１５１５からの制御信号によって構成される。インターフェース部１４８２，１４８４は、受け取ったばかりのデータオブジェクト／オペランドを含むデータレジスタを内部に有しており、２つとも前記データレジスタが有効であるときはＶＡＬＩＤ信号を出力する。インターフェース部１４８２，１４８４のデータレジスタの出力はデータバス１５０５に接続される。インターフェース部１４８２、１４８４のＶＡＬＩＤ信号はフローバス１５１０に接続される。オペランドをフェッチするように構成されたとき、オペランドインターフェース部１４８２および１４８４は、算術部１４９６からのアドレスと、行列乗算状態器１４９０と、データオブジェクトインターフェース部１４８０のデータレジスタの出力とを受け取り、その中で必要なアドレスを制御バス１５１５からの制御信号に応じて選択する。いくつかの場合、特に、外部からデータを受けて格納する必要がない場合、オペランドインターフェース部１４８２および１４８４のデータレジスタは、データオブジェクトインターフェース部１４８０または算術部１４９６のデータレジスタの出力からデータを格納するように構成されることが有り得る。
【０３７１】
アドレス生成状態器１４８６は、アフィン画像変換動作および畳込み演算動作において算術部１４９６を制御し、ソース画像のアクセスされるべき次の座標を計算する。アドレス生成状態器１４８６は、制御バス１５１５のＳＴＡＲＴ信号が設定されることを待つ。制御バス１５１５のＳＴＡＲＴ信号が設定されると、アドレス生成状態器１４８６はデータオブジェクトインターフェース部１４８０に対してＳＴＡＬＬ信号を解除して、データオブジェクトが到着することを待つ。なお、アドレス生成状態器１４８６は、アドレス生成状態器１４８６がフェッチすることを必要とするカーネルデスクリプタのデータオブジェクトの数と同じとなるようにカウンタを設定する。カウンタの出力は、復号され、オペランドインターフェース部１４８２および１４８４のデータレジスタと他レジスタ１４９８とのイネーブル信号になる。データオブジェクトインターフェース部１４８０からＶＡＬＩＤ信号が起動されると、アドレス生成状態器１４８６はカウンタを減少させるようになり、データオブジェクトの次の部分が異なるレジスタにラッチされる。
【０３７２】
カウンタが零に達すると、アドレス生成状態器１４８６はオペランドインターフェース部１４８４からインデックステーブル値とピクセルとをフェッチし始めよとオペランドインターフェース部１４８２に指示する。なお、アドレス生成状態器１４８６は、行の数と列の数とをそれぞれ持つ２つのカウンタをロードする。全てのクロックエッジにおいて、かつオペランドインターフェース部１４８２などからのＳＴＡＬＬ信号によって停止されないとき、カウンタは減少され残りの行と列を出力する。そして、算術部１４９６は、フェッチされるべき次の座標を計算する。両方のカウンタが零に達すると、カウンタは行と列の数を再びロードし、算術部１４９６は次の行列の左上端を探すように構成される。
【０３７３】
ピクセルの真の値を決定するために補間が使われる場合、アドレス生成状態器１４８６は２つのクロックサイクルごとに、行および列の数を減少させる。これは１ビットカウンタを使って実行され、その出力は行および列カウンタのイネーブルとして用いられる。行列が一度スキャンされた後、状態器は長さカウンタのカウントを減少させる信号を送る。カウンタが１に達して、かつ最終インデックステーブルアドレスがオペランドインターフェース部１４８２に送られたとき、状態器は最終信号を出し、開始ビットをリセットする。
【０３７４】
ブレンド生成状態器１４８８は、算術部１４９６を制御して、ブレンド長さのための０から２５５までの数列を生成する。この数列は、ブレンド開始値とブレンド終了値との間を補間する補間ファクタとして使われる。ブレンド生成状態器１４８８はどちらかのモード（ジャンプモード又はステップモード）で実行すべきであるかを決める。ブレンド長さが２５６以下である場合はジャンプモードが使われ、そうでない場合はステップモードが使われる。
【０３７５】
ブレンド生成状態器１４８８は、下記の計算を行い、その結果をレジスタ（ｒｅｇ０，ｒｅｇ１，ｒｅｇ２）にセットする。ブランドランプが予め決定された長さでステップモードにある場合、５１１−長さをｒｅｇ０（２４ビット）に、５１２−２＊長さをｒｅｇ１（２４ビット）に、そして、終了−開始をｒｅｇ２（４×９ビット）に、それぞれラッチする。ランプがジャンプモードにある場合は、０をｒｅｇ０（２４ビット）に、２５５／（長さ−１）をｒｅｇ１（２４ビット）に、そして、終了−開始をｒｅｇ２（４×９ビット）に、それぞれラッチする。
【０３７６】
ステップモードにおいて、以下の処理が各サイクルにおいて実行される。ｒｅｇ０＞０であるとき、ｒｅｇ０にｒｅｇ１を加え、その結果をｒｅｇ０に格納する。もう一つのインクリメンタがイネーブルされることもできるが、その場合には出力が１だけ増加される。ｒｅｇ０≦０であるとき、ｒｅｇ０に５１０を加え、その結果をｒｅｇ０に格納する。インクリメンタは増加されない。インクリメンタの出力はランプ値である。
【０３７７】
ジャンプモードにおいて、以下の処理が各サイクルにおいて実行される。ｒｅｇ０にｒｅｇ１を加える。加算の出力は２４ビットであり、１６．８の固定少数点フォーマットで出力される。前記加算出力をｒｅｇ０に格納する。分数結果の第１ビットが１である場合、整数部を増加させる。インクリメンタの整数部の下位８ビットはランプ値である。このランプ値、即ちｒｅｇ２の出力と、ブレンド開始値とは画像データプロセッサ１４６２に送られ、ランプを生成する。
【０３７８】
行列乗算状態器１４９０は、変換行列を用いて入力データオブジェクトに対する線形色空間変換を行う。変換行列は４×５次元である。第１から第４列にはデータオブジェクトの４チャネルを掛けるようになっており、最後列は積の和に加えられるべき常係数を含んでいる。制御バス１５１５からのＳＴＡＲＴ信号が起動されたとき、行列乗算状態器は以下のように動く。
【０３７９】
１）バス１４８２及び１４８４から変換行列の常係数をフェッチすべきライン番号を生成する。なお、他レジスタ１４９８をイネーブルして常係数が格納できるようにする。
２）１ビットフリップフロップを備えていて、ライン番号を生成して、バス１４８２および１４８４から行列の半分をフェッチするときにアドレスとして使う。なお、データオブジェクトの半分から、前記行列の半分に掛けられるべきものを選択する“ＭＡＴ＿ＳＥＬ”信号をも生成する。
【０３８０】
３）データオブジェクトインターフェース部１４８０から入力されるデータオブジェクトがないとき終了する。
補間状態器１４９４は、データオブジェクトの水平補間を行う。水平補間において、主データパス部２４２はバス１４５１からデータオブジェクトストリームを受け取り、隣のデータオブジェクトの間を補間する。そして、元ストリームの２倍、又は４倍の長さであるデータオブジェクトのストリームを出力する。データオブジェクトはバイト又はピクセルにパックされることがあり得るため、補間状態器１４９４は、スループットが最大になるようにそれぞれの場合に異なる操作を行う。補間状態器１４９４は以下のように動作する。
【０３８１】
１）ＩＮＴ＿ＳＥＬ信号を生成することによって、データ配分ロジック１５０３が入力データオブジェクトを再配列するようにし、正しいデータオブジェクト対に対して補間を行うようにする。
２）隣接するデータオブジェクト対の間を補間するための補間ファクタを生成する。
【０３８２】
３）データオブジェクトインターフェース部１４８０がもうデータオブジェクトを受け入れないようにするＳＴＡＬＬ信号を生成する。これが必要とされる理由は、出力ストリームが入力ストリームより長いからである。ＳＴＡＬＬ信号はフローバス１５１０に送られる。
算術部１４９６は、算術計算を行うなめの回路を具備しており、制御バス１５１５の制御信号によって構成される。これは、アフィン画像変換および畳込み演算と合成においてのブレンド生成という２つの命令のみによって使われる。
【０３８３】
アフィン画像変換および畳込み演算において、算術部１４９６は以下のような演算を行う。
１）次のｘおよびｙ座標を計算する。ｘ座標を計算するために、算術部１４９６は加算器を用いて現在のｘ座標に水平および垂直デルタのｘ成分を加えるか、減算器を用いて現在のｘ座標から水平および垂直デルタのｘ成分を引くようにする。ｙ座標を計算するために、算術部１４９８は加算器を用いて現在のｙ座標に水平又は垂直デルタのｙ成分を加えるか、減算器を用いて現在のｙ座標から水平又は垂直デルタのｙ成分を引くようにする。
【０３８４】
２）ｙ座標をインデックステーブルオフセットに加算しインデックステーブルアドレスを計算する。ピクセルの元の値を求めるために補間を使う場合、前記の和はインデックスエントリを求めるために、更に４だけ増加される。
３）ｘ座標をインデックステーブルエントリに加算し、ピクセルのアドレスを求める。
【０３８５】
４）長さカウントから１を引く。
ブレンド生成において、算術部１４９６は以下のように作動する。
１）ステップモードにおいて、ある１つのランプ加算器を用いてランプ生成アルゴリズムの内部変数を計算する。一方、その他の１つの加算器は、インターバル変数が零より大きいときにランプ値を増加させるために用いられる。
【０３８６】
２）ジャンプモードにおいては、ジャンプ値を現在のランプ値に加えるために１つの加算器のみが必要とされる。
３）ジャンプモードでは、分数の切り捨てが行われる。
４）ランプ生成の始めにあたって、ブランドの終了からブランドの開始を引く。
【０３８７】
５）長さカウントから１を引く。
他レジスタ１４９８は、データオブジェクトインターフェース部１４８０、並びに、オペランドインターフェース部１４８２及び１４８４において、データレジスタ以外の余分の格納空間を提供する。他レジスタ１４９８は、内部変数を格納するか、或はデータオブジェクトインターフェース部１４８０からの過去のデータオブジェクトをバッファするのにおいて使われるのが普通である。レジスタ１４９８は、制御バス１５１５の制御信号によって構成される。
【０３８８】
データ同期部１５００は、制御バス１５１５の制御信号によって構成される。データ同期部１５００は、ＳＴＡＬＬ信号をデータオブジェクトインターフェース部１４８０、並びに、オペランドインターフェース部１４８２および１４８４に提供することによって、あるインターフェース部が、他のインターフェースは持っていない一部データオブジェクトを受け取った場合、他のインターフェースの全てかデータを受け取るまでそのインターフェース部を停止させる。
【０３８９】
データ配分ロジック１５０５は、行列乗算状態器１４９０からのＭＡＴ＿ＳＥＬ信号と、補間状態器１４９４からのＩＮＴ＿ＳＥＬ信号とを含む制御バス１５１５の制御信号に応じて、データバス１５１０およびレジスタファイル１４７２からのデータオブジェクトをバス１５３０を経由して再配列する。再配列されたデータはバス１４６１へ出力される。
【０３９０】
図１３１は、図１２９の画像データプロセッサ１４６２をより詳細に示す。画像データプロセッサ１４６２は、パイプライン制御部１５４０と、多数のカラーチャネルプロセッサ１５４５，１５５０，１５５５、及び１５６０とを有する。全てのカラーチャネルプロセッサは、入力インターフェース１４６０（図１３１）によって駆動されるバス１５６５から入力を受け取る。全てのチャネルプロセッサとパイプライン制御部１５４０は、バス１４７２を経由する、制御信号レジスタ１４７０からの制御信号によって構成される。全てのカラーチャネルプロセッサは、図１２９のレジスタファイル１４７２及びＲＯＭ１４７５からの入力をもバス１５８０を経由して受け取ることがある。全てのカラーチャネルプロセッサとパイプライン制御部との出力はグループされてバス１５７０となり、画像データプロセッサ１４６２の出力１４５５を形成する。
【０３９１】
パイプライン制御部１５４０は、全てのカラーチャネルプロセッサのレジスタをイネーブル又はデスエーブルすることによって、全てのカラーチャネルプロセッサのデータオブジェクトのフローを制御する。パイプライン制御部１５４０の中には、レジスタパイプラインがある。パイプラインの形態及び長さは、バス１４７１からの制御信号により構成されるようになっており、パイプライン制御部１５４０のパイプラインとカラーチャネルプロセッサのパイプラインとは、その形態が同じである。パイプライン制御部はバス１５６５からＶＡＬＩＤ信号を受け取る。パイプライン制御部１５４０のパイプラインステージそれぞれにおいて、入力ＶＡＬＩＤ信号が起動され、パイプラインステージが停止されていない場合、パイプラインステージは全てのカラーチャネルプロセッサに対してレジスタイネーブル信号を起動させるとともに入力ＶＡＬＩＤ信号をラッチする。それから、ラッチの出力、即ち、ＶＡＬＩＤ信号は、次のパイプラインステージに移る。このようにして、パイプラインにおけるデータオブジェクトの移動が、データ記憶装置を用いずに、シミュレートかつ制御される。
【０３９２】
カラーチャネルプロセッサ１５４５，１５５０，１５５５、及び１５６０は、入力データオブジェクトに対する主な算術動作を行い、各プロセッサは出力データオブジェクトの１つのチャネルを担当している。好適な実施例においては、大多数のピクセルデータオブジェクトが最大４つのチャネルを持っているため、カラーチャネルプロセッサの数は４に制限される。
【０３９３】
カラーチャネルプロセッサの中には、ピクセルの不透明（ｏｐａｃｉｔｙ）チャネルを処理する部分がある。図１３１には示されていないが、制御バス１４７１に接続されている追加の回路があり、カラーチャネルプロセッサは不透明チャネルを正しく処理するように制御バス１４７１からの制御信号を変換する。これは、ある画像処理動作においては、不透明チャネルに対する動作がカラーチャネルに対する動作と少し異なるからである。
【０３９４】
図１３２は、カラーチャネルプロセッサ１５４５，１５５０，１５５５、１５６０を（図１３２においては一般的に１６００で示した）より詳細に示す。各カラーチャネルプロセッサ１５４５，１５５０，１５５５、１５６０は、処理ブロックＡ１６１０と、処理ブロックＢ１６１５と、ビッグ加算器１６２０と、分数切り捨て部１６２５と、クランプまたはラッパー１６３０と、出力多重化部１６３５とを備えている。カラーチャネルプロセッサ１６００は、制御信号レジスタ１４７０からの制御信号をバス１６０２を経由して、パイプライン制御部１５４０からのイネーブル信号をバス１６０４を経由して、レジスタファイル１４７２からの情報をバス１６０５を経由して、その他カラーチャネルプロセッサからのデータオブジェクトをバス１６０３を経由して、入力インターフェース１４６０からのデータオブジェクトをバス１６０１を経由して、それぞれ受け取る。
【０３９５】
処理ブロックＡ１６１０は，バス１６０１からのデータオブジェクトに対していくつかの算術動作を行い、部分的に計算されたデータオブジェクトをバス１６１１に出力する。処理ブロックＡ１６１０が画像処理動作のために行うべき処理を以下に説明する。合成において、処理ブロックＡ１６１０はデータオブジェクトバス１４５１からのデータオブジェクトに不透明度を掛け、ブレンド開始値とブレンド終了値との間を図１２９の入力インターフェース１４６０からの補間ファクタによって補間し、図１２９のオペランドバス１４５２からのオペランドをプレ乗算するかまたはブレンドカラーに不透明度を掛けるかする。そして、プレ乗算されたオペランドまたはブレンドカラーデータに対する乗算を減衰させる。
【０３９６】
一般色空間変換において、処理ブロックＡ１６１０は、図１２９のバス１４５１からの２つの分数値を用いて４つのカラーテーブル値の間を補間する。アフィン画像変換および畳込み演算において、処理ブロックＡ１６１０はソースピクセルの色に不透明度をプレ乗算し、現在ｘ座標の分数部を用いて同じ行のピクセルの間を補間する。
【０３９７】
線形色空間変換において、処理ブロックＡ１６１０はソースピクセルのカラーに不透明度をプレ乗算し、プレ乗算されたカラーデータに変換行列係数を掛ける。水平補間と垂直補間において、処理ブロックＡ１６１０は２つのデータオブジェクトの間を補間する。
【０３９８】
レジデュアルマージンにおいて、処理ブロックＡ１６１０は２つのデータオブジェクトを加算する。処理ブロックＡ１６１０は多数の多機能ブロック１６４０と、処理ブロックＡグルーロジック１６４５とを備える。多機能ブロック１６４０は制御信号によって構成されていて、以下の機能のどちらかの１つを実行することができる。
【０３９９】
２つのデータオブジェクトに対し加減算を行う。１つのデータオブジェクトを伝える。２つのデータオブジェクトの間をある補間ファクタによって補間する。色に不透明度をプレ乗算する。２つのデータオブジェクトを掛け、その積に第３のデータオブジェクトを掛ける。
【０４００】
２つのデータオブジェクトに対し加減算を行い、その結果に不透明度をプレ乗算する。多機能ブロック１６４０のレジスタは、図１３１のパイプライン制御部１５４０によって生成される、バス１６０４からのイネーブル信号によってイネーブルされるかデスエーブルされる。処理ブロックＡグルーロジック１６４５はバス１６０１からのデータオブジェクトおよびバス１６０３からのデータオブジェクトと、いくつかの多機能ブロック１６４０の出力とを受け取り、これらをその他の選択された多機能ブロック１６４０の入力に送る。処理ブロックＡグルーロジック１６４５もバス１６０２からの制御信号によって構成される。
【０４０１】
処理ブロックＢ１６１５は，バス１６０１からのデータオブジェクトとバス１６１１からの部分的に計算されたデータオブジェクトとに対して算術動作を行い、部分的に計算されたデータオブジェクトをバス１６１６に出力する。処理ブロックＢ１６１５が画像処理動作のために行う処理を以下に説明する。非正のオペレータをもつ合成において、処理ブロックＢ１６１５はデータオブジェクトバス１４５１からのプレ処理されたデータオブジェクトと、オペランドバス１４５２からのオペランドに対して、バス１６０３からの合成被乗数を掛けるとともに、８．８フォーマットの２５５／不透明度の値であるＲＯＭの出力を、クランプ／ラップされたデータオブジェクトに掛ける。
【０４０２】
正のオペレータをもつ合成において、処理ブロックＢ１６１５は、プレ処理された２つのデータオブジェクトを加算する。更に、不透明チャネルにおいては、前記の和から２５５を引いて、その差をオフセットに掛け、その積を２５５で割る。一般色空間変換において、処理ブロックＢ１６１５は、バス１４５１からの２つの分数値を用いて４つのカラーテーブル値の間を補間し、残っている分数値を用いて処理ブロックＡ１６１０からの部分的に補間されたカラー値と、以前の補間結果との間を補間する。
【０４０３】
アフィン画像変換および畳込み演算において、処理ブロックＢ１６１５は、現在ｙ座標の分数部を用いて、部分的に補間されたピクセルの間を補間し、補間されたピクセルにサブサンプルウェート行列の係数を掛ける。線形色空間変換において、処理ブロックＢ１６１５はソースピクセルのカラーに不透明度をプレ乗算し、プレ乗算されたカラーに変換行列係数を掛ける。
【０４０４】
処理ブロックＢ１６１５は、多数の多機能ブロックと、処理ブロックＢグルーロジック１６５０とを備える。多機能ブロックは、処理ブロックＡ１６１０のものと同様であるが、処理ブロックＢグルーロジック１６５０においては、バス１６０１，１６０３，１６１１，１６３１からのデータオブジェクトと、選択された多機能ブロックの出力とを受け入れ、これらを選択された多機能ブロックの入力に送る。処理ブロックＢグルーロジック１６５０もバス１６０２からの制御信号によって構成される。
【０４０５】
ビッグ加算器１６２０は、処理ブロックＡ１６１０と処理ブロックＢ１６１５からの部分的結果のいくつかを結合する。これは、バス１６０１を経由して入力インターフェース１６４０から、バス１６１１を経由して処理ブロックＡ１６１０から、バス１６１６を経由して処理ブロックＢ１６１５から、そして、バス１６０５を経由してレジスタファイル１４７２から、それぞれの入力を受け取り、バス１６２１に結合された結果を出力する。ビッグ加算器１６２０も、バス１６０２の制御信号によって構成される。
【０４０６】
ビッグ加算器１６２０は、様々な画像処理動作に従って、異なる構成にすることができる。ビッグ加算器１６２０の所定の画像処理動作における動作を以下に説明する。非正のオペレータを持つ合成において、ビッグ加算器１６２０は処理ブロックＢ１６１５からの２つの部分積を合算する。
【０４０７】
正のオペレータを持つ合成において、オフセットイネーブルが起動されているときに、ビッグ加算器１６２０は不透明度チャネルからオフセットのある先処理されたデータオブジェクトの和を引く。アフィン画像変換／畳込み演算において、ビッグ加算器１６２０は処理ブロックＢ１６１５からの積を累算する。
【０４０８】
線形色空間変換において、第１サイクルでビッグ加算器は２つの行列係数／データオブジェクト積と常係数とを合算する。第２サイクルで、直前サイクルの和に他のもう２つの行列係数／データオブジェクト積を加える。分数切り捨て（丸め）部１６２５は、バス１６２１を経由してビッグ加算器１６２０からの入力を受け取り、出力の分数部を切り捨てる。分数部を表すビットの数は、レジスタファイル１４７２からバス１６０５のＢＰ信号によって表示される。ＢＰ信号を解釈する仕方を以下の表に表す。切り捨てられた出力はバス１６２６に提供される。
【０４０９】
分数テーブル
【０４１０】
【表２７】
2005348410.tif 000045
【０４１１】
分数切り捨て部１６２５は、分数の切り捨ての以外に２つの作業を行う。
１）切り捨てられた結果が負であるかどうかを決定する。
２）切り捨てられた結果の絶対値が２５５より大きいかどうかを決定する。
クランプ又はラッパー１６３０はバス１６２６を経由して分数切り捨て部１６２５から入力を受け取り、下記の動作をその順序に従い行う。
【０４１２】
切り捨てられた結果の絶対値を求めるべきというオプションがイネーブルされているとき、その絶対値を求める。データオブジェクトのアンダフローをある最低値に、そして、データオブジェクトのオーバフローをある最大値に、それぞれクランプする。出力多重化部１６３５は、バス１６１６の処理ブロックＢの出力とバス１６３１のクランプまたはラッパーの出力とのなかで、最終の出力を選択する。なお、データオブジェクトに対して、いくつかの最終処理をも行うが、以下は所定の画像処理動作のために行われる動作を説明する。
【０４１３】
非正のオペレータをもつ、プレ乗算なしの合成において、多重化部１６３５は処理ブロックＢ１６１５のいくつかの出力を結合し、プレ乗算なしのデータオブジェクトを形成する。非正のオペレータをもつ、プレ乗算ありの合成において、多重化部１６３５はクランプまたはラッパー１６３０の出力を通過させる。
【０４１４】
正のオペレータをもつ合成において、多重化部１６３５は処理ブロックＢ１６３０のいくつかの出力を結合し、データオブジェクト結果を形成する。一般色空間変換において、多重化部１６３５は出力データオブジェクトに対して、翻訳・クランプ機能を適用する。他の動作において、多重化部１６３５は、クランプ又はラッパー１６３０の出力を通過させる。
【０４１５】
図１３３は、例えば１６４０のような、１つの多機能ブロックをより詳細に示す。多機能ブロック１６４０は、モード検出部１７１０と、２つの加算オペランド論理部１６６０及び１６７０と、３つの多重化論理部１６８０，１６８５，及び１６９０と、２入力加算部１６７５と、２つの加数を持つ２入力乗算部１６９５と、レジスタ１７０５とを備える。
【０４１６】
モード検出部１７１０は、図１２９の制御信号レジスタ１４７０からのＭＯＤＥ信号１７１１と、図１２９の入力インターフェース１４６０からの２つのＳＵＢ信号１７１２及びＳＷＡＰ信号１７１３とを受け取る。モード検出部１７１０は、これらの信号を復号して、加算オペランド論理部１６６０および１６７０と、多重化論理部１６８０，１６８５，および１６９０に伝えられる制御信号を生成する。そして、この制御信号は、多機能ブロック１６４０を種々な動作のできるように構成する。多機能ブロック１６４０は、８つのモードを有する。
【０４１７】
１）加減算モード：ＳＵＢ信号１７１２に従い、入力１６５５を入力１６６５に加えるか、または、入力１６６５から引く。更に、ＳＷＡＰ信号６９３に従い、入力をスワップすることもできる。
２）バイパスモード：入力１６５５を出力にバイパスする。
３）補間モード：入力１６７５を補間ファクタとして、入力１６５５と１６６５の間を補間する。ＳＷＡＰ信号１７１３に従い、入力１６５５および１６６５をスワップすることができる。
【０４１８】
４）プレ乗算モード：入力１６５５に入力１６７５を掛け、その結果を２５５で割る。ＩＮＣレジスタ１７０８の出力は、正しい結果を得るためにバス１７０７における、このステージの結果を増加すべきかどうかを、次のステージに教える。
５）乗算モード：入力１６５５に入力１６７５を掛ける。
【０４１９】
６）加減算およびプレ乗算モード：入力１６６５を入力１６５５に加えるか、または、入力１６５５から引き、その結果に入力１６７５を掛け、そして、この積を２５５で割る。ＩＮＣレジスタ１７０８の出力は、正しい結果を得るためにバス１７０７にあるこのステージの結果を増加すべきかどうかを、次のステージに教える。
【０４２０】
加算オペランド論理部１６６０及び１６７０は、加算器によって減算もできるようにするために、必要に応じて入力に対する１の補数を求める。加算器１６７５は、バス１６６２と１６７２の加算オペランドロジック１６６０及び１６７０の出力を合算し、その和をバス１６７７に出力する。多重化ロジック１６８０，１６８５、及び１６９０は、所望の機能を実行するために適する被乗数と加数を選ぶ。これらは全てモード検出部１７１０からのバス１７１４の制御信号によって構成される。
【０４２１】
２つの加数を持つ乗算部１６９５は、バス１６８２からの入力をバス１６７７からの入力に掛ける。そして、前記積にバス１６８７および１６９２からの入力の和を加える。加算器１７００は、乗算部１６９５の出力の下位８ビットに乗算部１６９５の出力の上位８ビットを加える。加算器１７００の桁上げはＩＮＣレジスタ１７０１にラッチされる。ＩＮＣレジスタ１７０１は、信号１７０２によってイネーブルされる。レジスタ１７０５は乗算部１６９５からの積を記憶する。これも信号１７０２によってイネーブルされる。
【０４２２】
図１３４は、合成動作のブロック図を示す。この合成動作は３つの入力データストリームを受け取る。
１）累算ピクセルデータ：この累算部モデルにおいて、結果が格納された位置と同一な位置から誘導される。
２）合成オペランド：カラーと不透明度からなる。カラーと不透明度の両方はフラット、ブレンド、ピクセル、またはタイルであることができる。
【０４２３】
３）減衰：オペランドデータを減衰する。減衰はフラットなビットマップまたはバイトマップであることができる。
ピクセルデータは典型的に４つのチャネルからなる。その３つのチャネルがピクセルのカラーを形成する。残りのチャネルはピクセルの不透明度である。ピクセルデータはプレ乗算されても、或はされなくてもよい。ピクセルデータがプレ乗算されるとき、各カラーチャネルに不透明度を掛ける。ピクセルがプレ乗算されると合成動作の式が簡単になるため、ピクセルデータがプレ乗算されてから他のピクセルと合成されるのが普通である。
【０４２４】
好適な実施例で実行される合成命令を表１に示す。各命令はプレ乗算されたデータに働きかける。（ａｃ０，ａ０）はプレ乗算されたピクセルカラーａｃと不透明度ａ０を、ｒは“オフセット”値、ｗｃ（）はラップ／クランプ・オペレータを意味し、表１におけるｏｖｅｒ、ｉｎ、ｏｕｔ、ａｔｏｐの各オペレータの逆オペレータも実装されている。また、合成モデルは左側に累算器を備える。
【０４２５】
図１３４における合成ブロック１７６０は、３つのカラーサブブロックと不透明サブブロックを具備する。各々のカラーサブブロックは、入力ピクセルの１つのカラーチャンネルと不透明チャンネルに対して動作して、出力ピクセルのカラーを得る。以上の動作を擬似コードの形で以下に示す。
ＰＩＸＥＬ Ｃｏｍｐｏｓｉｔｅ（
ＩＮ ｃｏｌｏｒＡ，ｃｏｌｏｒＢ：ＰＩＸＥＬ；
ＩＮ ｏｐａｃｉｔｙＡ，ｏｐａｃｉｔｙＢ：ＰＩＸＥＬ；
ＩＮ ｃｏｍｐ＿ｏｐ：ＣＯＭＰＯＳＩＴＥ＿ＯＰＥＲＡＴＯＲ）
（
ＰＩＸＥＬ ｒｅｓｕｌｔ；
ＩＦ ｃｏｍｐ＿ｏｐがｒｏｖｅｒ，ｒｉｎ，ｒｏｕｔ，ｒａｔｏｐである
とＴＨＥＮ
ｃｏｌｏｒＡとｃｏｌｏｒＢをスワップする；
ｏｐａｃｉｔｙＡ，ｏｐａｃｉｔｙＢをスワップする；
ＥＮＤ ＩＦ；
ＩＦ ｃｏｍｐ＿ｏｐがｏｖｅｒ，ｒｏｖｅｒ，ｌｏａｄｏ，又は、ｐｌｕ
ｓであるとＴＨＥＮ
Ｘ＝１；
ＥＬＳＥ ＩＦ ｃｏｍｐ＿ｏｐがｉｎ，ｒｉｎ，ａｔｏｐ，又は、ｒａｔ
ｏｐであるとＴＨＥＮ
Ｘ＝ｏｐａｃｉｔｙＢ；
ＥＬＳＥ ＩＦ ｃｏｍｐ＿ｏｐがｏｕｔ，ｒｏｕｔ，又は、ｘｏｒである
とＴＨＥＮ
Ｘ＝ｎｏｔ（ｏｐａｃｉｔｙＢ）；
ＥＬＳＥ ＩＦ ｃｏｍｐ＿ｏｐがｌｏａｄｚｅｒｏ，ｌｏａｄｃ，又は、
ｌｏａｄｃｏであるとＴＨＥＮ
Ｘ＝０；
ＥＮＤ ＩＦ；
ＩＦ ｃｏｍｐ＿ｏｐがｏｖｅｒ，ｒｏｖｅｒ，ａｔｏｐ，ｒａｔｏｐ，又
は、ｘｏｒであるとＴＨＥＮ
Ｙ＝ｎｏｔ（ｏｐａｃｉｔｙａ）；
ＥＬＳＥ ＩＦ ｃｏｍｐ＿ｏｐがｐｌｕｓ，ｌｏａｄｃ，又は、ｌｏａｄ
ｃｏであるとＴＨＥＮ
Ｙ＝ｎｏｔ（ｏｐａｃｉｔｙａ）；
ＥＬＳＥ ＩＦ ｃｏｍｐ＿ｏｐがｐｌｕｓ，ｌｏａｄｃ，又は、ｌｏａｄ
ｃｏであるとＴＨＥＮ
Ｙ＝１；
ＥＬＳＥ ＩＦ ｃｏｍｐ＿ｏｐがｉｎ，ｒｉｎ，ｏｕｔ，ｒｏｕｔ，ｌｏ
ａｄｚｅｒｏ，又は、ｌｏａｄｏ ＴＨＥＮ
Ｙ＝０；
ＥＮＤ ＩＦ；
ｒｅｓｕｌｔ＝ｃｏｌｏＡ ＊ Ｘ＋ｃｏｌｏｒＢ ＊ Ｙ；
ＲＥＴＵＲＮ ｒｅｓｕｌｔ；
命令’ｌｏａｄ’と’ｌｏａｄｏ’が不透明チャンネルに対して異なる意味を持っているため、以上のコードは不透明サブブロックにおいて異なる。
【０４２６】
図１３４におけるブロック１７６５は、ブロック１７６０の出力をクランプまたはラップする。ブロック１７６５がクランプするように構成されると、許容される最小値より小さい全ての値を最小値に、許容される最大値より大きい全ての値を最大許容値に抑える。ブロック１７６５がスワップするように構成されると、以下の式を計算する。
【０４２７】
（（ｘ−ｍｉｎ）ｍｏｄ（ｍａｘ−ｍｉｎ））＋ｍｉｎ，
ここで、ｍｉｎとｍａｘはカラーにおいて許容される最小値と最大値を意味する。最小値と最大値としては、０と２５５が望ましい。図１３４におけるブロック１７７０は、ブロック１７６５からの結果をプレ乗算する。これはプレ乗算されたカラー値に２５５／ｏを掛けることによりピクセルをプレ乗算する。ここで、ｏは合成後の不透明度を意味する。２５５／ｏの値は合成エンジン内のＲＯＭから得られる。ＲＯＭ内の値は８．８フォーマットで記憶されており、分数以下の部分は丸められる。乗算の結果は１６．８フォーマットで格納される。逆プレ乗算されたピクセルを生成するために、この結果は８ビットで丸められる。
【０４２８】
ブランド生成部１７２１は特定の開始値と終了値を持つ特定長さのブランドを生成する。これは以下の２つのステージに渡って行なわれる。
１）ランプ生成
２）補間
ランプ生成において、合成エンジンは命令の長さに対して、０から２５５まで線形増加する数列を生成する。ランプ生成には、長さが２５５以下の“ジャンプ”モードと長さが２５５より長い“ステップ”モードの２つがある。モードは長さの上位２４ビットによって決まる。ジャンプモードにおいて、ランプ値の増加分はクロック周期ごとに少なくとも１である。ステップモードおいて、ランプ値の増加分はクロック周期ごとに最大１である。
【０４２９】
ジャンプモードにおいて、合成エンジンはステップ値２５５／（長さ−１）を求めるために８．８フォーマットのＲＯＭを用いる。この値は１６ビット累算器に加えられる。累算器の出力は８ビットで切り捨てられて数列を形成する。ステップモードおいて、合成エンジンはＢｒｅｓｅｎｈａｍの線描アルゴリズムに似たアルゴリズムを用いる。そのアルゴリズムを以下に示す。
【０４３０】
Ｖｏｉｄ ｌｉｎｅ ｄｒａｗ（ｌｅｎｇｔｈ：ＩＮＴＥＲＧＥＲ）
｛
ｄ＝５１１−ｌｅｎｇｔｈ；
ｉｎｃｒＥ＝５１０；
ｉｎｃｒＮＥ＝５１２−２＊ｌｅｎｇｔｈ；
ｒａｍｐ−０；
ｆｏｒ（ｉ＝０；ｉ（ｌｅｎｇｔｈ；ｉ＋＋）
｛
ｉｆ ｄ（＝０ ｔｈｅｎ
ｄ＋＝ｉｎｃｒＥ；
ｅｌｓｅ｛
ｄ＋＝ｉｎｃｒＮＥ；
ｒａｍｐ＋＋；
｝
｝
｝
その後、ランプからブランドを生成するために次の式が使われる。
【０４３１】
Ｂｌｅｎｄ＝（（ｅｎｄ−ｓｔａｒｔ）ｘ ｒａｍｐ／２５５）＋ｓｔａ
ｒｔ
２５５による割算に対して切り捨てが行われる。上記式は、２つの加算器と、各チャンネルのランプによって（ｅｎｄ−ｓｔａｒｔに対し）“プレ乗算”を行なうブロックとを必要とする。主データパス部２４２が行なうことのできる他の画像処理は、一般色空間変換である。一般化色空間変換（ＧＣＳＣ）は出力カラー値を求めるためにピースワイズトライーリニア（３次線形）補間を用いる。３次元の入力空間から１次元もしくは４次元出力空間への変換が行なわれるのが望ましい。
【０４３２】
いくつかの場合においては、色域のエッジにおけるトライーリニア補間の正確さが問題になる。この問題はエッジ付近に対して敏感なプリントデバイスにおいて著しくなる。この問題を避けるためにＧＣＳＣは、選択的に拡張出力色空間において計算されることができ、次の式を用いて適当な範囲内にスケール及びクランプされる。
【０４３３】
2005348410.tif 000046
好適な実施例が実行できるその他の画像処理には、画像変換および畳込み演算である。画像変換においてソース画像はスケール、回転、スキューされる。畳込み演算において、ソース画像のピクセルは畳込み行列をもってサンプリングされ、目的画像を生成する。目的画像におけるスキャンラインを生成するためには次の段階が必要である。
【０４３４】
１）図１３５に示すような目的画像のスキャンラインを逆変換する。これによって目的画像のスキャンラインを生成するに必要なソース画像のピクセルを識別することができる。
２）ソース画像の必要部分を解凍する。
３）目的画像の水平、垂直サブサンプリング距離、開始ｘ，ｙ座標をソース画像に逆変換する。
【０４３５】
４）上記情報を処理部に伝送し、必要なサブサンプリングと補間を行ない、出力画像のピクセルを求める。
サブサンプリング、補間、目的ピクセルの書き込みなどは好適な実施例によって行なわれ、ソース画像における関連する部分、使うべきサブサンプリング周波数などの計算はホストアプリケーションによって行なわれる。
【０４３６】
図１３６は目的ピクセル値の計算において必要な段階のブロック図である。図１３６は必要なソース画像のピクセルが利用可能であるものと想定している。目的ピクセルを計算する最後の段階は、ソース画像から２次線形補間された全てのサブサンプルを合算することである。主データパス部２４２における適当な設定によって引き出される画像変換エンジンのブロック図を図１３７に示す。画像変換エンジン１８３０はアドレス生成部１８３１、プレ乗算部１８３２、補間部１８３３、累算部１８３４、切捨て、クランプ、絶対値を求める論理部１８３５からなる。
【０４３７】
アドレス生成部１８３１は、結果ピクセルを構成するのに必要なソース画像のｘ，ｙ軸を生成する。また、これは入力インデックステーブル１８１５と画像１８１０のピクセルからインデックスオフセットを求めるためのアドレスを生成する。アドレス生成部１８３１がソース画像のｘ，ｙ軸を生成する前にカーネルディスクリプタを読む。カーネルディスクリプタのフォーマットには２つの種類があり、それを図１３８に示す。カーネルディスクリプタは、
１）ソース画像の開始座標（符号なしの固定小数点、２４．２４精度）。位置（０、０）は画像の左上端である。
【０４３８】
２）水平、垂直のサブサンプルデルタ（２の補数、２４．２４精度）
３）固定小数点行列係数における２進小数点の位置を示す３ビットのｂｐフィールド。図１５０はｂｐフィールドの定義とその説明を示す。
４）累算行列係数。これは２０個の２進位置（２の補数）を持つ”可変”小数点精度のものであり、２進小数点の位置はｂｐフィールドにより暗黙的に規定される。
【０４３９】
５）カーネルディスクリプタのワードの残り個数を示すｒｌフィールド。この値は行の個数と（列の個数−１）とを掛けたものと同じである。
短いカーネルディスクリプタにおいて、ｘの開始座標の定数部を除いた他のパラメータは次のような値を持つ。
ｘの開始座標の分数 ＜ −０，
ｙの開始座標 ＜ −０，
水平デルタ ＜ −１．０，
垂直デルタ ＜ −１．０．
アドレス生成部１８３１が構成された後、現座標を計算する。これにはサブサンプル行列の次元に応じて２つの方法がある。サブサンプル行列の次元が１×１である場合、アドレス生成部１８３１は十分な座標が得られるまで水平デルタを現座標に加える。
【０４４０】
サブサンプル行列の次元が１×１でない場合、アドレス生成部１８３１は行列の１つの行が終るまで水平デルタを現座標に加える。その後、アドレス生成部１８３１は次の行の座標を求めるために垂直デルタを現座標に加える。アドレス生成部１８３１は次の座標を求めるため、１つ以上の列が終るまで現座標から水平デルタを引く。その後、アドレス生成部１８３１は垂直デルタを現座標に加え、そしてこの過程を繰り返す。図１５０の上端におけるダイアグラムは行列へのアクセス方法を示す。この構造を用いて、行列はジグザグでスキャンされ、この方法によって現在のｘ，ｙ軸が計算されるので、必要なレジスタ数は少なくてもよい。累算行列係数はカーネルディスクリプタにおいて同様な順序で並べなければならない。
【０４４１】
現座標を生成した後、アドレス生成部１８３１はインデックステーブルのアドレスを求めるため、ｙ軸をインデックステーブルベースアドレスに加える（ソースピクセルが補間されている場合、アドレス生成部１８３１は次のインデックステーブルも求める必要がある）。インデックステーブルベースアドレスは（ｙ＋０）におけるインデックステーブルエントリを指す。インデックステーブルからインデックスオフセットを求めた後、アドレス生成部１８３１はそれをｘ座標に加える。この和は、ソース画像から１ピクセルを求めるときに用いられる（ソースピクセルが補間されている場合は２ピクセル）。ソースピクセルが補間されている場合、アドレス生成部１８３１はｘ座標を次のインデックスオフセットに加え、２以上のピクセルを得る。
【０４４２】
画像変換の座標を求めるとき、畳込み演算においても類似な手法を使う。畳込み演算との唯一の差異は、畳込み演算は次の出力ピクセルにおける行列の開始座標が前ピクセルにおける行列の開始座標から水平デルタだけ離れていることである。画像変換において、次のピクセルにおける行列の開始座標は、以前の出力ピクセルにおける行列の右上端ピクセルの座標から水平デルタだけ離れている。
【０４４３】
図１３９において、中段のダイアグラムは上記の差を示す。プレ乗算部１８３２は必要であればピクセルのカラーチャネルと不透明チャネルを掛ける。補間部１８３２は必要なピクセルの真の色を求めるためソースピクセルを補間する。これはソース画像メモリから２ピクセルを取り、現在のｘ座標の分数部分を用いて補間し、その結果をレジスタに入力する。その後、ソース画像メモリの次の列の２ピクセルを取り、同じくｘの分数を用いて補間する。その後、補間部１８３３は現在のｙ座標の分数部を用いて、この補間値とその前の補間値を補間する。
【０４４４】
累算部１８３４は２つの作業をする。
１）行列係数とピクセルを掛ける。
２）全ての行列に対する上の結果を累算した値を次のステージに出力する。累算部１８３４の初期値は、チャネルに応じて、０もしくは特定の値に初期化される。
【０４４５】
ブロック１８３５は累算部１８３４の出力を切り捨て、必要であればアンダーフローやオーバーフローした値を最大値または最小値に制限する。そして、必要であれば出力の絶対値を求めることもある。累算部の出力において２進小数点の位置はカーネルディスクリプタのｂｐフィールドによって指定される。ｂｐフィールドは、累算結果において捨てるべきビットの数を示す。これは、図１３９における下端のダイアグラムに示されている。この累算値は符号ありの２の補数として扱われる。
【０４４６】
主データパス部２４２が行えるもう１つの画像処理動作は行列乗算である。行列乗算は２つの空間の間でアフィン関係がある場合の色空間変換に使われる。これが、（３次線形補間に基づく）一般色空間変換との差異である。行列乗算の結果は次の式によって定義される。
【０４４７】
【数７】
2005348410.tif 000047
【０４４８】
ここで、ｒｉは結果ピクセルであり、ａｉはＡオペランドピクセルである。行列のサイズは５列４行でなければならない。図１４０は、主データパス部２４２において行列乗算を行なう乗算−加算器のブロック図である。この中にはピクセルチャンネルに行列係数を掛ける乗算部、その結果を合算する加算器、必要に応じて出力値をクランプしそして絶対値を求める論理部からなる。
【０４４９】
行列乗算が終了するためには２クロックサイクルが必要である。各サイクルごとに多重化部を設定し、乗算部と加算部のデータが正しく選択されるようにする。第０サイクルにおいて、ピクセルの最下位２バイトが多重化部１８５１、１８５２によって選択される。次にその係数を行列の左側における２つの列、即ち、キャッシュにおける第０ラインにある行列係数に掛ける。
【０４５０】
第１サイクルにおいて、ピクセルのより上位２バイトがトップ多重化部によって選択される。次にその係数を行列の右側における２つの列に掛ける。乗算の結果は最終サイクルの結果に加えられる１８５４。加算部における和は８ビットに切り捨てられる１８５５。“オペランド論理部”１８５６は、加算部１８５４の入力が４つになるように乗算部出力を再配列する。これは乗算部の結果に対する加算を可能にするための再配列を行い、２４ビット係数と８ビットピクセル成分との正しい積を出力するようにする。
【０４５１】
“ＡＣ論理部”１８５５は加算部の出力の最下位１２ビットを切捨て、設定に従い切り捨てられた結果の絶対値を求める。その後、設定に応じて、その結果をクランプまたはラップする。“ＡＣ論理部”がクランプするように設定されたとき、０以下の全ての値は０に、２５５以上の全ての値は２５５に抑えられる。“ＡＣ論理部”がラップするように設定されたとき、定数部分の下位８ビットが出力される。
【０４５２】
主データパス部２４２は、上記以外の画像処理を行なうように設定されることもできる。設計再利用によってコストが低減されるとともに、様々な画像処理動作を早く行なうことのできるコンピュータアーキテクチャについて以下述べるようにする。なお、このコンピュータアーキテクチャは柔軟性をもっているため、外部プログラミングエージェントであってもそのアーキテクチャにさえ慣れていれば、元々予測しなかった画像処理動作をも実行できるようにコンピュータを構成することができる。また、設計のコアーは主にいくつかの多機能ブロックからなるため、設計の苦労を著しく減らすことができる。
【０４５３】
３．１８．６ データキャッシュ制御部とキャッシュ
データキャッシュ制御部２４０は、コプロセッサ２２４における４キロバイトの読み出しデータキャッシュ２３０を備えている。データキャッシュ２３０はダイレクトマップＲＡＭキャッシュとして配列されており、外部メモリにおける同じ長さを持つラインのいずれも、キャッシューメモリ２３０（図２）における同じ長さの同じラインに直接マッピングされることができる。キャッシュメモリにおけるこのラインを普通キャッシュラインと呼び、上記キャッシュメモリは、多数のこのようなキャッシュラインからなる。
【０４５４】
データキャッシュ制御部２４０は２つのオペランドオーガナイザ２４７、２４８からのデータ要求をサービスする。まずデータがキャッシュ２３０に存在するかを確認する。そうでなければデータが外部メモリからフェッチされる。データキャッシュ制御部２４０にはプログラムのできるアドレス生成部があり、データキャッシュ制御部２４０がいくつかの異なるアドレッシングモードで動作するのを可能にする。また、要求されたデータのアドレスがデータキャッシュ制御部２４０によって作られるようになる特殊アドレシングモードもある。このモードでは８ワード（２５６ビット）までのデータをオペレーションオーガナイザ２４７、２４８に同時に送ることができる。
【０４５５】
キャッシュＲＡＭは８つの独立してアドレス可能なメモリバンクからなる（異なるラインアドレスによってアドレスされた）。各々のバンクからのデータが２５６ビットに単位付けられる一部の特殊アドレシングモードに必要である。この配置は、お互いに異なるバンクから来たものであれば、８つの３２ビット要求までを同時にサービスすることができる。
【０４５６】
キャッシュは、詳細に後述する以下のモードにおいて動作する。必要であれば、すべてのキャッシュが自動的に入れ込まれるようにすることも可能である。１．ノーマルモード
２．単一出力一般色空間変換モード
３．多出力一般色空間変換モード
４．ＪＰＥＧ符号化モード
５．低速ＪＰＥＧ復号モード
６．行列乗算モード
７．デスエーブルモード
８．無効化モード
図１４１は、図２におけるデータキャッシュ制御部２４０のアドレス、データ、制御フローとデータキャッシュ２３０とを示す。
【０４５７】
データキャッシュ２３０は、前述したダイレクトマップキャッシュを具備する。データキャッシュ制御部２４０は、各キャッシュラインにおけるタグエントリを有するタグメモリ１８７２を具備しており、タグエントリはキャッシュラインが現在マップされている外部メモリアドレスの最上位部を有する。また、現在のキャッシュラインが有効であるかどうかを示すライン有効状態メモリ１８７３も備える。全てのキャッシュラインの初期状態は無効である。
【０４５８】
データキャッシュ制御部２４０は、オペランドオーガナイザＣ２４７（図２）とオペランドオーガナイザＣ２４８（図２）からのデータ要求をオペランドバスインターフェースを通じて同時にサービスできる。動作において、オペランドオーガナイザ２４７、２４８（図２）のどちらかの一方もしくは両方はインデックス１８７４を提供し、データ要求信号１８７６を出す。アドレス生成部１８８１はインデックス１８７４に対して１つもしくはそれ以上の完全な外部アドレス１８７７を生成する。キャッシュ制御部１８７８は、生成されたアドレス１８７７のタグアドレスに対するタグメモリ１８７２を検査するとともに、関連するキャッシュラインが有効であるかどうかを調べるためにライン有効状態メモリ１８７３を検査することにより、要求されたデータがキャッシュ２３０に存在するかどうかを判断する。要求されたデータがキャッシュメモリ２３０に存在するとき、要求データ１８８０と共に、アクノレッジメント（応答）信号１８７９が関連するオペレーションオーガナイザ２４７、２４８に送られる。要求されたデータがキャッシュメモリ２３０に存在しないとき、入力バスインターフェース１８７１と入力インターフェーススイッチ２５２（図２）を通じて、要求されたデータ１８７０が外部メモリからフェッチされる。データ１８７０は要求信号１８８２を出力し、要求されたデータ１８７０が生成されたアドレス１８７７を提供することによってフェッチされる。アクノリッジ信号１８８３及び要求されたデータ１８７０はそれぞれキャッシュ制御部１８７８及びキャッシュメモリ２３０に送られる。それから、そのキャッシュメモリ２３０に関連するキャッシュラインが新しいデータ１８７０によって更新される。新しいキャッシュラインのタグアドレスもタグメモリ１８７２に書き込まれ、新しいキャッシュラインにおけるライン有効状態１８７３が起動される。アクノリッジ信号１８７９はデータ１８７０とともに関連するオペランドオーガナイザ２４７又は２４８（図２）に送られる。
【０４５９】
図１４２において、データキャッシュ２３０のメモリ構成を示す。データキャッシュ２３０は、キャッシュライン長が３２である１２８個のキャッシュラインＣ０，．．．，Ｃ１２７をもつダイレクトマップキャッシュとして整理される。キャッシュＲＡＭは別々のアドレス指定のできるメモリバンクＢ０，．．．，Ｂ７を具備しており、各メモリバンクは３２ビットのバンクライン１２８個のを持ち、各キャッシュラインＣｉは８つのメモリバンクＢ０，．．．Ｂ７において相当する８つのバンクラインＢ０ｉ，．．．，Ｂ７ｉを有する。
【０４６０】
生成された外部メモリアドレスの構成を図１４３に示す。生成されたアドレスは２０ビットタグアドレス、７ビットラインアドレス、３ビットバンクアドレス、２ビットバイトアドレスからなる３２ビットのワードである。２０ビットタグアドレスはタグアドレスとタグメモリ１８７２に記憶されているタグと比較するのに使われる。７ビットラインアドレスはキャッシュメモリ１８７０にある関連するキャッシュラインのアドレスに使われる。３ビットバンクアドレスはキャッシュメモリ１８７０のメ関連するモリバンクのアドレスに使われる。２ビットバイトアドレスは３２ビットバンクラインの関連するバイトのアドレスに使われる。
【０４６１】
図１４４は、データキャッシュ制御部２４０とデータキャッシュ２３０の構造のブロック図を示す。ここで、１２８×２５６ビットＲＡＭはキャッシュメモリ２３０を構成し、これは８つの１２８×３２ビットの分離住所付けが可能なメモリバンクからなる。このＲＡＭは書き込み可能ポート（ｗｒｉｔｅ）、書き込みアドレスポート（ｗｒｉｔｅ＿ａｄｄｒ）、書き込みデータポート（ｗｒｉｔｅ＿ｄａｔａ）を持つ。また、読み可能ポート（ｒｅａｄ）、８つの読みアドレスポート（ｒｅａｄ＿ａｄｄｒ）、８つの読みデータ出力ポート（ｒｅａｄ＿ｄａｔａ）を持つ。キャッシュメモリ２３０の全てのメモリバンクへの同時書き込みを可能にさせるためキャッシュ制御ブロック１８７８から書き込み可能信号が生成される。必要によって、データキャッシュ２３０は書き込みデータポート（ｗｒｉｔｅ＿ｄａｔａ）を通じて外部メモリからの１もしくはそれ以上のラインのデータに更新される。書き込みアドレスポート（ｗｒｉｔｅ＿ａｄｄｒ）にラインアドレスを提供し、８：１多重化器ＭＵＸを利用することによって１ラインのデータが書き込まれる。８：１多重化器ＭＵＸはデータキャッシュ制御部（ａｄｄｒ＿ｓｅｌｅｃｔ）の制御の下で生成された外部アドレスからラインアドレスを選択する。キャッシュメモリ２３０の全てのメモリバンクへの同時読み込みを可能にさせるため、キャッシュ制御ブロック１８７８から読み可能信号が生成される。この方法で、キャッシュメモリ２３０のメモリバンクの８つの書きアドレスポート（ｒｅａｄ＿ａｄｄｒ）に提供される各々のラインアドレスに応じて、８つの読みデータポート（ｒｅａｄ＿ｄａｔａ）から８つの異なるバンクラインのデータを同時に読み込むことができる。
【０４６２】
各々のキャッシュメモリ２３０のバンクはプログラム可能アドレス生成器１８８１を持っている。これは違う８つの位置への、関連する８つのメモリバンクからの同時アクセスを可能にする。各々のアドレス生成器１８８１はアドレス生成器１８８１の作動モード設定のためのｄｃｃモード入力、インデックスパケット入力、ベースアドレス入力、アドレス出力を持つ。プログラム可能アドレス生成器１８８１の作動モードは、
（ａ）ｄｃｃモード入力への信号が各々のアドレス生成器１８８１をランダムアクセスモードにし、外部メモリアドレスがインデックスパケット入力へ提供され、一つもしくはそれ以上のアドレス生成器１８８１のアドレス出力に出力されるランダムアクセスモード；
（ｂ）ｄｃｃモード入力への信号が各々のアドレス生成器１８８１を適切なモードにするＪＰＥＧエンコーディングと復号、色空間変換、行列乗算モード。このモードでは、各々のアドレス生成器１８８１にはインデックスパケット入力へのインデックスが入力され、インデックスアドレスを生成する。作動モードによって、アドレス生成部は最大８つの異なる外部メモリアドレスを生成させることができる。
【０４６３】
８つのアドレス生成部１８８１は８つの異なる論理回路からなっており、各々は入力としてベースアドレス、出力として外部メモリアドレスを持つｄｃｃモードとインデックスからなる。ベースアドレスレジスタ１８８５はインデックスパケットの組合せである現在のベースアドレスを記憶し、ｄｃｃモードレジスタ１８８８はデータキャッシュ制御部２４０の現在の作動モード（ｄｃｃモード）を記憶する。
【０４６４】
タグメモリ１８７２は１ブロック、１２８×２０ビットのマルチポートＲＡＭで構成される。このＲＡＭは１つの書きポート（ｕｐｄａｔｅ−ｌｉｎｅ−ａｄｄｒ）、１つの書き可能ポート（ｗｒｉｔｅ）、８つの読みポート（ｔａｇ０＿ｄａｔａ，．．．，ｔａｇ７＿ｄａｔａ）を持っている。これは、８つのアドレス生成器１８８１が現在記憶されている、１つもしくはそれ以上に生成されたメモリアドレスの、ラインのタグアドレスを決定することによりポート（ｒｅａｄ０ｌｉｎｅ−ａｄｄｒ，．．．，ｒｅａｄ７ｌｉｎｅ−ａｄｄｒ）において８つの同時のルックアップを可能にする。これらラインの現在のタグアドレスはポート（ｔａｇ０−ｄａｔａ，．．．，ｔａｇ７−ｄａｔａ）からタグ比較部１８８６に出力される。ポート（ｕｐｄａｔｅ−ｌｉｎｅ−ａｄｄｒ）のタグメモリ１８７２への書き込みを可能にするため、必要によって、キャッシュ制御ブロック１８７２によりタグ書き信号は生成される。
【０４６５】
１２８ビットのラインｖａｌｉｄメモリ１８７３は、キャッシュメモリ２３０の各キャッシュラインのｖａｌｉｄ状態を保っている。これは１つの書きポート（ｕｐｄａｔｅ−ｌｉｎｅ−ａｄｄｒ）、１つの書き可能ポート（ｕｐｄａｔｅ）、８つの読み込みポート（ｒｅａｄ０ｌｉｎｅ−ａｄｄｒ，．．．，ｒｅａｄ７ｌｉｎｅ−ａｄｄｒ）、８つの読み可能ポート（ｌｉｎｅｖａｌｉｄ０，．．．，ｌｉｎｅｖａｌｉｄ７）からなる１２８×１ビットのメモリである。タグメモリと同じように、これは８つのアドレス生成部１８８１に、１つ若しくはそれ以上に生成されたメモリアドレスの個々のラインアドレスに対して、現在のラインにセーブされているラインｖａｌｉｄ状態を決定させることにより、ポート（ｒｅａｄ０ｌｉｎｅ−ａｄｄｒ，．．．，ｒｅａｄ７ｌｉｎｅ−ａｄｄｒ）に対しての８つの同時ルックアップを可能にする。このラインの現ラインｖａｌｉｄｅビットはポート（ｌｉｎｅｖａｌｉｄ０，．．．，ｌｉｎｅｖａｌｉｄ７）からタグ比較部１８８６に出力される。必要によっては、ラインｖａｌｉｄ状態メモリ１８７３の書きポートに、ポート（ｕｐｄａｔｅ−ｌｉｎｅ−ａｄｄｒ）からラインｖａｌｉｄ状態メモリ１８７３への書き込みを可能にするための書き信号がキャッシュ制御ブロック１８７８から生成する。
【０４６６】
タグ比較部１８８６は８つのタグ比較器からなっており、現在生成された外部アドレスのラインアドレスによってアクセスされるラインのタグメモリ１８７２に現在セーブされているタグアドレスを受け取るためのｔａｇ＿ｄａｔａ入力、現在生成された外部メモリアドレスのタグアドレス受け取るためのｔａｇ＿ａｄｄｒ入力、比較されるタグアドレス部を設定するための現動作モード信号（ｄｃｃ＿ｍｏｄｅ）を受け取るためのｄｃｃ＿ｉｎｐｕｔ、現在生成された外部アドレスのラインアドレスによってアクセスされるラインにあるラインｖａｌｉｄ状態メモリ１８７３に現在セーブされているラインｖａｌｉｄ状態を受け取るためのｌｉｎｅ＿ｖａｌｉｄ入力を持っている。比較部１８８６は８つのアドレス生成部１８８１それぞれに対して８つのｈｉｔ出力を持つ。生成された外部メモリアドレスのタグアドレスと、生成された外部メモリのラインアドレスによってアクセスされる位置にあるタグメモリ１８７２の内容とが一致する時、ｈｉｔ信号とそのラインへのラインｖａｌｉｄ状態ビット１８７３が出力される。この実施例では、外部メモリにセーブされているデータ構造は小さくなり、タグアドレスの最上位ビットが全て同じである。従って、タグアドレスの変化する最下位ビットだけを比較すれば良い。これはタグ比較部１８６６がタグアドレスの変化する最下位ビットを比較するよう現作動モード信号（ｄｃｃ＿ｍｏｄｅ）を設定することで可能になる。
【０４６７】
キャッシュ制御部１８７８はキャッシュメモリ２３０にあるデータへのアクセスが可能なとき、オペランドＢ２４７、オペランドＣ２４８からの要求（ｐｒｏｃ＿ｒｅｑ）と通知（ｐｒｏｃ＿ａｃｋ）を受け取る。動作モードによっては、キャッシュメモリ２３０の８つまでのバンクから異なるアドレスのデータが要求される。要求データがキャッシュメモリ２３０からアクセスできる時、タグ比較部１８８６からそのメモリのラインにヒットを出す。出されたヒット信号（ｈｉｔ０，．．．，ｈｉｔ７）に対して、キャッシュ制御部１８７８はポート（ｃａｃｈｅ＿ｒｅａｄ）に読み込み可能信号を生成し、ヒット信号が出されたキャッシュラインへの読み込みを可能にする。ヒット信号（ｈｉｔ０，．．．，ｈｉｔ７）ではなく要求（ｐｒｏｃ＿ｒｅｑ）１８７６が出された時には、生成された要求（ｅｘｔ＿ｒｅｑ）と供にデータのキャッシュラインの外部メモリアドレスが外部メモリに送られる。このキャッシュラインは入力（ｅｘｔ＿ｄａｔａ）が可能な時、それを通じてキャッシュメモリ２３０の８つのバンクに書き込まれる。この場合、タグ情報もラインアドレスのタグメモリ１８８６に書き込まれ、そのラインのライン状態ビット１８７３が出力される。
【０４６８】
キャッシュメモリ２３０の８つのバンクからのデータは、データオーガナイザ１８９２にあるいくつかの多重化器を通じて出力され、所定の方法で出力データパケット１８９４に位置付けられる。ある動作モードでデータオーガナイザ１８９２は、現動作モード信号（ｄｃｃ＿ｍｏｄｅ）と生成された外部メモリアドレスのバイトアドレス（ｂｙｔｅ＿ａｄｄｒ）を用いる事によって、８つのメモリバンクから出力された８つの３２ビットワードから８ビットワードを選択、出力することができる。他のモードでデータオーガナイザ１８９２は、８つのメモリバンクから出力された８つの３２ビットワードを直接出力する。前述した通り、データオーガナイザはこのデータを決められた方式に整列し出力する。
【０４６９】
要求は次の段階で行われる。
１）プロセッシングユニットはキャッシュ制御部１８７８にあるプロセッシングユニットインターフェースにアドレスを送りパケットデータを要求する。
２）８つのアドレス生成ユニット１８８１は動作モードに従い、キャッシュメモリの各ブロックのアドレスを生成する。
【０４７０】
３）生成されたアドレスのタグ位置は３ポートのタグメモリ１８８６の４ブロックにセーブされているタグアドレスと比較され、８つの生成されたアドレスに相当するライン部によって位置づけられる。
４）それらが一致し、そのラインのラインｖａｌｉｄ状態１８７３が出されたら、要求されたデータはキャッシュメモリ２３０に存在するとみなされる。
【０４７１】
５）存在しないデータは外部バス１８９０を介してフェッチされ、キャッシュメモリ２３０の８つのブロックはその外部メモリからのデータラインの内容に更新される。新しいデータのタグアドレスはタグメモリ１８８６に書き込まれ、そのラインのラインｖａｌｉｄ状態１８７３が出される。
６）全ての要求データがキャッシュメモリ２３０に存在すれば、それは決められたパケット形式でプロセッシングユニットに現れる。
【０４７２】
前述した通り、コプロセッサ２２４の全ての部分（図２）は標準ＣＢｕｓインターフェース３０３（図２０）を含めている。データキャッシュ制御部２４０とキャッシュ２３０の標準ＣＢｕｓインターフェースレジスタの詳細は、付録ＢのＢ４２からＢ４６までに記載されている。このレジスタの設定はデータ制御部２４０の作動を制御する。簡単のため、２つのレジスタ（ｂａｓｅ＿ａｄｄｒｅｓｓとｂｃｃ＿ｍｏｄｅ）だけを図１５３に示す。
【０４７３】
データキャッシュ制御部２４０とデータキャッシュ２３０が有効ならば、データキャッシュ制御部は最初全てのキャッシュラインを無効にして標準モードで動作する。ある命令の終わりには、データキャッシュ制御部２４０とキャッシュ２３０はいつも標準動作モードに切り替わる。”Ｉｎｖａｌｉｄａｔｅ”モードを除いた全てのモードには”Ａｕｔｏ−ｆｉｌｌ ａｎｄ ｖａｌｉｄａｔｅ”と言うオプションがある。ｄｃｃ＿ｃｆｇ２レジスタに１ビットをセットすることにより、全てのキャッシュをｂａｓｅ＿ａｄｄｒｅｓｓレジスタにセーブされているアドレスから始めることができる。この動作の間、オペランドオーガナイザＢ、Ｃ２４７，２４８からのデータ要求は中止される。キャッシュはこの動作が終わった後に有効になる。
ａ．標準キャッシュモード
このモードでは、２つのオペランドオーガナイザにより要求データの外部メモリアドレスが提供される。アドレス生成部１８８１が外部メモリアドレスを出力し、内部タグメモリを用いてそれがメモリキャッシュ２３０に存在するのかを確かめる。両方の要求データがキャッシュ２３０に存在しない場合、入力インターフェーススイッチ２５２からデータが要求される。持続的かつ同時的要求に構えてラウンド・ロビンスケジューリングが採用される。
【０４７４】
同時的な要求に対し、１つのデータアイテムがキャッシュに存在すれば、それは要求したデータバスの後ろの３２ビットに位置するようになる。他のデータは入力インターフェーススイッチを通じて外部に要求される。
ｂ．シングル出力一般色空間変換モード
このモードでは、要求はオペランドオーガナイザ部Ｂから１２ビットバイトのアドレス形式で出される。図６０に示されている様に、要求データアイテムは８ビットカラー出力値である。１２ビットアドレスはアドレス生成部１８８１のｉｎｄｅｘ＿ｐａｃｋｅｔ入力に入力され、８つのアドレス生成部１８８１は図９６に示される形式の３２ビット外部メモリアドレスを生成する。この生成されたアドレスのバンク、ライン、バイトアドレスは表１２と図６１によって決められる。外部メモリアドレスは、８つの９ビットラインとバイトアドレスとして解釈され、それはＲＡＭの８つのバンクのバイトを指すために使われる。キャッシュは補間のため主データパス２４２によりオペランドオーガナイザ部に、図６０に示された前述の原理で戻されたバンクの８バイト値を求めるためにアクセスされる。全てのシングル出力一般カラー値テーブルはキャッシュメモリ２３０に収まるため、シングルカラー変換モードを適用する前にシングル出力カラー値テーブルをキャッシュメモリ２３０にロードするのが望ましい。
ｃ．マルチ出力一般色空間変換モード
このモードでは、１２ビットワードアドレスがオペランドオーガナイザ部Ｂ２４７から受けられる。要求データアイテムは図６２を参照して前述した３２ビットカラー出力値である。１２ビットアドレスはアドレス生成部１８８１のｉｎｄｅｘ＿ｐａｃｋｅｔ入力に入力され、８つのアドレス生成部１８８１は、図９６に示される形式の８つの異なる３２ビット外部メモリアドレスを作る。外部メモリアドレスのラインとタグアドレスは、表１２と図６３によって決定される。外部メモリアドレスは、図６３を参照して前述したように、７ビットラインアドレスと２ビットタグアドレスに分けられる９ビットアドレスを有する８個の９ビットアドレスとして解釈される。タグアドレスが発見されなかった場合、入力インターフェーススイッチ２５２（図２）から適切なデータがロードされるまでキャッシュは停止する。データが利用可能な場合、出力データはオペランドオーガナイザ部に出力される。
ｄ．ＪＰＥＧ符号化モード
このモードでは、ＪＰＥＧ符号化モードに必要なテーブルなどがキャッシュＲＡＭのバンクにセーブされる。テーブルの記憶についてはＪＰＥＧ符号化モード（表１４、１６）のところに述べられている。
ｅ．低速ＪＰＥＧ復号モード
このモードでは、データは表１７に従って生成される。
ｆ．行列乗算モード
このモードでは、キャッシュは２５６バイトラインのデータにアクセスするために使われる。
ｇ．Ｄｉｓａｂｌｅｄモード
このモードでは、全ての要求は入力インターフェーススイッチ２５２にパスされる。
ｈ．Ｉｎｖａｌｉｄａｔｅ（無効化）モード
このモードでは、ラインｖａｌｉｄ状態ビットをクリアすることにより、全てのキャッシュの内容が無効にされる。
【０４７５】
３．１８．７ 入力インターフェーススイッチ
図２で、入力インターフェーススイッチはピクセルオーガナイザ部２４６、データキャッシュ制御部２４０、命令制御部２３５からの要求データを調節する投割を果たす。またこれは外部インターフェース制御部２３８とローカルメモリ制御部２３６に必要なアドレスとデータを伝送する。
【０４７６】
入力インターフェーススイッチ２５２はベースアドレス若しくはホストメモリマップにあるメモリオブジェクトのいずれかのレジスタにその設定を保存する。２０個のアドレスビットが必要なため、これはページ境界に整列されるバーチュアルアドレスである。ピクセルオーガナイザ部、データキャッシュ制御部、命令制御部からの要求に対して、入力インターフェーススイッチ２５２は、まずデータの開始アドレスの上位６ビットからコプロセッサのベースアドレスビットを減じる。この結果が負であるか、この結果の上位６ビットが０ではない場合はＰＣＩバスが望ましい伝送先であることを意味する。
【０４７７】
結果の上位６ビットが０である場合は、データマップがコプロセッサのメモリ位置を現すことを意味する。その後、入力インターフェーススイッチはコプロセッサの位置が正しいか否かを判別するため次の３ビットを検査する。コプロセッサの正当な位置は、
１）コプロセッサのベースアドレスからオフセット０ｘ０１００００００から始まる一般インターフェースが占める１６メガバイト。
【０４７８】
２）コプロセッサのメモリオブジェクトのベースアドレスからオフセット０ｘ０２００００００から始まるローカルメモリ制御部（ＬＭＣ）が占める３２メガバイト。不当なコプロセッサの位置を指す要求は、入力インターフェーススイッチによりエラーと見なされる。ＰＣＩバスはコプロセッサのメモリオブジェクトが占める領域以外のアドレスのデータソースとなる。入力インターフェーススイッチは要求データがＰＣＩバスからのものなのか、それとも一般インターフェースからのものかをＥＩＣに知らせるためｉソース信号を用いる。
【０４７９】
アドレス復号処理の後、正当な要求は適切なＩＢｕｓインターフェースに伝送される。ＥＩＣとＬＭＣはｉ−ａｃｋ信号が出された時、入力インターフェーススイッチにデータを伝送する。しかし入力インターフェーススイッチは入力されるワード数をカウントしないので、現在のデータ伝送がいつ終わるのかを、ピクセルオーガナイザ部により制御されるｉ−ｏｅ信号、命令制御部、データキャッシュ制御部が監視すなければならない。
【０４８０】
入力インターフェーススイッチ２５２はピクセルオーガナイザ部、データキャッシュ制御部、命令制御部の３つのモジュールを調節する。これらはデータを同時に要求することができるが、物理的な資源は２つしかないため、その要求は直に処理されない。入力インターフェーススイッチに使われる調節技術は優先権をベースにし、またプログラムも可能である。入力インターフェーススイッチの設定レジスタにある制御ビットは、命令制御部、データキャッシュ制御部、ピクセルオーガナイザ部の相対的優先権を指定する。優先権が低いモジュールからの要求は、その他の２つのモジュールからの同じ資源へのアクセス要求がない場合に受け入れられる。少なくとも２つの要求発行元に同じ優先順位が与えられると、要求が受付けられる発行元を決定するためにラウンドロビン技術を用いる必要が生じる。
【０４８１】
１つのソースに直ちにアクセスするのが不可能であるため、入力インターフェーススイッチは要求されたデータのアドレスとバースト長を記憶し、要求元から提供されたデータをプリフェッチするかどうかをみる必要がある。あるソースに対する処理の中で、ＩＢｕｓ処理がない場合には優先権を決める調整処理が必要になる。
【０４８２】
図１４５に命令インターフェーススイッチ２５２の詳細を示す。スイッチ２５２は標準ＣＢｕｓインターフェースとレジスタファイル８６０以外にアドレス復号器８６３と調節部８６４の間に２つのＩＢｕｓトランシーバ６６１を持つ。アドレス復号器８６３はピクセルオーガナイザ部、データキャッシュ制御部、命令制御部から受けた要求に対するアドレス復号をする。アドレス復号器８６３は、アドレスが正当なのかを検査する他、必要によってアドレスを再マッピングする。調節部８６４はどの要求をＩＢｕｓトランシーバ６６１からＩＢｕｓトランシーバ６６２に伝送するのかを決める。優先権はプログラム可能である。
【０４８３】
ＩＢｕｓトランシーバ８６１、８６２は、マルチプレクシングとデマルチプレクシング機能と、他のインターフェースから入力インターフェーススイッチへの通信を可能にするためのトライステートのバッファーリング機能を有している。
３．１８．８ ローカルメモリ制御部
図２において、ローカルメモリ制御部２３６は、ローカルメモリの制御及びローカルメモリとコプロセッサ内のモジュールとの間におけるアクセス要求の処理の全てを担当する。ローカルメモリ制御部２３６は、結果オーガナイザ２４９からの書き込み要求と入力インターフェーススイッチ２５２からの読み出し要求に応答する。更に、周辺インターフェース制御部２３７と通常の一般ＣＢｕｓ入力からの読み出しと書き込み要求に対しても応答する。ローカルメモリ制御部はプログラム可能なプライオリティシステムを用いており、更にスループットを最大化するためにＦＩＦＯバッファを採用している。
【０４８４】
本発明においては、ファーストイン・ファーストアウト（ＦＩＦＯ）バッファの他に、メモリアレイからポートをデカップルするためにマルチポートバーストダイナミックメモリ制御部が用いられている。図１４６は、本発明の第１の実施例に従い、４ポートバーストダイナミックメモリ制御部のブロック図を示している。この回路には、メモリアレイ１９１０へのアクセスを必要とする２つの書き込みポート（Ａ１９４４とＢ１９４６）と２つの読み出しポート（Ｃ１９４８とＤ１９５０）が含まれている。読み出しポート１９４８、１９５０のデータパスは別個のＦＩＦＯ１９３６、１９３８経由でメモリアレイ１９１０から出てくるのに対し、２つの書き込みポートからのデータパスは別個のＦＩＦＯ１９２０、１９２２を通り、多重化部１９１２経由でメモリアレイ１９１０に向かう。中央制御部１９３２は、ダイナミックメモリ１９１０へのインターフェースに必要な全てのコントロール信号を駆動すると共に全体のポートアクセスを調整する。リフレッシュカウンタ１９３４は、メモリアレイ１９１０のためにダイナミックメモリのリフレッシュサイクルの必要時期を決め、制御部１９３２と共にこれらを調整する。
【０４８５】
好ましくは、メモリアレイ１９１０に対するデータの読み出しと書き込みは、書き込みポート１９４４、１９４６からＦＩＦＯ１９２０、１９２２へ、或はＦＩＦＯ１９３６、１９３８から読み出しポート１９４８、１９５０への転送の２倍のレートで行われる。この結果、書き込みと読み出しポート１９４４、１９４６、１９４８、１９５０を通してデータを転送するのに要する時間に対し、メモリアレイ１９１０からの転送、又はメモリアレイ１９１０への転送に要する時間（いかなるメモリシステムのボトルネックである）を可能な限り短くするのである。
【０４８６】
データは、書き込みポート１９４４、１９４６のいずれかを経由してメモリアレイ１９１０に書き込まれる。書き込みポート１９４４、１９４６に接続された回路は、初期値ゼロのＦＩＦＯ１９２０、１９２２のみを認知する事になる。書き込みポート１９４４、１９４６を通してのデータ転送は、ＦＩＦＯ１９２０、１９２２が一杯になるか、又はバーストが終了するまでスムーズに進んでいく。データが最初にＦＩＦＯ１９２０、１９２２に書き込まれると、制御部１９３２はＤＲＡＭへのアクセスのための他のポートとの仲裁を行う。アクセスが得られると、データは最高レートでＦＩＦＯ１９２０、１９２２から読み出され、メモリアレイ１９１０に書き込まれる。ＤＲＡＭ１９１０へのバースト書き込みサイクルは、ＦＩＦＯ１９２０、１９２２にプリセットされた数のデータワードが貯えられた場合、又は書き込みポートからのバーストが終了した場合のみに開始される。いずれの場合においても、ＤＲＡＭ１９１０へのバーストは許可された時点から進み、ＦＩＦＯ１９２０、１９２２が空になるか、又はより高いプライオリティポートからのサイクル要求があるまで続く。いずれのイベントにおいてもデータは、ＦＩＦＯが充満するか、又は現在のバーストが終了し、新たなバーストが開始するまで、書き込みポートからＦＩＦＯ１９２０、１９２２へ邪魔されなく続けて書き込まれる。後者の場合、新しいバーストは、以前のバーストがＦＩＦＯ１９２０、１９２２を空にしてＤＲＡＭ１９１０に書き込まれるまでは進行されない。前者の場合には、最初のワードがＦＩＦＯ１９２０、１９２２から読み出されてＤＲＡＭ１９１０に書き込まれるや否やデータ転送が再開される。ＦＩＦＯ１９２０、１９２２からのデータ転送が最高レートであるため、書き込みポート１９４４、１９４６がストールするのは、制御部１８３２が他のポートからのサイクル要求で割り込みされた時のみ可能である。書き込みポート１９４４、１９４６からＦＩＦＯ１９２０、１９２２へのデータ転送に対するいかなる割り込みも、できるだけ最小に維持するのが望ましい。
【０４８７】
読み出しポート１９４８、１９５０は逆の順で動作する。読み出しポート１９４８、１９５０が読み出し要求を出すと、即刻、ＤＲＡＭサイクルが要求される。この要求に対する許可が得られるとメモリアレイ１９１０が読まれ、対応するＦＩＦＯ１９３６、１９３８にデータが書き込まれる。最初のデータワードがＦＩＦＯ１９３６、１９３８に書き込まれるやいなや、読み出しポート１９４８、１９５０による読み出しが可能になる。このように最初のデータワードを得るには初期遅延が存在するが、その後の連続するデータワードの獲得にはおそらくそれ以上の遅延は出て来ないのである。ＤＲＡＭの読み出しは、より高いプライオリティのＤＲＡＭ要求があるか、読み出しＦＩＦＯ１９３６、１９３８が一杯になった場合、或は読み出しポート１９４８、１９５０がそれ以上データを要求しなくなったら終了する。一旦このようにして読み出しが終了すると、ＦＩＦＯ１９３６、１９３８へプリセットされているデータワードの数に余裕ができるまで再開されない。一旦読み出しポートがサイクルを終了すると、ＦＩＦＯ１９３６、１９３８に残っているいかなるデータも廃棄される。
【０４８８】
常にＤＲＡＭコントロールが最小値を上回るようにするため、プリセットされている数のデータワードが全て転送されるまで（或は、対応するＦＩＦＯ１９２０、１９２２が空になるか、読み出しＦＩＦＯ１９３６、１９３８が一杯になるまで）バーストが割り込みされないようにＤＲＡＭアクセスへの再仲裁は制限される。全てのアクセスポート１９４４、１９４６、１９４８、１９５０はそれぞれに対応するバースト開始アドレスを持っており、これらはバーストの開始時にカウンタ１９４２にラッチされている。このカウンタはポートに対する取り引きのためのカレントアドレスを保持しており、例え転送が割り込みされても、いっでも正しいメモリアドレスで再開する事が可能である。現在アクティヴなＤＲＡＭサイクルのアドレスのみが多重化部１９４０により選択され、行アドレスカウンタ１９１６と列アドレスカウンタ１９１８に送られる。アドレスの低次Ｎビットは列カウンタ１９１８に入力され、一方の上位アドレスビットは行カウンタ１９１６へ入力される。多重化部１９１４は、ＤＲＡＭの行アドレスタイムの間には行カウンタ１９１６からメモリアレイ１９１０へ行アドレスを出力し、ＤＲＡＭの列アドレスタイムの間には列カウンタ１９１８から列アドレスを送る。行アドレスカウンタ１９１６と列アドレスカウンタ１９１８は、いかなるバーストの開始時においてもメモリアレイＤＲＡＭ１９１０へロードされる。これは、ポートサイクルの開始時と、割り込みされたバーストの継続時の両方に当てはまる事実である。列アドレスカウンタ１９１８は、それぞれのメモリへの転送が起きた後にインクリメントされ、行アドレスカウンタ１９１６は列アドレスカウンタ１９１８がゼロに変わるとインクリメントされる。後者の場合にはバーストが終了され、新たな行アドレスで再開されなければならない。
【０４８９】
本実施例では、メモリアレイ１９１０は４×８ビットバイトラインを含んでおり、ワード当たり３２ビットを構成すると仮定している。更に、それぞれの書き込みポート１９４４、１９４６に対応する４バイトの書き込みイネーブル信号のセット１９５０、１９５２があり、個別的にデータがメモリアレイ１９１０内のそれぞれの３２ビットデータワードのそれぞれの８ビット部分に書き込まれるようにする。メモリアレイ１９１０に書き込まれるそれぞれのワード内のいかなるバイトにデータの書き込みに対するマスクを任意にかける事が可能であるため、対応するＦＩＦＯ１９２６、１９２８にそれぞれのデータワードと共に書き込みイネーブル情報を貯えておく必要がある。これらのＦＩＦＯ１９２６、１９２８は書き込みＦＩＦＯ１９２０、１９２２のコントロールに用いられるのと同じ信号でコントロールされるが、ＦＩＦＯ１９２０、１９２２へのデータの書き込みに必要とされる３２ビットの代わりに４ビットのみが用いられる。同様に、多重化部１９３０は多重化部１９１２と同じようにコントロールされる。選択された書き込みイネーブルは、制御部１９３２へ入力され、制御部はこれらの情報を用い、多重化部１９１２によりメモリアレイ１９１０へ入力される書き込みデータと同期してメモリアレイ１９１０内のアドレスされたワードへの書き込みを選択的に可能又は不可能にする。
【０４９０】
図１４６の構成は制御部１９３２の制御下で動作する。図１４７は、図１４６において制御部１９３２の動作の詳細を示す状態図である。パワーアップの後とリセットの完了時に、状態器は強制的にＩＤＬＥ１００状態になり、この状態ですべてのＤＲＡＭコントロール信号がインアクティブ（ｈｉｇｈ）になり、多重化部１９１４は行アドレスをＤＲＡＭアレイ１９１０へ送る。リフレッシュまたはサイクル要求が検出されると、ＲＡＳＤＥＬ１１９６２状態へ遷移される。次のクロックエッジでサイクル要求とリフレッシュがなくなったら、状態器はＩＤＬＥ１９００状態に戻る。そうでないと、ＤＲＡＭ ｔＲＰ（ＲＡＳプリチャージタイミング制限）周期が満たされた時にＲＡＳＯＮ１９６６状態へ遷移され、この時、行アドレスストローブ信号ＲＡＳはローレベルになる。ｔＲＣＤ（ＲＡＳからＣＡＳへの遅延タイミング制限）が満たされた後、ＣＯＬ１９６８状態へ遷移され、ＤＲＡＭアレイ１９１０へ入力するための列アドレスを選択するように多重化部１９１４がスイッチされる。次のクロックエッジでＣＡＳＯＮ１９７０状態に遷移され、ＤＲＡＭ列アドレスストローブ（ＣＡＳ）信号がアクティブローになる。一旦、ｔＣＡＳ（ＣＡＳアクティヴタイミング制限）が満たされたら、ＣＡＳＯＦＦ１９７２状態へ遷移され、この状態でＤＲＡＭ列アドレスストローブ（ＣＡＳ）は再びインアクティヴハイになる。ここで、更なるデータワードが転送されることになっていると共に、より高いプライオリティのサイクル要求や、リフレッシュが差し迫ってないか、或は再仲裁するには速すぎる場合、それから一旦ｔＣＰ（ＣＡＳプリチャージタイミング制限）周期が満たされたらＣＡＳＯＮ１９７０状態へ復帰し、ＤＲＡＭ列アドレスストローブ（ＣＡＳ）は再びアクティヴローになる。もし更なるデータワードの転送がない、或は再仲裁が発生し、より高いプライオリティのサイクル要求や、リフレッシュが差し迫っている場合、ｔＲＡＳ（ＲＡＳアクティヴタイミング制限）とｔＣＰ（ＣＡＳプリチャージタイミング制限）が両方満たされたら、その代わりにＲＡＳＯＦＦ１９７４状態へ遷移される。この状態で、ＤＲＡＭ行アドレスストローブ（ＲＡＳ）信号はインアクティヴハイになる。次のクロックエッジで状態器はＩＤＬＥ１８６０状態に復帰し、次のサイクル開始を準備する。
【０４９１】
ＲＡＳＤＥＬ２ １９６４状態でリフレッシュ要求が検出されると、一旦ｔＲＰ（ＲＡＳプリチャージタイミング制限）が満たされたら、ＲＣＡＳＯＮ １９８０状態に遷移される。この状態でＤＲＡＭ列アドレスストローブがアクティヴローになり、ＲＡＳリフレッシュサイクルの前にＤＲＡＭ ＣＡＳを開始する。次のクロックエッジで遷移はＲＲＡＳＯＮ １９７８へ行われ、ＤＲＡＭ行アドレスストローブ（ＲＡＳ）はアクティヴローになる。ｔＣＡＳ（ＣＡＳアクティヴタイミング制限）が満たされると遷移はＲＣＡＳＯＦＦ １９７６へ行われ、ＤＲＡＭ列アドレスストローブ（ＣＡＳ）はインアクティヴハイになる。一旦ｔＲＡＳ（ＲＡＳアクティヴタイミング制限）が満たされると遷移はＲＡＳＯＦＦ１９７４へ行われ、ＤＲＡＭ行アドレスストローブ（ＲＡＳ）はインアクティヴハイになり、有効的にリフレッシュサイクルを終了させる。状態器は通常のＤＲＡＭサイクルのために上記のような振る舞いを継続し、ＩＤＬＥ １９６０状態へ遷移する。
【０４９２】
図１４６のリフレッシュカウンタ１９３４は単純にカウンタであり、１５マイクロ秒当たりに一回の固定レート、或は特殊ＤＲＡＭ業者の要求により定まったレートでリフレッシュ要求信号を発生させる。リフレッシュ要求が発行されると、この要求は図１４７の状態器により認知されるまで発行状態を続ける。このアクノレッジメントは、状態器がＲＣＡＳＯＮ１９８０状態に入った時に行われ、状態器がリフレッシュ要求の撤去を検出するまでその状態を続ける。
【０４９３】
図１４８には、疑似コードフォームで図１４６の仲裁器１９２４の動作が示されている。ここでは、４つのサイクル要求発行者の中でどれにメモリアレイ１９１０へのアクセスを許可するかを決める方法と、アクセスへの公平さを保つためにサイクル要求者のプライオリティを修正するメカニズムを記述している。これらのコードに用いられたシンボルは図１４９に説明されている。
【０４９４】
それぞれの要求発行者は、その要求のプライオリティを表す４ビットを持っている。上位の２ビットは一般の構成レジスタに設定されている構成値により全般的なプライオリティにプリセットされている。プライオリティの下位２ビットは仲裁者２４により更新される２ビットカウンタに収められている。仲裁の勝者を決める際に、仲裁者１９２４は単にそれぞれの要求者の４ビットの値を比較し、最高値の要求者にアクセスを許可する。要求者にサイクルが許可されると、下位２ビットのプライオリティカウンタの値はゼロになり、同一の上位２ビットのプライオリティ値と勝者より低い下位２ビットのプライオリティ値を持つ他の要求者の下位２ビットのプライオリティカウントは全て１ずつインクリメントされる。この結果、今メモリアレイ１９１０へのアクセスを許可された要求者は同一の上位２ビットプライオリティ値を持つ要求者の間で最も低いプライオリティになる。上位２ビットのプライオリティ値が勝者とは違った値を持つ要求者の下位２ビットのプライオリティ値は影響されない。プライオリティの上位２ビットの値は要求者の全般的なプライオリティを決め、下位２ビットの値は同一の上位プライオリティの要求者の間で公平な仲裁スキームを実現している。このスキームを用いることにより、ハードウェアで結線された固定プライオリティ（それぞれの要求者の上位２ビットがユニーク）から部分的な入れ替えと、部分ハードウェア結線（全てではないが、一部の上位２ビットプライオリティが他のと異なる）、厳密に公平な入れ替え（全ての上位２ビットのプライオリティ値が同一）までのいろいろな仲裁スキームが実現できる。
【０４９５】
図１４９は、それぞれの要求者に対するプライオリティビットの構造とそのビットの利用法を示している。ここでは、図１４８に用いられているシンボルの意味も定義されている。上記の実施例で各種のＦＩＦＯ１９２０、１９２２、１９３８、それから１９３６は幅３２ビット、深さ３２ワードである。この深さは効率と消費される回路エリアの間の良い線での妥協を与えている。しかし、深さの値は、パフォーマンスの変化と共に特定のアプリケーションのニーズに合わせて変えられる。
【０４９６】
また、ここに示されている４ポート構成は単に一つの実施例である。メモリアレイと読み出しまたは書き込みポートのいずれかとの間に単一のＦＩＦＯバッファを用意するだけでも効果は得られる。しかし、多数の読み出しと書き込みポートを用いると最高のスピード向上が得られることになる。
３．１８．９ 他モジュール
他モジュール２３９は、コプロセッサ２２４の動作、リセット同期、内部診断信号を必要に応じて外部ピンにまわすことによるエラーと割り込み信号のマルチプレクシング、ＣＢｕｓの内部と外部フォームとの間のインタフェーシングや内部と一般Ｂｕｓ信号の一般／外部Ｃｂｕｓ出力ピンへのマルチプレクシングなどのためのクロックの発生と選択を行う。勿論他モジュール２３９の動作は、用いられるＡＳＩＣテクノロジによるクロッキングへの要求と具現詳細により異なる。
【０４９７】
３．１８．１０ 外部インターフェース制御部
次に記述される本発明の特徴は、仮想メモリを共有するコプロセッサを有するホストコンピュータで仮想メモリを提供するための方法と装置に関連している。本発明の実施例は、コプロセッサがホストプロセッサと連動し仮想メモリモードで動作可能になるよう模索している。
【０４９８】
特に、コプロセッサはホストプロセッサの仮想メモリモードで動作することが可能である。コプロセッサには、ホストプロセッサの仮想メモリテーブルを参照することができる仮想メモリ対物理メモリマッピングデバイスが含まれており、コプロセッサにより生成された命令アドレスをホストプロセッサのメモリ内の対応する物理アドレスにマッピングする。むしろ、仮想メモリ対物理メモリマッピングデバイスは、グラフィックイメージを生成するためにコンピュータグラフィックコプロセッサの一部を形成する。コプロセッサには、イメージに種々の複雑な動作を行える多数のモジュールが含まれる。マッピングデバイスはコプロセッサとホストプロセッサとの間の相互作用に関与するのである。
【０４９９】
外部インターフェース制御部（ＥＩＣ）２３８は、コプロセッサのＰＣＩ Ｂｕｓと一般Ｂｕｓへのインターフェースを提供する。更に外部インターフェース制御部は、コプロセッサの内部仮想アドレス空間とホストシステムの物理アドレス空間との間をつなぐメモリマネジメントも提供する。外部インターフェース制御部２３８は、入力インターフェーススイッチ２５２からの要求に応じてホストメモリからデータを読み出す時や、結果オーガナイザ２４９からの要求に応じてホストメモリにデータを書き込む時にＰＣＩ Ｂｕｓ上のマスタとして作動する。ＰＣＩ Ｂｕｓへのアクセスは、“ＰＣＩ Ｌｏｃａｌ Ｂｕｓ Ｓｐｅｃｉｆｉｃａｔｉｏｎ，ｄｒａｆｔ２．１”ＰＣＩ ｓｐｅｃｉａｌ ｉｎｔｅｒｅｓｔ ｇｒｏｕｐ，１９９４の標準に従って具現する。
【０５００】
外部インターフェース制御部２３８は、入力インターフェーススイッチ２５２と結果オーガナイザ２４９からのＰＣＩ取り引きのための同時要求を仲裁する。仲裁は構成可能であるのが望ましい。受け取った要求のタイプには、一度にホストコプロセッサの１行以下のキャッシュライン読み出しや、ホストの１行と２行の間のキャッシュラインの読み出しと、２行又はそれ以上のキャッシュラインの読み出しが含まれる。長さ無制限の書き込みも外部インターフェース制御部２３８により具現される。更に外部インターフェース制御部２３８は、随意にデータのプリフェッチングも行う。
【０５０１】
外部インターフェース制御部２３８の構築には、全てのコプロセッサの内部モジュールのために仮想メモリからホストの物理メモリへのアドレスマッピングを提供するメモリマネジメントが含まれる。このマッピングは、アクセスを要求するモジュールに対し完全に透明である。外部インターフェース制御部２３８がホストメモリへのアクセス要求を受け取ると、メモリマネジメントユニットを初期化して、その要求されたアドレスを変換する。メモリマネジメントユニットがアドレスの変換に失敗すると、場合によっては一つまたはそれ以上のＰＣＩ Ｂｕｓの取り引きがアドレスの変換を完了する結果になる。これは、メモリマネジメントユニット自身がＰＣＩ Ｂｕｓへ取り引きを要求するもう一つのソースになれることを意味する。入力インターフェーススイッチ２５２や結果オーガナイザ２４９から要求されたバーストが仮想ページの境界を越えると、外部インターフェース制御部２３８は自動的にメモリマネジメントユニットを作動し、全ての仮想アドレスのマッピングを正しくやり直す。
【０５０２】
メモリマネジメントユニット（ＭＭＵ）（図１５０の９１５）は、１６個のルックアサイドバッファ（ＴＬＢ）が基本になっている。ＴＬＢは仮想対物理アドレスマッピングのキャッシュとして作動する。ＴＬＢでは次のような作業が可能である。
１）比較：仮想アドレスが与えられると、ＴＬＢは対応する物理アドレスかＴＬＢミス信号（アドレスにマッチする有効なエントリがない場合）のいずれかを返す。
【０５０３】
２）置換：ＴＬＢには、既存エントリや有効でないエントリの代わりに新しい仮想対物理マッピングが書き込まれる。
３）無効化：仮想アドレスが与えられた時、ＴＬＢのエントリにマッチするとマッチしたエントリを無効化する。
４）全無効化：すべてのＴＬＢエントリを無効化する。
【０５０４】
５）読み出し：ＴＬＢエントリの仮想や物理アドレスは、４ビットアドレスベースで読み出される。テストのみに用いられる。
６）書き込み：ＴＬＢエントリの仮想や物理アドレスは、４ビットアドレスベースで書き込まれる。
ＴＬＢ内のエントリは図１５１に示すようなフォーマットになっている。それぞれの有効なエントリは、２０ビットの仮想アドレス６７０、２０ビットの物理アドレス６７１、それから対応する物理ページが書き込み可能か否かを表すフラグで構成される。エントリの許容ページサイズは４Ｋバイトである。ＭＭＵ内のレジスタは、比較に用いられた１０ビットまでのアドレスにマスクをかけるのに用いることができる。これによってＴＬＢのページは４Ｍバイトまでサポートされる。マスクレジスタは１つのみであるため、すべてのＴＬＢエントリは同サイズのページを参照する。
【０５０５】
ＴＬＢには、“Ｌｅａｓｔ−Ｒｅｃｅｎｔｌｙ Ｕｓｅｄ”（ＬＲＵ）置換アルゴリズムが用いられている。新しいエントリは最も長い時間が経過したエントリに上書きされる。なぜなら、それは最後に書き込まれたか、或は比較作業で一致したものだからである。これは無効なエントリがない場合のみに適用される。無効なエントリがある場合には、有効なエントリに上書きする前に無効なエントリに書き込まれる。
【０５０６】
図１５２はＴＬＢ比較操作の流れを示す。受け取られた仮想アドレス８８０は８８１〜８８３の３つの部分に分けられる。下位１２ビット８８１は常にページ内のオフセットの部分であるため、対応する物理アドレスビット８８５へダイレクトに送られる。次の１０ビット８８２は、マスクビットにより設定された通り、ページサイズによってオフセットの部分か、ページ番号の部分かのいずれかである。マスクレジスタ８８７内のゼロの値は、ビットがページオフセットの部分であるためＴＬＢ比較に用いてはいけないということを示している。１０アドレスビットは１０マスクビットとロジカルに“ＡＮＤＥＤ”（論理積）され、ＴＬＢルックアップのために下位１０ビットの仮想ページ番号８８９を与える。仮想アドレスの上位１０ビット８８３は、仮想ページ番号８８９の上位１０ビットとしてダイレクトに用いられる。
【０５０７】
このように生成された２０ビットの仮想ページ番号はＴＬＢに送られる。これがエントリの１つと一致すると、ＴＬＢは対応する物理ページ番号８７２と一致した位置の番号を返す。物理アドレス８７３は、マスクレジスタ８８７を再び用いて物理ページ番号から生成される。物理ページ番号８７２の上位１０ビットは物理アドレス８７３の上位１０ビットとしてダイレクトに用いられる。物理アドレス８７２の次の１０ビットは、物理ページ番号（対応するマスクビットが１の場合）か仮想アドレス（マスクビットが０の場合）かのいずれかから８７５に選択される。物理アドレスの下位１２ビット８８５は仮想アドレスからダイレクトに与えられる。
【０５０８】
最後に、マッチに従いＬＲＵバッファ８７６が更新され、マッチされたアドレスの使用を表す。ＴＬＢミスは、入力インターフェーススイッチ２５２や結果オーガナイザ２４９がＴＬＢ８７２に存在しない仮想アドレスへのアクセスを要求した時に発生する。この場合、ＭＭＵは要求されたアクセスの処理を進める前に、ホストメモリ２０３のページテーブルから要求された仮想対物理変換をフェッチし、それをＴＬＢに書き込まなければならない。
【０５０９】
ページテーブルはホストメインメモリのハッシュテーブルである。それぞれのページテーブルエントリは、図１５３に示すようなフォーマットの２つの３２ビットワードで構成されている。２番目のワードは物理アドレスのための上位２０ビットを構成し、下位１２ビットは予約されている。対応する仮想アドレスの上位２０ビットは最初のワードに与えられている。下位１２ビットには有効（Ｖ）ビットと書き込み可能（Ｗ）または“リードオンリ”ビットが含まれており、残りの１０ビットは予約されている。
【０５１０】
ページテーブルエントリには、基本的にＴＬＢエントリと同じ情報が含まれている。ページテーブルの余分のフラグは予約されている。ページテーブル自身は、通常メインメモリ２０３内の複数のページにわたって分散され、一般に仮想空間と隣接していて物理空間とは接していない。ＭＭＵには、ソフトウェアにより設定された１６のページテーブルポインタのセットが含まれており、それぞれはページテーブルの部分を含んでいる４Ｋバイトメモリ領域への２０ビットポインタである。これは、コプロセッサ２２４が６４Ｋバイトサイズのページテーブルをサポートし、８Ｋページマッピングを有することを意味している。４Ｋバイトページサイズのシステムにおいて、これは最大３２Ｍバイトのマッピングされた仮想アドレス空間を意味する。むしろページテーブルポインタは、ＴＬＢに用いられるページサイズとは関係なく、常に４Ｋバイトのメモリ領域を参照することである。
【０５１１】
ＴＬＢミス後のＭＭＵ操作は、次のように図１５４の６９０に示している。
１．ＴＬＢに存在しない仮想ページ番号８９１上のハッシュファンクション８９２を実行し、ページテーブルへ１３ビットのインデックスを生成する。
２．ページテーブルインデックス８９４、８９６の上位４ビット８９４を用い、ページテーブルポインタ８９５を選択する。
【０５１２】
３．２０ビットのページテーブルポインタ８９５とページテーブルインデックス８９６の下位９ビットを連結し、最下位３ビットに０００を設定することにより（ページテーブルエントリはホストメモリ内の８バイトを占めるため）、要求されたページテーブルエントリの物理アドレス８９０を生成する。
４．ページテーブルエントリの物理アドレス８９８から始め、ホストメモリから８バイトを読み出す。
【０５１３】
５．８バイトのページテーブルエントリ９００がＰＣＩバスへ返されたとき、ＶＡＬＩＤビットが１にセットされていれば仮想ページ番号はＴＬＢミスを起こした元の仮想ページ番号と比較される。両者がマッチしないと、上記のプロセスを用いて次のページテーブルエントリがフェッチされる（物理アドレスは８バイトずつインクリメントされる）。この過程はマッチする仮想ページ番号のページテーブルエントリが見つかるまで、或は無効なページテーブルエントリに遭うまで続けられる。無効なページテーブルエントリに遭った場合には、ページフォールトエラーが出され処理は中止する。
【０５１４】
６．マッチする仮想ページ番号を有するページテーブルエントリが見つかると、置換操作によって完全なエントリがＴＬＢに書き込まれる。新しいエントリはＬＲＵバッファ８７６によってポイントされたＴＬＢ位置に置かれる。それからＴＬＢの比較作業が再び行われ、順調に続いて、元の要求されたホストメモリアクセスの処理が可能になる。新しいエントリがＴＬＢに書き込まれると、ＬＲＵバッファ８７６は更新される。
【０５１５】
ＥＩＣ２３８に具現されているハッシュファンクション８９２は、２０ビットの仮想ページ番号（ｖｐｎ）に対し、次の方程式を用いる。
ｉｎｄｅｘ＝（（ｖｐｎ＞＞Ｓ１）ＸＯＲ（ｖｐｎ＞＞Ｓ２）ＸＯＲ（ｖｐｎ＞＞Ｓ３））＆Ｏｘ１ｆｆｆ；
ここで、Ｓ１、Ｓ２、Ｓ３は独立的にプログラム可能なシフト量（正、又は負）で、それぞれ４つの値を取ることができる。
【０５１６】
ページテーブルの線形探索が４Ｋバイトの境界を越えると、ＭＭＵは自動的に次のページテーブルポインタを選択し、正しい物理メモリ位置で探索を継続する。この作業には、ページテーブルの最後から最初へのラッピングが含まれる。ぺージテーブルは、探索が常に終了されるように常に少なくとも１つの無効（ｎｕｌｌ）エントリを含んでいる。
【０５１７】
ソフトウェアがホストメモリ内のページを置換するたびに、新しい仮想ページのためのページテーブルエントリを追加し、置換されたページに対応するエントリを削除しなければならない。また、古いページテーブルエントリはコプロセッサ２２４のＴＬＢにキャッシュされてはいけない。これは、ＭＭＵ内のＴＬＢ無効化サイクルを果たすことにより行われる。
【０５１８】
無効化サイクルは無効化作業を引き起こすビットと共に無効化される仮想ページ番号をし、ＭＭＵへのレジスタ書き込みを通じて果たされる。このレジスタ書き込みは、ソフトウェアによって直接、或は命令デコーダにより割り込みされた命令を通じて果たされる。無効化作業は、提供された仮想ページ番号のためにＴＬＢ上で果たされる。ＴＬＢエントリにマッチすると、エントリは無効にマークされ、無効化された位置が次の置換作業で用いられるようにＬＲＵテーブルが更新される。
【０５１９】
未決定の無効化作業はいかなる未決定のＴＬＢ比較より高いプライオリティを持っている。無効化作業が完了すると、ＭＭＵは無効化ビットをクリアし、次の無効化処理が可能であることを知らせる。ＭＭＵが要求された仮想アドレスのための有効なページテーブルエントリを見つけられない場合、これをページフォルトという。ＭＭＵはエラー信号を出し、フォルトを起こした仮想アドレスをソフトウェアがアクセス可能なレジスタに保管する。ＭＭＵはアイドル状態に入り、エラーが解決されるまで待機する。割り込みがクリアされると、ＭＭＵは次の要求された取り引きから再び作業を始める。
【０５２０】
読み出し専用とマークされた（書き込み可能とマークされてない）ページへの書き込み作業がなされた時にもページフォルトが出される。外部インターフェース制御部（ＥＩＣ）２３８は、一般バスへアドレスされている入力インターフェーススイッチ２５２と結果オーガナイザ２４９からの取り引き要求に応じられる。それぞれの要求モジュールは現在の要求が一般バス用かあるいはＰＣＩバス用かを表す。入力インターフェーススイッチ２５２と結果オーガナイザ２４９とのコミュニケーションに共通バスを用いるのとは異なり、一般バス要求へのＥＩＣ操作はＰＣＩ要求への操作と完全に分かれている。更にＥＩＣ２３８は、一般バス空間にダイレクトにアドレスするＣｂｕｓ取り引きタイプにも応じられる。
【０５２１】
図１５０は、外部インターフェース制御部２３８の構造を示している。ＩＢｕｓ要求は多重化部９１０を通り、多重化部９１０は要求の目的地をもとにして（ＰＣＩまたは一般バス）適当な内部モジュールへ要求を導く。一般バスへの要求は、ＲＢｕｓとＣＢｕｓも持っている一般バス制御部９１１へ送られる。ＲＢｕｓ上の一般バスとＰＣＩバス要求は異なるコントロール信号を用いるため、このバスには多重化部が必要とされない。
【０５２２】
ＰＣＩバスへ導かれたＩＢｕｓ要求はＩＢｕｓドライバ（ＩＢＤ）９１２によって扱われる。同様に、ＰＣＩへのＲＢｕｓ要求はＲＢｕｓレシーバ（ＲＢＲ）９１４によって処理される。ＩＢＤ９１２とＲＢＲ９１４は仮想アドレスを、物理アドレスを返すメモリマネジメントユニット（ＭＭＵ）９１５に送る。ＩＢＤ、ＲＢＲ、それからＭＭＵは、それぞれＰＣＩトランザクションを要求できて、これらはＰＣＩマスタモード制御部（ＰＭＣ）９１７によって生成され、コントロールされる。ＩＢＤとＭＭＵはＰＣＩ読み出しのみを要求し、ＲＢＲはＰＣＩ書き込みのみを要求する。
【０５２３】
別個のＰＣＩターゲットモード制御部（ＰＴＣ）９１８は、ターゲットとしてコプロセッサへアドレスされた全てのＰＣＩトランザクションを処理する。これはＣＢｕｓマスタモード信号を命令制御部へ送り、すべての他モジュールへのアクセスを可能にする。ＰＴＣは、返されたＣＢｕｓデータをＰＭＣ経由でＰＣＩバスへ送るため、ＰＣＩデータバスピンのコントロールは単一のソースから出される。
【０５２４】
ＥＩＣレジスタとモジュールメモリへアドレスされたＣＢｕｓトランザクションは標準ＣＢｕｓインターフェース７によって扱われる。全てのサブモジュールはコントロールレジスタからビットをもらい、ステータスレジスタにビットを返す。これらは標準ＣＢｕｓインターフェース内部に位置している。ＰＣＩバストランザクションのためのパリティ生成とチェックは、ＰＭＣとＰＴＣのコントロール下で作動するパリティ生成とチェック（ＰＧＣ）モジュール９２１によって処理される。生成されたパリティは、パリティエラー信号と同様にＰＣＩバスへ送られる。パリティチェックの結果は、エラーレポートのためにＰＴＣのコンフィギュレーションレジスタにも送られる。
【０５２５】
図１５５は、図１５０のＩＢｕｓドライバ９１２の構造を示している。受け入れたＩＢｕｓアドレスとコントロール信号はサイクルの始点でラッチされる９３０。オアゲート９３１はサイクルの始まりを検出し、コントロールロジック９３２に開始信号を発生する。仮想ページ番号を形成するラッチ９３０の上位アドレスビットはカウンタ９３５にロードされる。仮想ページ番号は、９３６にラッチされた物理ページ番号を返すＭＭＵ９１５（図１５０）へ送られる。
【０５２６】
物理ページ番号と下位仮想アドレスビットは、マスク９３７によって再結合され、ＰＭＣ７１７（図１０２）へのＰＣＩ要求のためのアドレス９３８を形成する。また、サイクルのためのバーストカウントもカウンタ９３９にロードされる。プリフェッチ動作は異なるカウンタ９４１とアドレスラッチと比較回路９４３を用いる。ＰＭＣから返されたデータは、データがプリフェッチの一部か否かを表すマーカと共にＦＩＦＯ９４４にロードされる。データがＦＩＦＯ９４４の前の部分で使用可能になってくると、ラッチ９４５、９４６経由で読み出し、ロジックによりクロックアウトされる。読み出しロジック９４６はＩＢｕｓアクノレッジメント信号も生成する。
【０５２７】
中央コントロールブロック９３２は、状態器を含め、全てのアドレスとデータ要素の順次処理、それからＰＭＣへのインターフェースをコントロールする。仮想ページ番号カウンタ９３５は、ＩＢｕｓアドレスからのページ番号ビットで、ＩＢｕｓトランザクションの開始と共にロードされる。この２０ビットカウンタの上位１０ビットは常に受け入れるアドレスからくる。下位１０ビットに対しては、それぞれのビットは対応するマスクビット９３７が１にセットされていれば受け入れるアドレスからロードされ、そうでないと、カウンタビットが１にセットされる。２０ビットの値はＭＭＵインターフェースへ送られる。
【０５２８】
通常の動作で、仮想ページ番号は初期アドレス変換の後で用いられない。しかし、ＩＢＤがバーストのページ境界越えを検出した場合には、仮想ページカウンタがインクリメントされ、もう１つの変換が行われる。カウンタがロードされた時仮想ページ番号の一部でない下位ビットが１にセットされているため、２０ビットの値への単純インクリメントは実際のページ番号フィールドのインクリメントをもたらす。インクリメントされた後、次のインクリメントのためにカウンタをセットアップするために、マスクビット９３７が再び用いられる。
【０５２９】
物理アドレスは、変換後、ＭＭＵが有効な物理ページ番号を返すたびにラッチされる９３６。マスクビットは、返された物理ページ番号と元の仮想アドレスビットとを正しく結合するために用いられる。物理アドレスカウンタ９３８は物理アドレスラッチ９３６からロードされる。これはＰＭＣからワードが返されるたびにインクリメントされる。インクリメントされるたびにカウンタはモニタされ、トランザクションがページ境界を越えようとしているか否かを判断する。マスクビットは、カウンタのどのビットが比較に用いられるかを判断するのに使用される。カウンタがページ内に残っているワードの数が２つ以下であることを検出すると、コントロールロジック９３２に信号を出し、２つのデータ転送後現在のＰＣＩ要求を終了し、必要に応じて新たなアドレス変換を要求する。カウンタは新しいアドレス変換後に再びロードされ、ＰＣＩ要求が再開する。
【０５３０】
バーストカウンタ９３９は、トランザクションの始点でＩＢｕｓバースト値と共にロードされる６ビットのダウンカウンタである。これはＰＭＣからワードが返されるたびにデクリメントされる。カウンタの値が２つ以下になると、コントロールロジック９３２へ信号を出し、これで２つのデータ転送後、ＰＣＩトランザクションを終了することができる（プリフェッチングが可能でない限り）。
【０５３１】
プリフェッチアドレスレジスタ９４３は、いかなるプリフェッチの最初のワードの物理アドレスと共にロードされる。続くＩＢｕｓトランザクションが開始し、それからプリフェッチカウンタが少なくとも１つのワードが巧くプリフェッチされたことを示したら、トランザクションの最初の物理アドレスがプリフェッチアドレスの値と比較される。両者がマッチすると、プリフェッチデータはＩＢｕｓ引取りを満たすのに用いられ、最後にプリフェッチされたワードの後のアドレスでＰＣＩトランザクション要求が開始する。
【０５３２】
プリフェッチカウンタ９４１は４ビットのカウンタで、プリフェッチ動作中にＰＭＣによってワードが返されるたびに最大入力ＦＩＦＯの深さと同じカウントまでインクリメントされる。続くＩＢｕｓトランザクションがプリフェッチアドレスとマッチすると、プリフェッチカウントがアドレスカウンタに足され、それからバーストカウンタから引かれ、ＰＣＩ要求が要求される位置で開始できるようになる。代わりに、ＩＢｕｓトランザクションがプリフェッチされたデータの一部だけを必要とすると、要求されたバーストの長さはプリフェッチカウントから引かれ、それからラッチされたプリフェッチアドレスに足され、残りのプリフェッチデータは更なる要求を満たすために保留される。
【０５３３】
データＦＩＦＯ９４４は、８ワード×３３ビットの非同期フォールスルーＦＩＦＯである。ＰＭＣからのデータは、データがプリフェッチの一部であるか否かを表すビットと共にＦＩＦＯに書きこまれる。ＦＩＦＯの先端からのデータは、使用可能になるや否やＦＩＦＯから読み出されＩＢｕｓへ送られる。データ読み出し信号を生成するロジックはｃｌｋと同期して動作し、ＩＢｕｓアクノレッジメント出力を発生する。トランザクションがプリフェッチされたデータを用いて満たされる場合に、コントロールロジックからの信号は、ＦＩＦＯから読み出すプリフェッチされたデータの数の情報をを読み出しロジックに与える。
【０５３４】
図１５６は、図１５０のＲＢｕｓレシーバ９１４の構造を示している。コントロールは２つの状態器９５０、９５１との間でスプリットされる。書き込み状態器９５１はＲＢｕｓへのインターフェースをコントロールする。入力アドレス７５２はＲＢｕｓバーストの始点でラッチされる。バーストのそれぞれのデータワードは、バイトイネーブルと共にＦＩＦＯ７５４に書き込まれる。ＦＩＦＯ９５４が充満するようになると書き込みロジック９５１によってｒ−レディが取り消され、オーガナイザがそれ以上のワードを書き込まないようにする。
【０５３５】
書き込みロジック９５１は、再同期開始信号を介してメイン状態器９５０にＲＢｕｓバーストの開始を通知し、オーガナイザがそれ以上のワードを書き込まないようにする。仮想ページ番号を形成する上位アドレスビットはカウンタ９５７にロードされる。仮想ページ番号はＭＭＵへ送られ、ＭＭＵからは物理ページ番号９５８が返される。物理ページ番号と仮想アドレスの下位ビットはマスクに従って再結合され、カウンタ９６０にロードされ、ＰＭＣへのＰＣＩ要求のためのアドレスを提供する。ＰＣＩ要求のそれぞれのワードのためのデータとバイトイネーブルは、すべてのＰＭＣＭインターフェースコントロール信号も扱うメインコントロールロジック９５０によってＦＩＦＯ９５４からクロックアウトされる。メイン状態器は、ビジー信号を介してアクティヴであることを示し、それは書き込み状態器へ再同期して返される。
【０５３６】
書き込み状態器９５１は、ｒ−ファイナルを用いてＲＢｕｓバーストの終了を検出する。するとＦＩＦＯ９５４へのデータのロードを中止し、メイン状態器にＲＢｕｓバーストが終了したことを通知する。メイン状態器はデータＦＩＦＯが空になるまでＰＣＩ要求を継続する。それからビジーを取り消し、書き込み状態器が次のＲＢｕｓバーストを開始するようにする。
【０５３７】
図１５０に再び戻り、メモリマネジメントユニット９１５は、ＩＢｕｓドライバ（ＩＢＤ）９１２とＲＢｕｓレシーバ（ＩＢＲ）９１４のために仮想ページ番号から物理ページ番号への変換を担当する。図１５７に、メモリマネジメントユニットの詳細を示している。１６エントリの変換ルックアサイドバッファ（ＴＬＢ）９７０は、ＴＬＢアドレスロジック９７１から入力データを受け取って出力を送り返す。状態器が含まれているＴＬＢコントロールロジック９７２は、ＲＢＲまたはＩＢＤからＴＬＢアドレスロジックにバッファされている要求を受け取る。要求を受け取ると、入力のソースとＴＬＢによって行われる作業を選択する。有効なＴＬＢ作業は、比較、無効化、全無効化、書き込みと読み出しである。ＴＬＢ入力アドレスのソースとしては、ＩＢＤとＲＢＲインターフェース（比較作業用）、ページテーブルエントリバッファ９７４（ＴＬＢミスサービス用）またはＴＬＢアドレスロジック内のレジスタなどがある。ＴＬＢは、ＴＬＢコントロールロジックにそれぞれの作業のステータスを返す。成功した比較作業からの物理ページ番号はＩＢＤとＲＢＲへ送り返す。ＴＬＢは最も最近アクセスされた（ＬＲＵ）位置の記録を保有し、これはＴＬＢアドレスロジックにとっては書き込み作業用の位置として用いるのに有用である。
【０５３８】
比較作業が失敗した場合、ＴＬＢコントロールロジック９７２はページテーブルアクセスコントロールロジック９７６にＰＣＩ要求を開始するよう信号を出す。ページテーブルアドレスゼネレータ９７７は、内部ページテーブルポインタレジスタを用い、仮想ページ番号をもとにＰＣＩアドレスを生成する。ＰＣＩ要求から返されたデータは、ページテーブルエントリバッファ９７４へラッチされる。要求される仮想アドレスにマッチするページテーブルエントリが見つかると、物理ページ番号がＴＬＢアドレスロジック９７７へ送られ、その後ページテーブルアクセスコントロールロジック９７６はページテーブルアクセスが完了したことを通知する。それからＴＬＢコントロールロジック９７２は、ＴＬＢに新たなエントリを書き込み、比較作業を再び開始する。
【０５３９】
ＳＣＩへのレジスタ信号とＳＣＩからのレジスタ信号は両方の方向に再同期される９８０。信号は全てのサブモジュールへ行き来する。モジュールメモリインターフェース９８１は、標準ＣＢｕｓインターフェースからＴＬＢとページテーブルポインタメモリ要素へのアクセスをデコードする。ＴＬＢアクセスは読み出し専用で、データを得るためにＴＬＢコントロールロジックを用いる。ページテーブルポインタは読み出し・書き込み両方可能で、モジュールメモリインターフェースによってダイレクトにアクセスされる。これらのパスには同期回路も含まれている。
【０５４０】
３．１８．１１ 周辺インターフェース制御部図１５８には、図２の周辺インターフェース制御部（ＰＩＣ）の一例を詳細に示している。ＰＩＣ２３７は、外部周辺デバイスへ、又はデバイスからデータを転送するいくつかのモードの１つで動作する。基本的なモードは、
１）ビデオ出力モード：このモードで、データは外部ビデオクロックとクロック・データイネーブルのコントロール下で、周辺へ転送される。ＰＩＣ２３７は、出力データに対し必要とされるタイミングで出力クロックとクロックイネーブルサインを送る。
【０５４１】
２）ビデオ入力モード：このモードで、データは外部ビデオクロックとクロック・データイネーブルのコントロール下で、周辺へ転送される。
３）セントロニクスモード：このモードは、ＩＥＥＥ １２８４標準に定義されている標準プロトコルに従い、周辺へと周辺からデータを転送する。
ＰＩＣ２３７は、必要に応じて、内部データソースや目的地から外部インターフェースのプロトコルを分離する。内部データソースは、出力データの単一ストリームにデータを書き込み、選択されているモードによって外部周辺機器へ転送される。同様に、外部周辺からの全てのデータは単一入力データストリームに書き込まれ、可能な内部データ目的地の１つに要求されたトランザクションを満たすのに用いられる。
【０５４２】
可能な出力データのソースとしては、ＬＭＣ２３６（ＡＢｕｓを用いる）、ＲＯ２４９（ＲＢｕｓを用いる）、それから一般ＣＢｕｓの３つが挙げられる。ＰＩＣ２３７は、これらのデータソースからのトランザクションに一度に１つのみに応答する。１つのソースからのトランザクションは次のソースが考慮される前に完全に終了するのである。一般に、いつでも１つのみのデータソースしかアクティヴになってはならないのである。２つ以上のソースがアクティヴになった場合にはＣＢｕｓ、ＡＢｕｓ、ＲＢｕｓのプライオリティで順に処理される。
【０５４３】
通常通り、モジュールはＰＩＣの内部レジスタが含まれている標準ＣＢｕｓインターフェース９９０のコントロール下で動作する。更に、ＣＢｕｓインターフェース９９２は、コプロセッサ２２４を介して周辺デバイスをアクセスし、コントロールすることができる。ＡＢｕｓインターフェース９９１もローカルメモリ制御部とのメモリ相互作用を処理することができる。結果オーガナイザ２４９に加え、ＡＢｕｓインターフェース９９１とＣＢｕｓインターフェース９９２は両方ともバイト−ワイドＦＩＦＯが含まれている出力データパス９９３へデータを送る。出力データパスへのアクセスは、どのソースが出力ストリームに対してプライオリティまたは所有権を持っているかを常にチェックする仲裁者によってコントロールされる。出力データパスは、どっちがイネーブルになっているかによってビデを出力制御部９９４とセントロニクス制御部９９７とインターフェースする。それぞれのモジュール９９４、９９７は出力データパスの内部ＦＩＦＯから一度に１バイトを読み出す。セントロニクス制御部９９７は、周辺デバイスをコントロールするために標準セントロニクスデータインターフェースを具現する。ビデオ出力制御部には、要求されるビデオ出力プロトコルに従い、出力パッドをコントロールするロジックが含まれている。同様に、ビデオ入力制御部９９８には、用いられているいかなるビデオ入力標準もコントロールするロジックが含まれている。ビデオ入力制御部９９８は入力データパスユニット９９９へ出力を出し、これは再びビデオ入力制御部９９８かセントロニクス制御部９９７かのいずれかによって一度に１バイトずつ非同期でＦＩＦＯに書き込まれるデータとバイトワイド入力ＦＩＦＯを構成する。
【０５４４】
データタイマ９９６には種々のカウンタが含まれており、出力データパス９９３と入力データパス９９９内のＦＩＦＯの現在状態をモニタするために用いられている。以上のことから、コプロセッサを用いると多重イメージまたは単一イメージの多重部分を同時に生成するために二重ストリームの命令を実行するのが可能に思われる。一次命令ストリームは現在ページの出力イメージを得るのに用いられ、一次命令ストリームがアイドルになっている間に次のページのレンダリングを始めるために二次命令ストリームを用いることができる。その結果、標準モードの動作で、現在ページのイメージはレンダリングされてからＪＰＥＧコーダ２４１を用いて圧縮される。イメージをプリントする必要がある時に、コプロセッサ２４１は二度ＪＰＥＧコーダ２４１を用いてＪＰＥＧエンコーデッドイメージを解凍する。出力デバイスにからそれ以上のＪＰＥＧデコーデッドイメージの部分が必要とされないアイドルタイムの間に、次のページまたはバンドの構成のために命令を実行するのが可能である。一般にこのプロセスは、コプロセッサの動作オーバーラップにより、イメージを生成するレートを上げる。特に、コプロセッサ２２４を用いると、コプロセッサに付いたプリンタによってプリントが行われ、結果的にレンダリングスピードが上がるため、イメージプロセシング作業のスピードアップの面でベネフィットが得られるのである。
【０５４５】
上記好適な実施例は本発明の１つの実施形態であり、本発明の範囲を外れずに当業者にとって自明な修正ができることが、以上から明らかであろう。
【０５４６】
付録Ａ
コプロセッサマイクロプログラミング
この節では新しい命令の実行毎にコプロセッサ内で行われる動作について詳述する。命令実行の間にコプロセッサにより行われるすべてのセルフコンフィグレーションは内部のレジスタのリード／ライトにより実現されており、従って、コプロセッサは外部のＣバスインターフェースあるいはホストによってＰＣＩバスインターフェースを用いることで完全にマイクロプログラミング可能である。但し、ホストを用いるマイクロプログラミングの場合には一般的にホスト同期の問題から困難となることが予想される。本章は読者がコプロセッサについて以下の点で十分な知識を持っていることを前提している。
１．実行モデル
２．命令セットとコーディング
３．レジスタセット
４．内部構造
Ａ．１ 一般事項
Ａ１．１ コプロセッサのセットアップに関する一般事項
コントロール命令とローカルＤＭＡ命令以外のすべての命令については、コプロセッサで内のデータの流れは基本的にピクセルオーガナイザの制御下におかれる。ピクセルオーガナイザは入力データストリームの先頭のフェッチ、データのカウント、及び最後のデータがフェッチされた時期の決定について責任を持っている。コプロセッサ内のその他のモジュールは基本的に、送られてきたデータに単に応答するだけである。
Ａ１．２ モジュールのコンフィグレーション順序
すべてのモジュールが命令毎にセットアップされるわけではない。いくつかのモジュールは命令デコーディング時に、全くコンフィグレーションされない。モジュールのコンフィグレーション順序は常にＰＯ，ＤＣＣ，ＯＯＢ，ＯＯＣ，ＭＤＰ，ＪＣ，ＲＯ，ＰＩＣの順である。
Ａ１．３ その他のレジスタの設定
命令が、あるレジスタ値の設定を含んで符号化された場合にはそのレジスタは次の順序に従うマイクロプログラミングにより設定される。
１．設定されるべきレジスタを持つモジュールに、ほかにレジスタセットが存在しなければ、そのレジスタはほかのいかなるレジスタ設定よりも先に設定される。
２．設定されるべきレジスタを持つモジュールに、ほかにもレジスタセットがあるときはそのレジスタはほかのレジスタの設定が終わった後に、そのモジュールの＿ｃｆｇレジスタの直前に設定される。
Ａ１．４ 整合性のない命令オペランドのコーディング
多くの命令は、オペランド及び結果のデータタイプが指定されているので、ほかのデータタイプが指定された場合には、無意味な結果を返す。各オペランドに対し、コプロセッサは次の手順で目的のオペランドのフォーマットを決定する。
１．オペランドの内部フォーマットが１つのピクセル（圧縮バイトあるいは非圧縮バイト）に特化されている場合には、対応するオペランドオーガナイザはこれを反映して設定される。データキャッシュコントローラはコンフィグレーションされず、従ってノーマルモードで演算が継続される。
２．オペランドの内部フォーマットが「その他の形式」に特化されている場合には、コプロセッサは命令からオペランドのフォーマットを生成する。オペランドＢとオペランドＣについては前進的である。オペランドＡについて「その他の形式」は元来指定されていなく、コプロセッサの振る舞いは定義されていない。対応するオペランドオーガナイザはバイパスモードになり、データキャッシュコントローラは得られたフォーマットのオペランドデータを管理するように設定される。マイクロプログラミングは合理的に様々なモジュール間で相互独立である。
Ａ１．５ 疑似命令の文法
・命令の実行順序は左端の番号で決定される。
・レジスタ名はＨｅｌｖｅｔｉｃａ Ｂｏｌｄ体でかかれている。
・レジスタフィールドはｒｅｇｉｓｔｅｒ．ｆｉｅｌｄによって示される。
・Ｉ，Ｄは現在復号化されている命令ワードとデータワードをそれぞれ示す。
・Ａ，Ｂ及びＣは現在復号化されているオペランドワードＡ、オペランドワード
Ｂ、オペランドワードＣを示す。
・Ａ＿ｄｅｓｋｒｉｐｔｏｒ，Ｂ＿ｄｅｓｋｒｉｐｔｏｒおよびＣ＿ｄｅｓｋｒｉｐｔｏｒは現在復号化されている命令のデータワードのデスクリプタを示す。
・Ｒは現在復号化されている命令の結果ワードを示す。
・”Ｘ：Ｙ”はＸとＹの連結を示す。
・”＠Ｘ”はコプロセッサのレジスタ番号Ｘを示す。
・”Ｃｂｕｓ（Ｘ）”はＣバスオペレーションＸの実行を示す。
・”＊Ｃｂｕｓ（Ｘ）”はＣバスオペレーションＸによる受け取りデータを示す。
・”＊Ｘ”は仮想メモリ番地Ｘを示す。
・”？？”は不明な値、あるいは未定の値を示す。
・”ｓｅｔ”はデータマニピュレーションレジスタの設定を示す。
Ａ．２ 合成演算子
注：
１．主要オペコードは０ｘＣと０ｘＤ
２．曖昧さは最上位アドレスのバイト（すなわち、最上位バイト）であると考える。
３．アキュムレータあるいはオペランドはプレ乗算されていてもよい。
４．結果は非プレ乗算されていてもよい。
５．命令長は入力ピクセルの数により定義されている。
2005348410.tif 000048
2005348410.tif 000049
2005348410.tif 000050
Ａ．３ 色空間変換
注：
１．入力空間は常に３次元である。デフォルトでは３つの最下位なピクセルのチャネルである。曖昧さは排除される。
２．カラーテーブルのフォーマットはひとつの出力チャネルを含むものか、４つの出力チャネルを含むもののうちどちらかである。
2005348410.tif 000051
2005348410.tif 000052
2005348410.tif 000053
Ａ．４ ＪＰＥＧ命令
注：
１．オペコードは０ｘ２である。
２．オペランドＣはヤットするためのレジスタでもよい。
３．オプションは多数存在する。
・サブサンプリングを行う／行わない。
・フィルタリングを行う／行わない。
・１，３あるいは４スキャン。
４．これらの命令は命令実行前に設定されたいくつかのレジスタと関係している。
Ａ．４．１ 伸長
注：１．以下のレジスタは命令実行前に設定されている必要がある。
・ｒｏ＿ｉｄｒ：出力画像次元数レジスタ
・ｒｏ＿ｃｕｔ：出力カットレジスタ
・ｒｏ＿ｌｍｔ：出力制限レジスタ
2005348410.tif 000054
2005348410.tif 000055
2005348410.tif 000056
2005348410.tif 000057
Ａ．４．２ 圧縮
注：
１．以下のレジスタは命令実行前に設定されている必要がある。
・ｐｏ＿ｉｄｒ：出力画像次元数レジスタ
・ｊｃ＿ｒｍｌ：再スタートマーカのインターバル
・ｒｏ＿ｃｕｔ：出力カットレジスタ
・ｒｏ＿ｌｍｔ：出力制限レジスタ
2005348410.tif 000058
2005348410.tif 000059
2005348410.tif 000060
2005348410.tif 000061
Ａ．５ データコーディング
注：
１．すべてのデータコーディング操作は圧縮、圧縮解除いずれの場合も同じ様に扱われる。これらの操作設定はＪＰＥＧの時とほとんど同じである。
２．可能なエンコーディング操作
・ハフマン符号化
・予測符号化
３．可能なデコーディング操作
・高速ハフマン復号化
・低速ハフマン復号化
・ｐａｃｋｂｉｔｓ復号化（バージョンＡ）
・ｐａｃｋｂｉｔｓ復号化（バージョンＢ）
・予測復号化
４．オペランドＣは設定するためのレジスタでも良い。
５．以下のレジスタは命令実行前に設定されている必要がある。
・ｒｏ＿ｃｕｔ：出力カットレジスタ
・ｒｏ＿ｌｍｔ：出力制限レジスタ
2005348410.tif 000062
2005348410.tif 000063
2005348410.tif 000064
2005348410.tif 000065
Ａ．６ 変換と畳み込み
１．オペコードは０ｘ４（畳み込み）と０ｘ５（変換）。
２．コプロセッサは画像変換と画像畳み込みのそれぞれのために必要となるスーパーセットである操作を行う。画像変換と画像畳込みの唯一の違いは、コプロセッサに関する限り、画像変換ではカーネルステップサイズがカーネルの大きさ（水平、垂直）なのに対して、畳込みではステップサイズが１ソースピクセルとなっていることである。
３．オプション：
・隣接ピクセルへのスナッピングおよび補間
・ピクセル（カーネル）の蓄積を行うか否か
・ソースピクセルのプレ乗算を行うか否か
・最終結果のクランプ、ラッピング、絶対値
４．注：変換と畳込みは元の位置には実行できない。つまり、ソースのポインタとデスティネーションのポインタが同じであるときは、その内容が破壊される。
2005348410.tif 000066
2005348410.tif 000067
Ａ．７ 行列乗算
注：
１．オペコードは０ｘ３
２．オプション：
・ソースピクセルのプレ乗算を行うか否か
・最終結果のクランプ、ラッピング、絶対値化
・オペランドＣはレジスタに書き込んでも良い
2005348410.tif 000068
2005348410.tif 000069
2005348410.tif 000070
Ａ．８ ハーフトーン処理
注：
１．オペコードは０ｘ７
２．オプションはハーフトーンのレベル値のみ
３．ハーフトーンスクリーンが適切にメッシュあるいはアンメッシュされているかぎり、ピクセルあるいはバイトに対して行うことができる。
2005348410.tif 000071
2005348410.tif 000072
Ａ．９ メモリーコピー
注：
１．オペコードは０ｘ９２．この命令はメモリーコピーの操作を完了するために、全く個別の機構を用いている。
・汎用データ転送命令はコプロセッサにおける通常のデータフローを利用し、ＰＯおよびＲＯ内のデータ操作ユニットを用いる様々な関数を利用できる。
・ペリフェラルＤＭＡ命令はＰＩＣとＬＭＣ間の直接的なコネクションを利用する。このことはデータ操作ができないことを意味し、後続の命令と同時実行が可能である。
Ａ．９．１ 汎用データ転送
2005348410.tif 000073
2005348410.tif 000074
Ａ．９．２ ペリフェラルＤＭＡ転送
注：
１．同時実行でもそうでなくとも良い。このことは、ＩＣによって扱われている。
２．オペランドＣは設定するレジスタでも良い
３．ＰＩＣはデータを扱うモジュールなので、この命令はほかの”能動”命令と異なる。
2005348410.tif 000075
2005348410.tif 000076
Ａ．１０ フォトＣＤ伸長
この命令群は３つの異なる操作すなわち、水平補間、垂直補間、残部融合から構成される。垂直補間と残部融合の設定方法は同じである。 これら全ての命令のオペコードは０ｘ９である。
Ａ．１０．１ 水平補間
注：
１．ピクセルあるいはバイトに対して実行可能
２．この命令はオペランドが１つの命令であり、オペランドＣは設定するレジスタでも良い。
2005348410.tif 000077
2005348410.tif 000078
2005348410.tif 000079
Ａ．１０．２ 垂直補間と残部融合
注：
１．垂直補間と残部融合の設定は同じである。
２．ピクセルとバイトの両方に対して実行可能。
３．この命令はオペランドが２つの命令であり、オペランドＣはレジスタセットでも良い。
2005348410.tif 000080
2005348410.tif 000081
2005348410.tif 000082
Ａ．１１ 制御命令
注：
１．制御命令は２種類の操作、すなわちフロー制御命令と内部アクセス命令からなる。
Ａ．１１．１ フロー制御
注：
１．オペコードは０ｘＢ
２．フロー制御命令は現在、各種ジャンプ命令と各種の待機命令から成っている。
３．コプロセッサ内では明確な設置は行われず、またこの命令は、”能動”命令ではない。つまり、ほかの命令のようにコプロセッサ内のサブモジュールが実際に何かを行ったりはしない。
４．オペランドＣは設定するレジスタでも良い。
2005348410.tif 000083
Ａ．１１．２ 内部アクセス（リード）
注：
１．オペコードは０ｘＡ
２．リード命令はデータをコプロセッサ外に転送する。
３．ＲＯが実際にコプロセッサ内ですべてを行う唯一のモジュールである。
2005348410.tif 000084
Ａ．１１．３ 内部アクセス（ライト）
注：
１．オペコードは０ｘＡ
２．ライト命令はデータをコプロセッサ内に転送する。
３．この命令は”能動”命令ではないので、ＩＣ以外のモジュールは実際には何も行わない。
2005348410.tif 000085
Ａ．１２ 予約された命令
注：
１．オペコード０ｘ０，０ｘＦは予約されている。
２．予約された命令はマスク可能なエラーを出す。
３．これらの予約された命令はコプロセッサが今後改訂されたときにほかの命令として使用されることになっている。
付録Ｂ：レジスタ
１．１ レジスタおよびテーブル
本節ではコプロセッサのレジスタについて解説する。これらのレジスタは３通りの方法で変更可能である。
１．特定のコプロセッサの命令群ははレジスタの読み書きをするためにある。これらの命令群を用いることでレジスタは、イニシエータのＰＩＣバスサイクルの開始あるいは汎用インターフェースのトランザクションを用いて、ローカルメモリインターフェースに関連するメモリへの、あるいはメモリからの読み書きが行われる。
２．多くのレジスタは命令実行の副作用により内容が変化する。命令実行のためにコプロセッサが自身の設定を行うという主要な機構は、様々なレジスタを現在の状態を反映するように設定することで実現されている。命令実行終了後には各レジスタはコプロセッサの状態を反映する。多くの典型的な処理はある命令により完全に特定され、設定される。いくつかのレジスタでは命令実行の直前に設定する必要がある。
「予約」レジスタビットの意味
あらゆるレジスタ或はその構成要素の「予約」の意味は次の通りである。
・予約された場所への書き込みは行えるが、そのデータは棄却される。
・予約された場所からの読み込みは行えるが、そのデータは不定である
全ての特定されていないレジスタ及びレジスタフィールドは「予約」である。
１．１．１ レジスタの分類
コプロセッサ内のレジスタは本節に記述される振る舞いに基づいて分類される。これらの記述は
・外部：モジュール外部（からのアクセス）。ＣＢｕｓインターフェースを用いた外部アクセスである。すなわち、命令コントローラあるいは外部ＣＢｕｓインターフェースによるターゲットモードのＰＣＩを用いる。注、レジスタは、バイセットモードを介してＰＣＩバスからセットできない。
・内部：モジュール内部（からのアクセス）
状態レジスタ
状態レジスタは外部からは読み込み専用で、内部からは読み書き可能。
コンフィグ１レジスタ
コンフィグ１レジスタは外部からは読み書き可能で、内部からは読み込み専用である。コンフィグ１レジスタはタイプＣのＣＢｕｓ操作はサポートせず（すなわち、ビットセットモードをサポートしない）、アドレス値のようなバイト（またはそれより大きな）コンフィギュレーション情報を保持するレジスタとして用いられる。
コンフィグ２レジスタ
コンフィグ２レジスタも外部から読み書き可能で、内部からは読み込み専用である。コンフィグ２レジスタはタイプＣのＣＢｕｓ操作（すなわちビットセットモード）をサポートし、ビット単位で設定する必要のあるコンフィギュレーション情報を保持するレジスタとして用いられる。
コントロール１レジスタ
コントロール１レジスタは外部および内部から読み書き可能。コントロール１レジスタはタイプＣのＣＢｕｓ操作をサポートせず（すなわちビットセットモードをサポートしない）、アドレス値のようなバイト（またはそれより大きなコントロール情報を保持するレジスタとして用いられる。
コントロール２レジスタ
コントロール２レジスタは外部および内部から読み書き可能。コントロール２レジスタはタイプＣのＣＢｕｓ操作（すなわちビットセットモード）をサポートし、ビット単位で設定する必要のあるコントロール情報を保持するレジスタとして用いられる。
割り込みレジスタ
割り込みレジスタ内のビットは内部からは１にセットでき、外部からは１を書き込むことによって０にリセットできる。モジュール割り込み／エラーレジスタもこのタイプである。モジュールの割り込み／エラーレジスタは３つのフィールドから構成される。
［７：０］モジュールによって生成されたあらゆるエラー状態（ステータス）を意味する
［２３：８］モジュールによって生成されたあらゆる例外状態を意味する
［３１：２４］モジュールによって生成されたあらゆる割り込み状態を意味する１．１．２ レジスタマップ
表１．１はコプロセッサのレジスタである。番号はアドレスではなくレジスタ番号である。
表１．１ コプロセッサレジスタ
2005348410.tif 000086
2005348410.tif 000087
2005348410.tif 000088
2005348410.tif 000089
2005348410.tif 000090
2005348410.tif 000091
2005348410.tif 000092
2005348410.tif 000093
2005348410.tif 000094
2005348410.tif 000095
2005348410.tif 000096
2005348410.tif 000097
１．１．３ レジスタ定義
汎用モジュールレジスタ
2005348410.tif 000098
2005348410.tif 000099
2005348410.tif 000100
2005348410.tif 000101
2005348410.tif 000102
2005348410.tif 000103
2005348410.tif 000104
2005348410.tif 000105
2005348410.tif 000106
2005348410.tif 000107
2005348410.tif 000108
2005348410.tif 000109
命令コントローラレジスタ
Ｉ． ｉｃ＿ｃｆｇ
ｉｃ＿ｃｆｇレジスタは３つの部分に別れる。最下位バイトはグローバルコンフィギュレーション情報を含む。最下位から３番目のバイトはストリームＡのコンフィギュレーション情報を含み、最上位バイトはストリームＢのコンフィギュレーション情報を含む。 このレジスタのリセット値は０ｘ００００００００である。
2005348410.tif 000110
2005348410.tif 000111
2005348410.tif 000112
2005348410.tif 000113
ｍ． ｉｓ＿ｓｔａｔ
このレジスタは４つのセクションに分かれている。最下位バイトはＩＣの内部状態を保持する。最下位から２番目のバイトは現在の命令の復号化された結果と現在及びプリフェッチした命令ストリームを保持する。最上位から２番目のバイトはＡストリームに関してすべてのステータス情報を保持する。最上位バイトはＢストリームに関する情報を保持する。このレジスタのリセット値は０ｘ００００００００である。
2005348410.tif 000114
2005348410.tif 000115
2005348410.tif 000116
2005348410.tif 000117
2005348410.tif 000118
ｎ． ｉｃ＿ｅｒｒ ｉｎｔ
このレジスタはＩＣ内部で割り込みやエラーが発生したかどうかを示す、アクティブ・ハイのフラグを含む。それぞれのビットは１を書き込むことでクリアされる。
2005348410.tif 000119
2005348410.tif 000120
ｏ． ｉｃ＿ｅｒｒ＿ｉｎｔ＿ｅｎ
このレジスタは様々なエラーや割り込みの許可のマスクを含み、リセット値は０ｘ００００００００である。
2005348410.tif 000121
2005348410.tif 000122
ｐ． ｉｃ＿ｉｐａ
このレジスタはストリームＡの命令フェッチに用いられる仮想アドレスの最上位３０ビットを保持する。２つの最下位ビットは命令が整列されてるはずであるとして０に仮定される。このレジスタのリセット値は０ｘ００００００００である。
2005348410.tif 000123
ｑ． ｉｃ＿ｔｄａ
このレジスタはストリームＡの“ｔｏ ｄｏ”値を保持する。これは適正な命令が存在するまでの３２ビット（ラッピング）のシーケンス番号である。このレジスタのリセット値は０ｘ００００００００である。
2005348410.tif 000124
ｒ． ｉｃ＿ｆｎａ
このレジスタはストリームＡの「終了」値を保持する。これは３２ビット（ラッピング）のシーケンス番号で最後に完了した命令を示している。このレジスタのリセット値は０ｘ００００００００である。
2005348410.tif 000125
ｓ． ｉｃ＿ｉｎｔａ
このレジスタはストリームＡの「割り込み」番号を保持する。これは機構が有効であり用意されている場合にどこへ割り込みをかけるかの、３２ビット（ラッピング）のシーケンス番号である。このレジスタのリセット値は０ｘ００００００００である。
2005348410.tif 000126
ｔ． ｉｃ＿ｌｏａ
このレジスタはストリームＡで実行される最後の重複命令の３２ビット（ラッピング）のシーケンス番号を保持する。このレジスタのリセット値は０ｘ００００００００である。
2005348410.tif 000127
ｕ． ｉｃ＿ｉｐｂ
このレジスタはストリームＢの命令フェッチに用いられる仮想アドレスの最上位３０ビットを保持する。２つの最下位ビットは命令が整列されているはずであるとして０に仮定される。このレジスタのリセット値は０ｘ００００００００である。
2005348410.tif 000128
ｖ． ｉｃ＿ｔｄｐ
このレジスタはストリームＢの“ｔｏ ｄｏ”値を保持する。これは適正な命令が存在するまでの３２ビット（ラッピング）番号である。このレジスタのリセット値は０ｘ００００００００である。
2005348410.tif 000129
ｗ． ｉｃ＿ｆｎｂ
このレジスタはストリームＢの「終了」値を保持する。これは３２ビット（ラッピング）のシーケンス番号で最後に完了した命令を示している。このレジスタのリセット値は０ｘ００００００００である。
2005348410.tif 000130
ｘ． ｉｃ＿ｉｎｔｂ
このレジスタはストリームＢの「割り込み」番号を保持する。これは機構が有効であり用意されている場合にどこへ割り込みをかけるかの、３２ビット（ラッピング）のシーケンス番号である。このレジスタのリセット値は０ｘ００００００００である。
2005348410.tif 000131
ｙ． ｉｃ＿ｌｏｂ
このレジスタはストリームＢで実行される最後の重複命令の３２ビット（ラッピング）のシーケンス番号を保持する。このレジスタのリセット値は０ｘ００００００００である。
2005348410.tif 000132
ｚ． ｉｃ＿ｓｅｍａ
このレジスタはｉｃ＿ｓｔａｔレジスタの副作用を用いたエイリアスであり、このレジスタの読み込はストリームＡのレジスタセマフォの要求の副作用である。
ａａ． ｉｃ＿ｓｅｍｂ
このレジスタはｉｃ＿ｓｔａｔレジスタの副作用を用いたエイリアスであり、このレジスタの読み込みはストリームＢのレジスタセマフォの要求の副作用である。
入力インターフェースレジスタ
ａｂ． ｉｉｓ＿ｃｆｇ
2005348410.tif 000133
ａｃ． ｉｉｓ＿ｓｔａｔ
2005348410.tif 000134
ａｄ． ｉｉｓ＿ｅｒｒ＿ｉｎｔ
2005348410.tif 000135
ａｅ． ｉｉｓ＿ｅｒｒ＿ｉｎｔ＿ｅｎ
2005348410.tif 000136
2005348410.tif 000137
ａｆ． ｉｉｓ＿ｉｃ＿ａｄｄｒ
2005348410.tif 000138
ａｇ． ｉｉｓ＿ｄｃｃ＿ａｄｄｒ
2005348410.tif 000139
ａｈ． ｉｉｓ＿ｐｏ＿ａｄｄｒ
2005348410.tif 000140
ａｉ． ｉｉｓ＿ｂｕｒｓｔ
2005348410.tif 000141
ａｊ． ｉｉｓ＿ｂａｓｅ＿ａｄｄｒ
2005348410.tif 000142
ａｋ． ｉｉｓ＿ｔｅｓｔ
2005348410.tif 000143
2005348410.tif 000144
外部インターフェースコントローラレジスタ
ａｌ． ｅｉｃ＿ｃｆｇ
2005348410.tif 000145
2005348410.tif 000146
ａｍ． ｅｉｃ＿ｓｔａｔ
2005348410.tif 000147
ａｎ． ｅｉｃ＿ｅｒｒ＿ｉｎｔ
ｅｉｃ＿ｅｒｒ＿ｉｎｔレジスタのエラー及び割り込みビットはＥＩＣのみによって設定でき、ソフトウェアのみによってリセットできる。通常のエラー及び割り込みビットはそのビットに１を書き込むことでリセットされる。ＰＣＩコンフィギュレーションレジスタビットのコピーであるエラービットはＰＣＩコンフィギュレーションレジスタに書き込むことでクリアされなければならない。すなわち、ｅｉｃ＿ｅｒｒ＿ｉｎｔでのコピーは何も影響しない。
2005348410.tif 000148
2005348410.tif 000149
ａｏ． ｅｉｃ＿ｅｒｒ＿ｉｎｔ＿ｅｎ
2005348410.tif 000150
2005348410.tif 000151
ａｐ． ｅｉｃ＿ｔｅｓｔ
2005348410.tif 000152
ａｑ． ｅｉｃ＿ｐｏｂ
2005348410.tif 000153
ａｒ． ｅｉｃ＿ｈｉｇｈ＿ａｄｄｒ
2005348410.tif 000154
ａｓ． ｅｉｃ＿ｗｔｌｂ＿ｖ
2005348410.tif 000155
ａｔ． ｅｉｃ＿ｗｔｌｂ＿ｐ
2005348410.tif 000156
ａｕ． ｅｉｃ＿ｍｍｕ＿ｖ
注：このレジスタの値は、ＭＭＵがページフォールトエラーあるいはＭＭＵからＰＣＩバスのエラーにより無効でないなら、いつでも変更可能である。
2005348410.tif 000157
ａｖ． ｅｉｃ＿ｍｍｕ＿ｐ
注：このレジスタの値は、ＭＭＵがページフォールトエラーあるいはＭＭＵからＰＣＩバスのエラーにより無効でないなら、いつでも変更可能である。
2005348410.tif 000158
ａｗ． ｅｉｃ＿ｉｐ＿ａｄｄｒ
注：このレジスタの値はＩＢＤがＩＢｕｓからＰＣＩバスへのエラーによって無効でないならいつでも変更可能である。
2005348410.tif 000159
2005348410.tif 000160
ａｘ． ｅｉｃ＿ｒｐ＿ａｄｄｒ
注：このレジスタの値はＲＢＲがＲＢｕｓからＰＣＩバスへのエラーによって無効でないなら、いつでも変更可能である。
2005348410.tif 000161
ａｙ． ｅｉｃ＿ｉｇ＿ａｄｄｒ注：このレジスタの値はＧＢＣが汎用バスのエラーによって無効でないなら、いつでも変更可能である。
2005348410.tif 000162
ａｚ． ｅｉｃ＿ｒｇ＿ａｄｄｒ
注：このレジスタの値はＧＢＣが汎用バスのエラーによって無効でないなら、いつでも変更可能である。
2005348410.tif 000163
2005348410.tif 000164
ＰＣＩバスコンフィギュレーション空間のエイリアス
１６ワードからなるＰＣＩバスコンフィギュレーション空間は０ｘｃ０から０ｘｃｆまでのアドレスで示されるレジスタにエイリアスされている。
ローカルメモリコントローラレジスタ
ｂａ． ｌｍｉ＿ｃｆｇ
2005348410.tif 000165
2005348410.tif 000166
このレジスタはＬＭＣの処理モードとパラメータを決定するのに用いられる多くのコンフィギュレーションビットと制御ビットを含む。ｓｄｒａｍ＿１ピンがハイの時ＳＤＲＡＭ処理を特別に参照するビットは全く影響を持たない。 このレジスタはｃｌｋｉｎの周波数が８０ＭＨｚのとき３．２マイクロ秒のリフレッシュ間隔であるようなリセット値０ｘ２００００１００をもつ。すべての特別なモードや機能は電源投入時には無効であり、すべてのアクセス権限は等しく０に設定される。リフレッシュはリセット時に有効であるが、ほかのモジュールは無効（Ｅ＝０）である。リフレッシュはＥビットに影響されない。
ｂｂ． ｌｍｉ＿ｓｔａｔ
2005348410.tif 000167
2005348410.tif 000168
ステータスレジスタはマシン内部の情報と同様にモジュールのアクティブや未決定ビットからなる。ステートマシンはＣＢｕｓインターフェースの２倍のクロックで駆動されており、従って最新の８０ＭＨｚクロック２サイクルそれぞれの状態情報を保持するのには２フィールド必要である。
ｂｃ． ｌｍｉ＿ｅｒｒ＿ｉｎｔ
2005348410.tif 000169
エラーと割り込みのステータスレジスタは割り込み、例外、エラー状態の情報を保持する。レジスタは読み書きでき、読み込みはステータス情報を返し、特定ビットへの１の書き込みはそのビットをリセットする。０の書き込みはそのビットに対して全く影響を持たない。
2005348410.tif 000170
2005348410.tif 000171
このレジスタはリセット値０ｘ００００００００を持たなくてはならず、これは割り込み及びエラーが発生していないことを示す。予約ビットは常に０であり決して状態を変更できない。
ｂｄ． ｌｍｉ＿ｅｒｒ＿ｉｎｔ＿ｅｎレジスタ
2005348410.tif 000172
エラー、例外、割り込み有効レジスタはエラー、例外割り込み信号の有効、無効の選択に用いられる。レジスタは読み書きできる。このレジスタはｌｍｉ＿ｅｒｒ＿ｉｎｔレジスタ内のエラー、例外、割り込みそれぞれに基づいて、ビット単位で有効化するのに用いられる。このレジスタのビットとｌｍｉ＿ｅｒｒ＿ｉｎｔレジスタのビットとの間には１対１の対応がある。もしｌｍｉ＿ｅｒｒ＿ｉｎｔ＿ｅｎレジスタの特定のビットがハイになったらｌｍｉ＿ｅｒｒ＿ｉｎｔレジスタの対応するビットが有効になり、それがハイであるならば、ＬＭＣモジュールエラー、例外あるいは割り込み信号、ｃ＿ｅｒｒ、ｃ＿ｅｘｐ、あるいはｃ＿ｉｎｔが発生できる。もしｌｍｉ＿ｅｒｒ＿ｉｎｔ＿ｅｎレジスタの特定のビットがクリアされたらたらｌｍｉ＿ｅｒｒ＿ｉｎｔレジスタの対応するビットが無効になり、ｃ＿ｅｒｒ、ｃ＿ｅｘｐあるいはｃ＿ｉｎｔを発生させることはできない。ＬＭＣには例外はないので、このレジスタのｅｘｐ＿ｍａｓｋビットは全く影響せず、すべて予約である。このレジスタのリセット値はすべてのエラー及び割り込み源を無効にする０ｘ００００００００である。使用されないビットは常に０であり、ハイにセットすることはできない。
ｂｅ． ｌｍｉ＿ｄｃｆｇ
2005348410.tif 000173
2005348410.tif 000174
このコンフィギュレーションレジスタはＤＲＡＭチップを使用する場合のサイズやコンフィギュレーションを決定する設計パラメータを保持する。 このレジスタはすべてのタイミング制限の値を最大値にするようなリセット値０ｘ０００７ｆｆ８０を保持する。
ｂｆ． ｌｍｉ＿ｍｏｄｅ レジスタ
2005348410.tif 000175
このコンフィギュレーションレジスタは初期化処理の一環としてＳＤＲＡＭモードレジスタに書き込まれる情報を保持する。このレジスタは常に読み書き可能で、初期化ビットをセットすることによってＳＤＲＡＭに書き込んでも良い。このレジスタはリセット値０ｘ００３７をもつ。この有用なデフォルト値は電源投入プリチャージ後あるいはレベル１のリセット後直ちに要求される。これは読み込み遅延を３クロックに設定し、バースト長をシーケンシャルラップを用いたフルページに設定する。あらゆるリセットの後、もしｓｄｒａｍ＿１ピンがローであれば、ＳＤＲＡＭモードレジスタを初期的にプログラムするために、初期化ビットはセットされる。モードレジスタの書き込み実行後、このビットは自動的にゼロにクリアされる。
周辺インターフェースレジスタ
ｂｇ． ｐｉｃ＿ｃｆｇ レジスタ
2005348410.tif 000176
2005348410.tif 000177
2005348410.tif 000178
ｂｈ． ｐｉｃ＿ｓｔａｔ
2005348410.tif 000179
2005348410.tif 000180
ｂｉ． ｐｉｃ＿ｅｒｒ＿ｉｎｔ
ｐｉｃ＿ｅｒｒ＿ｉｎｔレジスタのエラーおよび割り込みビットはＰＩＣのみによりセットされ、ソフトウェアのみによってリセットされる。それぞれのビットは１を書き込むことでリセットされる
2005348410.tif 000181
2005348410.tif 000182
2005348410.tif 000183
ｂｊ． ｐｉｃ＿ｅｒｒ＿ｉｎｔ＿ｅｎ
2005348410.tif 000184
2005348410.tif 000185
ｂｋ． ｐｉｃ＿ａｂｕｓ＿ｃｆｇ
2005348410.tif 000186
ｂｌ． ｐｉｃ＿ａｂｕｓ＿ａｄｄｒ
2005348410.tif 000187
2005348410.tif 000188
ｂｍ． ｐｉｃ＿ｃｅｎｔ＿ｃｆｇ
ｐｉｃ＿ｃｅｎｔ＿ｃｆｇレジスタはセントロニクスモードが有効の場合に、すべてのインターフェースの局面を制御する読み込み／書き込み信号及び読み込み専用ステータス信号を含んでいる。
2005348410.tif 000189
2005348410.tif 000190
ｂｎ． ｐｉｃ＿ｃｅｎｔ＿ｄｉｒ
2005348410.tif 000191
2005348410.tif 000192
ｂｏ． ｐｉｃ＿ｒｅｖｅｒｓｅ＿ｃｆｇ
2005348410.tif 000193
ｂｐ． ｐｉｃ＿ｔｉｍｅｒ０
2005348410.tif 000194
ｂｑ． ｐｉｃ＿ｔｉｍｅｒ１
2005348410.tif 000195
データキャッシュコントローラレジスタ
ｂｒ． ｄｃｃ＿ｃｆｇ１
2005348410.tif 000196
ｂｓ． ｄｃｃ＿ｃｆｇ２
2005348410.tif 000197
2005348410.tif 000198
2005348410.tif 000199
ｂｔ． ｄｃｃ＿ｓｔａｔ
2005348410.tif 000200
ｂｕ． ｄｃｃ＿ｅｒｒ＿ｉｎｔ
2005348410.tif 000201
ｂｖ． ｄｃｃ＿ｅｒｒ＿ｉｎｔ＿ｅｎ
2005348410.tif 000202
ｂｗ． ｄｃｃ＿ｌｖ０
2005348410.tif 000203
2005348410.tif 000204
ｂｘ． ｄｃｃ＿ｌｖ１
2005348410.tif 000205
ｂｙ． ｄｃｃ＿ｌｖ２
2005348410.tif 000206
ｂｚ． ｄｃｃ＿ｌｖ３
2005348410.tif 000207
ｃａ． ｄｃｃ＿ａｄｄｒ
2005348410.tif 000208
ｃｂ． ｄｃｃ＿ｒａｄｄｒｂ
2005348410.tif 000209
2005348410.tif 000210
ｃｃ． ｄｃｃ＿ｒａｄｄｒｃ
2005348410.tif 000211
ｃｄ． ｄｃｃ＿ｔｅｓｔ
2005348410.tif 000212
2005348410.tif 000213
オペランドオーガナイザレジスタ オペランドオーガナイザレジスタには同様の２つのオペランドオーガナイザが存在する：オペランドオーガナイザＢとオペランドオーガナイザＣである。これらの２つのオペランドオーガナイザ用のレジスタはここに記述されている。
ｃｅ． ｏｏｎ＿ｃｆｇ（ｏｏｂ＿ｃｆｇ＝０ｘ７０，ｏｏｃ＿ｃｆｇ＝０ｘ８０）
2005348410.tif 000214
ｃｆ． ｏｏｎ＿ｓｔａｔ（ｏｏｂ＿ｃｆｇ＝０ｘ７１，ｏｏｃ＿ｃｆｇ＝０ｘ８１）
2005348410.tif 000215
2005348410.tif 000216
ｃｇ． ｏｏｎ＿ｅｒｒ＿ｉｎｔ（ｏｏｂ＿ｅｒｒ＿ｉｎｔ＝０ｘ７２，ｅｒｒ＿ｉｎｔ＝０ｘ８２）
2005348410.tif 000217
ｃｈ． ｏｏｎ＿ｅｒｒ＿ｉｎｔ＿ｅｎ（ｏｏｂ＿ｅｒｒ＿ｉｎｔ＿ｅｎ＝０ｘ７３，ｅｒｒ＿ｉｎｔ＿ｅｎ＝０ｘ８３）
2005348410.tif 000218
ｃｉ． ｏｏｎ＿ｄｍｒ（ｏｏｂ＿ｄｍｒ＝０ｘ７４，ｏｏｃ＿ｄｍｒ＝０ｘ８４）
2005348410.tif 000219
2005348410.tif 000220
2005348410.tif 000221
2005348410.tif 000222
ｃｊ． ｏｏｎ＿ｓｕｂｓｔ（ｏｏｂ＿ｓｕｂｓｔ＝０ｘ７５，ｏｏｃ＿ｓｕｂｓｔ＝０ｘ８５）
2005348410.tif 000223
ｃｋ． ｏｏｎ＿ｃｄｐ（ｏｏｂ＿ｃｄｐ＝０ｘ７６，ｏｏｃ＿ｃｄｐ＝０ｘ８６）
2005348410.tif 000224
ｃｌ． ｏｏｎ＿ｌｅｎ（ｏｏｂ＿ｌｅｎ＝０ｘ７７，ｏｏｃ＿ｌｅｎ＝０ｘ８
2005348410.tif 000225
ｃｍ． ｏｏｎ＿ｓａｉｄ（ｏｏｂ＿ｓａｉｄ＝０ｘ７８，ｏｏｃ＿ｓａｉｄ＝０ｘ８８）
2005348410.tif 000226
ｃｎ． ｏｏｎ＿ｔｉｌｅ（ｏｏｂ＿ｔｉｌｅ＝０ｘ７９，ｏｏｃ＿ｔｉｌｅ＝０ｘ８９）
2005348410.tif 000227
2005348410.tif 000228
ピクセルオーガナイザレジスタ
ｃｏ． ｐｏ＿ｃｆｇ
2005348410.tif 000229
2005348410.tif 000230
ｃｐ． ｐｏ＿ｓｔａｔ
2005348410.tif 000231
2005348410.tif 000232
ｃｑ． ｐｏ＿ｅｒｒ＿ｉｎｔ
2005348410.tif 000233
ｃｒ． ｐｏ＿ｅｒｒ＿ｉｎｔ＿ｅｎ
2005348410.tif 000234
ｃｓ． ｐｏ＿ｄｍｒ
2005348410.tif 000235
2005348410.tif 000236
2005348410.tif 000237
2005348410.tif 000238
ｃｔ． ｐｏ＿ｓｕｂｓｔ
2005348410.tif 000239
ｃｕ． ｐｏ＿ｃｄｐ
2005348410.tif 000240
ｃｖ． ｐｏ＿ｌｅｎ
2005348410.tif 000241
ｃｗ． ｐｏ＿ｓａｉｄ
2005348410.tif 000242
ｃｘ． ｐｏ＿ｉｄｒ
2005348410.tif 000243
2005348410.tif 000244
ｃｙ． ｐｏ＿ｍｕｖ＿ｖａｌｉｄ
2005348410.tif 000245
ｃｚ． ｐｏ＿ｍｕｖ
2005348410.tif 000246
主データパスレジスタ
ｄａ． ｍｄｐ＿ｃｆｇ すべてのビットは０にリセットされる。
2005348410.tif 000247
2005348410.tif 000248
ｄｂ． ｍｄｐ＿ｓｔａｔ
すべてのビットは０にリセットされる。
2005348410.tif 000249
2005348410.tif 000250
ｄｃ． ｍｄｐ＿ｅｒｒ＿ｉｎｔ
すべてのビットは０にリセットされる。
2005348410.tif 000251
2005348410.tif 000252
ｄｄ． ｍｄｐ＿ｅｒｒ＿ｉｎｔ＿ｅｎ
すべてのビットは０にリセットされる。
2005348410.tif 000253
2005348410.tif 000254
ｄｅ． ｍｄｐ＿ｔｅｓｔ すべてのビットは０にリセットされる。
2005348410.tif 000255
ｄｆ ｍｄｐ＿ｏｐ１ すべてのビットは０にリセットされる。
2005348410.tif 000256
2005348410.tif 000257
2005348410.tif 000258
2005348410.tif 000259
ｄｇ ｍｄｐ＿ｏｐ２ すべてのビットは０にリセットされる。
2005348410.tif 000260
2005348410.tif 000261
2005348410.tif 000262
2005348410.tif 000263
ｄｈ ｍｄｐ＿ｐｏｒ すべてのビットは０にリセットされる。
2005348410.tif 000264
ｄｉ ｍｄｐ＿ｂｉ すべてのビットは０にリセットされる。ｍｄｐ＿ｂｉレジスタは種々のモードの様々なものに用いられる。
2005348410.tif 000265
2005348410.tif 000266
ｄｊ ｍｄｐ＿ｂｍ すべてのビットは０にリセットされる。ｍｄｐ＿ｂｍレジスタは異なるモードの異なるものに用いられる。
2005348410.tif 000267
ｄｋ ｍｄｐ＿ｌｅｎ すべてのビットは０にリセットされる
2005348410.tif 000268
2005348410.tif 000269
ＪＰＥＧ符号化器レジスタ ｄｌ ｊｃ＿ｃｆｇ
2005348410.tif 000270
2005348410.tif 000271
2005348410.tif 000272
2005348410.tif 000273
ｄｍ ｊｃ＿ｓｔａｔ
2005348410.tif 000274
ｄｎ ｊｃ＿ｅｒｒ＿ｉｎｔ
2005348410.tif 000275
ｄｏ ｊｃ＿ｅｒｒ＿ｉｎｔ＿ｅｎ
2005348410.tif 000276
2005348410.tif 000277
ｄｐ ｊｃ＿ｒｓｉ
2005348410.tif 000278
ｄｑ ｊｃ＿ｄｅｃｏｄｅ
2005348410.tif 000279
2005348410.tif 000280
ｄｒ ｊｃ＿ｒｅｓ
2005348410.tif 000281
2005348410.tif 000282
ｄｓ ｊｃ＿ｔａｂｌｅ＿ｓｅｌ
2005348410.tif 000283
結果オーガナイザレジスタ
ｄｔ ｒｏ＿ｃｆｇ
2005348410.tif 000284
2005348410.tif 000285
ｄｕ ｒｏ＿ｓｔａｔ
2005348410.tif 000286
2005348410.tif 000287
ｄｖ ｒｏ＿ｅｒｒ＿ｉｎｔ
2005348410.tif 000288
ｄｗ ｒｏ＿ｅｒｒ＿ｉｎｔ＿ｅｎ
2005348410.tif 000289
ｄｘ ｒｏ＿ｄｍｒ
2005348410.tif 000290
2005348410.tif 000291
2005348410.tif 000292
ｄｙ ｒｏ＿ｓｕｂｓｔ
2005348410.tif 000293
ｄｚ ｒｏ＿ｃｄｐ
2005348410.tif 000294
ｅａ ｒｏ＿ｌｅｎ
2005348410.tif 000295
ｅｂ ｒｏ＿ｓａ
2005348410.tif 000296
ｅｃ ｒｏ＿ｉｄｒ
2005348410.tif 000297
ｅｄ ｒｏ＿ｖｂａｓｅ
2005348410.tif 000298
ｅｅ ｒｏ＿ｃｕｔ
2005348410.tif 000299
ｅｆ ｒｏ＿ｌｍｔ
2005348410.tif 000300
ＰＣＩコンフィギュレーション空間のエイリアス ＰＣＩコンフィギュレーション空間は２５６バイトの、ＰＣＩによって定義されたレジスタのブロックであり、ホストがＰＣＩデバイスをコンフィギュレーションしたり、その状態を読んだりすることを認めている。それはＰＣＩコンフィギュレーションサイクルを用いてアクセスされる。レジスタはまたコプロセッサの内部メモリの読み込み専用エリアにミラーされており、従ってＰＣＩの通常のメモリサイクルを用いて読むことができる。ＥＩＣに実装されているコンフィギュレーション空間のフォーマットを表１．１４１．１に示す。
表１．１４１．１ コプロセッサＰＣＩ構成の空間的レイアウト
2005348410.tif 000301
2005348410.tif 000302
予約のレジスタと実装されたレジスタにおける予約のビットは読み込みに対しては０を返し、また書き込みによって影響しない。０ｘ４０−０ｘｆｆの範囲のコンフィギュレーション空間のアドレスもまた予約である。ベンダー専用のコンフィギュレーションレジスタは定義されない。
ｅｇ ベンダーＩＤ
このレジスタは読み込み専用である。ＣＩＳＲＡのベンダーＩＤは０ｘ１１ＡＣである。
ｅｈ デバイスＩＤ
このレジスタは読み込み専用である。コプロセッサのデバイスＩＤは０ｘ０００１である。デバイスＩＤフィールドは二つの８ビットのフィールドに分割されている：最上位の８ビットはデバイスの特徴をを示す番号（０ｘ０はコプロセッサ）で、最下位の８ビットはそのデバイスのバージョン番号（０ｘ１はコプロセッサのバージョン）を示す。
ｅｉ コマンドレジスタ
コマンドレジスタのフィールドの定義を表１．１４２に示す。このレジスタのすべての予約されていないビットは読みこみ／書き込みができる。リセット後にはこのレジスタは０ｘ００００にセットされる。
2005348410.tif 000303
2005348410.tif 000304
ｅｊ ステータスレジスタ ステータスレジスタのフィールドの定義を表１．１４３に示す。このレジスタの読み込みは通常通りである。このレジスタのいくつかのビットは読み込み専用である。その他のビットはコプロセッサのみにより１にセットされ、ホストのみによって０にリセットされる（テストモードを除く）。ホストはそのビットに１を書き込むことでリセットする；０の書き込みは意味をなさない。リセット後にはこのレジスタは０ｘ０２８０にセットされる。
2005348410.tif 000305
2005348410.tif 000306
ｅｋ リビジョンＩＤ これは読み込み専用のレジスタである。コプロセッサの初期リビジョンＩＤは０ｘ０１である。 ｅｌ クラスコード これは読み込み専用のレジスタである。コプロセッサはＰＣＩＳＩＧの定義されたクラスコードに適さないのでこのレジスタは０ｘＦＦ００００にセットされる。
ｅｍ キャッシュラインサイズ
これは３２ビットワード単位でシステムのキャッシュラインサイズを決定する読み書き可能なレジスタである。これはコプロセッサがメモリ読み込みラインやメモリ多重読み込みコマンドを使用するときに決定する。コプロセッサはこのレジスタの０から２５５までの値をサポートする。このレジスタにおける０はメモリ読み込みラインおよびメモリ多重読み込みの形式を無効にする。このレジスタはリセット時には０ｘ００にセットされる。
ｅｎ 遅延タイマ
このレジスタはすべてのＰＣＩの処理にＣＰＵが使用する最大のクロック数を特定する読み書きできるレジスタである。コプロセッサはこのレジスタにおいて０から２５５の値をサポートする。このレジスタはリセット時には０ｘ００にセットされる。
ｅｏ ヘッダタイプ
この読み込み専用のレジスタは０ｘ００にセットされる。このことはコプロセッサがタイプ０のレイアウトのコンフィギュレーション空間を使用することを意味する。
ｅｐ ベースアドレス
この読み書き可能なレジスタはコプロセッサの内部レジスタ、内部メモリ、ローカルメモリ、及び汎用インターフェースをホストのメモリマップ内に配置するために用いられる。コプロセッサの様々なリソースは６４ＭＢ（すべてが使用される訳ではない）を占有し、従ってこのレジスタの先頭６ビットだけが書き込み可能である。残りのビットはすべて０にハード的に結線されている。このレジスタの下位の４ビットは読み込み専用の制御ビットであり、これらもまた０に結線されている。このことはレジスタがメモリ空間を参照することを意味し、コプロセッサがホスト側の３２ビット空間のどこにでもマッピングされ、コプロセッサのリソースがターゲットであるときはプリフェッチできないことを意味する。
ｅｑ サブシステムベンダーＩＤ
この読み込み専用レジスタはホストがシステムに実装されたＰＣＩボードのベンダーを識別できるようにする（ボード上のＰＣＩインターフェースに実装したコンポーネントのベンダーに対して）。このレジスタの内容はリセット時にＥＩＣコンフィギュレーションシリアルポートを用いてロードされる。
ｅｒ サブシステムＩＤ
この読み込み専用レジスタはホストがシステムに実装されたＰＣＩボードを識別できるようにする。このレジスタの内容はリセット時にＥＩＣコンフィギュレーションシリアルポートを用いてロードされる。このメカニズムはボードの機能あるいはコンフィギュレーションに必要な情報の外部からの符号化およびホストからの読み込みを可能にする。
ｅｓ 割り込みライン
この読み書きできるレジスタはシステムソフトウェアが割り込みラインルーティング情報を記録できる様にするために使用され、割り込みサービスソフトウェアによりアクセスできる。コプロセッサ内の処理には全く影響を与えない。このレジスタはリセット時には０ｘ００にセットされる。
ｅｔ 割り込みピン
この読み込み専用レジスタはハード的に０ｘ０１に結線されている。このことはコプロセッサがＰＣＩのｉｎｔａ＿１割り込みピンを使用することを示す。
ｅｕ Ｍｉｎ＿Ｇｎｔ
この読み込み専用レジスタはコプロセッサが要求する１／４マイクロ秒単位のバースト期間長をホストに示す。このレジスタの最適な値はまだ決まっていない。
ｅｖ Ｍａｘ＿Ｌａｔ
この読み込み専用レジスタは１／４マイクロ秒単位での、コプロセッサが要求するＰＣＩバスのゲインコントロール最大遅延をホストに示す。このレジスタの最適な値はまだ決まっていない。
１．１．４ 内部メモリマップ
本節ではコプロセッサの内部メモリマップ内のプレモジュールデータエリアに生ずるオブジェクトの詳細について述べる。
2005348410.tif 000307
2005348410.tif 000308
2005348410.tif 000309
2005348410.tif 000310
2005348410.tif 000311
１．１．５ メモリワードフィールド
ａ ｅｉｃ＿ｐｔｐ
2005348410.tif 000312
【図面の簡単な説明】
【０５４７】
【図１】ホストコンピュータ環境内のラスタ画像コプロセッサの動作を示す図
【図２】図１のラスタ画像コプロセッサをより詳細に示した図
【図３】ラスタ画像コプロセッサのメモリマップを示す図
【図４】ＣＰＵ，命令キュー、命令オペランド、共有メモリ中の結果、コプロセッサ間の関係を示す図
【図５】命令生成部、メモリ管理部、キュー管理部、コプロセッサ間の関係を示す図
【図６】命令をペンディング命令キューから読み込み、終了命令キューに配置するグラフィックスコプロセッサの動作を示す図
【図７】命令キューの固定長巡回バッファ実装を示し、バッファが溢れるまで待機しする必要性を説明する図
【図８】コプロセッサにおいて用いられる命令実行ストリームを示す図
【図９】命令実行フローチャート、
【図１０】コプロセッサにおいて用いられる標準命令ワードフォーマットを示す図
【図１１】標準命令の命令ワードフィールドを示す図
【図１２】標準命令のデータワードフィールドを示す図
【図１３】図２の命令制御部を模式的に示す図
【図１４】図１３の実行制御部をより詳細に示した図
【図１５】命令制御部の状態遷移図
【図１６】図１３の命令復号部を示す図
【図１７】図１６の命令シーケンサをより詳細に示した図
【図１８】図１６のＩＤシーケンサの状態遷移図
【図１９】図１３のプレフェッチバッファ制御部をより詳細に示した図
【図２０Ａ】、
【図２０Ｂ】コプロセッサで用いられるレジスタ記憶とモジュール間関連の標準形式を示す図
【図２１】コプロセッサにおいて用いられる制御バス処理のフォーマットを示す図
【図２２】コプロセッサの一部内のデータフローを示す図
【図２３】コプロセッサにおいて用いられるさまざまなデータ再フォーマット例を示す図
【図２４】コプロセッサにおいて用いられるさまざまなデータ再フォーマット例を示す図
【図２５】コプロセッサにおいて用いられるさまざまなデータ再フォーマット例を示す図
【図２６】コプロセッサにおいて用いられるさまざまなデータ再フォーマット例を示す図
【図２７】コプロセッサにおいて用いられるさまざまなデータ再フォーマット例を示す図
【図２８】コプロセッサにおいて用いられるさまざまなデータ再フォーマット例を示す図
【図２９】コプロセッサにおいて用いられるさまざまなデータ再フォーマット例を示す図
【図３０】コプロセッサにおいて実行されるフォーマット変換を示す図
【図３１】コプロセッサにおいて実行されるフォーマット変換を示す図
【図３２】コプロセッサにおいて実行される入力データ変換処理を示す図
【図３３】コプロセッサにおいて実行されるさまざまなデータ変換を示す図
【図３４】コプロセッサにおいて実行されるさまざまなデータ変換を示す図
【図３５】コプロセッサにおいて実行されるさまざまなデータ変換を示す図
【図３６】コプロセッサにおいて実行されるさまざまなデータ変換を示す図
【図３７】コプロセッサにおいて実行されるさまざまなデータ変換を示す図
【図３８】コプロセッサにおいて実行されるさまざまなデータ変換を示す図
【図３９】コプロセッサにおいて実行されるさまざまなデータ変換を示す図
【図４０】コプロセッサにおいて実行されるさまざまなデータ変換を示す図
【図４１】コプロセッサにおいて実行されるさまざまなデータ変換を示す図
【図４２】コプロセッサにおいて実行されるさまざまな内部から出力データ変換を示す図
【図４３】コプロセッサにおいて実行されるさまざまなデータ変換例を示す図
【図４４】コプロセッサにおいて実行されるさまざまなデータ変換例を示す図
【図４５】コプロセッサにおいて実行されるさまざまなデータ変換例を示す図
【図４６】コプロセッサにおいて実行されるさまざまなデータ変換例を示す図
【図４７】コプロセッサにおいて実行されるさまざまなデータ変換例を示す図
【図４８】どのデータ変換が用いられるべきかを決定する内部レジスタで用いられるさまざまなフィールドを示す図
【図４９】データ正規化を用いるグラフィックスサブシステムのブロック図
【図５０】データ正規化装置の回路図
【図５１】合成処理において実行されるピクセル処理を示す図
【図５２】合成処理のための命令ワードフォーマットを示す図
【図５３】合成処理のためのデータワードフォーマットを示す図
【図５４】タイル処理のための命令ワードフォーマットを示す図
【図５５】画像に対するタイル命令の動作を示す図
【図５６】色値を再マッピングするための色区間／区間内位置テーブルの利用処理を示す図
【図５７】コプロセッサのＭＵＶバッファ内の区間／区間内位置テーブルの格納形式を示す図
【図５８】コプロセッサにおいて実行される補間を用いた色変換処理を示す図
【図５９】コプロセッサにおいて実行されるエッジでの色変換処理の改善処理を示す図
【図６０】コプロセッサにおいて実行される１出力色のための色空間変換処理を示す図
【図６１】単一色出力色空間変換を用いたときのコプロセッサのキャッシュ内でのメモリ格納を示す図
【図６２】複数色空間変換で用いられる手法を示す図
【図６３】複数色空間変換処理において用いられるキャッシュのためのアドレス再マッピング処理を示す図
【図６４】色空間変換命令における命令ワードフォーマットを示す図
【図６５】複数色変換手法を示す図
【図６６】コプロセッサで実行されるＪＰＥＧ変換処理でのＭＣＵの生成を説明する図
【図６７】コプロセッサで実行されるＪＰＥＧ変換処理でのＭＣＵの生成を説明する図
【図６８】コプロセッサのＪＰＥＧ符号化部の構造を示す図
【図６９】図６８の量子化部をより詳細に示す図
【図７０】図６８のハフマン符号化部をより詳細に示す図
【図７１】ハフマン符号化部と復号部とを示す図
【図７２】ハフマン符号化部と復号部とを示す図
【図７３】コプロセッサで用いられるＪＰＥＧデータの削除・制約処理を説明する図
【図７４】コプロセッサで用いられるＪＰＥＧデータの削除・制約処理を説明する図
【図７５】コプロセッサで用いられるＪＰＥＧデータの削除・制約処理を説明する図
【図７６】ＪＰＥＧ命令の命令ワードフォーマットを示す図
【図７７】一般の離散コサイン変換装置（従来例）のブロック図
【図７８】従来例のＤＣＴ装置の算術データパスを示す図
【図７９】コプロセッサで用いられるＤＣＴ装置のブロック図
【図８０】図７９の算術回路をより詳細に示すブロック図
【図８１】図７９のＤＣＴ装置の算術データパスを示す図
【図８２】ＪＰＥＧフォーマットのように符号化されていないビットフィールド（バイト整列されているものとされていないもの）がインタリーブされた代表的なハフマン符号化データを示す図
【図８３Ａ】、
【図８３Ｂ】図８４のＪＰＥＧデータのハフマン復号部の全体の構造をより詳細に示した図
【図８４】ＪＰＥＧデータのハフマン復号部の全体の構造を示す図
【図８５】バイト整列された符号化されていないビットフィールドを入力データから削除するストリッパブロック中のデータ処理を示し、ストリッパから出力されるデータに対応するタグ符号の例をも示す図
【図８６Ａ】、
【図８６Ｂ】データプレシフタの構成とデータフローを示す図
【図８７Ａ】、
【図８７Ｂ】図８１の復号部の制御ロジックを示す図
【図８８Ａ】、
【図８８Ｂ】マーカプレシフタの構成とデータフローを示す図
【図８９】ＪＰＥＧ符号化においてハフマン符号値を復号する組み合わせ回路のブロック図、
【図９０】パディング領域の概念とパディングビットの復号部のブロック図
【図９１】復号部から出力され、コプロセッサにおいて用いられるデータフォーマットの例を示す図
【図９２】画像変換命令において用いられる手法を示す図
【図９３】画像変換命令における命令ワードフォーマットを示す図
【図９４】コプロセッサで用いられる画像変換カーネルのフォーマットを示す図
【図９５】コプロセッサで用いられる画像変換カーネルのフォーマットを示す図
【図９６】コプロセッサで用いられる画像変換のためのインデックステーブルの利用処理を示す図
【図９７】変換や畳込みで用いる命令のためのデータフィールドフォーマットを示す図、
【図９８】命令ワードのｂｐフィールドの説明図
【図９９】コプロセッサで用いられる畳込み処理を示す図
【図１００】コプロセッサで用いられる畳込み命令の命令ワードフォーマット図
【図１０１】コプロセッサで用いられる行列乗算の命令ワードフォーマット図、
【図１０２】コプロセッサで用いられる階層的画像操作処理を示す図
【図１０３】コプロセッサで用いられる階層的画像操作処理を示す図
【図１０４】コプロセッサで用いられる階層的画像操作処理を示す図
【図１０５】コプロセッサで用いられる階層的画像操作処理を示す図
【図１０６】階層的画像命令での命令ワード符号を示す図
【図１０７】コプロセッサで用いられるフロー制御命令の命令ワード符号を示す図
【図１０８】ピクセルオーガナイザをより詳細に示す図
【図１０９】ピクセルオーガナイザにおけるオペランドフェッチ部をより詳細に示す図
【図１１０】コプロセッサで用いられる種々の格納フォーマットを示す図
【図１１１】コプロセッサで用いられる種々の格納フォーマットを示す図
【図１１２】コプロセッサで用いられる種々の格納フォーマットを示す図
【図１１３】コプロセッサで用いられる種々の格納フォーマットを示す図
【図１１４】コプロセッサで用いられる種々の格納フォーマットを示す図
【図１１５】コプロセッサのピクセルオーガナイザにおけるＭＵＶアドレス生成部をより詳細に示す図
【図１１６】コプロセッサで用いられる多重値（ＭＵＶ）バッファのブロック図
【図１１７】図１１６の符号化器の構造を示す図
【図１１８】図１１６の復号器の構造を示す図
【図１１９】ＪＰＥＧモード（ピクセル分解）において読み出しアドレスを生成する図１１６のアドレス生成部の構造を示す図
【図１２０】ＪＰＥＧモード（ピクセル復元）において読み出しアドレスを生成する図１１６のアドレス生成部の構造を示す図
【図１２１】図１１６の記憶装置を備えるメモリモジュールの構成を示す図
【図１２２】読み出しアドレスをメモリモジュールに多重化する回路の構造を示す図
【図１２３】単一ルックアップテーブルモードで動作するバッファ内にルックアップテーブルエントリがどのように格納されるかを示す図
【図１２４】多重ルックアップテーブルモードで動作するバッファ内にルックアップテーブルエントリがどのように格納されるかを示す図
【図１２５】ＪＰＥＧモード（ピクセル分解）で動作するバッファ内にピクセルがどのように格納されるかを示す図
【図１２６】ＪＰＥＧモード（ピクセル復元）で動作するバッファから単一カラーがどのように格納されるかを示す図
【図１２７】コプロセッサの結果オーガナイザの構造をより詳細に示す図
【図１２８】コプロセッサのオペランドオーガナイザの構造をより詳細に示す図
【図１２９】コプロセッサにおいて用いられる主データパス部のためのコンピュータアーキテクチャのブロック図
【図１３０】更なる処理のために入力データオブジェクトを受け取り、格納し、再配列するための入力インターフェースのブロック図
【図１３１】入力データオブジェクトに対して算術演算を実行するための画像データプロセッサのブロック図
【図１３２】入力データオブジェクトの１つのチャネルに対して算術演算を実行するためのカラーチャネルプロセッサのブロック図
【図１３３】カラーチャネルプロセッサにおける多機能ブロックのブロック図
【図１３４】合成動作のためのブロック図
【図１３５】スキャンラインの逆変換を示す図
【図１３６】指定されたピクセルにおける値を計算するために必要なステップのブロック図
【図１３７】画像変換エンジンのブロック図
【図１３８】カーネルデスクリップションにおける２つのフォーマットを示す図
【図１３９】ｂｐフィールドの定義と解釈を示す図
【図１４０】行列乗算を実行する乗算・加算部のブロック図
【図１４１】コプロセッサでのキャッシュ及びキャッシュ制御部における制御、アドレス及びデータフローを示す図
【図１４２】キャッシュのメモリ構成を示す図
【図１４３】コプロセッサにおけるキャッシュ制御部のためのアドレスフォーマットを示す図
【図１４４Ａ】、
【図１４４Ｂ】カラーチャネルプロセッサにおける多機能ブロックのブロック図
【図１４５】図１４４のキャッシュ及びキャッシュコントローラのコプロセッサ入力インターフェーススイッチを示す図
【図１４６】主アドレス及びデータパスを示すコプロセッサの４ポートダイナミックローカルメモリ制御部を示す図
【図１４７】図１４６の制御部における状態機構図
【図１４８】図１４６の仲裁部における機能を詳細にリストした擬似コードを示す図
【図１４９】図１４６において用いられる要求者プライオリティビットの構造および用語を示す図
【図１５０】コプロセッサにおける外部インターフェース制御部をより詳細に示す図
【図１５１】コプロセッサで用いられる物理アドレスへのマッピング処理又は物理アドレスからのマッピング処理を示す図
【図１５２】コプロセッサで用いられる物理アドレスへのマッピング処理又は物理アドレスからのマッピング処理を示す図
【図１５３】コプロセッサで用いられる物理アドレスへのマッピング処理又は物理アドレスからのマッピング処理を示す図
【図１５４】コプロセッサで用いられる物理アドレスへのマッピング処理又は物理アドレスからのマッピング処理を示す図
【図１５５Ａ】、
【図１５５Ｂ】図１５０におけるＩＢｕｓ受信部をより詳細に示す図
【図１５６Ａ】、
【図１５６Ｂ】図２におけるＲＢｕｓ受信部をより詳細に示す図
【図１５７Ａ】、
【図１５７Ｂ】図１５０におけるメモリ管理部をより詳細に示す図
【図１５８】図２における周辺インターフェース制御部をより詳細に示す図
【図１】
2005348410.tif 000313
【図２】
2005348410.tif 000314
【図３】
2005348410.tif 000315
【図４】
2005348410.tif 000316
【図５】
2005348410.tif 000317
【図６】
2005348410.tif 000318
【図７】
2005348410.tif 000319
【図８】
2005348410.tif 000320
【図９】
2005348410.tif 000321
【図１０】
2005348410.tif 000322
【図１１】
2005348410.tif 000323
【図１２】
2005348410.tif 000324
【図１３】
2005348410.tif 000325
【図１４】
2005348410.tif 000326
【図１５】
2005348410.tif 000327
【図１６】
2005348410.tif 000328
【図１７】
2005348410.tif 000329
【図１８】
2005348410.tif 000330
【図１９】
2005348410.tif 000331
【図２０Ａ】
2005348410.tif 000332
【図２０Ｂ】
2005348410.tif 000333
【図２１】
2005348410.tif 000334
【図２２】
2005348410.tif 000335
【図２３】
2005348410.tif 000336
【図２４】
2005348410.tif 000337
【図２５】
2005348410.tif 000338
【図２６】
2005348410.tif 000339
【図２７】
2005348410.tif 000340
【図２８】
2005348410.tif 000341
【図２９】
2005348410.tif 000342
【図３０】
2005348410.tif 000343
【図３１】
2005348410.tif 000344
【図３２】
2005348410.tif 000345
【図３３】
2005348410.tif 000346
【図３４】
2005348410.tif 000347
【図３５】
2005348410.tif 000348
【図３６】
2005348410.tif 000349
【図３７】
2005348410.tif 000350
【図３８】
2005348410.tif 000351
【図３９】
2005348410.tif 000352
【図４０】
2005348410.tif 000353
【図４１】
2005348410.tif 000354
【図４２】
2005348410.tif 000355
【図４３】
2005348410.tif 000356
【図４４】
2005348410.tif 000357
【図４５】
2005348410.tif 000358
【図４６】
2005348410.tif 000359
【図４７】
2005348410.tif 000360
【図４８】
2005348410.tif 000361
【図４９】
2005348410.tif 000362
【図５０】
2005348410.tif 000363
【図５１】
2005348410.tif 000364
【図５２】
2005348410.tif 000365
【図５３】
2005348410.tif 000366
【図５４】
2005348410.tif 000367
【図５５】
2005348410.tif 000368
【図５６】
2005348410.tif 000369
【図５７】
2005348410.tif 000370
【図５８】
2005348410.tif 000371
【図５９】
2005348410.tif 000372
【図６０】
2005348410.tif 000373
【図６１】
2005348410.tif 000374
【図６２】
2005348410.tif 000375
【図６３】
2005348410.tif 000376
【図６４】
2005348410.tif 000377
【図６５】
2005348410.tif 000378
【図６６】
2005348410.tif 000379
【図６７】
2005348410.tif 000380
【図６８】
2005348410.tif 000381
【図６９】
2005348410.tif 000382
【図７０】
2005348410.tif 000383
【図７１】
2005348410.tif 000384
【図７２】
2005348410.tif 000385
【図７３】
2005348410.tif 000386
【図７４】
2005348410.tif 000387
【図７５】
2005348410.tif 000388
【図７６】
2005348410.tif 000389
【図７７】
2005348410.tif 000390
【図７８】
2005348410.tif 000391
【図７９】
2005348410.tif 000392
【図８０】
2005348410.tif 000393
【図８１】
2005348410.tif 000394
【図８２】
2005348410.tif 000395
【図８３Ａ】
2005348410.tif 000396
【図８３Ｂ】
2005348410.tif 000397
【図８４】
2005348410.tif 000398
【図８５】
2005348410.tif 000399
【図８６Ａ】
2005348410.tif 000400
【図８６Ｂ】
2005348410.tif 000401
【図８７Ａ】
2005348410.tif 000402
【図８７Ｂ】
2005348410.tif 000403
【図８８Ａ】
2005348410.tif 000404
【図８８Ｂ】
2005348410.tif 000405
【図８９】
2005348410.tif 000406
【図９０】
2005348410.tif 000407
【図９１】
2005348410.tif 000408
【図９２】
2005348410.tif 000409
【図９３】
2005348410.tif 000410
【図９４】
2005348410.tif 000411
【図９５】
2005348410.tif 000412
【図９６】
2005348410.tif 000413
【図９７】
2005348410.tif 000414
【図９８】
2005348410.tif 000415
【図９９】
2005348410.tif 000416
【図１００】
2005348410.tif 000417
【図１０１】
2005348410.tif 000418
【図１０２】
2005348410.tif 000419
【図１０３】
2005348410.tif 000420
【図１０４】
2005348410.tif 000421
【図１０５】
2005348410.tif 000422
【図１０６】
2005348410.tif 000423
【図１０７】
2005348410.tif 000424
【図１０８】
2005348410.tif 000425
【図１０９】
2005348410.tif 000426
【図１１０】
2005348410.tif 000427
【図１１１】
2005348410.tif 000428
【図１１２】
2005348410.tif 000429
【図１１３】
2005348410.tif 000430
【図１１４】
2005348410.tif 000431
【図１１５】
2005348410.tif 000432
【図１１６】
2005348410.tif 000433
【図１１７】
2005348410.tif 000434
【図１１８】
2005348410.tif 000435
【図１１９】
2005348410.tif 000436
【図１２０】
2005348410.tif 000437
【図１２１】
2005348410.tif 000438
【図１２２】
2005348410.tif 000439
【図１２３】
2005348410.tif 000440
【図１２４】
2005348410.tif 000441
【図１２５】
2005348410.tif 000442
【図１２６】
2005348410.tif 000443
【図１２７】
2005348410.tif 000444
【図１２８】
2005348410.tif 000445
【図１２９】
2005348410.tif 000446
【図１３０】
2005348410.tif 000447
【図１３１】
2005348410.tif 000448
【図１３２】
2005348410.tif 000449
【図１３３】
2005348410.tif 000450
【図１３４】
2005348410.tif 000451
【図１３５】
2005348410.tif 000452
【図１３６】
2005348410.tif 000453
【図１３７】
2005348410.tif 000454
【図１３８】
2005348410.tif 000455
【図１３９】
2005348410.tif 000456
【図１４０】
2005348410.tif 000457
【図１４１】
2005348410.tif 000458
【図１４２】
2005348410.tif 000459
【図１４３】
2005348410.tif 000460
【図１４４Ａ】
2005348410.tif 000461
【図１４４Ｂ】
2005348410.tif 000462
【図１４５】
2005348410.tif 000463
【図１４６】
2005348410.tif 000464
【図１４７】
2005348410.tif 000465
【図１４８】
2005348410.tif 000466
【図１４９】
2005348410.tif 000467
【図１５０】
2005348410.tif 000468
【図１５１】
2005348410.tif 000469
【図１５２】
2005348410.tif 000470
【図１５３】
2005348410.tif 000471
【図１５４】
2005348410.tif 000472
【図１５５Ａ】
2005348410.tif 000473
【図１５５Ｂ】
2005348410.tif 000474
【図１５６Ａ】
2005348410.tif 000475
【図１５６Ｂ】
2005348410.tif 000476
【図１５７Ａ】
2005348410.tif 000477
【図１５７Ｂ】
2005348410.tif 000478
【図１５８】
2005348410.tif 000479