JP4227218B2 - 動的メモリ管理装置及びその制御方法 - Google Patents

動的メモリ管理装置及びその制御方法 Download PDF

Info

Publication number
JP4227218B2
JP4227218B2 JP16941698A JP16941698A JP4227218B2 JP 4227218 B2 JP4227218 B2 JP 4227218B2 JP 16941698 A JP16941698 A JP 16941698A JP 16941698 A JP16941698 A JP 16941698A JP 4227218 B2 JP4227218 B2 JP 4227218B2
Authority
JP
Japan
Prior art keywords
data
instruction
memory
coprocessor
bit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP16941698A
Other languages
English (en)
Other versions
JPH1185969A (ja
Inventor
メリック ロング ティモシー
リチャード ギブソン アイアン
アミーズ クリストファー
ストーニー グラハム
ジョン ウェブ マイケル
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from AUPO6491A external-priority patent/AUPO649197A0/en
Priority claimed from AUPO6483A external-priority patent/AUPO648397A0/en
Priority claimed from AUPO6487A external-priority patent/AUPO648797A0/en
Application filed by Canon Inc filed Critical Canon Inc
Publication of JPH1185969A publication Critical patent/JPH1185969A/ja
Application granted granted Critical
Publication of JP4227218B2 publication Critical patent/JP4227218B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Description

【0001】
【発明の属する技術分野】
本発明はコンピュータアーキテクチャに関し、特に印刷或は表示するグラフィックス画像を生成するためのコンピュータ・アーキテクチャに関するものである。また本発明は、コンピュータ・アーキテクチャ及びコプロセッサシステムにおけるメモリ管理の分野に関連している。
【0002】
【発明の背景】
複雑な画像の生成及び印刷は通常、postscript(登録商標)等のページ記述言語(PDL)で記述された画像表現により進められている。このページ記述言語は多数の関数や合成された演算し(オペレータ)等から出力画像を如何に作成するかを記述するものである。このようなページ記述言語を使用する主な利点としては、使用する装置に依存しない点、即ち、このような利点を享受できる装置であれば、同じ記述が多数の出力装置で利用できるという点にある。他の利点としては、ページの編集や変更などが容易にできることも含まれる。さらには、PDLでの最適化により、レンダリング処理を高速にできることも挙げられる。
【0003】
ページ記述言語を取り込み、それから対応する印刷用ページを生成するプロセスはラスタライゼーション(rasterization)として知られており、これはコンピュータ資源に負担をかけている。PDLの解析及びラスタライゼーション処理はホストCPUシステムで実行されるソフトウェアのインタープリタにより実行される。このインタープリタ・ソフトウェアは各ページの画像生成においてCPU資源のかなりの部分を使用するので、この間、メインCPUは他の処理をほとんどできなくなってしまう。更には、このインタープリタ・ソフトウェアによる処理は、画像の各画素が伸長され、及び/或は色変換される場合には、非常に長い時間を要してしまう。
【0004】
グラフィック画像の生成処理の種々の面で、ハードウェアにより高速化をもたらすことが知られている。例えば、圧縮/伸長処理のハードウェアによる高速化を達成するための、JPEGの圧縮/伸長を行なうハードウェアチップが市販されている。
【0005】
画像を生成するプリンタ或はディスプレイ等の出力装置では、画像を表示するための要求が大きく変動する。一度印刷が開始されると、前もって、或は所定時間内にそのページ全体の画素情報を要求し、ページの印刷中には如何なる時にも印刷動作を停止できないプリンタ装置がある。また、画像の1つのバンドを一度に印刷し、各バンド間での任意の時間をとることができるバンド単位で動作する出力装置もある。また他にも、任意の方法で、更新された画素情報を受取って出力できる出力装置もある。
【0006】
本発明の主な目的は、種々のプリンタや他の出力装置を使用して、任意の画像をできるだけ高速に印刷することにある。この場合、出力装置を印刷或は表示ビジーに保ち、要求した画素データを待たなくても済むようにすることが望ましい。出力装置が画素データを待っているときはいつも印刷或は表示処理が明らかに遅延し、これがユーザの不満を引き起こす。さらには、そのラスタライゼーションに従事する全ての資源が、その処理のために完全に利用されて最大の印刷(又は表示)出力速度が得られるという利点を提供する。
【0007】
更に、利用される出力の形態に応じて、その出力結果の欠点が目立つ場合がある。例えば、ビデオの分野では画像はいつもリフレッシュされており、次の新たな画像データが時間内に供給されない場合には、古いデータが繰返し表示されるためその不具合は視聴者に気づかれない。しかし、他のビデオの分野では、リフレッシュのレートで古い画像が捨てられ、新たな画像が間に合わないと、明らかなブランクや空の表示がなされることになる。印刷の分野では、その結果である画像は永久的なものであるため、画像データにおける如何なる小さなエラーでも目立った欠点となってしまう。更に、上述したように、プリンタの特性により、画像データは完全な形式で送られなければならないだけでなく、所定速度以上で供給されねばならない。しかし、印刷では、最終画像が出力される迄の遅延は、大目に見られる。
【0008】
以上を念頭において、本発明の目的は、まず第1に、ホストプロセッサと協動するグラフィック用コプロセッサを用い、第2にそのコプロセッサ内に2つ或はそれ以上の並列に配列したデータストリームを設けることにより、最終画像を出力する前に画像データのレンダリングを行なうことにある。ここでもし、これらデータストリームの1つだけがある時間に稼働すると、画像データのようなストリームが動作している場合には、その高速処理による利点が見出せる。これはコプロセッサが順次計算のような処理に集中していて、別の計算を実行するためにリセットや再構築等の時間のロスを発生しないためである。
【0009】
更に、1つの計算ストリームが稼働しているとき、他のストリームは、もし必要であれば、別の計算を実行するために前もって再構築されてもよい。
【0010】
近年のコンピュータシステムは一般的なメモリ管理方法を備えており、動的なメモリ割当を実現している。1つ或はそれ以上のコプロセッサを備えるシステムの場合、メモリの動的な割当とコプロセッサによるメモリの使用との同期を取る必要がある。
【0011】
特別なコプロセッサを備えるCPUの典型的なハードウェア構築では、コプロセッサとCPUとはメモリのあるバンクを共有している。このようなシステムでは、CPUはメモリを動的に割当てられるシステムにおける唯一のエントリーである。一度CPUによりコプロセッサで使用されるように割当てられると、そのメモリは、CPUが自由にアクセスできるように要求されない限り、コプロセッサにより自由に使用できるままとなる。これは、そのメモリはコプロセッサがそれを使用し終えた後でのみ確実に解放されるために、CPUとコプロセッサとの間で何らかの同期が必要であることを意味している。
【0012】
この問題を解決するためのいくつかの解決法は、望ましくない点を備えている。静的なメモリ割当を用いると同期に関する問題を避けることができるが、そのシステムがメモリ資源を動的に使用するように調整できなくなる。逆に、CPUが、コプロセッサが各動作の実行を終了するまでブロック、及びウエイトすると、各動作において実質的に並行処理が低下し、システム全体の機能が低下してしまう。同様に、コプロセッサによる実行の終了を示す割り込みを使用すると、コプロセッサのスループットが非常に早い場合には大きな処理のオーバヘッドを招いてしまうことになる。よって、このような従来の解決法は魅力的なものではない。
【0013】
高度な機能の必要性に加えて、このようなシステムはまた少ないダイナミックメモリで処理しなければならない。ほとんどのコンピュータシステムは、広いメモリサイズ構築のレンジをとることができる。利用可能な資源を最大限に使用できるように、システムが大容量のメモリを備えることが重要である。しかしながら、最小の構成を備えるシステムでは、少ないメモリのもとで、使用可能な限り、且つ非常に少ない機能低下の下で動作しなければならない。
【0014】
これらの問題を克服するために、コプロセッサのメモリの使用を、システムの能力と実行される動作の複雑さの両方に対して動的に調整しながら、システムの機能を最大限に発揮できる同期機構が望まれる。本発明は、コプロセッサの命令の実行が完了した後、それら命令がクリーンアップ(一掃)キューに入れられ、これら実行した命令に割り当てられたメモリ資源を次から次へとCPUにより再割当てるものである。
【0015】
仮想メモリコンピュータアーキテクチャが近年著しく注目されている。これにより、マイクロプロセッサ/パーソナルコンピュータ・システムでさえ今や仮想メモリを使用する様になっている。この仮想メモリはソフトウェアの製造工程を簡略化できるという既知の大きな利点を備えている。
【0016】
コンピュータシステムの動作をよりスピードアップするために、ディスプレイ或は印刷出力のようなグラフィックイメージを作成する種々の動作を高速化するために使用されるであろうコプロセッサが提案されている。そのようなシステムが仮想メモリとともに動作できれば、よりすばらしいものとなるであろう。
【0017】
【課題を解決するための手段】
本発明の一態様によれば、コンピュータシステムにおいてホストCPUと少なくとも1つのコプロセッサとの間の協動作業を制御してCPU命令とコプロセッサ命令を略同時に別々に実行させ、これら命令の実行時に共通して使用されるメモリ空間を動的に割当てる制御方法であって、
前記ホストCPUが、前記コプロセッサで実行されるべき命令セットにより使用されるメモリ資源を割当てる割当てステップと、
前記ホストCPUが、前記実行されるべき命令セットを、ペンディング命令キューに挿入する挿入ステップと、
前記コプロセッサが、前記ペンディング命令キューの中で実行した命令を終了命令キューに転送する転送ステップと、
前記ホストCPUが、メモリ要求を満たすメモリが得られなかった場合に、前記終了命令キューに含まれている全ての命令で使用されていたメモリ資源を解放する解放ステップとを有することを特徴とする。
【0023】
割り当てられたメモリの解放は、所定の命令を実行した後に実行されるのが望ましい。この命令は、ペンディング中の命令キューの最後の命令か、又は前記メモリ資源の略大部分を使用する命令であるのが望ましい。また、ホストCPUが現時点でフリーなメモリ資源が残り少なくなるか、又は一杯になったことを検知すると、コプロセッサにより使用されなくなったメモリの解放を起動する。
【0024】
本発明の第2の態様によれば、所定サイズのメモリ、ホストCPU及び少なくとも1つのコプロセッサを有するコンピュータシステムにおける動的メモリ管理装置であって、
所定サイズのメモリ,ホストCPU及び少なくとも1つのコプロセッサを有するコンピュータシステムにおける動的メモリ管理装置であって、
前記ホストCPUに接続され、前記コプロセッサを実行させる命令列を発生する命令発生手段と、
前記メモリ及び前記命令発生手段に接続され、前記コプロセッサの命令列を実行させるのに使用される前記コプロセッサのためのメモリ空間を動的に割当するメモリ管理手段と、
前記命令発生手段、前記メモリ管理手段及び前記コプロセッサに接続され、当該コプロセッサにより実行されるペンディング中の命令のキューと前記コプロセッサにより実行された命令の一掃キューとに前記命令列を記憶するキュー管理手段とを有し、
前記キュー管理手段は、前記メモリ管理手段がメモリ空間に対する要求を満足できないとき、実行済みの全ての命令を前記一掃キューから除去し、当該除去された命令に割り当てられていたメモリ空間を再度割当てることを特徴とする。
【0025】
キュー管理手段の動作を起動する種々の方法は、前記メモリ管理手段がメモリ空間に対する要求を満足できないとき、又はコプロセッサにより実行されるペンディング中の命令のキューの所定量(1/3,1/2、及び2/3)がコプロセッサにより実行されるまで、前記CPUによる処理が中断されることにより行われるのが望ましい。
【0026】
以下の詳細な説明では、読者は明細書の他の部分を参照しながら、特に図1乃至7とその関連説明に注目されたい。
【0035】
【発明の実施の形態】
「目次」
1.0 図面の簡単な説明
2.0 テーブルリスト
3.0 好適な及び他の実施例
3.1 複数のストリームアーキテクチャの概要
3.2 ホスト/コプロセッサのキューイング
3.3 コプロセッサのレジスタ説明
3.4 複数のストリームのフォーマット
3.5 現アクティブストリームの判定
3.6 現アクティブストリームのフェッチ命令
3.7 命令のデコード及び実行
3.8 命令コントローラのレジスタの更新
3.9 レジスタアクセスセマフォの意味論
3.10 命令コントローラ
3.11 ローカルレジスタファイルモジュールの説明
3.12 レジスタのリード・ライト処理
3.13 メモリエリアのリード/ライト処理
3.14 Cバス構造
3.15 コプロセッサのデータタイプとデータ操作
3.16 データ正規化処理
3.17 アクセラレータカードの画像処理
3.17.1 合成
3.17.2 色空間変換命令
a. 単一出力カラー空間(SOGCS)変換モード
b. 複数出力から一空間モード
3.17.3 JPEG符号化/復号化
a. 符号化
b. 復号化
3.17.4 テーブル索引
3.17.5 データ符号化命令
3.17.6 高速DCT装置
3.17.7 ハフマン復号
3.17.8 イメージ変換命令
3.17.9 コンボルージョン命令
3.17.10 マトリクス乗算
3.17.11 階調(ハーフトーン)
3.17.12 階層イメージフォーマット伸長
3.17.13 メモリコピー命令
a. 汎用データ移動命令
b. ローカルDMA命令
3.17.14 フロー制御命令
3.18 アクセラレータカードのモジュール
3.18.1 ピクセルオーガナイザ
3.18.2 MUVバッファ
3.18.3 結果オーガナイザ
3.18.4 オペランドオーガナイザB,C
3.18.5 メインデータパスユニット
3.18.6 データキャッシュコントローラとキャッシュ
a. ノーマルキャッシュモード
b. 単一出力一般カラー空間変換モード
c. 複数出力一般カラー空間変換モード
d. JPEG符号化モード
e. 低速JPEG復号モード
f. マトリクス乗算モード
g. ディスエーブルモード
h. 無効化モード
3.18.7 入力インターフェーススイッチ
3.18.8 ローカルメモリコントローラ
3.18.9 その他のモード
3.18.10 外部インターフェースコントローラ
3.18.11 周辺インターフェースコントローラ
テーブル索引
テーブル1: レジスタの説明
テーブル2: オペコードの説明
テーブル3: オペランドタイプ
テーブル4: オペランド説明
テーブル5: モジュールセットアップ順序
テーブル6: Cバス信号の定義
テーブル7: Cバスのトランザクションタイプ
テーブル8: データ操作レジスタフォーマット
テーブル9: 希望データタイプ
テーブル10: シンボル説明
テーブル11: 合成処理
テーブル12: SOGCSモード用アドレス合成
テーブル12A: 色空間変換用命令符号化
テーブル13: 色変換命令用のマイナーオペコード符号化
テーブル14: データキャッシュに記憶されたハフマン及び量子化テーブル
テーブル15: フェッチアドレス
テーブル16: ハフマン符号化用テーブル
テーブル17: ハフマン及び量子化テーブル用バンクアドレス
テーブル18: 命令ワード−マイナーオペコードフィールド
テーブル19: 命令ワード−マイナーオペコードフィールド
テーブル20: 命令オペランド−結果ワード
テーブル21: 命令ワード
テーブル22: 命令オペランド−結果ワード
テーブル23: 命令ワード
テーブル24: 命令オペランド−結果ワード
テーブル25: 命令ワード−マイナーオペコードフィールド
テーブル26: 命令ワード−マイナーオペコードフィールド
テーブル27: 分数テーブル
[好適ならびに他の実施例の説明」
好適な実施例では、ハードウェアアクセラレータによる2つの独立命令ストリームの利用によってハードウェアラスタリングを行うことで大きな利点が得られている。従って、第一の命令ストリームが現ページの印刷準備をしている間に、次の命令ストリームが次ページの印刷準備をすることができる。ハードウェア資源は、ハードウェアアクセラレータが出力装置以上の速度で動作可能である場合に特に効率的に利用することができる。
【0036】
好適な実施例では、2命令ストリームを用いる構成を示す。しかし、2以上の命令ストリームを用いる構成も可能であり、ハードウェアトレードオフを鑑みてもより多くのストリームを用いることによる利点が得られる。
【0037】
2つのストリームを用いることで、ラスタ画像コプロセッサのハードウェア資源は、出力装置に応じて現ページ、バンド、ストリップなどを印刷装置に転送している間にも、続くページ、バンド、ストリップなどの準備に常に関わることができる。
3.1 複数ストリームアーキテクチャの一般構成
図1は、好適な実施例を含むコンピュータハードウェア構成201を模式的に示した図である。構成201には、ブリッジ204を介してホスト記憶メモリ203に接続されたホストCPU202から成る標準ホストコンピュータシステムが含まれている。ホストコンピュータシステムには、オペレーティングシステムプログラム、アプリケーション、情報ディスプレイなどの一般のコンピュータシステム機能が備わっており、ホストコンピュータシステムはPCIバスインタフェース207を介して標準PCIバス206に接続されている。なお、PCI標準は良く知られた業界標準であり、市販のほとんどのコンピュータシステム、特にマイクロソフトウインドウズ(商標)オペレーティングシステムを搭載しているシステムには、PCIバス206が備わっている。PCIバス206を用いることにより、PCIバスインタフェース210、他のデバイス211、ローカルメモリ212などを更に含む1つ或は複数のPCIカード(例えば209)を構成201に付加して利用することが容易になる。
【0038】
好適な実施例では、ページ記述言語で表現されたグラフィックス処理を高速にするために、ラスタ画像アクセラレータカード220を備える。ラスタ画像アクセラレータカード(PCIバスインタフェース221を備える)は、他のPCIカード209などと同様にホストCPU202とは、緩やかに結合された共有メモリの形態で動作するように設計されている。なお、必要であれば、画像アクセラレータカード220を更にホストコンピュータシステムに付加することもできる。ラスタ画像アクセラレータカードは、ラスタ画像処理動作における複雑かつ多量の動作処理を高速化するためのものであり、これらの動作としては、
(a)合成
(b)一般化色空間変換
(c)JPEG符号化/復号
(d)ハフマン、ランレングス、予測符号化/復号
(e)階層的画像(商標)復号
(f)一般化アフィン画像変換
(g)小カーネル畳込演算(コンボルージョン)
(h)行列演算
(i)ハーフトーン処理
(j)一括算術/メモリコピー演算
ラスタ画像アクセラレータカード220は更にラスタ画像コプロセッサ224に接続されたローカルメモリ223を備え、ラスタ画像コプロセッサ224はホストCPU202からの命令に基づいてラスタ画像アクセラレータカード220を起動する。ここで、コプロセッサ224は特定用途向けLSI(ASIC)であることが望ましい。また、ラスタ画像コプロセッサ224は、必要な少なくとも1つのプリンターデバイス226を周辺インタフェース225を介して制御する能力を有する。更に、画像アクセラレータカード220は、スキャナなどの入力/出力デバイスを制御することも可能である。あわせて、アクセラレータカード220にはラスタ画像コプロセッサ224に接続された一般外部インターフェース227が備えられており、モニタリングやテストを行うこともできる。。
【0039】
実行モードでは、ホストCPU202がPCIバス206を介して一連の命令やデータを送信し、ラスタ画像コプロセッサ224で画像の生成処理を行う。送信されたデータはローカルメモリ223のみならずラスタ画像コプロセッサ224中のキャッシュ230、あるいはコプロセッサ224中のレジスタ229に蓄えられる。
【0040】
図2は、ラスタ画像コプロセッサ224をより詳細に示した図である。コプロセッサ224は、前記の処理を高速化するためのものであり、命令制御部235の制御下にある複数の部位から構成される。コプロセッサが外界と通信するために、図1のローカルメモリ223と通信するためのローカルメモリ制御部236を具備している。周辺インタフェース制御部237は、プリンタデバイスとの通信に利用されるもので、セントロニクスインタフェース標準フォーマットや他のビデオインタフェースフォーマットなどの標準フォーマットを利用する。周辺インタフェース制御部237はローカルメモリ制御部236と内部接続されている。ローカルメモリ制御部236と外部インタフェース制御部238とは入力インタフェーススイッチ252を介して接続されており、入力インタフェーススイッチ252は命令制御部235と接続されている。入力インタフェーススイッチ252はまたピクセルオーガナイザ246とデータキャッシュ制御部240に接続されている。入力インタフェーススイッチ252は、外部インタフェース制御部237とローカルメモリ制御部236からのデータをスイッチして命令制御部235、あるいはデータキャッシュ制御部240、ピクセルオーガナイザ246に転送するためのものである。
【0041】
外部インタフェース制御部238は、図1中のPCIバス206と通信するためにラスタ画像コプロセッサ224中に具備されており、命令制御部235と接続されている。また、テスト診断を行ったり、クロック信号やグローバル信号を入力するために、命令制御部239に接続され、コプロセッサ224と協調して動作する他モジュール239が備わっている。
【0042】
データキャッシュ230は、接続されているデータキャッシュ制御部240の制御下で動作する。データキャッシュ230は種々の用途において用いられるが、コプロセッサ224において引き続き使用される確率の高い最近使用した値を蓄えるために主として用いられる。上述の高速化処理は、主としてJPEG符号化/復号器241やメインデータパス部242によって複数のデータストリームの処理が行われる。部位241、242は並列にピクセルオーガナイザ246と2つのオペランドオーガナイザ247、248に接続されている。部位241、242からの処理されたストリームは、結果オーガナイザ249に転送され、必要であれば処理や再フォーマット処理が行われる。なお、中間結果を記録しておきたいことも多いため、データキャッシュ230に加えて、ピクセルオーガナイザ246と結果オーガナイザ249との間にマルチユースト値(MUV)バッファ250を備えている。結果オーガナイザ249からの結果は、必要であれば外部インタフェース制御部238、ローカルメモリ制御部236、周辺インタフェース制御部237に出力される。
【0043】
図2中の点線で示されているように、さらなる(第3の)データパス部243を、JPEG符号化/復号器241とメインデータパス部242といった他の二つのデータパスと「並列に」接続することも可能である。また、四あるいはそれ以上のデータパスを構成することも同様に可能である。なお、パスは「並列に」接続されてはいるが、並列に動作するものではなく、一つのパスのみが一時に動作するものであることに注意されたい。
【0044】
図2のASICの全体設計は以下のような考えに基づいてなされた。まず第1に、印刷ページでは小さな、或は一時的な画質劣化をも生じさせないことが必須である。映像信号では、このような小さな画質劣化が存在したとしても人間の目では感知されることはないが、印刷物では印刷ページに永久的に小さな画質劣化が残ってしまい、目立つようになることもあるからである。更に、プリンタに至るまでに遅延が生じると、ページがプリンタ内を移動している間に白い未印刷の部位がページ上にできてしまうことがあるため、見苦しいものとなる。そのため、高品質かつ高速に結果を提供することが必須となり、ソフトウエアを用いるアプローチよりもハードウェアの高速性に頼るアプローチの方が好ましい。
【0045】
第2に、印刷処理を実行するのに必要なさまざまな動作ステップ(アルゴリズム)すべてをリストアップし、各ステップごとに対応するハードウェアを並べ上げると、全体のハードウェア量は膨大なものになり、非常に高価なものになってしまう。また、ハードウェアの動作スピードは、処理に必要なデータをフェッチしたり、あるいは処理で生成されたデータを転送するレートによって本質的に制限される。すなわち、動作スピードはインタフェースの帯域幅によって制約を受ける。
【0046】
これに対して、全体のASICのデザインは、ハードウェアの全体量を模式的に表したときに、必要なハードウェアの種々の部位が(a)重複しており、(b)同時に実行されることはない、という驚くべき事実に基づいている。特に、この点はデータの処理をする前にデータを転送する際のオーバヘッドにおいて顕著にみられる。
【0047】
このような観点から、いつくかのステップを経て、ハードウェアのすべての部位をできるだけアクティブにしながら、ハードウェア量を低減することにした。第1のステップにおいて、画像操作では多くの場合同一の基本的種類の繰り返し演算が必要であることを認識した。従って、データがストリーム状に入力されると、特定の処理を行うように処理部を構成して長いデータストリームを処理し、その後次に必要な処理タイプに合うように処理部を再構成する。データストリームがかなり長いと、再構成に要する時間は全体の処理時間と比較して無視できるほど短くなるため、スループットが向上することになる。
【0048】
また、複数のデータ処理パスを設けると、他のパスを使用している間に一つのパスを再構成することで、再構成に要する時間の無駄を省くこともできる。すなわち、メインデータパス部242がより汎用的な処理を実行している間に、他のデータパスにおいて部位241のようなJPEG符号化/復号、あるいは追加部位243がある場合にはエントロピー符号化やハフマン符号化などのより特化した処理を行うことができる。
【0049】
更に、処理を進めている間に、処理部位へのデータのフェッチや転送を行うこともできる。また、種々の種別のデータを標準化、統一することにより、更に高速化を図ることができるとともに、ハードウェア資源も有効に利用することができる。従って、データのフェッチや転送に関わる全体のオーバヘッドを低減することができる。
【0050】
ここで重要なことは、コプロセッサ224がホストCPU202(図1)の制御の下で実行されることである。この点で、命令制御部235が、コプロセッサ224全体の制御を統括する。命令制御部235は、CBus(Cバス)と呼ばれる制御バス231によってコプロセッサ224を動作させる。CBus231はそれぞれのモジュール中のセットレジスタ(図1の231)を含むモジュール236−250のそれぞれに接続され、コプロセッサ224の全体の動作を可能とする。図2を見やすくするために、図2では制御バス231からそれぞれのモジュール236−250までの接続は示していない。
【0051】
図3は、利用可能なモジュールレジスタの模式的なレイアウト260を示した図である。レイアウト260は、コプロセッサ224の全体制御のためのレジスタ261と命令制御部235とが含まれる。コプロセッサモジュール236−260には、同様のレジスタ262が含まれる。
3.2 ホスト/コプロセッサ・キューイング
上述のアーキテクチャによれば、ホストプロセッサ202と画像コプロセッサ204との間での協調が十分にとられていることが必要であることがわかる。しかしながら、これに対する解は一般的なものであり、上述のアーキテクチャ特有のものではないため、以下ではより一般的な計算ハードウェア環境を想定して説明する。
【0052】
現代のコンピュータシステムは、動的メモリ割当を行うために何かしらのメモリ管理手法を必要とする。1つあるいは複数のコプロセッサを有するシステムでは、コプロセッサによる動的メモリ割当とメモリ使用との間で同期をとるための手法が必要である。
【0053】
一般的なコンピュータハードウェア構成では、CPUと特別のコプロセッサとを備え、それぞれが一連のメモリ群を共有している。このようなシステムでは、CPUのみがメモリを動的に割り当てることのできるシステム中唯一の部位である。コプロセッサが使用するようにCPUがメモリを割り当てた時点で、コプロセッサは当該メモリが不必要になりCPUによって解放されるまで、自由にメモリを利用することができる。すなわち、コプロセッサがメモリの使用を終えた後にメモリが解放されることを保証するために、CPUとコプロセッサとの間には何かしらの同期が必要となる。この同期に関しては、種々の解決策が示されてはいるが、必ずしも性能の面で好ましいとは言い難い。
【0054】
静的に割り当てられたメモリを用いれば、同期の問題を避けることができるが、メモリ資源の利用を動的に適応させることが不可能となる。同様に、コプロセッサが処理の実行を終えるまでCPUをブロックし待たせておくことも可能であるが、並列性を失い、全体のシステム性能を犠牲にすることになる。コプロセッサからの処理の終了を知らせるインタラプト信号の利用も可能であるが、コプロセッサのスループットが非常に高い場合には大きな処理のオーバヘッドとなってしまう。
【0055】
高性能要件の他に、このようなシステムでは動的なメモリ欠乏に対してしなやかに対処しなければならない。多くのコンピュータシステムでは種々のメモリサイズ構成が可能となっているが、多くのメモリを具備するシステムでは有効資源を最大限に利用して性能を最大にすることが重要である。同様に、最小のメモリサイズ構成のシステムでは、少ないメモリながらも十分な動作を可能にすべきであり、少なくともメモリ欠乏の際には性能がしなやかに劣化すべきである。
【0056】
これらの問題を解決するために、システム性能を最大にするとともに、コプロセッサのメモリ使用をシステム容量や実行する処理の複雑さに動的に適応化する同期機構が必要である。
【0057】
図4に、(ホスト)CPUとコプロセッサとの同期をとる好適な構成を示す。図中の参照番号は、図1の説明において利用したものを用いている。
【0058】
図4において、CPU202はシステム中のすべてのメモリ管理を統括している。CPU202が、自身、あるいはコプロセッサ224での利用のために、メモリ203を割り当てる。コプロセッサ224はグラフィックス特有の命令セットを有しており、ホストプロセッサ202と共有しているメモリ203から命令1022を実行することができる。これらの命令のそれぞれは結果1024を共有メモリ203に書き込むことができ、またメモリ203からオペランドを読み込むこともできる。ここでコプロセッサ命令のオペランド1023や結果1024を記憶するに要するメモリ203の量は、処理の複雑さや種別に依存する。
【0059】
CPU202は、コプロセッサ224によって実行される命令1022を生成する処理をも行う。CPU202とコプロセッサ224との間の並列性を最大にするために、CPU202によって生成された命令は1022に示されるようにキューイングされてからコプロセッサ224において実行される。キュー1022中の各命令は、コプロセッサ224のためにホストCPU202によって割り当てられた共有メモリ203中のオペランド1023や結果1024を参照することができる。
【0060】
図5に示すように、これらの処理を行うために、命令生成部1030、メモリ管理部1031、キュー管理部1032が接続されている。これらすべてのモジュールはホストCPU202上で単一プロセスとして実行される。
【0061】
コプロセッサ224における実行命令は命令生成部1030において生成され、メモリ管理部1031のサービスを利用して生成された命令のオペランド1023や結果1024のための領域を割り当てる。また、命令生成部1030は、キュー管理部1032のサービスを利用して、コプロセッサ224で実行する命令をキューイングする。
【0062】
各命令がコプロセッサ224において実行されると、CPU202はメモリ管理部1031によって命令のオペランド用に割り当てられていたメモリを解放することができる。ある命令の結果が次の命令のオペランドとなることも可能であり、その後でCPUによってメモリが解放される。コプロセッサ224が命令を終えると同時にインタラプト信号を送出しメモリを解放するのではなく、コプロセッサ224が命令を終えた後のある時点でクリーンアップ機構を起動し、命令の処理に要した資源をシステムが解放する。クリーンアップ機構が起動される時点は、メモリ管理部1031とキュー管理部1032との関係に依存しており、利用可能なシステムメモリ量や各コプロセッサ命令に必要なメモリ量に応じて動的に適応させることができる。
【0063】
図6は、コプロセッサ命令キュー1022の構成を模式的に示した図である。命令群はホストCPU202によりペンディング命令キュー1040に挿入され、コプロセッサ224によって読み出され実行に移される。コプロセッサ224における実行処理が終了すると、命令はクリーンアップキュー1041に転送され、コプロセッサ224が処理を終えた後で命令が必要とした資源の解放を行う。
【0064】
命令キュー1022自身は固定あるいは動的可変サイズの巡回バッファとして構成される。命令キュー1022は、CPU202による命令の生成とコプロセッサ224における命令の実行とを分離している。
【0065】
各命令のオペランドと結果メモリは、命令生成時に命令生成部1030からの要求に応じてメモリ管理部1031(図5)によって割り当てられる。新しく生成された命令のためのメモリ割当が、以下で説明するメモリ管理部1031とキュー管理部1032との協調動作を起動させ、利用可能なメモリ量や命令の複雑さにシステムが自動的に適応できるようにしている。
【0066】
命令キュー管理部102は、コプロセッサ224が命令生成部1030によって生成された命令を実行し終えるまで、待機することができる。しかし、メモリ管理部1031によって割り当てられる命令キュー1022とメモリ203が十分大きければ、コプロセッサ224を全く待つ必要がないか、あるいは少なくともすべての命令シーケンスが終了するまで待機する必要はない。大きなジョブではこれらの待機時間が、数分間にも及ぶため、効果は大きい。しかし、ピーク時のメモリ使用量は利用可能なメモリ量を容易に超えることもある。この時点で、キュー管理部1032とメモリ管理部1031との間で協調的な動作が開始される。
【0067】
命令キュー管理部1032にとって、終了した命令を「クリーンアップ」し、動的に割り当てられたメモリを解放するようにとの指示がなされる時点は適宜で構わない。メモリ管理部1031が利用可能なメモリが少なくなりつつある、あるいはなくなったことを検出した場合には、キュー管理部1032にクリーンアップ処理を指示し、コプロセッサ224によってもはや利用されていないメモリを解放させる手段をとる。これにより、メモリ管理部1031は、CPU202がコプロセッサ224を待つ、あるいはコプロセッサ224と同期することなく、命令生成部1030からの新しく生成された命令に要するメモリ要求を満足させることができる。
【0068】
メモリ管理部1031からキュー管理部1032に終了命令をクリーンアップする要求を出しても、命令生成部の新しい要求を満たすに足る十分メモリが解放されなかった場合には、メモリ管理部1031はキュー管理部1032にペンディング命令キュー1040中の処理中命令の一部、例えば半分が終了するまで待機せよ、と要求する。これにより、コプロセッサ224命令のいくつかが終了するまでCPU202処理はブロックされることになる。コプロセッサ224命令のいくつかが終了すると、これらの命令のオペランドが解放され、要求を満たすに十分なメモリが得られる。処理中の命令の一部のみを待つことにより、少なくともいくつかの命令はペンディング命令キュー1040に存在しており、コプロセッサ224は常に動作していることになる。多くの場合、CPU202が待機するペンディング命令キュー1040中の一部をクリーンアップすることにより、メモリ管理部1031にとって十分なメモリが解放され、命令生成部1030の要求を満たすことができる。
【0069】
コプロセッサ224がペンディング命令の例えば半分が実行終了するまで待機したとしても要求を満たすだけのメモリが解放されなかったという特殊なケースの場合には、メモリ管理部1031はすべてのペンディングコプロセッサ命令が終了するまで待機するという最後の手段をとる。システムの現在のメモリ容量を超えるような非常に大きなかつ複雑なジョブなどを除いて、これにより命令生成部1030の要求を満たすに十分な資源が解放される。
【0070】
このようなメモリ管理部1031とキュー管理部1032との協調動作により、システムに与えられたメモリ量203の中で効率的にスループットを最大にすることが可能となる。より多くのメモリがあれば同期の必要性は少なくなり、より大きなスループットを得ることができる。逆に、より少ないメモリの場合には、コプロセッサ224が乏しいメモリ203を使っての処理が終わるまで待機することが多くなり、利用可能なメモリが少なくても動作はするものの性能は劣化する。
【0071】
命令生成部1030からの要求を満たす際にメモリ管理部1031が行う処理ステップを以下にまとめる。各ステップは順々に実行され、ステップ後にメモリ管理部1031が要求を満たすに十分なメモリ203が得られるかどうか調べる。十分なメモリが得られる場合には要求が満たされるため、ステップを終了する。得られなかった場合には、次のステップに進み、要求を満たすべくより過激な処理に進む。
1.利用可能なメモリ203で要求を満たすことを試みる
2.すべての終了した命令をクリーンアップする
3.ペンディング命令の一部が終了するのを待つ
4.すべてのペンディング命令が終了するのを待つ
なお、要求を満たすために、ペンディング命令のうちの異なる部分(例えば、1/3や2/3)を待機するとか、多量のメモリを使用することがわかっている特定の命令を待機するなど、他のオプションを用いることもできる。
【0072】
図7において、メモリ管理部1031とキュー管理部1032との間での協調動作に加えて、固定長命令キューバッファ1050が溢れた場合にはキュー管理部1032がコプロセッサ224と同期をとることもできる。このような状況を図7に示しており、ペンディング命令キュー1040は長さ10個の命令のキューとしている。付加される最新の命令が最も大きい数を有しているため、領域が溢れると最新の命令は位置9に格納される。次にコプロセッサ224に入力される命令は位置0において待機している。
【0073】
領域が溢れた場合には、キュー管理部1032はコプロセッサ224がペンディング命令の例えば半分の処理を終えるまで待機する。この待機により、通常はキュー管理部1032によって挿入される新しい命令に必要な十分な領域が解放される。
【0074】
新しい命令をスケジューリングする際のキュー管理部1032の動作は以下の通りである。
1.命令キュー1040に十分な領域が残っているかテストする
2.十分な領域が残っていない場合は、コプロセッサがある所定数の命令が終了するまで待機する
3.新しい命令をキューに挿入する
ある命令が終了するのを待機せよと指示されたキュー管理部1032の動作は以下の通りである。
1.命令が終了したとコプロセッサ224から指示されるまで待機する
2.クリーンアップされていない終了した命令がある場合には、次に終了した命令をキューから削除する
新しい命令を生成する際の命令生成部1030の動作は以下の通りである。
1.命令オペランド1023に必要なメモリをメモリ管理部1031に要求する
2.転送する命令を生成する
3.コプロセッサ命令をキュー管理部1032に転送し実行する
以上の動作プロセスを擬似コードの形で示した例を以下に示す。
【0075】
メモリ管理
ALLOCATE_MEMORY
BEGIN
IF 要求を満たすのに十分なメモリが得られないとすると
THEN 終了した命令すべてをクリーンアップ(一掃)する
ENDIF
IF 要求を満たすのに十分なメモリが未だ得られないとすると
THEN WAIT_FOR_INSTRUCTIONを呼び出し、ペンディング命令の半分の終了を待つ
ENDIF
IF 要求を満たすのに十分なメモリが未だ得られないとすると
THEN エラーを出力し戻る
ENDIF 割り当てたメモリを戻す
キュー管理
SCHEDULE_INSTRUCTION
BEGIN
IF 命令キューに十分な領域が得られないとすると
THEN ある所定数の命令をコプロセッサが終了するまで待機する
ENDIF 新しい命令をキューに付加する
END
WAIT_FOR_INSTRUCTION(i)
BEGIN
命令iが終了したとコプロセッサから指示されるまで待機する
WHILE 終了しているもののクリーンアップされていない命令がある
DO
IF 次の終了した命令にクリーンアップ機能が備わっている
THEN クリーンアップ機能を呼び出す
ENDIF キューから終了した命令を削除する
DONE
END
命令生成部
GENERATE_INSTRUCTIONS
BEGIN
ALLOCATE_MEMORYを呼び出し、命令オペランドに必要なメモリをメモリ管理部において割り当てる
転送する命令を生成する
SCHEDULE_INSTRUCTIONを呼び出し、コプロセッサ命令をキュー管理部に転送し実行する
END
3.3 コプロセッサのレジスタの説明
図1と3において説明したように、コプロセッサ224は各命令ストリームを実行するために複数のレジスタを備える。
【0076】
図2中のモジュールに対して、表1はコプロセッサ224において用いられるレジスタの名前、種別、説明を示しており、付録Bはそれぞれのレジスタの各フィールドを説明している。
【0077】
レジスタの説明
【0078】
【表1】
【0079】
Figure 0004227218
Figure 0004227218
【0080】
Figure 0004227218
Figure 0004227218
Figure 0004227218
【0081】
Figure 0004227218
Figure 0004227218
【0082】
Figure 0004227218
Figure 0004227218
【0083】
Figure 0004227218
Figure 0004227218
【0084】
Figure 0004227218
【0085】
これらのレジスタ中で着目すべきものは以下のものである。
(a)命令ポインタレジスタ(ic_ipaとic_ipb)。これらのレジスタペアは現在実行している命令の仮想アドレスを格納する。仮想アドレスの昇順に命令がフェッチされ実行される。制御が不連続な仮想アドレスに移る場合にはジャンプ命令が用いられる。各命令には、32ビットのシーケンス番号が付与され、シーケンス番号は一命令ごとに1ずつ増える。シーケンス番号はコプロセッサ224とホストCPU202双方において、命令の生成と実行の同期をとるために用いられる。
(b)終了レジスタ(ic_fnaとic_fnb)。これらのレジスタペアは、終了した命令のシーケンス番号を格納する。
(c)ToDoレジスタ(ic_tdaとic_tdb)。これらのレジスタペアは、キューイングされている命令のシーケンス番号を格納する。
(d)インタラプトレジスタ(ic_intaとic_intb)。これらのレジスタペアは、インタラプトをかけるシーケンス番号を格納する。
(e)インタラプト状態レジスタ(ic_stat.a_primedとic_stat.b_primed)。これらのレジスタペアは、インタラプト、終了レジスタとが合致した時点でインタラプトを起動するフラグであるプライムビットを格納する。本ビットは、インタラプト状態(ic_stat)レジスタ中の他のインタラプトイネーブルビットや他の状態/構成情報と同様に格納される。(f)レジスタアクセスセマフォア(ic_semaとic_semb)。ホストCPU202は、コプロセッサ224への高速性、即ち、1回以上のレジスタへの書き込みを必要とするレジスタアクセスに先立ちセマフォアを入手しておかなければならない。これに対して、高速性を必要としないレジスタアクセスの場合は何時でも実行することができる。ホストCPU202がセマフォアを入手することに付随する欠点は、現在実行中の命令が終了するまでコプロセッサの実行が中断することである。レジスタアクセスセマフォアは、コプロセッサ224の構成/状態レジスタの1ビットとして構成される。これらのレジスタは命令制御美のレジスタ領域中に存在する。前述の通り、コプロセッサの各サブモジュールは、それぞれ構成/状態レジスタを備えており、通常の命令実行においてレジスタが設定される。これらのすべてのレジスタは、レジスタマップ上に表されており、多くは命令実行において暗黙的に修正される。ホストはレジスタマップを介してこれらのレジスタの内容を知ることができる。
3.4 複数ストリームフォーマット
前述の通り、資源を最大限に有効に利用するために、また外部周辺装置に高速に出力するために、コプロセッサ224は2つの独立な命令ストリームの1つを実行する。通常は、1つの命令ストリームは出力デバイスが適時点で必要とする現在の出力ページに対応しており、2つ目の命令ストリームが他の命令ストリームが休止中であるときにコプロセッサ224のモジュールを利用する。ここで、最も重要な点は、必要な出力データを適時点で出力することであるとともに、続くページ、バンドなどの準備のために資源を最大限に利用することである。従って、コプロセッサ224は、全く独立であるものの同じように実行される2つの命令ストリーム(以下、AとBと呼ぶ)を実行するように設計される。命令はホストCPU202上で動作しているソフトウエアによって生成され、ラスタ画像アクセラレータカード220に転送されコプロセッサ224によって実行されることが望ましい。通常動作では、命令ストリームの1つ(ストリームA)は、他の命令ストリーム(ストリームB)よりも高い優先度で動作する。命令ストリームあるいはキューはホストRAM203(図1)中の一つあるいは複数のバッファに書き込まれる。バッファは開始時点で割り当てられ、アプリケーションの実行中はホスト203の物理メモリに固定される。各命令はホストRAM203の仮想メモリ環境に格納されることが好ましく、ラスタ画像コプロセッサ224が仮想アドレスから物理アドレスへの変換を行い、次の命令の位置としてホストRAM203中の対応する物理アドレスを決定する。これらの命令は順々にコプロセッサ224のローカルメモリに格納される。
【0086】
図8は、ホストRAM203中に格納されている2つのストリームAとBのフォーマットを示す図である。ストリームAとBそれぞれのフォーマットは本質的に同一である。
【0087】
コプロセッサ224における簡単な実行モデルは、以下のものから構成される。
*AストリームとBストリームの2つの命令仮想ストリーム
*通常はある時点で1つのみの命令が実行される
*どちらかのストリームが優先権を有することもできるし、「ラウンドロビン」的に優先権を交互にすることもできる
*どちらかのストリームを「ロック」して、ストリーム優先権や他のストリームの命令実行可能度に関わらず、確実に実行することもできる
*どちらかのストリームが空であっても良い
*どちらかのストリームが利用不能であっても良い
*どちらかのストリームは、後続の命令が「オーバラップ」していなければ、次の命令の実行と「オーバラップ」しているような命令を含んでいても良い
*各命令は32ビットの1つずつ増加するような「一意な」シーケンス番号を有する
*各命令はインタラプトや命令実行を停止させるコードを有していても良い
*外部インタフェースの遅延の影響を最小限にするために、命令をあらかじめフェッチしても良い
命令制御部235は、コプロセッサ224の全体の実行制御を行うためや、必要な時にホストRAM203から命令をフェッチするために、コプロセッサの命令実行モデルを実装している。一つの命令ごとに、命令制御部235は命令の復号を行い、CBus231を介してモジュール中の種々のレジスタを構成し、該当モジュールに命令を実行させる処理を行う。
【0088】
図9は、命令制御部235で実行する命令実行サイクルを簡単な形で示した図である。命令実行サイクルは4つの主なステージ276−279から成る。第1ステージ276では、命令ストリームにおいて命令がペンディング状態であるかどうかを調べる。ペンディング状態である場合には、命令をフェッチして277、復号ならびに実行し278、レジスタを更新する279。
3.5 現在のアクティブストリームの決定
第1ステージでは、2つのステップを実行しなければならない。
1.命令がペンディングしているかどうかの決定
2.どの命令ストリームを次にフェッチするかの決定
どの命令がペンディングであるかを決定するためには次の可能性を調べる。
1.命令制御部がイネーブルかどうか
2.内部エラーやインタラプトにより命令制御部が休止しているかどうか
3.ペンディングしている外部エラー状態があるかどうか
4.AあるいはBのストリームがロックしているかどうか
5.どちらかのストリームシーケンス番号がイネーブルかどうか
6.どちらかのストリームがペンディング命令を有しているかどうか
以下に示す擬似コードは、上記ルールに基づいて命令がペンディングしているかどうかを決定するアルゴリズムを示したものである。このアルゴリズムは、既知の技術を用いて、命令制御部235中に状態遷移機械を介してハードウェアとして実装することができる。
【0089】
if エラーモードでなく、稼働モードであり、バイパスモードでもなく、自己診断モードである
if Aストリームがロックされていて休止中でない
if Aストリームが稼働モードであり、かつ「Aストリームのシーケンス番号が休止中、あるいはAストリームに命令が存在する」
命令はペンディングしている
else 命令はペンディングしていない
end if
else if Bストリームがロックされていて休止中でない
if Bストリームが稼働モードであり、かつ「Bストリームのシーケンス番号が休止中、あるいはBストリームに命令が存在する」
命令はペンディングしている
else 命令はペンディングしていない
end if
else /*ストリームがロックされていない*/
if Aストリームが稼働モードで休止中でない、かつ「Aストリームのシーケンス番号が休止中、あるいはAストリームに命令が存在する」
命令はペンディングしている
else 命令はペンディングしていない
end if
end if
else /*インタフェース制御部が稼動していない*/
命令はペンディングされていない
end if
いかなる命令もペンディングしていない場合には、命令制御部235はペンディング命令が見つかるまで「スピン」あるいはアイドル状態となる。
【0090】
どのストリームがアクティブであるか、どのストリームを次に実行するかを決定するために、次の状態が調べられる。
1.どちらかのストリームがロックされているか
2.AとBのストリームにどの優先権が付与されており、最後に実行した命令ストリームはどちらであるか
3.どちらかのストリームが稼動しているか
4.どちらかのストリームがペンディング命令を有しているか
以下は、命令制御部によって実装される擬似コードを示したものであり、どのように次にアクティブとなるストリームを決定するかを示している。
【0091】
if Aストリームがロックされている
次のストリームはA
else if Bストリームがロックされている
次のストリームはB
else /*どちらのストリームもロックされていない*/
if Aストリームが稼動モード、かつ「Aストリームのシーケンス番号が休止中、あるいはAストリームに命令が存在する」、かつ「Bストリームが稼動モードで、「Bストリームのシーケンス番号が休止中、あるいはBストリームに命令が存在」」しなければ、次のストリームはA
else if Bストリームが稼動モード、かつ「Bストリームのシーケンス番号が休止中、あるいはBストリームにペンディング命令が存在する」、かつ「Aストリームが稼動モードで、「Aストリームのシーケンス番号が休止中、あるいはAストリームに命令が存在」」しなければ、次のストリームはB
else /*どちらのストリームも命令が存在しない*/
if pri=0 /*A高、B低*/
次のストリームはA
else if pri=1 /*A低、B高*/
次のストリームはB
else if pri=2 or 3 /*ラウンドロビン*/
if 最後のストリームがA
次のストリームはB
else
次のストリームはA
end if
end if
end if
end if
条件は常に変化しているため、すべての条件を短時間で調べることが必要である。
3.6 現在のアクティブストリームのフェッチ命令
次のアクティブ命令ストリームを決定すると、命令制御部235は対応する命令ポインタレジスタ(ic_ipaとic_ipb)中のアドレスを用いて命令をフェッチする。しかしながら、有効な命令が既に命令制御部235中のプレフェッチバッファ内に存在する場合には、命令制御部235は命令をフェッチしない。
【0092】
以下の条件が満たされるときに、プレフェッチバッファ中の命令が有効になる。
1.プレフェッチバッファが有効である
2.プレフェッチバッファ中の命令が現在のアクティブストリームと同じストリームからのものである
プレフェッチバッファの内容の有効性は、ic_statレジスタ中のプレフェッチビットによって表され、当該ビットは命令のプレフェッチが成功した際にセットされる。なお、命令制御部235のいかなるレジスタへの外部書き込みも、プレフェッチバッファの内容を無効にさせる。
3.7 復号、実行命令
命令がフェッチされ、受理されると、命令制御部235は命令を復号し、命令を実行するためにコプロセッサ224のレジスタ229を構成する。
【0093】
ラスタ画像コプロセッサ224において用いられる命令フォーマットは、命令の生成がホストCPU202からの命令によって実行され、ホストに対して直接的なオーバヘッドになるという点で、従来のプロセッサ命令セットとは異なる。また、命令はホストRAM203に格納され、図1のPCIバス206を介してコプロセッサ224に転送されるため、命令はできるだけ小型化すべきである。好ましくは、コプロセッサ224は単一の命令によって実行開始されることが望ましい。また、将来の変更に最大限対処可能とするためには、命令セットの柔軟性をできるだけ保持することが望ましい。更に、コプロセッサ224において実行される命令はオペランドデータの長いストリームにも適用でき、最適な性能が得られるようにすることも好ましい。なお、コプロセッサ224が用いる命令復号「哲学」として、「一般的な命令」の復号を簡潔にかつ高速に行うとともに、「一般的でない」処理に対してもコプロセッサ224の動作に対して細かい制御をホストシステムが行えるようにデザインを取り入れている。
【0094】
図10は、それぞれが32ビットの8ワードから成る単一命令280フォーマットを示している。各命令は、命令ワード(オプコード)281、オペランドの種別を示すオペランドあるいは結果タイプデータワード282を含む。3つのオペランドA,B,Cのアドレス283−285も、結果アドレス286とともに含まれる。更に、領域287も、ホストCPU202が用いる命令に関する情報を格納するために含んでいる。
【0095】
図11は、命令の命令オプコード281の構造290を示した図である。命令オプコードは32ビット長で、主オプコード291、補オプコード292、インタラプト(I)ビット293、一部復号(Pd)ビット294、レジスタ長(R)ビット295、ロック(L)ビット296、長さ297を含む。命令ワード290のそれぞれのフィールドの説明を以下の表に示す。
【0096】
オプコード説明
【0097】
【表2】
Figure 0004227218
Figure 0004227218
【0098】
Figure 0004227218
【0099】
Iビットフィールド293をセットすることによって、命令が終了した時点で命令の実行がインタラプトされ休止するように命令をコード化することができる。なお、このインタラプトは「命令終了インタラプト」と呼ばれる。一部復号ビット294は、一部復号ビット294のビットがセットされ、ic_cfgレジスタ中で稼動モードになると、以下に述べるように命令の実行に先立ち種々のモジュールがマイクロコード化されるというような一部復号機能を提供する。ロックビット296は、開始にあたり1つ以上の命令を必要とする処理の際に用いられる。この際には、命令に先立ち種々のレジスタがセットされ、次の命令のために現在の命令ストリームを「ロック」される。Lビット296がセットされると、命令が終了した時点で次の命令が同じストリームからフェッチされる。長さフィールド297は各命令の一般的な定義であり、必要となる「入力データ項目」数あるいは「出力データ項目」数として定義され、16ビット長である。64、000項目以上の入力データ項目のストリームに対する処理の場合には、Rビット295がセットされ、図2のピクセルオーガナイザ246中のpo_lenレジスタから入力長を得る。当該レジスタはこのような命令の直前にセットされる。
【0100】
図10において、ある命令に必要なオペランド283〜286の数は用いる命令タイプに応じて可変である。以下の表は、各命令タイプごとにオペランド数と長さの定義とを示したものである。
【0101】
オペランドタイプ
【0102】
【表3】
Figure 0004227218
【0103】
図12は、3オペランド命令に対する図10のデータワード、オペランド記述子282のデータワードフォーマット300と、2オペランド命令に対するデータワードフォーマット301とを示している。以下の表に、オペランド記述子のコード化の詳細を示す。
【0104】
オペランド記述子
【0105】
【表4】
Figure 0004227218
Figure 0004227218
【0106】
上述の表において、一定データアドレスモードの場合には、コプロセッサ224が1つの内部データ項目をフェッチあるいは計算して、この項目を当該オペランドの命令長として用いる。タイルアドレスモードの場合には、コプロセッサ224がいくつかのデータをサイクルして「タイル効果」を得る。オペランド記述子のLビットがゼロの場合には、データが短く、データ項目がオペランドワード中に存在することを意味する。
【0107】
図10において、それぞれのオペランド/結果ワード283−286は、オペランド自身の値あるいはデータが格納されているオペランド/結果の開始位置を示す32ビット仮想アドレスを含む。
【0108】
図2の命令制御部235は、命令を二段階で復号する。最初に、命令の主オプコードが有効であるかを調べ、主オプコード(図11)が無効である場合にはエラーを生成する。次に、CBus231を介して種々のレジスタを設定することにより、命令制御部235が命令を実行し、命令に指定されている動作を行う。なお、設定するレジスタがないような命令もある。
【0109】
各モジュールのレジスタは動作に応じていくつかの種別に分けられる。まず、状態レジスタタイプがあり、他のモジュールからは「読み込まれるのみ」で、レジスタを含むモジュールによって「読み込み/書き込み」されるものがある。次に、構成レジスタの一番目のタイプ(以降、config1)は、モジュールから外部的に「読み込み/書き込み」され、レジスタを含むモジュールからは「読み込みのみ」される。これらのレジスタは一般にアドレス値などの大きなタイプ構成情報を格納する際に用いられる。構成レジスタの二番目のタイプ(以降、config2)はすべてのモジュールから読み込み、書き込みができるが、レジスタを含むモジュールからは読み込みしかできない。このレジスタタイプは、レジスタのビットごとのアドレシングが必要なときに用いられる。
【0110】
制御タイプのレジスタとしては種々のものが存在する。第一のタイプ(以降、control1レジスタ)はすべてのモジュール(レジスタを含むモジュールも含む)によって読み込み/書き込みが可能である。Control1レジスタは、アドレス値などの大きな制御情報を格納する際に用いられる。同様に、制御レジスタの第二のタイプ(以降、control2)は、ビットごとに設定される。
【0111】
最後のレジスタタイプ(インタラプトレジスタ)は、レジスタを含むモジュールによって1にセットされ、セットされたビットに「1」を外部から書き込みことによりゼロにリセットすることができるようなビットをレジスタ内に含む。このようなタイプのレジスタはそれぞれのモジュールからのインタラプト/エラー信号に対処するために用いられる。
【0112】
コプロセッサ224の各モジュールは、命令を実行中でビジー状態のときには、CBus231上のc activeラインをセットする。このため、命令制御部235は、CBus231上の各モジュールからのc activeラインの「OR」をとり、命令が終了した時点を把握することができる。ローカルメモリ制御モジュール236と周辺インタフェース制御モジュール237とは、オーバラップ命令を実行することができ、オーバラップ命令を実行する際に起動するc_backgroundラインを備える。オーバラップ命令は、ローカルメモリインタフェースと周辺インタフェースとの間でデータを転送する「ローカルDMA」命令である。
【0113】
オーバラップローカルDMA命令の実行サイクルは、他の命令の実行サイクルとは異なる。オーバラップ命令が実行に移されるにあたっては、命令制御部235が既にオーバラップ命令が実行されているかどうかを調べる。オーバラップ命令が既に存在すれば、あるいはオーバラップ命令が不稼動モードになっていれば、命令制御部235は命令が終了するのを待ってから、当該命令の実行に移る。オーバラップ命令が存在せず、かつ稼動モードになっていれば、命令制御部235はすぐにオーバラップ命令を復号し、周辺インタフェース制御部237やローカルメモリ制御部236を構成し命令を実行する。レジスタを構成し終えたら、従来の意味で命令が終了するのを待たずに命令制御部235はレジスタ(終了レジスタ、状態レジスタ、命令ポインタ等)を更新する。この時点で、終了シーケンス番号はインタラプトシーケンス番号と同一であれば、「オーバラップ命令終了」インタラプト信号を出力するのではなく単に当該信号を用意する。「オーバラップ命令終了」インタラプト信号は、オーバラップ命令が完全に終了した時点で出力される。
【0114】
命令が復号されると、命令制御部は現在の命令を実行しつつ、次の命令をプレフェッチする。ほとんどの命令では、命令のフェッチ、復号よりも命令の実行に要する時間の方がかなり長い。命令制御部235は、以下の条件が揃った時点で命令をプレフェッチする。
1.現在実行中の命令がインタラプトや休止中でない
2.現在実行中の命令がジャンプ命令でない
3.次の命令ストリームがプリフェッチ可能である
4.他にペンディングしている命令が存在する
命令制御部235がプレフェッチ可能と判断すると、次の命令に要求を出し、プレフェッチバッファに配置し、バッファを有効にする。ここまで処理を進めると、命令制御部235は現在実行中の命令が終了するまでは何もすることがなく、当該命令の終了をCBus231上のc_activeとc_backgroundラインを調べることのみを行う。
3.8 命令制御部のレジスタ更の新
命令が終了すると、命令制御部235は新しい状態を反映させるためにレジスタの更新を行う。この処理は外部からのアクセスとの同期の問題を避けるために高速に行わなければならない。この高速更新処理は以下の手順で行われる。
1.適切なレジスタアクセスセマフォアの入手。セマフォアが命令制御部235の外部のエージェントによって占有されている場合には、セマフォアが解放されるまで命令実行サイクルが待機し、解放されてから処理に移る。
2.適切なレジスタの更新。命令が適切なジャンプ命令でない場合には、命令ポインタ(ic_ipaとic_ipb)を命令のサイズ分増加させる。ジャンプ命令のときは、ジャンプ先の値が命令ポインタにロードされる。従って、シーケンス番号が稼動モードであれば終了レジスタ(ic_fnaとic_fnb)は増加することになる。
【0115】
状態レジスタ(ic_stat)も新しい状態を反映させるように適切に更新される。必要であれば、休止ビットを設定することもある。インタラプトが生じ、インタラプトに対する休止が稼動状態になったり、エラーが生じた場合には、命令制御部235は休止する。休止は、状態レジスタ中の命令ストリーム休止ビット(a_pauseとb_pause)をセットすることによって起動される。命令実行を再開する際には、これらのビットを0にリセットしなければならない。
3.1クロックサイクル時間、CBus231上にc_end信号を送出し、コプロセッサ224中の他のモジュールに命令が終了した旨を伝える。
4.必要であればインタラプトを送出する。インタラプトの送出は、以下の状況のときに送出される。
a.「シーケンス番号終了」インタラプトが生じたとき。すなわち、終了レジスタ(ic_fnaとic_fnb)シーケンス番号がインタラプトシーケンス番号と一致したとき。このとき、インタラプトが準備され、シーケンス番号が稼動モードになり、インタラプトが生じる。あるいは、
b.終了した命令が終了時点でインタラプトするように符号化されている場合。この場合にはインタラプト機構が起動される。
3.9 レジスタアクセスセマフォアのセマンティックス
レジスタアクセスセマフォアは、複数の命令制御レジスタに高速アクセスを提供する機構である。高速アクセスを必要とするレジスタとして、以下のものが挙げられる。
1.命令ポインタレジスタ(ic_ipaとic_ipb)
2.ToDoレジスタ(ic_tdaとic_tdb)
3.終了レジスタ(ic_fnaとic_fnb)
4.インタラプトレジスタ(ic_intaとic_intb)
5.構成レジスタ中の休止ビット(ic_cfg)
外部エージェントはすべてのレジスタをいつでも安全に読むことができる。また、外部エージェントはすべてのレジスタにいつでも書き込むことができるが、命令制御部235がこれらのレジスタ中の値を更新してしまわないように、外部エージェントはまずレジスタアクセスセマフォアを入手しなければならない。命令制御部は、レジスタアクセスセマフォアが外部で宣言されている間は上述のレジスタ中の値を更新することはできない。また、命令制御部235は、高速を維持するために1クロックサイクルの間に上述のすべてのレジスタを更新する。
【0116】
前述のように、シーケンス機構が稼動モードであれば、各命令には32ビットの「シーケンス番号」が付与されている。命令シーケンス番号は順々に増加していき、0xFFFFFFFFから0x00000000にラッピングされる。
【0117】
外部からの書き込みがインタラプトレジスタ(ic_intaとic_intb)になされると、命令制御部235はすぐに以下の比較と更新を行う。
1.インタラプトシーケンス番号(インタラプトレジスタ中の値)が同一ストリームの終了シーケンス番号(終了レジスタ中の値)よりも「大きければ」(モジュロ演算)、命令制御部は状態レジスタ中の「シーケンス番号終了」準備ビット(ic_stat中のa_primedとb_primedビット)をセットすることで「シーケンス番号終了」インタラプト機構を準備する。
2.インタラプトシーケンス番号が終了シーケンス番号よりも「小さく」、当該ストリームにおいてオーバラップ命令が実行中であり、インタラプトシーケンス番号が最後のオーバラップ命令シーケンス番号(ic_loaあるいはic_lobレジスタ中の値)と同一であれば、命令制御部はic_statレジスタ中のa_ol_primedあるいはb_ol_primedビットをセットすることで「オーバラップ命令シーケンス番号終了」インタラプト機構を準備する。
3.インタラプトシーケンス番号が終了シーケンス番号よりも「小さく」、当該ストリームにおいてオーバラップ命令が実行中であり、インタラプトシーケンス番号が最後のオーバラップ命令シーケンス番号と同一でなければ、インタラプトシーケンス番号は終了命令を示すことになり、インタラプト機構は準備されない。
4.インタラプトシーケンス番号が終了シーケンス番号よりも「小さく」、当該ストリームにおいてオーバラップ命令が実行中でなければ、インタラプトシーケンス番号は終了命令を示すことになり、インタラプト機構は準備されない。
【0118】
外部のエージェントは、状態レジスタ中のインタラプト準備ビット(a_primed,a_ol_primed,b_primed,b_ol_primedビット)をセットすることができ、インタラプト機構を独立に起動、解除することができる。
3.10 命令制御部
図13は、命令制御部235をより詳細に示した図である。命令制御部235は、命令実行サイクルを処理しコプロセッサ224の全体の実行制御を管理する実行制御部305を含む。実行制御部305は、命令制御部235の全体の実行制御を管理し、命令シーケンスを決定し、命令のフェッチやプレフェッチを行い、命令の復号や命令制御レジスタの更新を行う。命令制御部は更に命令復号器306を備える。命令復号器306は、プレフェッチバッファ307から命令を受信し、前述の通り復号する。命令復号器306は、他のコプロセッサモジュール中のレジスタを構成して命令を実行する処理も行う。プレフェッチバッファ制御部307は、プレフェッチバッファ制御部中のプレフェッチバッファからの読み込みや書き込みを管理するとともに、命令復号器306と入力インタフェーススイッチ252(図2)との間のインタフェースをも管理する。また、プレフェッチバッファ制御部307は二つの命令ポインタレジスタ(ic_ipaとic_ipb)の更新をも管理する。命令制御部235、種々のモジュール239(図2)、外部インタフェース制御部238(図2)からのCBus231(図2)へのアクセスは、三つのモジュールのアクセス要求間での調停を行う「CBus」調停部308において行われる。要求はCBus231によって種々のモジュールのレジスタ部に転送される。
【0119】
図14は、図13の実行制御部305をより詳細に示した図である。前述の通り、実行制御部は図9の命令実行サイクル275の処理を管理し、特に以下の処理を行う。
1.次の命令をどの命令ストリームから取り出すかを決定し、
2.当該命令のフェッチを開始し、
3.プレフェッチバッファに格納されている命令の復号を命令復号器に指示し、
4.次の命令のプレフェッチを決定して開始し、
5.命令の終了を決定し、
6.命令が終了したらレジスタを更新する。
【0120】
実行制御部は、全体の命令実行サイクルを管理する大きなコア状態器310(以下、中枢部と呼ぶ)を備える。図15は、上述の命令実行サイクルを管理する中枢部310状態遷移図を示した図である。図14において、実行制御部は命令プレフェッチ論理部311を備える。この部位は、実行すべき命令が存在するかどうか、どの命令ストリームに命令が属するか、の決定処理を行う。図15の遷移図において開始312ならびにプレフェッチ313状態は、この情報を用いて命令を入手する。図14のレジスタ管理部317は、双方の命令ストリームのレジスタアクセスセマフォアをモニタし、各モジュール中の必要なすべてのレジスタを更新する処理を行う。また、終了レジスタ(ic_fnaとic_fnb)とインタラプトレジスタ(ic_intaとic_intb)とを比較し、「シーケンス番号終了」インタラプトを行うべきかどうかを決定する処理も、レジスタ管理部317が行う。更に、レジスタ管理部317はインタラプト準備処理も行う。オーバラップ命令部318は、ic_statレジスタ中の適切な状態ビットの管理を通して、オーバラップ命令の終了処理の管理を行う。実行制御部は、更に中枢部310と図13の命令復号器306との間のインタフェースを行う復号インタフェース部319を備える。
【0121】
図16は、命令復号部306をより詳細に示した図である。命令復号器はコプロセッサを構成してプレフェッチバッファ内の命令を実行する処理を行う。命令復号器306は、多くの小さな状態マシンの組み合わせである大きな状態マシンから構成される命令復号シーケンサ321を備える。命令シーケンサ321は,各モジュール中のレジスタをセットするCBusディスパッチャ312と通信する。また、命令復号シーケンサ321は、命令の有効性や命令のオーバラップ状況などの関連情報を実行制御部に伝える。ここで、命令の有効性チェックは命令オプコードが予約されているオプコードであるかどうかをチェックするものである。
【0122】
図17は、図16の命令ディスパッチャシーケンサ321をより詳細に示した図である。命令ディスパッチャシーケンサ321は、全体のシーケンス制御状態マシン324と連続したモジュール毎構成シーケンサ状態マシン(例えば325や326)を備える。モジュール毎構成シーケンサ状態マシンは構成すべき各モジュールに与えられる。全体として状態マシンはモジュールのコプロセッサマイクロプログラミングを定義する。状態マシン(例えば325)は、CBusディスパッチャに全体のCBusを利用して種々のレジスタをセットするように指示し、処理のための種々モジュールを構成する。特定のレジスタに書き込みをするためには、命令の実行が開始されなければならない。一般に命令の実行にはシーケンサ321が処理のためにコプロセッサのレジスタを構成する以上の時間が必要である。付録Aにおいて、コプロセッサの命令シーケンサによって実行されるマイクロプログラミング処理と命令シーケンサ321によってセットアップされた形式を示す。
【0123】
実際には、命令復号シーケンサ321は命令ごとにコプロセッサ中のすべてのモジュールを構成するわけではない。以下の表では、命令クラスに対するモジュール構成順序を、ピクセルオーガナイザ246(PO)、データキャッシュ制御部240(DCC)、オペランドオーガナイザB247(OOB)、オペランドオーガナイザC248(OOC)、主データパス242(MDP)、結果オーガナイザ249(RO)、JPEGエンコーダ241(JC)などの構成されるモジュールとともに示している。なお、外部インタフェース制御部238(EIC),ローカルメモリ制御部236(LMC),命令制御部235自身(IC)、入力インタフェーススイッチ252(IIS)、雑多モジュール(MM)などのモジュールは、命令復号処理中には構成されることはない。
【0124】
モジュール立ち上げ順序
【0125】
【表5】
Figure 0004227218
【0126】
図17において、各モジュール構成シーケンサ(例えば325)は必要なレジスタアクセス処理を行って特定のモジュールを構成するように管理する。また、全体のシーケンス制御状態マシン324は、前述の順序でモジュール構成シーケンサの全体の動作を管理する。
【0127】
図18は、上の表に従って関連するモジュール構成シーケンサを起動する全体シーケンス制御を状態遷移図330で表した図である。各モジュール構成シーケンサは、モジュールの実行中に種々のレジスタをセットするために、CBusディスパッチャを制御して、レジスタ内容を変更する処理を行う。
【0128】
図19は、図13のプリフェッチバッファ制御部307をより詳細に示した図である。プリフェッチバッファ制御部は単一のコプロセッサ命令(6×32ビットワード)を格納するためのプリフェッチバッファ335を備える。そして、プリフェッチバッファはIBusシーケンサ336によって制御される一つの書き込みポートと、命令復号器、実行制御部、命令制御部CBusインタフェースにデータを送出する一つの読み込みポートを備える。IBusシーケンサ336は、プリフェッチバッファ335の入力インタフェーススイッチへの接続においてバスプロトコルを監視する。また、命令をフェッチするためにアドレスを生成するアドレス管理部337をも備える。アドレス管理部337は、ic_ipaあるいはic ipbの一つを選択し入力インタフェーススイッチへのバスに接続する機能と、最後の命令がどのストリームからフェッチされたかに基づいてic_ipaあるいはic_ipbの一つを増加させる機能と、ic_ipaとic_ipbレジスタにジャンプ先のアドレスを格納する機能とを有する。PBC制御部339はプレフェッチバッファ制御部307の全体の制御を行う。
3.11 モジュールローカルレジスタファイルの説明
図13に示したように、命令制御モジュール自身を含む各モジュールは、図20に示してあるCBusインタフェース制御部303とともに上述したレジスタ304の内部セットを備え、CBus要求を受け付けるとともに当該要求に応じて内部レジスタを更新する処理を行う。モジュールの制御は、CBusインタフェース302を介してモジュール中のレジスタ304に書き込むことによって行われる。CBus調整部308(図13)は、命令制御部235、外部インタフェース制御部、雑多モジュールのどのモジュールがCBusを制御し、CBusのマスターとして動作し、レジスタの書き込み/読み出しを行うのかを決定する。
【0129】
図20は、各モジュールにおいて用いられるCBusインタフェース303の標準構成を示した図である。標準CBusインタフェース303はCBus302からの読み出し要求や書き込み要求を受信するとともに、モジュール内の種々のサブモジュールによって341を介して更新されるレジスタファイル304を備える。更に、メモリ領域の読み出しを含むサブモジュールのメモリ領域の更新を行う制御ライン344が備わっている。標準CBusインタフェース303はCBusの目的地として振る舞い、レジスタ304や他のサブモジュールのメモリオブジェクトの読み出し要求や書き込み要求を受け付ける。
【0130】
「c_reset」信号345は標準CBusインタフェース103内のすべてのレジスタをデフォルト状態にセットする。しかし、「c_reset」は自身とCBusマスターとの間の信号のやり取りを制御する状態マシンはリセットしない。そのため、「c_reset」がCBus処理中に送出されたとしても、当該処理は何かしらの形で終了することになる。「c_int」347、「c_exp」348、「c_err」349信号は、以下の式に基づいてモジュールerr_intとerr_int_enレジスタの内容より生成される。
【0131】
【数1】
【0132】
Figure 0004227218
【数2】
【0133】
Figure 0004227218
【数3】
【0134】
Figure 0004227218
信号「c_sdata_in」と「c_svalid_in」345は、モジュール列の中での前のモジュールからのデータ/有効信号であり、信号「c_sdata_out」と「c_svalid_out」350は、モジュール列の中での次のモジュールへのデータ/有効信号である。
【0135】
標準CBusインタフェース303の機能としては以下のものが含まれる。
1.レジスタの読み出し/書き込み管理
2.メモリ領域の読み出し/書き込み管理
3.テストモードの読み出し/書き込み管理
4.サブモジュールの監視/更新管理
3.12 レジスタ読み出し/書き込み管理
標準CBusインタフェース303はCBus上に流れるレジスタ読み出し/書き込み要求やビットセット要求を受け付ける。標準CBusインタフェースが管理するCBus命令として以下の2種類ある。
1.タイプA
タイプAは、他のモジュールが標準CBusインタフェース303内のレジスタに1、2、3、4バイト読み出し/書き込みする動作をする。書き込み動作では、命令サイクルの直後のクロックサイクルでデータサイクルが生じる。なお、レジスタ書き込み/読み出しのタイプフィールドはそれぞれ「1000」と「1001」である。標準CBusインタフェース303は命令を復号して、命令がモジュールのアドレスを指しているか、読み出し/書き込み動作のどちらかであるか、を調べる。読み出し動作では、標準CBusインタフェース303は、CBus処理の「reg」フィールドを用いてどのレジスタ出力に「c_sdata」バス350を接続するかを選択する。書き込み動作では、標準CBusインタフェース303は「reg」フィールドと「byte」フィールドを用いて選択されたレジスタにデータを書き込む。読み出し動作が終了すると、標準CBusインタフェースはデータを戻すと同時に「c_svalid」350を送出する。書き込み動作が終了すると、標準CBusインタフェース303は「c_svalid」350を送出して返答する。
2.タイプC
タイプCは、1つのレジスタ中のバイトの1つに他のモジュールが1ビットあるいは複数ビット書き込む動作をする。命令とデータとは1つのワードにまとめられる。
【0136】
標準CBusインタフェース303は命令をチェックして、命令がモジュールのアドレスを指しているかを調べる。また、「reg」「byte」「enable」フィールドを復号して、必要なイネーブル信号を生成する。また、命令のデータフィールドを取り出し、取り出したデータをワードの4バイトすべてに転送する。これにより、必要なビットはすべてのイネーブルバイト中のイネーブルビットに書き込まれることになる。この動作においては返答は必要ない。
3.13 メモリ領域読み出し/書き込み管理
標準CBusインタフェース303はCBus上のメモリ読み出し/書き込み要求を受け付ける。メモリ読み出し/書き込み要求を受け付けると、標準CBusインタフェース303は要求がモジュールのアドレスを指しているかを調べる。そして、命令のアドレスフィールドを復号することで、標準CBusインタフェースは適切なアドレスと、メモリ読み出し/書き込みを行うサブモジュールへのアドレスストローブ信号344とを生成する。書き込み動作では、標準CBusインタフェースは、命令からのバイトイネーブル信号をサブモジュールに転送する。
【0137】
標準CBusインタフェース303の動作は、CBus302上のCBus命令のタイプフィールドを復号し、次のサイクルにおいてデータがレジスタファイル304に取り込まれるか、あるいは他のサブモジュール344に転送されるようにするために、レジスタファイル304と出力セレクタ353に適切なイネーブル信号を生成するような読み出し/書き込み制御部352によって制御される。CBus命令がレジスタ読み出し動作であれば、読み出し/書き込み制御部352は出力セレクタ353をイネーブルにし、「c_sdataバス」345への正しいレジスタ出力を選択する。命令がレジスタ書き込み動作であれば、読み出し/書き込み制御部352はレジスタファイル304をイネーブルにし、次にサイクルでデータを選択する。もしその命令がメモリエリアのリード/ライトであれば、読み出し/書き込み制御部352は適切な信号344を生成し、モジュールが管理するメモリ領域を制御する。レジスタファイル304は、レジスタ選択復号部355、出力セレクタ353、インタラプト356、エラー357、例外358生成部、アンマスクエラー生成部359、あるモジュールのレジスタを構成するレジスタ部360の4つの部位から構成される。レジスタ選択復号部355は、読み出し/書き込み制御部352からの信号「ref_en」(レジスタファイルイネーブル)「write」「reg」を復号し、あるレジスタをイネーブルにするためのレジスタイネーブル信号を生成する。出力セレクタ353は、読み出し/書き込み制御部352からの信号「reg」出力に応じて、レジスタ読み出し処理のために正しいレジスタデータを選択しc_sdate_outラインに出力する。
【0138】
例外生成部356〜359は入力中にエラーが検出されたら出力エラー信号(例えば、347〜349、362)を生成する。各出力エラーを計算する手法は前述の通りである。
【0139】
レジスタ部360は、表5においてレジスタセットの構成を説明したときに論じたように、要求に応じて種々のタイプになり得る。
3.14 CBus構成
前述の通り、CBus(制御バス)は、各モジュールの標準CBusインタフェース中のレジスタをセットするための情報を転送することによって、全体的に各モジュールを制御する。標準CBusインタフェースの記述から明らかなように、CBusは以下の二つの目的を有する。
1.各モジュールを駆動する制御バス
2.RAM,FIFO,各モジュール中の状態情報のためのアクセスバス
CBusは命令−アドレス−データプロトコルを用いて、モジュール中の構成レジスタをセットすることにより、モジュールを制御する。一般に、レジスタは各命令ごとにセットされるが、修正はどの時点でも行うことができる。CBusは状態情報や他の情報を集め、データを要求することにより種々のモジュールからRAMやFIFOデータにアクセスする。
【0140】
CBusは以下の3つのどちらかにより処理ごとに駆動される。
1.命令実行時の命令制御部235(図2)
2.ターゲット(スレーブ)モードバス動作実行時の外部インタフェース制御部238(図2)
3.外部CBusインタフェースが構成された際には外部デバイス
いずれの場合でも、駆動モジュールはCBusの発モジュールとなり、他のすべてのモジュールが可能な着モジュールとなる。バスの調整処理は命令制御部が行う。
【0141】
以下の表は、好適な実施例において用いるのに適しているCBus信号の一つの定義を示したものである。
【0142】
CBus信号定義
【0143】
【表6】
Figure 0004227218
Figure 0004227218
【0144】
CBusのc_iad信号はアドレスデータを含み、二つの異なるサイクルにおいて制御部によって駆動される。
1.c_iad上でCBus命令やアドレスが駆動される命令サイクル(c_valid高)
2.c_iad(書き込み動作)やc_sdata(読み出し動作)上でデータが駆動されるデータサイクル(c_valid低)
書き込み動作の場合は、命令に関するデータは命令サイクルの直後にc_iadバス上に置かれる。読み出し動作の場合は、データサイクルが終了するまで読み出し動作のターゲットモジュールがc_sdata信号を駆動する。
【0145】
図21において、バスは32ビットの命令−アドレス−データフィールドを含む。このフィールドは以下の3つのタイプ(370〜372)がある。
1.タイプA動作(370)は、コプロセッサ中のレジスタや各モジュールのデータ領域の読み出し/書き込みを行うために用いられる。これらの動作は、ターゲットモードPCIサイクルを実行している外部インタフェース制御部238、命令のためにコプロセッサを構成している命令制御部231、外部CBusインタフェースによって生成される。
【0146】
これらの動作では、命令サイクルの直後のクロックサイクルがデータサイクルとなる。
2.タイプB動作(371)は診断モードで用いられ、ローカルメモリにアクセスしたり、一般インタフェース上のサイクルを生成する。これらの動作は、ターゲットモードPCIサイクルを実行している外部インタフェース制御部や外部CBusインタフェースによって生成される。データサイクルは命令サイクルの後のどの時点でも良く、データサイクルはc_svalid信号を用いて着モジュールから返答される。
3.タイプC動作(372)はモジュールのレジスタ中の各ビットをセットするために用いられる。これらの動作は、命令のためにコプロセッサを構成している命令制御部231や外部CBusインタフェースによって生成される。タイプC動作ではデータサイクルはなく、データは命令サイクル中に含まれる。
【0147】
各命令のタイプフィールドは、以下の表に従って関連するCBus処理を符号化したものである。
【0148】
CBus処理タイプ
【0149】
【表7】
Figure 0004227218
Figure 0004227218
【0150】
バイトフィールドは、レジスタ中のビットをセットするために用いられる。モジュールフィールドはCBus上の命令のアドレス先モジュールを指定するフィールドである。レジスタフィールドはモジュール中のどのレジスタを更新するかを指定するフィールドである。アドレスフィールドは、動作を行うメモリ部位を指定するフィールドである、RAM,FIFOなどのアドレスを指定するものである。イネーブルフィールドは、ビット設定命令が用いられたときに選択されたバイト中の選択されたビットをイネーブルにするフィールドである。データフィールドは、更新されるべきバイトに書き込まれるビットデータを含む。
【0151】
前述の通り、CBusは各モジュールごとに、モジュールが命令実行中のときに送出されるc_activeラインを含む。命令制御部はこの信号に基づいて命令の終了時を知ることができる。また、CBusは各モジュールごとにバックグラウンドモード時に動作するc_backgroundラインを、リセット、エラー検出、インタラプトを行うためのリセット、エラー、インタラプトラインとともに含む。
3.15 コプロセッサデータタイプとデータ操作
図2において、コプロセッサ部224の動作、特にJPEG符号化器241や主データパスのコプロセッサ中の主な計算処理動作を簡潔にするため、コプロセッサは外部フォーマットと内部フォーマットとを差別化するデータモデルを用いる。外部データフォーマットは、ローカルメモリインタフェースやPCIバスなどのコプロセッサの外部インタフェースに現われるデータフォーマットである。逆に、内部データフォーマットは、コプロセッサ224の主機能モジュール間で現われるフォーマットである。図22は、種々の入力/出力フォーマットを模式的に示した図である。入力外部フォーマット381は、ピクセルオーガナイザ246、オペランドオーガナイザB247,オペランドオーガナイザC248への入力フォーマットである。これらのオーガナイザは、入力外部フォーマットを、JPEG符号化器241や主データパス部242へ入力される入力内部フォーマット382に再フォーマットする。また、これら2つの機能部は出力データを出力内部フォーマットで出力し、結果オーガナイザ249が出力内部フォーマットを所望出力フォーマット304に変換する。
【0152】
実施例では、外部データフォーマットは3つのタイプに分けられる。第一のタイプは、データごとに4つまでのチャネルを有し、各チャネルが1、2、4、8、あるいは16ビットサンプルから成り立っているような連続ストリームから成るデータの「パックストリーム」である。パックストリームは、ピクセル、ピクセルに変換されるデータ、まとめられたビットなどを表現する際に用いられる。また、コプロセッサはリトルエンディアンバイトアドレッシングとバイト中ではビッグエンディアンビットアドレッシングを用いる。図23はパックストリームフォーマットの第一の例を示している。ここでは、各オブジェクト387は、各チャネルごとに2ビットのチャネル0、チャネル1、チャネル2の三つのチャネルから構成される。このフォーマットのデータ配置が388である。図24の次の例390では、各データオブジェクトが32ビットワードを有し、チャネルごとに8ビット有する4チャネルオブジェクト395が示されている。図25の第三の例395では、ビットアドレス397から始まるチャネルごとに8ビットを有するチャネルオブジェクト396が示されている。もちろん、アプリケーションに応じて、データチャネルの実際の幅や数は変化する。
【0153】
外部データフォーマットの第二のタイプは「アンパックバイトストリーム」であり、各ワード中の1バイトのみが有効であるような32ビットワードのシーケンスである。このフォーマットの例が図26の399として示されており、各ワード中の単一バイト400のみが用いられる。
【0154】
さらなる外部データフォーマットは「他」フォーマットとして分類されるオブジェクトで表現される。一般に、これらのデータオブジェクトは色空間変換表、ハフマン符号化表などの大きな表型のデータである。
【0155】
コプロセッサは4つの内部データタイプを用いる。第一のタイプは「パックバイト」フォーマットであり、最後の32ビットワードを除いて4アクティブバイトの32ビットワードから成るフォーマットである。図27に、ワードが4バイトであるパックバイトフォーマットの例402を示す。
【0156】
図28に示す次のデータタイプは「ピクセル」フォーマットであり、4アクティブバイトチャネルの32ビットワード403から成るフォーマットである。このピクセルフォーマットは4つのチャネルデータとして解釈される。
【0157】
図29に示す次の内部データタイプは「アンパックバイト」フォーマットであり、各ワードは一つのアクティブバイトチャネル405と三つの非アクティブバイトチャネルから成るフォーマットである。この際、アクティブバイトチャネルは最小バイトを占める。
【0158】
他の内部データオブジェクトは「他」データフォーマットとして区分される。外部フォーマットの入力データは適切な内部フォーマットに変換される。図30は、種々のオーガナイザによって実行される外部フォーマット410から入力フォーマット411への変換形態を示している。図31は、結果オーガナイザ249によって実行される内部フォーマット412から外部フォーマット413への変換形態を示している。
【0159】
以下、変換を実行する処理をより詳細に説明する。
【0160】
まず入力データ外部フォーマットから内部フォーマットへの変換であるが、図32は変換処理において種々のオーガナイザによって用いられる手法を示している。はじめは外部他フォーマット416であるが、これは種々のオーガナイザを経ずに単に通過する。次に、外部アンパックバイトフォーマット417は、アンパック正規化418を行って内部アンパックバイトと呼ばれるフォーマット419を生成する。アンパック正規化418処理は、外部アンパックバイトストリームから非アクティブ3バイトを取り除く処理を行う。図33はアンパック正規化処理を示したものであるが、4バイトチャネルを有する入力のうち1つのバイトチャネルのみが出力フォーマット419において有効な結果となっており、単なるバイトを出力している様子を示している。
【0161】
図32において、パック正規化421処理は、外部パックストリーム422中の要素オブジェクトをバイトストリーム423に変換する処理を行う。チャネルの各要素のサイズがバイト以下であれば、サンプルは8ビット値に補間される。例えば、4ビット単位をバイト単位に変換する場合には、4ビット値0xNはバイト値0xNNに変換される。1バイト以上のオブジェクトの場合には切り捨てが行われる。ストリーム422でサポートされる入力オブジェクトサイズは、1、2、4、8、16ビットサイズである。なお、これらは、本発明が適用されるシステム中のデータオブジェクトやワードの全幅に依存する。
【0162】
図34は、チャネルごとに(図23のデータフォーマット386ごとのように)2ビット有する3チャネルオブジェクト形式の入力データ422が入力されたときのパック正規化421の様子を示している。出力データはバイトチャネルフォーマット423になっている。この際、必要であれば各チャネルに「補間処理」が施され、8ビットサンプルが生成される。
【0163】
図32において、ピクセルストリームはその後、パック処理425、アンパック処理426、要素選択処理427のいずれかに送られる。
【0164】
図35はパック処理425の例を示したもので、単に非アクティブバイトチャネルが取り除かれ、ワードごとの4アクティブバイトにパックされたバイトストリームが生成される様子を示している。即ち、単一の有効バイトストリーム430がワードごとの4アクティブバイトを有するフォーマット431に圧縮される。アンパック処理426はほぼパック処理の反対の処理であり、アンパックバイトがワードの最小バイトとなる。図36は、パックバイトストリーム433がアンパックされ結果434が得られる様子を示している。
【0165】
図37は要素選択427処理を示したものであり、Nを単位ごとの入力チャネル数とすると、入力ストリームからN要素を選択する処理である。アンパック処理は「プロトタイプピクセル」、例えば437を生成するときに用いられる。なお、ピクセルチャネルは最小バイトから埋められる。図38は、形式436の入力データが要素選択部427によって変換され、プロトタイプピクセルフォーマット437が生成される様子を示している。
【0166】
要素選択が行われると、要素入替処理440(図32)が行われる。図38は要素入替処理の様子を示したもので、内部データレジスタ441に格納された一定値で選択要素を入れ替え、例のように出力要素242を生成する様子を示している。
【0167】
図32において、処理段425、526、440の出力はレーンスワップ処理444に送られる。図39に示されているように、レーンスワップ処理はあるレーンを他のレーンにバイトごとに多重化する処理であり、あるレーンを他のレーンに複製する処理をも含む。図38の例では、チャネル3とチャネル1とを入れ替え、チャネル3をチャネル2とチャネル1に複製する様子が示されている。
【0168】
図32において、レーンスワップ処理444が終わると、データストリームが再読み出しされて複製処理446に移る前に、マルチユースト値RAM250に格納されることもある。
【0169】
複製処理446は単にデータオブジェクトを複製する処理である。図40は、複製処理446をピクセルデータに適用した様子であり、複製ファクターは1である。
【0170】
図41は、複製処理をパックバイトデータに適用した様子である。
【0171】
図42は、出力内部フォーマット383から出力外部フォーマット384にデータを変換する結果オーガナイザ249の処理を示したものである。この処理では、図32に示した変換処理と同様の処理424、425、426、440を含むが、処理450では更に要素非選択451、非正規化452、バイトアドレシング453、書き込みマスキング454の処理を含んでいる。図43に示した要素非選択処理451は、図37の要素選択処理の逆処理であり、不必要なデータが削除される。例えば、図43では、入力中の3つの有効チャネルのみが取り出され、データ項目456にパックされる。
【0172】
図44に示した非正規化処理は、図34で示したパック正規化処理421のほぼ反対の動作をする。非正規化処理では、バイト単位で扱われていた各オブジェクトあるいはデータ項目を非バイト値に変換する処理が行われる。
【0173】
図42のバイトアドレシング処理453は、バイトアドレシングに必要なバイトごとの再構成処理を行う。外部アンパックバイト出力ストリームでは、ストリームアドレスの最小2ビットがアクティブストリームに対応する。バイトアドレシング処理453では、外部アンパックバイトが用いられているとき(図45)、1つのバイトチャネルから他のチャネルバイトに出力ストリームが再マップされる。外部パックストリームが用いられているときは(図46)、バイトアドレシングモジュール453は出力ストリームの開始アドレスを図示のように再マップする。
【0174】
図42の書き込みマスク処理454を図47に示す。書き込みされないパックストリームのあるチャネル(例えば460)をマスクする処理である。
適用される入力/出力データタイプ変換は、以下のデータ操作レジスタの内容に基づいて決められる。
*ピクセルオーガナイザデータ操作レジスタ(po_dmr)
*オペランドオーガナイザBとオペランドオーガナイザCデータ操作レジスタ(oor_dmr,ooc_dmr)
*結果オーガナイザデータ操作レジスタ(ro_dmr)
命令のための各データ操作レジスタの設定は、以下の2つの方法によってなされる。
1.命令実行の直前にコプロセッサレジスタに書き込む標準手法を用いて設定される
2.現在の命令に基づいてコプロセッサ自身で設定される
命令復号処理では、コプロセッサはデータの命令ワードやデータワードの内容を調べ、種々のデータ操作レジスタをどのように設定するかを決定する処理を他の処理とともに行う。なお、命令とオペランドのすべての組み合わせが有効であるわけではない。いくつかの命令ではオペランドフォーマットを規定しているものもある。不適切なオペランドを含む命令の場合、「定義されていない」結果が生成されることになるが、エラーを生じることなく終了してしまうこともある。対応するデータ記述子の「S」ビットが0であれば、コプロセッサはデータ操作レジスタをセットし、現命令を反映させる。
【0175】
図48はデータ操作レジスタのフォーマットを示した図である。以下の表は、図48に示されたレジスタ中の種々のビットフォーマットを示している。
【0176】
データ操作レジスタフォーマット
【0177】
【表8】
Figure 0004227218
Figure 0004227218
【0178】
Figure 0004227218
【0179】
各1つの命令において、複数の内部/外部データタイプが用いられることがある。オペランド、結果、命令タイプのすべて組み合わせは有効ではあるが、これらの組み合わせの一部のみが意味のある結果を生成する。各命令に対して期待されるオペランドと結果データタイプの具体的な組み合わせを表9に示す。表9は、外部/内部フォーマットにおいて期待されるデータタイプをまとめたものである。
【0180】
期待されるデータタイプ
【0181】
【表9】
Figure 0004227218
Figure 0004227218
【0182】
なお、表9において用いたシンボルは以下の通りである。
【0183】
シンボルの説明
【0184】
【表10】
Figure 0004227218
Figure 0004227218
【0185】
3.16 データ正規化回路
図49は、3つの主機能ブロックを含むコンピュータグラフィックスプロセッサを示している。3つの主機能ブロックは、ピクセルオーガナイザ246とオペランドオーガナイザB、C247、248中のデータ正規化部1062、主データパス242あるいはJPEG部241の中央グラフィックスエンジン、命令制御部235中のプログラミングエージェント1064である。データ正規化部1062と中央グラフィックスエンジンの動作は、プログラミングエージェント1064への命令ストリーム1064によって決定される。各命令ごとに、プログラミングエージェント1064は復号処理を行い、内部制御信号1067と1068をシステム中の他のブロックに出力する。各入力データワード1069ごとに、正規化部1062は現命令に基づいてデータのフォーマットを行い、処理結果をさらなる処理が実行される中央グラフィックスエンジン1063に送出する。
【0186】
データ正規化部は、簡潔にはピクセルオーガナイザとオペランドオーガナイザB,Cを意味する。これらのオーガナイザはデータ正規化回路を含み、入力データを適切に正規化した後、JPEG符号化あるいは主データパス中で中央グラフィックスエンジンに結果を送出する。
【0187】
中央グラフィックスエンジン1063は、32ビットピクセルである標準フォーマットのデータに対して動作する。従って、正規化部は入力データを32ビットピクセルフォーマットに変換する処理を行う。正規化部への入力データワード1069も32ビット幅を有するが、パック要素あるいはアンパックバイトのいずれかのフォーマットであってもよい。パック要素入力ストリームは、データオブジェクトが1,2,4,8,16バイト幅であるようなデータワード中での連続するオブジェクトから成る。一方、アンパックバイト入力ストリームは、8ビットのバイトのみが有効であるような32ビットのワードから成る。更に、正規化部で生成されるピクセルデータ11は、チャネルが8ビット幅で定義されるような1,2,3,4個の有効チャネルから成る。
【0188】
図50は、データ正規化部1062の具体的なハードウェア構成を示した図である。データ正規化部1062は、FIFOバッファ(FIFO)1073、32ビット入力レジスタ(REG1)、32ビット出力レジスタ(REG2)、正規化マルチプレクサ1075,制御部1076から成る。入力データワード1069はFIFO1073に格納された後、(REG1)1074にすべての入力ビットが所望出力フォーマットに変換されるまでラッチされる。正規化マルチプレクサ1075は、(REG1)1074中の値と(FIFO)1073の現出力とからのビットを選択することで、REG2にラッチされるピクセルを生成するような32組み合わせスイッチを備える。即ち、正規化マルチプレクサ1075はx[63..32]とx[31..0]とで示される2つの32ビット入力ワード1077、1078を入力とする。
【0189】
このような手法を用いることで、特に命令処理においてFIFOが少なくとも2つの有効データワードを有する場合に、装置の全体スループットを向上させることができる。これは、データワードをメモリからフェッチする手法によるものである。所望データワードあるいはオブジェクトがFIFOバッファ中の隣接する入力データワードに拡散あるいは「ラップ」されていることがあるが、入力レジスタ1074を用いることで、FIFOバッファ中の隣接データワードからの要素を用いて完全な入力データを再構成することができ、主データ操作処理段に先立って必要となるさらなる記憶装置やビットストリップ処理を省くことができる。類似のタイプの複数データワードが正規化部に入力されるような場合には、このような構成が大きな利点となる。
【0190】
制御部は、REG1 1074やREG2 1076を更新するイネーブル信号REG1_EN1080やREG2_EN[3..0]1081を生成するとともに、FIFO 1073や正規化マルチプレクサ1075を制御する信号をも生成する。
【0191】
図49のプログラミングエージェント1064はデータ正規化部1062に対して次のような構成信号を送出する。FIFO_WR4信号、正規化ファクターn[2..0]、ビットオフセットb[2..0]、チャネルカウントc[1..0]、外部フォーマット(E)といった信号である。入力データは,有効データが存在するクロックサイクルごとにFIFO WR信号1085を送出することにより、FIFO1073に書き込まれる。領域が得られないときには、FIFOはfifo_full状態フラグ1086を送出する。32ビット入力データが与えられると、外部フォーマット信号を用いて、入力がパックストリームフォーマット(E=1)であるかアンパックバイト(E=0)であるかが調べられる。E=1の場合には、正規化ファクターはパックストリームの各要素サイズとなる。即ち、n=0は1ビット幅の要素、n=1は2ビット幅要素、n=2は4ビット幅要素、n=3は8ビット幅要素、n>3は16ビット幅要素を示す。また、チャネルカウントは、所望有効バイト数でピクセルを生成するためにクロックサイクルごとにフォーマットする連続した入力オブジェクトの最大数である。具体的には、c=1は最小バイトのみが有効であるピクセル、c=2は最小2バイトが有効であるピクセル、c=3は最小3バイトが有効であるピクセル、c=0はすべての4バイトが有効であるピクセルである。
【0192】
パックストリームが8ビット幅以下の要素から成る場合には、ビットオフセットがREG1に格納されている値であるx[31..0]中のデータ処理開始位置を決定する。ビットオフセットがはじめの入力バイトの最大ビットからの偏移である場合には、出力データバイトy[7..0]の生成方法は以下の式で与えられる。
【0193】
n=0の場合、
y[i]=x[7−b] 0≦i≦7のとき
n=1の場合、
y[i]=x[7−b] i=1,3,5,7のとき
y[i]=x[6−b] i=0,2,4,6のとき
n=2の場合、
y[3]=x[7−b]
y[2]=x[6−b]
y[1]=x[5−b]
y[0]=x[4−b]
y[7]=y[3]
y[6]=y[2]
y[5]=y[1]
y[4]=y[0]
n=3の場合、
y[i]=x[i] 0≦i≦7のとき
n>3の場合、
y[7...0]=x[15...8]
出力データバイトy[15..8],y[23..16],y[31..24]を生成する式も同様である。
【0194】
なお、以上の手法は、入力ストリームの要素を入力し、必要な回数の複製処理を行い標準幅の出力オブジェクトを生成することで、いかなる長さの出力アレイをも生成することができるように拡張できる。また、入力要素の処理順は、リトルエンディアンでもビッグエンディアンでも良い。なお、上述の例では、常に処理が入力バイトの最大ビットから始まるため、ビッグエンディアン要素順を用いている。リトルエンディアン順を用いる場合には、ビットオフセットを入力バイトの最小ビットに対する値として再定義する必要がある。また、入力要素幅が標準出力幅以上のときには、出力要素は入力要素を切り捨てる、一般には適当な数の最小ビットを削除することによって生成される。上式では、16ビットデータオブジェクトの最大バイトを選択することにより、16ビット入力要素を切り捨てて8ビット幅標準出力を生成している。
【0195】
図50の制御部はn[2..0]とc[1..0]の復号を行い、これらとb[2..0]とを用いて正規化マルチプレクサのための選択信号やREG1やREG2のためのイネーブル信号を生成する。また、FIFOは命令中において空になることもあるため、制御部はREG1中に入力データを選択する現在のビット位置in_bit[4..0]と、出力データの書き込みを始める現在のバイト位置out_byte[4..0]を記憶するカウンタを備える。制御部は、処理が終了した時点で、in_bit[4..0]の値とREG1の最終オブジェクトの位置とを比較することで入力ワードを検出し、FIFOが空でない1クロックサイクルにおいてFIFO_RD信号を送出することでFIFO読み出し動作を開始する。信号fifo_empty,fifo_fullはFIFO状態フラグであり、FIFOが有効なデータを有していないときにfifo_empty=1、FIFOがフルのときにfifo_full=1となる。FIFO RDが送出されたクロックサイクルにおいて、REG1_ENの送出され、新しいデータがREG1に取り込まれる。REG2のイネーブル信号は、それぞれが出力レジスタの各バイトに対応ごとに4つある。制御部は、復号されたc[1..0]、REG1内の処理待機中の有効要素数、REG2において未使用チャネル数の3つの値中での最小値をとることで、REG2_EN[3..0]を計算する。E=0の場合には、REG1中には一つの有効要素しか存在しない。REG2を占めるチャネル数が復号されたc[3..0]と等しい場合に、完全な出力ワードが得られる。
【0196】
本発明の好適な実施例では、制御部と正規化マルチプレクサにおいて用いられるオフセットの一部のみを用いるなど、ビットオフセットパラメータを制限する機能を付加することにより、図50の装置が占める回路領域を大幅に低減することができる。このオフセット制限機能は正規化ファクターに依存するものであり、以下の式に応じて動作する。
【0197】
b_trunc[2...0]=0 n≧3の場合
=b[2...0] n=0の場合
=b[2...1] n=1の場合
=b[2]&”00” n=2の場合
(「&」はビットごとの結合処理を示す)
このような処理により、図50においてMUX0、MUX1...MUX31で示されている各正規化マルチプレクサのサイズが、制限機能を用いないときの32−1からビットオフセット制限を行ったときの最大サイズ20−1まで低減される。このサイズ縮小により回路速度の向上も図ることができる。
【0198】
以上のように、好適な実施例では、データをいくつかの正規化形式に変換する効率的な回路を備える。
3.17 アクセラレータカードの画像処理動作
図2と表2において、命令制御部235はコプロセッサ224において実行される動作に帰着される命令を「実行する」。実行される命令は、主データパス部242において有用な機能が実行されるような種々の命令を含む。これらの有用な命令の1つが合成処理である。
【0199】
3.17.1 合成
図51は、主データパス部242において実装される合成モデルを示した図である。合成モデル462は、一般に3つのデータ入力ソースと出力データ(シンク)463を含む。入力ソースの1つは、出力463とメモリ内での同じ相手先からのピクセルデータ464である。また、色や不透明度などのデータソースとして用いられる命令オペランド465を含む。ここで、色や不透明度はフラット、ブレンド、ピクセル、タイルのどれでも良い。なお、フラットやブレンドに関しては、入力/出力を介してフェッチするよりも内部で生成した方が高速であるため、ブレンド生成部467において生成される。更に、入力データは、オペランドデータ465を減衰させる減衰データ466をも含む。
【0200】
前述のように、通常ピクセルデータは各チャネルが1バイト幅である4つのチャネルから成る。ここで、最高アドレスの1バイトが不透明チャネルである。なお、合成処理の動作や有用性に関しては、解説論文「Thomas Porter and Tom Duff”Compositing Digital Images”in Computer Graphics,volume 18,number 3,July 1984」などの標準記事を参照されたい。
【0201】
コプロセッサはプレ乗算データを用いることもできる。プレ乗算は、各色チャネルと不透明チャネルとを前もって乗算する処理である。そのため、2つのオプションのプレ乗算部468、469を備え、必要なときに、不透明チャネル470、471と色データとをプレ乗算し、プレ乗算された出力472、473を得ることができる。合成部475は、現在の命令データに基づいて2つの入力を合成する。以下の表11に、合成オペレータを示す。
【0202】
合成動作
【0203】
【表11】
Figure 0004227218
【0204】
ここで、(aco,ao)は、色acと不透明度aoのプレ乗算ピクセルを表す。Rはオフセット値であり、「wc」は以下で説明するラッピング/クランピングオペレータである。なお、上表の各オペレータの逆動作も合成部475が備えていることに注意されたい。
【0205】
クランプ/ラッピング部476は、制限値0〜255内にデータをクランプ、或はラップするための処理部である。また、必要であれば、データをオプションの「アンプレ乗算」477処理することもでき、もとのピクセル値に戻すこともできる。最後に、出力データ463が生成され、メモリに戻される。
【0206】
図52は、合成処理を行う際に主データパス部に送られる命令形式を示している。主オプコード中のXフィールドが1であれば、前記の表に従って加算オペレータが適用される。このフィールドが0であれば、加算オペレータ以外の他の命令が適用される。Paフィールドは、第一のデータストリーム464(図51)をプレ乗算するかどうかを示すフィールドである。また、Pbフィールドは第2のデータストリーム465をプレ乗算するかどうかを示し、Prフィールドは部位477を用いて結果を「アンプレ乗算」するかどうかを示す。Cフィールドは範囲0−255内にラップあるいはクランプ、オーバフローあるいはアンダーフローするかどうかを示し、「com−code」フィールドはどのオペレータを適用するかを示す。加算オペレータはオフセットレジスタ(mdp_por)を用いることもできる。このオフセットはラッピング/クランピング処理が行われる前に加算動作の結果から引かれる。加算オペレータでは、com−codeフィールドはオフセットレジスタのチャネルごとにイネーブルするかどうかを示すフィールドとなる。
【0207】
先に述べた図10の標準命令ワード符号化280は、合成オペランドのために変更させられる。出力データの相手先がもとのソースと同じであるため、オペランドAは常に結果ワードと同一となる。そのため、オペランドAはオペランドBとともにオペランドBをより長く記述することができる。他の命令と同様に、命令中のA記述子は入力フォーマットを記述し、R記述子が出力フォーマットを規定する。
【0208】
図53は、ブレンド命令の命令ワードフォーマットを第一例470として示している。ブレンド処理は、各チャネルごとの開始値471と終了値472とで規定される。同様に、図54は、タイルアドレス476、開始オフセット477、長さ478によって規定されるタイル命令フォーマットを示している。すべてのタイルアドレスやサイズはバイトごとに特定される。タイル処理はモジュラー的に行われ、図55は図54のフィールド476〜478を説明する図である。タイルアドレス476はタイルメモリの開始アドレスを、タイル開始オフセット477はタイル開始時に用いられる最初のバイトを、タイル長478はラップする全体のタイル長を指定する。
【0209】
図51において、色要素や不透明度は減衰値466によって減衰させられることもある。減衰値は以下の3つの手法により得られる。
1.命令のオペランドCワード中に減衰ファクタをいれることによって、ソフトウエアがフラット減衰を指定することができる。
2.1がオンで、0がオフであるビットマップ減衰は、命令のオペランドCワード中でビットマップのアドレスを特定するソフトウェアを用いて利用できる。
3.バイトマップ減衰を、命令のオペランドCワードのバイトマップアドレスに設けてもよい。
4.定するソフトウエアを用いて、1のときにオン、2のときにオフとするビットマップ減衰を行うことができる。
【0210】
減衰値は符号なしの0〜255の整数であるため、プレ乗算された色チャネルは、
Coa=Coa×A/255
を計算することで、減衰ファクターと乗算される。ここで、Aは減衰ファクター、Coはプレ乗算された色チャネルである。
【0211】
3.17.2 色空間変換命令
図2と表2において、主データパス部242とデータキャッシュ230は、主に色変換の処理を行う。色空間変換は第一の色空間フォーマット(例えば、RGBカラーディスプレイに適したフォーマット)から第二の色空間フォーマット(例えばCYMあるいはCYMK印刷に適したフォーマット)への変換処理を行う。色空間変換処理はすべての色空間をサポートするように設計されており、1次元から多次元までのいかなる機能において用いることができる
命令制御部235はCBus231を介して、主データパス部242、データキャッシュ制御部240、入力インタフェーススイッチ252、ピクセルオーガナイザ246、MUVバッファ250、オペランドオーガナイザB247、オペランドオーガナイザC248、結果オーガナイザ249を構成し、色変換モードで動作するように制御する。このモードでは、ピクセルの複数ラインから成る入力画像がピクセルストリームとして主データパス部242に1ピクセルラインごとに送出される。主データパス部242(図2)は入力インタフェーススイッチ252からピクセルオーガナイザ246を介してピクセルストリームを受け取り、1ピクセルごとに色空間変換処理を行う。また、インターバル表や分数表がMUVバッファ250にあらかじめロードされ、色変換表がデータキャッシュ230にロードされる。主データパス242はこれらの表にオペランドオーガナイザB,Cを介してアクセスし、例えばRGB色空間からCYMあるいはCYMK色空間にピクセルを変換し、変換されたピクセルを結果オーガナイザ249に送る。主データパス部242、データキャッシュ230、データ制御部240、他の前述のデバイスは、命令制御部235の制御のもとで、単一出力一般色空間(SOGCS)変換モードあるいは複数出力一般色空間(MOGCS)変換モードのどちらかのモードで動作する。データキャッシュ制御部240やデータキャッシュ230の詳細に関しては、「データキャッシュ制御部とキャッシュ」240、230(図2)の項目を参照されたい。
【0212】
正確な色空間変換処理は複雑な非線形処理である。例えば、RGBピクセルからCYMK色空間の単一主色要素(即ちシアン)への色空間変換処理は理論的には線形であるが、実際には主にピクセルの色要素を出力する出力デバイスにおいて非線形性が生じてしまう。RGBピクセルからCYMK色空間の他の主色要素(黄、マジェンタ、黒)への色空間変換処理においても同様である。即ち、各色要素において生じてしまう非線形性を補償するために、非線形色空間変換が一般に用いられる。このような複雑な色変換処理の非線形性のために、複雑な伝達関数が組み込まれたり、ルックアップテーブルが用いられる。例えば24ビットのRGBピクセルの入力色空間が与えられると、これらのピクセルをCYMK色空間の8ビット主色要素(シアン)にマッピングするルックアップテーブルは16メガバイト以上を必要とする。同様に、24ビットRGBピクセルをCYMK色空間の4つの8ビット主色要素にマッピングするルックアップテーブルは64メガバイト以上となり、膨大な容量が必要なる。これに対して、主データパス242(図2)は、データキャッシュ230に格納されたルックアップテーブルを用い、入力色空間中の点に粗い出力色値を対応させ、出力色値を補間することで中間出力を得る。
a.単一出力一般色空間(SOGCS)変換モード
単一ならびに複数出力色変換モード(SOGCS)と(MOGCS)双方とも、RGB色空間は8ビットの赤、緑、青色要素を有する24ビットピクセルから成る。RGB色空間の各RGB次元は15の区間に分割され、それぞれの区間の長さはプリンタのRGBからCYMK色空間への非線形性の逆関数となるように設定される。即ち、伝達関数が強い非線形性を示す場合には区間の長さを短くし、伝達関数が線形に近い場合には区間の長さを長くする。このような伝達関数の非線形部位を知るためには、各出力プリンタの色空間を正確に調べることが望ましい。しかし、ノウハウやプリンタタイプ(例えばインクジェット)の測定された特徴に基づいて、伝達関数を近似あるいはモデル化することも可能である。入力ピクセルの各色チャネルごとに、色要素値の15の区間中の位置が決められる。どの区間に入力色要素値が存在するかを決定するためと、入力色要素値が存在する区間内の位置を決定するためとの2つのテーブルが主データパス部242において用いられる。もちろん、異なる伝達関数を有する出力プリンタに対しては異なるテーブルを用いても良い。
【0213】
前述のようにRGBの各次元は15の区間に分割される。即ち、RGB色空間は区間で区切られた3次元ラティス構造となっており、区間の両端の入力ピクセルは入力色空間では粗い配置となっている。更に、区間の両端に対応する出力色空間の出力色値のみがルックアップテーブルに格納されている。従って、入力色ピクセルの出力色値は、入力ピクセルが存在する区間の両端に対応する出力色値を決定し、区間内の位置に基づいて出力色値を補間することで求められる。この手法により、大容量のメモリを用いなければならない必要性を低減できる。
【0214】
図56は、入力RGB色ピクセルに対して、対応する区間や区間内の位置を決定する例480を示している。変換処理は、24ビット入力ピクセルの8ビット入力色チャネルごとに区間テーブル482や区間内位置テーブル483を用いて実行される。図56において、8ビット入力色要素481は10進数の4をバイナリー形式で表示したものであるが、この8ビット入力色要素481が区間テーブルや区間内位置テーブルへのルックアップとして用いられる。区間テーブル482は、入力色要素値481が存在する0から14までの区間の1つを4ビットで出力する。同様に、区間内テーブル482は、入力色値要素481が存在する区間内での位置を示す。区間内テーブルは、0から255までの範囲の8ビット値を格納しており、この値は256の分数として解釈される。従って、10進数4をバイナリーであらわした入力色値要素481の場合には、区間テーブル482をルックアップすることで、出力値0が生成される。また、入力値4を区間内位置テーブル483でルックアップすることにより、分数160/256を表わす出力値160が生成される。区間テーブル482と区間内位置テーブル483からわかるように、区間長は均一ではない。前述のように、区間長は伝達関数の非線形性によって決められる。
【0215】
上述の通り、各RGB色要素に対して区間テーブルと区間内位置テーブルとを用いることで、3つの区間出力と3つの区間内位置出力が得られる。各色要素に対する区間/区間内位置テーブルはMUVバッファ(図2)にロードされ、必要な時点で主データパス242によってアクセスされる。色変換処理におけるMUVバッファ250の構成を図57に示す。MUVバッファ250(図57)は、それぞれが各色要素に対応する3つの領域488、489、490に分けられる。各領域(例えば488)は、更に4ビットの区間テーブルと8ビットの区間内位置テーブルとに分けられる。12ビット出力492は主データパス部242によってMUVバッファ250から各入力色チャネルごとに取り出される。10進数4の単一入力色要素の上述例では、12ビット出力は000001010000となる。
【0216】
図58は、補間処理の例を示した図である。補間処理は、1つの3次元空間500(例えばRGB色空間)から他の色空間(例えばCMYあるいはCMYK)への補間が主な処理である。ピクセルP0からP7はRGB入力色空間内で粗く存在しており、出力色空間において対応する出力色値CV(P0)からCV(P7)を有する。ピクセルP0からP7の間に位置する入力ピクセルPiの出力色要素値は、以下のようにして決定される。まず、入力ピクセルPiを取り囲む区間の両端P0,P1,...,P7を決定する。次に、区間内位置要素frac_r,frac g,frac_bを決定し、最後に、P0からP7の両端に対応する出力色値CV(P0)からCV(P7)の間を区間内位置要素を用いて補間する。
【0217】
補間処理は、まず赤(R)方向の1次元補間を行い、temp11,temp12,temp13,temp14の値を以下の式から求める。
【0218】
temp11=CV(P0)+frac_r(CV(P1)−CV(P0))
temp12=CV(P2)+frac_r(CV(P3)−CV(P2))
temp13=CV(P4)+frac_r(CV(P5)−CV(P4))
temp14=CV(P6)+frac_r(CV(P7)−CV(P6))
次に、補間処理は、以下の式を用いてtemp21,temp22を求め、緑(G)方向の1次元補間の計算をする。
【0219】
temp21=temp11+frac_g(temp12−temp11)temp22=temp13+frac_g(temp14−temp13)最後に、以下の式に基づいて最終色出力値を求め、青(B)方向の最終次元補間を行う。
【0220】
final=temp21+frag_b(temp22−temp21)
入力と出力との範囲が一致しない場合もしばしば有り得る。ここで、出力範囲が入力範囲よりも狭いと、両端で範囲をクランプしなければならないことが多い。即ち、範囲の端あたりの色を変換した際に望ましくないひずみが生じることが多い。図59は、この問題が生じる例を説明しており、入力範囲値を出力範囲値に1次元マッピングする様子が示されている。ここで、入力値に対する出力値が点510と511とで定まっているものとする。最大の出力値が点512でクランプされるとすると、点511はこの大きさの出力でなければならない。従って、510と511の2つの点を補間する場合には、線515が補間線となり、入力点516には出力値517が対応する。しかし、範囲の制約が存在しないときに出力値が点518になるような場合には、この手法が必ずしも最適な色マッピングであるとは限らない。510と518との補間線は、入力点516に対して出力値519を生成する。このような2つの出力値517と519の差異は、特に範囲の端あたりの色を印刷する場合などしばしば目につくひずみとなる、この問題を避けるために、主データパス部は、拡張出力色空間で計算し、以下の式に用いて適切な範囲にスケールやクランプすることも可能である。
【0221】
0 x≦63のとき
out= 2(x−64) 64≦x≦191のとき
255 192≦xのとき
図58において、補間処理は、RGBピクセルを単一出力色要素(例えばシアン)に変換するSOCGS変換モードでも、RGBピクセルをすべての出力色要素に同時に変換するMOGCSモードのどちらでも実行される。色変換が画像中の各ピクセルに対して行われる場合には、数100万ピクセルがそれぞれ独立に色変換されることになる。従って、高速に動作するためには、入力値周辺の8つの値(P0−P7)を素早く見つけることが望ましい。
【0222】
図57において説明した通り、主データパス部242は、各色入力チャネルごとに4ビット区間部位と8ビット区間内位置部位とから成る12ビット出力を取り出す。主データパス部242は赤、緑、青色チャネルの4ビット区間部位を結合し、図60中の520のように単一の12ビットアドレス(IR,IG,IB)を生成する。
【0223】
図60は、単一12ビットアドレス520から単一出力色要素563が得られる様子を示したデータフロー図である。12ビットアドレス520は、まず生成部1881(図141)のようなデータキャッシュ制御部240のアドレス生成部に送られ、メモリバンク(B0,B1,...,B7)に対する8個の9ビットライン/バイトアドレス521を生成する。データキャッシュ(図2)は、8個の独立のメモリバンク522に分割され、それぞれは8個のライン/バイトアドレスによって独立にアドレシングされる。アドレス生成部における12ビットアドレス520から8ライン/バイトアドレスへの変換は、以下の表に従って行われる。
【0224】
S0GCSモードにおけるアドレス合成
【0225】
【表12】
Figure 0004227218
【0226】
ここで、BIT[8:6],BIT[5:3],BIT[2:0]は、それぞれ9ビットバンクアドレスの6から8ビット、3から5ビット、0から2ビットを示す。また、R[3:1],G[3:1],B[3:1]は12ビットアドレス520の4ビット区間IR,IG,IBの第1から第3ビットまでを示す。
【0227】
表12のメモリバンク5に関して、12ビットから9ビットへのマッピングを詳細に説明する。12ビットアドレス520中の4ビット赤区間Irの1〜3ビットが9ビットアドレスB5の6〜8ビットにマッピングされ、4ビット緑区間Igの1〜3ビットが加算されて9ビットアドレスB5の3〜5ビットにマッピングされ、4ビット青区間Ibの1〜3ビットが9ビットアドレスB5の0〜2ビットにマッピングされる。
【0228】
8つのライン/バイトアドレス521は、512×8ビットから成る対応するメモリバンク522へのアドレスとして用いられ、対応する8ビット出力色要素523が各メモリバンク522からラッチされる。このアドレシング処理によれば、端点P0〜P7に対応する出力色値CV(P0)〜CV(P7)がメモリバンク中での異なるアドレスとなることがある。例えば、12ビットアドレス0000 0000 0000は、すべてのバンクで000 000 000という同一のバンクアドレスが得られるが、12ビットアドレス0000 0000 0001の場合には、バンク7、5、3、1ではバンクアドレス000 000000となり、バンク6、4、2、0ではバンクアドレス000 000 001となるように異なるバンクアドレスが得られる。このようにして、入力ピクセル値を取り囲む8つの単一出力色値CV(P0)〜CV(P7)が同時に各メモリバンクから得られ、メモリバンクにおいて出力色値が二重になることを防ぐことができる。
【0229】
図61は、単一色変換モードにおいて用いられるデータキャッシュ230のメモリバンクの構成を示している。各メモリバンクは128ラインエントリから成り、各ラインエントリは32ビット長で4×8ビットメモリ533〜536から構成される。メモリアドレス521の上7ビットは、メモリアドレス中の対応するデータ列を決定し、メモリバンク出力としてラッチ542するために用いられる。下2ビットはバイトアドレスで、マルチプレクサ543への入力となり、どの4×8ビットエントリを出力として選択544するかを決定するために用いられる。クロックサイクルごとに8つの各メモリバンクのためのデータが出力され、主データパス部242に送られる。即ち、データキャッシュ制御部はオペランドオーガナイザ248(図2)から12ビットのバイトアドレスを受け取り、主データパス部242における補間処理のための8ビット出力色値をオペランドオーガナイザ247、248に出力する。
【0230】
図60において、主データパス部242(図2)は補間処理を3ステップで実行する。主データパス部における第1ステップにおいて、乗算/加算部(例えば550)は対応するメモリバンク(例えば522)から出力される色値と赤区間位置要素551を入力とし、前記の式の第1ステップに従って4つの出力値を計算する。第1ステップの出力(例えば553、554)は第2ステップ556に送られ、frac_g入力557を用いて第2ステップの前式に従って出力558を計算する。最後に、第2ステップ出力558、559とfrac_b入力562とを用いて、前式に基づいて最終出力色563を計算する。
【0231】
図60に示した処理は、全体で最大のスループットを得るためにパイプライン化されている。更に、図60の手法は単一出力色要素563が必要なときに用いられる。例えば、図60の手法は、まず出力画像のシアン色要素を生成し、その後でパス間のキャッシュテーブルを再ロードして出力画像のマジェンタ、黄、黒要素を生成するような場合に用いられる。これは、特に、それぞれの出力色が独立パスとなるような4パス印刷処理に適している。
b.複数出力一般色空間モード
コプロセッサ224はM0GCSモードでの動作も行うが、MOGCSモードはいくつかの点を除いてSOCGSモードとほぼ同様に動作する。MOGCSモードでは、図2の主データパス部242、データキャッシュ制御部240、データキャッシュが協調して、出力される4つの主色要素を同時に出力する。このためにはデータキャッシュ230のサイズが4倍必要となるが、記憶領域を節約するためにMOGCS動作モードでは、データキャッシュ制御部240は出力色空間のすべての出力色値の1/4のみを格納する。出力色空間の残りの出力色値は低速度の外部メモリに格納され、必要な時点で取り出される。なお、本装置や手法は、キャッシュシステムにある粗い色変換テーブルのミス率が非常に小さいという驚くべき事実に基づいている。これは、多くのカラー画像では、1つのピクセルと他のピクセルとの色値の分散が小さいという知見に基づいたものである。また、粗い出力色値は近隣のピクセルにおいても同じになる確率が非常に高い。
【0232】
図62は、コプロセッサが複数チャネルキャッシュ色変換を実行する手法を示している。各入力ピクセルは色要素に分解された後、対応する区間テーブル値(図56)が前述のように決定され、Ir,Ig,Ib 570といった3つの4ビット区間が得られる。結合された12ビット数570は前述の表12に従って変換され、8個の9ビットアドレスが得られる。アドレス(例えば572)は図63において以下で説明するように再マッピングされ、対応するメモリバンク573をルックアップして4つの色出力チャネル574が得られる。メモリバンク573は、全体で512×32ビットエントリとなり得るが、そのうちの128×32ビットエントリを格納する。メモリバンク573はデータキャッシュ230の一部をなし、図63で説明するようにキャッシュとして用いられる。
【0233】
図63は、9ビットバンク入力578が579に再マッピングされる様子を示しており、ビット580〜582の順番を入れ替えることによりメモリパターンのエイリアスを取り除くことができる。これにより、隣接するピクセル値が同じキャッシュ要素のエイリアスされる確率を低減することができる。
【0234】
再構成されたメモリアドレス579は、それぞれが32ビットの128エントリから成る対応するメモリバンク(例えば585)へのアドレスとして用いられる。7ビットラインアドレスを用いてメモリ585にアクセスすることで、メモリバンクごとにラッチ586される出力が得られる。各メモリバンク(例えば585)は、それぞれが2ビットの128エントリから成る関連タグメモリを有する。7ビットラインアドレスは、このタグメモリ587中の対応するタグにアクセスするためにも用いられる。アドレス579の最大2ビットをタグメモリ587中の対応するタグと比較することで、出力色値がキャッシュ中に格納されているかどうかが決定される。この9ビットアドレス中の最大2ビットは、赤と緑データ区間の最大ビットに対応する(表12参照)。従って、M0GCSモードでは、RGB入力色空間が赤と緑次元において効率よく4象限に分割され、9ビットアドレスの最大2ビットがRGB入力色区間中の象限を指定することになる。即ち、2つのビットタグによって指定された4つの象限に、出力色値が効率的に分割される。このため、あるラインの各タグ値に対応する色出力値は出力色空間で離れて位置することになり、メモリパターンのエイリアスを削減することができる。
【0235】
2つのビットタグが一致しない場合には、データキャッシュ制御部はキャッシュミスを記録し、必要なメモリ読み出しがキャッシュルックアップ処理とともにデータキャッシュ制御部によって起動される。なお、キャッシュルックアップ処理は、2ビットタグエントリに対応するラインのすべての値が外部メモリから読み出され、キャッシュに格納されるまで停止状態にある。この処理においては、外部メモリに格納されている色変換テーブルの関連ラインを読み出す処理が含まれる。図63の処理575は図62の各メモリバンク(例えば573)ごとに実行されるため、キャッシュ内容によってはメモリバンクから結果(例えば586)が出力されるまでに時間が必要となることもある。データ586の8つの32ビットセットは、この後主データパス部(242)に転送され、上述の補間処理(図62)の3ステップ590−592がすべての色チャネル同時にかつパイプライン処理で実行され、プリンタデバイスに送る4つの色書津力595が生成される。
【0236】
実験によれば、一般的な画像におけるキャッシュのミス率が平均で0.01から0.03のピクセルごとのキャッシュラインフェッチであるので、図62と図63において示したキャッシュ機構が有効であることが示されている。このようなキャッシュ機構を用いることで、多くの場合、データキャッシュ外部のメモリアクセスに対する要求を大幅に低減することができる。
【0237】
コプロセッサが行う2つの色空間変換モード(図10)での命令符号化は以下の構造を有する。
【0238】
色空間変換における命令符号化
【0239】
【表12A】
Figure 0004227218
【0240】
図64は、色空間変換命令における命令フィールド符号化を示したものであり、色変換命令におけるマイナーオプコード符号化は以下のようになる。
【0241】
色変換命令におけるマイナーオプコード符号化
【0242】
【表13】
Figure 0004227218
【0243】
図65は、MOGCSモードにおいて、RGBピクセルストリームをCYMK色値に変換する手法を示している。ステップS1において、24ビットRGBピクセルストリームがピクセルオーガナイザ246(図2)に入力される。ステップS2では、図56と図57で説明したように、ピクセルオーガナイザ246がルックアップテーブルを用いて各入力画素の4ビット区間値と8ビット区間内位置とを決定する。入力ピクセルの区間値と区間内位置は、入力ピクセルがどの区間に存在するのか、また区間内のどの位置に存在するのかを表すものである。ステップS3では、主データパス部242が入力ピクセルの赤、緑、青色要素の4ビット区間を結合して、12ビットアドレスワードを生成し、この12ビットアドレスワードをデータキャッシュ制御部240(図2)に送る。ステップS4では、表12と図62において説明したように、データキャッシュ制御部240がこの12ビットアドレスワードを8つの9ビットアドレスに変換する。これらの8つのアドレスは、8つの出力値CV(P0)−CV(P7)のメモリバンク573(図62)中の位置を示す。ステップS5では、データキャッシュ制御部240(図2)が8つの9ビットアドレスを、図63で説明したように再マッピングする。このようにして、赤と緑の4ビット区間の最大ビットが、9ビットアドレスの最大2ビットにマッピングされる。
【0244】
ステップS6では、データキャッシュ制御部240が9ビットアドレスの最大2ビットと、メモリ587(図63)中の2ビットタグとを比較する。2ビットタグが9ビットアドレスの最大2ビットと一致しなければ、出力色値CV(P0)−CV(P7)はキャッシュメモリ230に存在しない。従ってステップS7において、2ビットタグエントリに対応する出力色値が外部メモリからデータキャッシュ230に読み込まれる。2ビットタグが9ビットアドレスの最大2ビットと一致する際には、データキャッシュ制御部240はステップS8において図62において説明した要領で8つの出力色値CV(P0)−CV(P7)を取り出す。このようにして、入力ピクセルを取り囲む8つの出力色値CV(P0)−CV(P7)が主データパス部242によってデータキャッシュ230から取り込まれる。ステップS7では、ステップS2で決定された区間内位置を用いて出力色値CV(P0)−CV(P7)が主データパス部242において補間され、補間された出力色値が出力される。
【0245】
ここで、RGB色空間や対応する出力色値を4象限以上、例えば32ブロックに更に分割することにより、データキャッシュ容量の格納領域を低減することができることは、専門家にとっては明らかである。32ブロックに分割する場合には、データキャッシュの格納容量は出力色値の1/32ブロックのみで良い。
【0246】
また、MOGCSモードで用いられるデータキャッシュ機構を単一出力一般変換モードにおいて用いることもできることも、専門家にとっては明らかである。この場合にも、データキャッシュの格納領域を低減することができる。
【0247】
3.17.3 JPEG符号化/復号
特にメモリの節約やある場所から他の場所への画像転送速度の観点において、画像を符号化して格納することによる利点は計り知れない。画像符号化としてはさまざまな広く流布している標準が生まれている。非常に有名な標準の1つがJPEG標準であるが、JPEG標準に関する詳細な説明はVan Nostrand Reinholdにより1993年に出版されたPennebakerとMitchellによる著名な本「JPEG:Still Image Data Compression Standard」を参照されたい。コプロセッサ224はJPEG標準のサブセットを用いて画像を格納する。JPEG標準の利点は、画質を維持したまま大幅な圧縮率が得られる点である。もちろん、画像を圧縮して格納するためには他の標準を用いても良い。JPEG標準は専門家には良く知られた標準であり、ASICSに用いることができるようなJPEGを実装した種々の製品がJPEGコア製品などを含む製造業者から市販されている。
【0248】
コプロセッサ224は、1、3、4色要素から成る画像をJPEG符号化/復号する機能を備えている。1色要素画像はメッシュでもメッシュでなくても良い。即ち、1色要素を、メッシュデータあるいはメッシュされていないデータのどちらかでも取り出すことができる。メッシュデータの例としてピクセルデータごとの3色要素(即ち、ピクセルデータごとのRGB)があり、メッシュされていないデータの例として、画像の各色要素が別々に格納されており各色要素を独立に処理できるようなデータが挙げられる。3色要素画像の場合には、コプロセッサ224は3色チャネルが最小3バイトに符号化されていると仮定して、ワードごとに1ピクセルを用いる。
【0249】
JPEG標準は画像を最小符号化部位(MCU)と呼ばれる小さな2次元部位に分割する。ここで、各最小符号化部位は独立に処理される。JPEG符号化器(図2)は、ダウンサンプリングされた画像の横16ピクセル、縦8ピクセルのMCUでも良いし、ダウンサンプリングされていない画像の場合の横8ピクセル、縦8ピクセルのMCUでも良い。
【0250】
図66は、3要素画像をダウンサンプリングする手法を示している。
【0251】
元のピクセルデータ600は、各ピクセルは601がYUV色空間でのY,U,V要素から成るピクセル形式でMUVバッファ250(図2)に格納されている。このデータはまず4つのデータブロック601〜604から成るMCU部位に変換される。データブロックは種々の色要素を含み、ブロック601,602は直接サンプルされたY要素であり、ブロック603、604は図3の例においてサブサンプルされたU,V要素である。ここで、コプロセッサ224は2種類のサブサンプリング機能を備える。1つはフィルタリングしない直接サンプリングであり、奇数のピクセルデータを残し、偶数のピクセルデータを削除するものである。なお、隣接値の平均をとりU,V要素をフィルタリングすることもできる。
【0252】
もう一つのJPEGサブサンプリングは、図67に示した4色チャネルサブサンプリングである。このサブサンプリングでは、16×8ピクセル610のピクセルデータブロックが通常のY,U,V要素に加えて不透明度要素(0)を含む4要素611を有している。このピクセルデータ610も図66と同様にサブサンプルされる。
【0253】
しかし、この場合には、不透明チャネルを用いてデータブロック612、613が作成される。
【0254】
図68は、図2のJPEG符号化器241をより詳細に説明した図である。JPEG符号化/復号器241は、JPEG符号化と復号との双方を行う。符号化処理は、バス620を介してピクセルオーガナイザ246(図2)からブロックデータを受信する。ブロックデータはMUVバッファ250に格納され、ブロックごとに処理がなされる。JPEG符号化処理はいくつかの明確なステップに分割される。これらのステップは、
1.DCT部における離散コサイン変換の実行621
2.DCT出力の量子化622
3.量子化器622で実行されるジグザグスキャンによるDCT係数の配置
4.係数符号化器623で実行されるDC DCT係数の予測符号化とAC DCT係数のランレンクス符号化
5.ハフマン符号化器624で実行される係数符号化器の出力の可変長符号化。出力はマルチプレクサ625とRbus626を介して結果オーガナイザ629(図2)に送られる。
【0255】
JPEG復号処理は、JPEG符号化動作を逆にしたものである。即ち、JPEG復号処理は、Bus620から圧縮されたJPEGブロックを入力する処理を含む。圧縮データはBus630を介してハフマン符号化器624に送られ、データがDC差分とACランレンクスとに復号される。次に、データは係数符号化器623に送られ、ACとDC係数が復号され、通常のスキャンに戻される。その後、量子化器622においてDC係数に対応する量子化値を乗算することでDC係数の逆量子化が行われる。最後に、DCT部621において逆離散コサイン変換が施されもとのデータが復元され、Bus631を介してマルチプレクサ625、Bus626を介して結果オーガナイザに送られる。JPEG符号化器241は、JPEG符号化器の動作を開始させるために命令制御部によってセットされたレジスタを含むような標準Cbusインタフェース632を介しての通常の方法で動作する。また、量子化器622とハフマン符号化器624はテーブルを必要とするが、これは必要時にデータキャッシュ230からロードされる。テーブルデータは、Obusインタフェース部634を介してアクセスされる。ここでObusインタフェース部634はオペランドオーガナイザB247に接続され、データキャッシュ制御部240と作用しあう。
【0256】
DCT部621はピクセルデータに対して離散コサイン変換と逆離散コサイン変換とを行う。DCTに関しては、さまざまな種類のDCT変換実現手法が知られており、「Still Image Data Compression Standard」(同上)の中にも記されているものの、DCT621は以下の項「高速DCT装置」で詳述する高速手法を用いている。なお、DCT変換動作においては、The Transactions of the IEICE,vol.E71,no.11,November 1988の1095ページに掲載されたにAraiらによる論文「A Fast DCT−SQ Scheme for Images」に基づくDCT変換手法を用いることもできる。
【0257】
量子化器622はDCT係数の量子化と逆量子化を行い、データキャッシュに格納された対応するテーブルから関連値をObusインタフェース部634を介して取り出すことで動作する。量子化処理においては、入力データストリームは、データキャッシュ中の量子化テーブルから読み出された値でもって除算される。この除算は固定小数点の乗算として実装される。また、逆量子化処理では、データストリームは逆量子化テーブル中の値と乗算される。
【0258】
図69は、逆量子化622をより詳細に説明した図である。量子化器622は、ローカルバスを介してDCTモジュール621にデータを渡したり、DCTモジュール621からデータを受け取ったりするDCTインタフェース640を備える。量子化処理においては、量子化器622はクロックサイクルごとに2つのDCT係数を受信する。これらの値は量子化器の内部バッファ641、642の1つに書き込まれる。バッファ641、642は入力データをバッファするための2つのポートを備えたバッファである。量子化処理において、DCTサブモジュール621からの係数データはバッファ641、642の1つに格納される。バッファがフルになると、データはバッファからジグザグスキャンで読み出され、Obusインタフェース部634を介して受信した量子化値でもって乗算器643で乗算される。この出力は係数符号化インタフェース645を介して係数符号化器623(図68)に転送される。これらの処理を行っている間、次のブロックの係数が他のバッファに書き込まれている。JPEG復号処理において、量子化モジュールは、テーブルに格納された値でもって復号されたDCT係数を乗算することで逆量子化処理を行う。量子化と逆量子化とはそれぞれ排他的な動作をするため、乗算器643は量子化と逆量子化との双方において用いられる。なお、逆量子化テーブルへのインデックスとして、8×8のブロック中の係数の位置を用いる。
【0259】
量子化処理と同様に、2つのバッファ641、 642が係数符号化器623(図68)からの入力係数データをバッファするために用いられる。データは量子化値と乗算され、逆ジグザグスキャン順にバッファに書き込まれる。バッファがフルになると、逆量子化された係数が通常の順番でバッファから2つ同時に読み出され、DCTインタフェース640を介してDCTサブモジュール621(図68)に送られる。従って、係数符号化器インタフェースモジュール645は、係数符号化器とのインタフェースとなっており、ローカルバスを介して符号化器にデータを送ったり符号化器からデータを読み出したりする。このモジュールは、符号化時にはジグザグスキャン順でバッファからデータを読み出し、復号時には逆ジグザグスキャン順でバッファにデータを書き込む。DCTインタフェースモジュール640とCCインタフェースモジュール645ともバッファからの読み出しや書き込みを行うことができる。そのため、アドレス/制御マルチプレクサ647を用いて、各インタフェースがどちらのバッファと動作しているのかを、量子化器のすべてのモジュールを制御するための状態マシンから成る制御モジュール648の制御のもとで、決定する。乗算器643は、16×8の2の補数の乗算器を用いてDCT係数を量子化テーブル値と乗算しても良い。
【0260】
図68において、係数符号化器623は以下の機能を実行する。
(a) JPEGモードにおけるDC係数の予測符号化/復号
(b) JPEGモードにおけるAC係数のランレンクス符号化/復号
なお、係数符号化器623は、JPEGモード動作とは別に、必要な時点でピクセルの予測符号化/復号やメモリコピー動作のために用いることができると好ましい。係数符号化器623は、ピンクブックに規定されているように、DC/AC係数の予測/ランレンクス符号化/復号を行う。また、JPEG標準に規定されているようなJPEG AC係数のランレンクス符号化/復号に加えて、標準の予測符号化/復号機能も備えている。
【0261】
ハフマン符号化器624は、JPEGデータ列のハフマン符号化/復号を行う。ハフマン符号化モードでは、係数符号化器623からランレンクス符号化されたデータが受信され、パックバイトのハフマンストリームが生成される。また、ハフマン復号モードでは、ハフマンストリームがPbusインタフェース620からパックバイト形式で読み出され、ハフマン復号された係数が係数符号化モジュール623に送られる。ハフマン符号化器624は、データキャッシュに格納され、Obusインタフェース634を介してアクセスされるハフマンテーブルを利用する。或は、ハフマンテーブルをハードで構成して高速にすることもできる。
【0262】
ハフマン符号化においてデータキャッシュを用いるときには、データキャッシュの8つのバンクは、以下に各テーブルごとに詳細に説明されているようにデータテーブルを格納する。
【0263】
データキャッシュに格納されているハフマン、量子化テーブル
【0264】
【表14】
Figure 0004227218
Figure 0004227218
【0265】
図70において、ハフマン符号化器624は、符号化器660と復号器661との2つの独立のブロックから主に構成される。双方のブロック660、661はマルチプレクサモジュール662を介して同じObusインタフェースを共有する。各ブロックは、それぞれ入力と出力を有し、JPEG符号化器で実行される機能に応じて、一時点ではどちらか1つのブロックのみがアクティブとなる。a.符号化
JPEGモードにおける符号化においては、ハフマンテーブルを用いて、DC差分値やACランレンクス値に可変長コード(コードごとに16ビットまで)を割り当てられる。割り当てられたコードは、CCサブモジュールからHCサブモジュールに送られる。また、ハフマンテーブルは動作開始前にデータキャッシュから予めロードされていなければならない。そして、可変長コードをCCサブモジュールから送られてきたDCやAC係数の他のビットと結合し、パックバイト形式が生成される。パック処理の結果、X’FFバイトが得られたとすると、X’00バイトが挿入される。RSTmマーカが必要なときはマーカが挿入されるが、この際には、最後のハフマン符号の「1」ビットでのバイト詰込処理と、詰込まれたバイトがX’FFになったときのX’00バイト挿入処理が行われる。RSTmマーカが必要かどうかは、CCサブモジュールによって指示される。また、HCサブモジュールは、Pbus−CCスレーブインタフェース上の「最後の」信号での指示により、画像の最後にEOIマーカを挿入する。EOIマーカの挿入処理においては、RSTmマーカと同様のパック処理、詰込み処理、挿入処理が必要となる。最後に、出力ストリームはパックバイトとして結果オーガナイザ249に送られ、外部メモリに書き込まれる。
【0266】
非JPEGモードの場合には、CCサブモジュール(Pbus−CCスレーブインタフェース)からアンパックデータとして符号化器にデータが送られる。各バイトは(JPEGモードと同様に)キャッシュにあらかじめロードされたテーブルを用いて独立に符号化され、可変長シンボルがパックバイト形式にまとめられ、結果オーガナイザ249に送られる。なお、出力ストリームの最後のバイトは1での詰込処理が行われる。
b.復号
復号アルゴリズムは、高速(リアルタイム)のものと低速のものとを備える。高速アルゴリズムはJPEGモードのみで動作し、低速アルゴリズムはJPEGモードでも非JPEGモードでも動作する。
【0267】
高速JPEGハフマン復号アルゴリズムは、ハフマンシンボルをDC差分値あるいはACランレンクス値のどちらかにマッピングする。これは特にJPEGに適するように設計されており、符号化時において例のハフマンテーブル(K3,K4,K5,K6)が用いられることを想定している。なお、これらのテーブルは、キャッシュメモリを参照することなく復号できるように、アルゴリズム中にハード的に埋め込まれている。このような復号処理は、あるデータレートを保証しつつ復号画像を印刷しなければならないような場合を想定したものである。バンド(RSTmマーカで区切られたブロック)を復号するHCサブモジュールのデータレートは、1クロックサイクルでほぼ1つのDC/AC係数である。HCサブモジュールとCCサブモジュール間では、データストリームからX’00挿入バイトを削除するために、1クロックサイクル必要になることもあるが、これはデータに強く依存している。
【0268】
ハフマン復号器は高速モードで動作し、クロックサイクルごとに1ハフマンシンボルを抽出する。なお、高速ハフマン復号器については、以下の「可変長符号の復号器」において記している。
【0269】
また、ハフマン復号器661は、ヒープに基づく低速復号アルゴリズムを備えており、図71に示す構造670となっている。
【0270】
JPEG符号化ストリームに対して、ストリッパー671においてX’00挿入バイト、X’FF詰込バイト、RSTmマーカが取り除かれ、結合された他のビットとともにハフマンシンボルがシフター672に送られる。なお、ハフマンのみの符号化ストリームではこの処理は行われない。
【0271】
ハフマンシンボル復号の最初のステップは、ハフマンデータストリームの最初の8ビットでアドレシングされたキャッシュに格納されたHUFVALテーブルの256のエントリをルックアップする処理である。この値が対応するハフマンシンボルの真の長さである場合には、当該値が出力フォーマッター676に転送され、復号値のシンボル長と付加ビット数とがシフター672にフィードバックされ、関連する付加ビットを出力フォーマッター676に転送し、復号部673に送るハフマンストリームの新しい開始部位を整列する。ここで、付加ビット数は復号値の関数である。最初のルックアップが復号値にならなかった場合、即ちハフマンシンボルが8ビット以上であった場合には、ヒープアドレスが計算され、一致するまで、あるいは「不適切ハフマンシンボル」条件が満たされるまで、引き続きヒープ(キャッシュ内に位置)アクセスが実行される。ルックアップが一致すると上記と同様の処理が行われ、「不適切ハフマンシンボル」条件が満たされた場合にはインタラプト状態となる。
【0272】
ヒープに基づく復号アルゴリズムは以下の通りである。
【0273】
画像の最後までループ
シンボル長Nを8にセット
入力ストリームの最初の8ビットをINDEXに格納
HUFVAL(INDEX)をフェッチ
If HUFVAL(INDEX)==00xx000111..(ILL)
「不適切ハフマンシンボル」信号の送出
exit
elseif HUFVAL(INDEX)==1nnn eeee eeee−−(HIT)
nnnビットをeeee eeeeに値として転送
シンボル長N=decimal(nnn)を転送
/* 000がシンボル長8として */
入力ストリームの調整
break
else /* HUFVAL(INDEX)==01iii iiii iiii−−(MISS)
HEAPINDEX==ii iiii iiiiにセット(ヒープベースを0に仮定)
N=9にセット
If 入力ストリームの第9ビットが0である
HEAPINDEXを1増加
fi
VALUE=HEAP(HEAPINDEX)のフェッチ(第9ビットの符号)
Loop
If VALUE==0001 0000 1111−−(NL)
「不適切ハフマンシンボル」信号の送出
exit
elseif VALUE===1000 eeee eeee
eeee eeeeを値として転送
シンボル長Nを転送
入力ストリームの調整
break
else /* VALUE==01iii iiii iiii −− (MISS)
N=N+1にセット (HEAPINDEX=ii iiii iiii)
If 入力ストリームの第Nビットが0
HEAPINDEXを1増加
fi
VALUE=HEAP(HEAPINDEX)のフェッチ
pool
pool
ストリッパ671は、入力JPEG671符号化ストリームからX’00挿入バイト、X’FF詰込みバイト、RSTmマーカを削除し、「きれいな」ハフマンシンボルを連結された付加ビットとともにシフタ672に転送する。ハフマンのみの符号化においては他の付加ビットは存在しないため、このモードにおいては転送されたストリームはハフマンシンボルのみから成る。
【0274】
シフタ672ブロックは16ビット出力レジスタを備え、次のハフマンシンボルを復号部673に(MSBからLSBの順番のビットストリームで)転送する。シンボルは16ビット以下であることも多いが、どれだけのビットを解析するかを決定するのは復号部673に任されている。シフタ672は復号部673からフィードバック678、即ち現在のシンボル長と(JPEGモードにおける)現シンボルに続く付加ビット長とを受信し、シフタ672における次のシンボルの開始時点を適切に整列させる。
【0275】
復号部673はヒープに基づくアルゴリズムのコアを実装しており、Obus674経由でデータキャッシュに接続されている。復号部673は、データキャッシュフェッチブロック、ルックアップ値比較部、シンボル長カウンター、ヒープインデックス加算部、付加ビット数の復号部(復号は復号値に基づいて行われる)を備える。ここで、フェッチアドレスは以下のように解釈される。
【0276】
フェッチアドレス
【0277】
【表15】
Figure 0004227218
【0278】
出力フォーマッターブロック676は8ビット値の復号や(スタンドアロンハフマンモード)、24ビット値と付加ビットとRSTmマーカ情報との32ビットワードへの結合(JPEGモード)を行う。付加ビットは、復号部673が現シンボルに対する付加ビットの開始位置を決定した後に、シフタ672によって出力フォーマッタ676に転送される。また、出力フォーマッタ673は、最終値ワードを予測するために1ワード遅延を用いた2ディープFIFOバッファを備えている。復号処理においては、(高速、低速どちらでも)シフタ672が入力ビットストリームの最後部の詰込みビットを復号しようと試みることが生じる。このような状態はシフタによって通常検出され、「不適切シンボル」インタラプトを送出する替わりに、「強制終了」信号を送出する。アクティブな「強制終了」信号が送出されると、出力フォーマッタ676は最近の1復号ワード(FIFOにまだ存在している)を「最後」として送出し、復号ストリームに属していない更に最近のワードを削除する。
【0279】
図70におけるハフマン符号化器660の詳細を図72に示す。ハフマン符号化器660はルックアップテーブルを介してバイトデータをハフマンシンボルにマッピングし、符号化部681、シフタ682、出力フォーマッタ683、キャッシュからアクセスされるルックアップテーブルを備える。
【0280】
入力値685はデータキャッシュに格納された符号化テーブルを用いて符号化部681において符号化される。テーブルとしては、符号化すべき値ごとに対応コードを含むテーブルとコード長を含むテーブルとの2つのテーブルが必要となるが、シンボルを符号化する際にはキャッシュ230へのアクセスは一度で良い。なお、JPEG圧縮においては、AC係数とDC係数ごとに別のテーブルが必要となる。また、サブサンプリングが実行されている場合には、サブサンプル要素と非サブサンプル要素ごとに別のテーブルが必要となる。非JPEG圧縮では、2つのテーブル(符号とサイズ)のみが必要である。符号はシフタ682によって処理されて、出力ストリームをビットレベルで構成する。また、シフタ682は、必要時のバイトパディング処理であるRSTmとEOIマーカ挿入処理をも行う。そして、データバイトは出力フォーマッタ683に転送され、X’00バイトでの挿入処理、X’FFバイトやマーカ符号に先立つFFバイトでの詰込処理、パッキングされたバイトのフォーマット処理を行う。なお、非JPEGモードでは、パッキングされたバイトのフォーマット処理のみが行われる。
【0281】
X’FFバイトの挿入処理はシフター682によって行われるため、出力フォーマッタ683はX’FFバイトを前に挿入するために、シフタ682からのどのバイトがマーカであるのかを知る必要がある。これは、バイトに対応しているタグレジスタをシフター682内に備えることによって行われる。バイト境界に存在する各マーカは、マーカ挿入処理においてシフター682によってタグ付けされる。結合処理部683はマーカに先立つX”FF”バイト以降には挿入処理を行わない。タグは、主シフトレジスタと同期してシフトされる。
【0282】
ハフマン符号化器はJPEG圧縮において4あるいは8つのテーブルを用い、2つのテーブルを直接ハフマン符号化に用いる。用いるテーブルを以下に示す。
【0283】
ハフマン符号化器において用いられるテーブル
【0284】
【表16】
Figure 0004227218
Figure 0004227218
Figure 0004227218
【0285】
3.17.4 テーブルインデックシング
ハフマンテーブルは、コプロセッサデータキャッシュ230において局所的に格納されている。データキャッシュ230は、各ラインが8ワードから成る128ラインの直接マッピングキャッシュとして構成される。キャッシュライン中の各ワードは独立にアドレスすることができ、この特徴をハフマン復号器が利用して同時に複数のテーブルにアクセスする。テーブルは小さい(≦256項目)なので、Obusの32ビットアドレスフィールドで複数のテーブルへのインデックスを含めることができる。
【0286】
上述のように、JPEG低速復号モードでは、様々なハフマンテーブルを格納するためにデータキャッシュが用いられる。データキャッシュのフォーマットを以下に示す。
【0287】
ハフマン/量子化テーブルのバンクアドレス
【0288】
【表17】
Figure 0004227218
Figure 0004227218
【0289】
JPEG符号化器241(図2)においてJPEG命令が実行されるのに先立ち、画像次元レジスタ(PO_IDR)あるいは(RO_IDR)に適切な画像幅値がセットされなければならない。他の命令とともに、命令の長さは処理すべき入力データ項目数に関係する。これはいかなるパディングデータをも含み、用いられているサブサンプリングオプションや色チャネル数にも関連する。
【0290】
コプロセッサ224により出されたすべての命令は、生成する出力データ量を制限するために2つの機能を用いる。これらの機能は、入力と出力データのサイズが異なるときにもっとも有効であり、特にJPEG符号化/復号のように出力データサイズが未知であるときに有効である。これらの機能は、出力データを書き出すか、命令が適切に実行されたように見せながら単にデータを削除するかを決定する。デフォルトではこの機能はオフになっており、RO_CFGレジスタ中の適切なビットをイネーブルにすることでオンとなる。しかし、JPEG命令ではこのビットをセットする特別なオプションが用意されている。なお、JPEG圧縮を用いる際には、コプロセッサ224は出力データの「削除」や「制限」機能をサポートすることが望ましい。
【0291】
図73を用いて、削除、制限処理を説明する。入力画像690は、ある高さ691とある幅692とを有する。ここで、画像の一部分のみに関心があり、他の部位は印刷するのには関係がないというような状況がしばしば存在する。しかしながら、JPEG符号化システムでは8×8ピクセルブロックを対象とする。そのため、画像の幅が8の倍数とならない場合や、MCU695を構成する関心部位領域がきちんと境界と一致しない場合が生じる。そこで、出力削除レジスタRO_CUTは、出力データストリームのはじめの部位696において削除する出力バイト数を決定する。また、出力制限レジスタRO LMTは、生成する最大出力バイト数を決定する。この最大出力バイト数は、削除レジスタの結果に基づいてメモリに書込まれないバイトをも含む。このような処理により、最終出力バイト698以降のデータは出力されないような最終出力バイトを求めることができる。
【0292】
JPEG復号器における削除、制限機能が特に有効であるケースとして2つの場合がある。第1のケースは、図74に示すように、復号画像の1ストリップ701の一部位700を抽出あるいは解凍する場合である。第2のケースは、図75に示すように、全体の画像714において、複数の完全なストリップ(例えば、711、712、713)の抽出あるいは解凍が必要となる場合である。
【0293】
JPEG命令の命令フォーマットやフィールド符号化を図76に示す。マイナーオプコードフィールドの説明を以下に記す。
【0294】
命令ワード−マイナーオプコードフィールド
【0295】
【表18】
Figure 0004227218
Figure 0004227218
【0296】
3.17.5 データ符号化命令
コプロセッサ224は図2のJPEG符号化器の一部を他の用途で用いることができる機能を備えることが望ましい。例えば、ハフマン符号化はJPEGのみならず他の圧縮手法においても用いられる。また、階層的画像復号のためのみにハフマン符号化部を制御するデータ符号化命令が備わっていることも望ましい。更に、ランレンクス符号化器/復号器、予測符号化器も同様の命令でもって独立に用いられることができる。
【0297】
3.17.6 高速DCT装置
従来の図77に示したような離散コサイン変換(DCT)装置では、まず8×8ブロックの列方向に対して1次元DCTを実行し、次いで8×8ピクセルブロックの行方向に更に1次元DCTすることにより、8×8ピクセルブロックの2次元変換を実行する。このような装置では、入力回路1096、算術回路1104、制御回路1098、置換メモリ回路1090、出力回路1092を一般に備える。
【0298】
入力回路1096は8×8ブロックから8ビットピクセルを受信する。入力回路1096は、中間マルチプレクサ1100、1102を介して算術回路1104に接続されている。算術回路1104は、8×8ブロックの完全な列あるいは行に対して算術処理を行う。制御回路1098は、他の全ての回路を制御し、DCTアルゴリズムを実行する。算術回路の出力は、置換メモリ1090、レジスタ1095、出力回路1092に送られる。置換メモリは更にマルチプレクサ1100に接続され、マルチプレクサ1100は次のマルチプレクサ1102に出力を送出する。また、マルチプレクサ1102はレジスタ1094からのデータをも受信する。置換回路1090は8×8ブロックデータを列形式で入力し、行形式でデータを出力する。出力回路1092はピクセルデータの8×8ブロックに対するDCT係数を出力する。
【0299】
通常のDCT装置では、算術回路1104がもっとも複雑であるため、算術回路1104の速度が全体の装置速度を決定する。
【0300】
図77の算術回路1104は、一般に算術処理を図78を用いて説明するように複数の処理段階に分割して処理を行う。従って、各処理段階1144、1148、1152、1156を加算器や乗算器などの通常の資源を用いて実行するような単一回路が用いられる。このような算術回路1104では、単一の共通回路が回路1104の種々の処理段階を実行するために用いられるため、最適速度に比べて速度が遅くなるという欠点を有する。また、中間結果を蓄える格納手段もこれに含まれる。回路のクロックサイクル時間は少なくとも最も遅い回路段階以上でなければならないため、全体の処理に要する時間は各処理段階に要する時間の和以上となり得る。
【0301】
図78は、図77の装置における通常の算術データパスを示したものであり、DCTを4処理段階で行う処理の一部を示している。なお、本図は実際の実装を示したものでなく、機能を示したものである。4処理段階1144、1148、1152、1156のそれぞれは、単一の再構成可能な回路として構築される。サイクルごとに、1次元DCTの4処理段階1144、1148、1152、1156のそれぞれが再構成される。また、この回路においては、4処理段階1144、1148、1152、1156のそれぞれが共通の資源(加算器や乗算器など)のプールを用いることで、ハードウェア規模を小さくしてえる。
【0302】
しかしながら、この回路の欠点は速度が最適になっていないことである。4処理段階1144、1148、1152、1156はそれぞれが加算器や乗算器の同一プールから構成されている。そのため、クロックピリオドは最も遅い処理段階によって決定される(この例ではブロック1144の20ns)。入力と出力マルチプレクサ1146と1154の遅延(それぞれ2ns)と、フリップフロップ1150の遅延(3ns)を足すと、全体の遅延が27nsとなる。従って、このDCT構成では最速27nsで動作する。
【0303】
パイプライン形式のDCT構成もよく知られている。この構成の欠点は、多量のハードウェアを必要とする点である。スループットの観点では本発明の構成ではパイプライン構成に及ばないものの、現在のほとんどのDCT構成と比べてきわめて良好な性能/サイズ特性や速度特性を示す。
【0304】
図79は、ピクセルデータが入力回路1126に入力され、8ビットピクセルデータの列を格納するようなJPEG符号化器(図2)において用いられる好適な離散コサイン変換部の構成を示した図である。置換メモリは、2次元離散コサイン変換の2回目のパスを実施するために、列形式データを行形式データに変換する。入力回路1126と置換メモリ1118からのメモリは、マルチプレクサ1124においてマルチプレキシングされ、出力データが算術回路1122に送られる。算術回路1122の結果は、2回目のパスの終了後出力回路1120に送られる。制御回路1116は、離散コサイン変換装置中のデータの流れを制御する。
【0305】
離散コサイン変換処理の第1回目のパスでは、変換すべき画像の列データあるいはピクセルデータに逆変換される変換画像係数が、入力回路1126に送られる。このパスでは、マルチプレクサ1124は制御回路1116によって設定され、入力回路1126から算術回路1122にデータが送られる。
【0306】
図80は、算術回路1122の構成をより詳細に示した図である。フォワード離散コサイン変換の実行の場合には、フォワード離散コサイン変換を実行するフォワード回路1138の結果がマルチプレクサ1124において選択される。ここで、マルチプレクサ1124は制御回路1116によって設定される。逆離散コサイン変換の実行の場合には、制御回路1126の設定に基づいて、逆回路1140からの出力がマルチプレクサ1142において選択される。1回目のパスでは、各列ベクトルが算術回路1122(制御回路1166によって適切に設定される)によって処理された後、当該ベクトルが置換メモリ1118に書込まれる。8×8ブロック中のすべての8列ベクトルの処理が終わり、置換メモリ1118に書込まれると、離散コサイン変換の2回目のパスが開始される。
【0307】
フォワードあるいは逆離散コサイン変換の2回目のパスでは、行形式のベクトルが置換メモリ1118から読み出され、マルチプレクサ1124を介して算術回路1122に送られる。このパスでは、マルチプレクサ1124は入力回路1136からのデータを無視し、置換メモリ1118からの行ベクトルデータを算術回路1122に転送するように、制御回路によって設定される。算術回路1122中のマルチプレクサ1142は、逆回路1140からの結果データを算術回路1122の出力に送る。算術回路1122からの結果が得られた時点で、制御回路1116からの指令に基づいて出力回路1120は結果を取り込み、以降の時点で出力する。
【0308】
算術回路1122は、中間結果を格納する記憶部位を持たないという点で、組み合わせ回路となっている。制御回路1116は、データが入力回路1136からマルチプレクサ1124や算術回路1122を介して出力されるまでに要する時間を把握しているため、算術回路1122の出力からの結果ベクトルを出力回路1120に取り込む時点を正確に指示することができる。算術回路1122において中間記憶を持たない利点は、中間記憶要素との間でのデータのやり取りに必要な時間を省くことができるとともに、算術回路1122をデータが通過するのに要する時間が内部処理段すべての和となり、最大の時間を要する処理段のN倍(従来の離散コサイン変換装置のように)にはならないことが挙げられる。なお、ここで、Nは算術回路中の処理段数である。
【0309】
図81は、全体の遅延が単に4つの処理段1158、1160、1162、1164の和、20ns+10ns+12ns+15ns=57nsとなり、図78の回路よりも高速となることを示している。このような回路によれば、全体のシステムクロックサイクルを短くすることができる。図81の回路において、結果を得るのに4クロックサイクルが必要であるとすると、全体のDCTシステムにおいて最小実行時間は57/4ns(14.25ns)となり、図78ではDCTクロックサイクルが27nsとせざるを得ないことを鑑みると大幅な性能向上となることがわかる。
【0310】
本DCT装置の実際の実行時においては、Yukihiro Arai,Takeshi Agui,Masayuki NakaJimaらによるThe Transactions of the IEICE,vol,E71,no.11,1988年11月のページ1095に掲載された論文「画像のための高速DCT−SQ手法」で示されたDCTアルゴリズムを用いることもできる。このアルゴリズムをハードウェアで実行することで、本DCT装置中の算術回路1122に容易に配置することができる。同様に、他のDCTアルゴリズムを算術回路1122中にハードウェアとして配置することも可能である。
【0311】
3.17.7 ハフマン復号器
以下の実施例は、種々の長さのビットフィールドがインターリーブされた可変長符号に対する手法と装置に関するものである。特に、本発明の実施例は、可変長符号化データの効率の良い、高速な、単一処理段(クロックサイクル)の復号を提供するものである。ここで、可変長符号化されていず整列されているようなデータとは、既に別の前処理ブロックにおいて符号化データストリームから削除されているものとする。更に、削除されたバイト整列データの位置情報は、復号されるデータと同時に復号器の出力に送られる。また、前処理された入力データ中に残っているバイト整列、非可変長符号化ビットフィールドの高速な検出、並びに削除をも提供するものである。
【0312】
本発明の好適な実施例では、マーカ符号間のクロックサイクルごとに1ハフマンシンボルといったレートで、JPEG符号化データを復号することのできる高速ハフマン復号器を備えることが望ましい。これは、別の前処理ブロックにおいて、入力データからバイト整列されハフマン符号化されていないマーカヘッダ、マーカ符号、挿入バイトを分離し、除去する手法によって実現できる。バイト整列されたデータが除去されると、入力データはデータシフト組み合わせ回路ブロックに送られ、データ復号レジスタの連続的な挿入処理を行い、復号部位にデータが送られる。もとの入力データから除去されたマーカの位置はマーカシフトブロックに送られ、データシフトブロックにおいてシフトされた入力データと同時にマーカ位置ビットのシフトが行われる。
【0313】
復号部は、データ復号レジスタから入力された符号化ビットフィールドを組合せ回路で復号する。復号部の出力は、復号値(v)と入力符号の実際の長さ(m)である。ここで、mはn以下である。また、可変長ビットフィールドの長さ(a)も出力する。ここで、aは0以上の値である。可変長ビットフィールドはハフマン符号化されていないため、すぐにハフマン符号化される。復号部の入力中の長さnのビットフィールドは実際の符号以上の長さを有する。復号部では、実際のコード長(m)を決定し、他のビット(a)の長さとともに制御ブロックに転送する。制御ブロックはシフト値(a+m)を決定し、データ/マーカシフトブロックを起動して次の復号サイクルに備えて入力データをシフトする。
【0314】
本発明の装置では、復号値、入力符号の実際の長さ、ハフマン符号化されていないビットフィールドの長さを所定の時間内に出力するものであれば、ROM,RAM,PLAなどのいかなる組合せ回路の復号部を用いることができる。
【0315】
本実施例では、復号部は、JPEG標準で規定されているように予測符号化DC係数値やACランレンクス値を出力する。また、JPEG標準で規定されているように、復号値と同時に入力データから除去されたハフマン符号化されていないビットフィールドは、DCとAC係数の値を決定する付加ビットを示す。データ復号レジスタ中のデータから除去されたハフマン符号化されていないビットフィールドの他の種別としては、JPEG標準に規定されているようにもとの入力データストリーム中のバイト整列マーカに先立つパディングビットがある。これらのビットは、制御ブロックがデータレジスタのパディング領域の内容をチェックすることによって検出される。パディング領域はデータレジスタのk最大ビットから成り、マーカレジスタの最大ビット中のマーカビットの存在によって示される。パディング領域中のすべてのビットが同一(JPEG標準では1)であれば、パディングビットとして判断され、復号されることなくデータレジスタから除去される。そして、次の復号サイクルに向けて、データとマーカレジスタの内容は更新される。
【0316】
装置の実施例では、本発明の好適な実施例の要求に応じて、出力データのフォーマット処理を行う出力ブロックを備える。出力ブロックは、JPEGにおける付加ビットなどのように、対応する可変長符号化されていないビットフィールドや、JPEGにおけるマーカのように整列された入力バイトや符号化されていないビットフィールドの位置を示す信号とともに、復号値を出力する。
【0317】
JPEG符号化器241(図2)によって復号されたデータは、JPEGコンパチブルであり、「付加ビット」と呼ばれる可変長符号化されていないビットフィールド、「パディングフィールド」と呼ばれる可変長符号化されていないニットフィールド、「マーカ」「挿入バイト」「詰込バイト」と呼ばれる固定長の、バイト整列された、符号化されていないビットフィールドがインタリーブされた可変長ハフマン符号化コードから構成される。図82に代表的な入力データを示す。
【0318】
JPEG符号化器241のハフマン復号器中の全体構成やデータフローを図83と図84に示す。図83は、JPEGデータのハフマン復号器の構成を詳細に示している。ストリッパ1171はマーカ符号(符号FFXXhex,XXは非零)を除去し、バイト(符号FFhex)を挿入し、バイト(符号Ffhexに続く符号00hex)を詰込む。これらはすべて入力データのバイト整列された要素であり、32ビットワードとしてストリッパに送られる。処理すべき第1ワードの最大ビットは、入力ビットストリームの先頭になる。ストリッパ1171では、バイト整列されたビットフィールドが、ハフマン符号の復号処理が復号器のダウンストリーム部位において実際に行われる前に、入力データから除去される。
【0319】
入力データはストリッパ1171にクロックサイクルに1つごとの32ビットワードとして入力される。入力バイト1211を0から3への番号付けを図85に示す。番号(i)のバイトが挿入バイト、詰込バイト、あるいはマーカであるため除去されたとすると、番号(i−1)から0の残りのバイトがストリッパ1171の出力で左にシフトされ、番号(i)を1減らす。この際、バイト0は「無関係な」バイトとなる。ストリッパ1171から出力されたバイトの有効性は、図85に示されている別の出力タグ1212によって符号化される。ストリッパ1171によって除去されないバイトはストリッパにおいて左詰めで出力される。出力中の各バイトは、対応するバイトが有効(ストリッパ1171を通過する)か、無効(ストリッパ1171で除去される)か、有効かつマーカの後部か、を示すタグが付加される。タグ1212は、データシフタを通してデータレジスタ1182へのデータバイトのロードを制御するとともに、マーカシフタを通してマーカレジスタ1183へのマーカ位置のロードを制御する。入力ワードから1バイト以上削除された場合でも同様の手法が実行される。すなわち、すべての残りの有効バイトが左詰めされ、対応する出力タグが出力バイトの有効性を示す。図85には、種々の入力バイトの組み合わせに対する出力バイトと出力タグの例1213が示されている。
【0320】
図83において、プレシフタとポストシフタブロック1172、1173、1180、1181の役割は、データレジスタ1182とマーカレジスタ1183に十分な空き領域がある場合にデータレジスタとマーカレジスタとに連続的にデータをロードすることである。データシフタとマーカシフタブロックは、プレシフタブロックとポストシフタブロックとから成るが、それぞれは同一であり同様に制御される。差異は、データシフタがストリッパ1171からのデータを処理するのに対し、マーカシフタはタグのみを処理し、マーカ位置を復号されたハフマン値と同時に復号器に出力する点にある。ポストシフタ1180、1181の出力は、図83に示されているように対応するレジスタ1182、1183に直接転送される。
【0321】
図86にもデータプレシフタ1172が示されているが、データプレシフタ1172は、ストリッパ1171からのデータに32個のゼロを最小ビット1251に付加し、64ビットにデータを拡張する。次いで、拡張データは64ビット幅のバレルシフタ1252で右にデータレジスタ1182に現在存在するビット数だけシフトされる。この際、ビット数は、データ1182、マーカ1183レジスタ内にどれだけの有効ビットが存在するかを常に把握している制御ロジック1185から与えられる。そして、バレルレジスタ1252は、64ビットを、64個の2×1基本マルチプレクサ1254から成るマルチプレクサブロック1253に転送する。各基本2×1マルチプレクサ1254は、バレルシフタ1252からの1ビットとデータレジスタ1182からの1ビットを入力とする。データレジスタ中のビットが有効であるときにデータレジスタビットを出力する。一方、無効である場合には、バレルシフタ1252のビットを出力する。すべての基本マルチプレクサ1254への制御信号は、図86ならびに図87におけるレジスタ1223のプレシフタ制御ビット0...5として示されているように制御ブロックのシフト制御1信号より復号される。基本マルチプレクサ1254の出力はバレルシフタ1255に送られ、図86に示されるように5ビット制御信号シフト制御2より与えられるビット数分左にシフトされる。これらのビットは、データレジスタ1182において現データの復号によって使用されるビット数を示したものであり、現復号ハフマンコード長と続く付加ビット数、あるいはパディングビットが検出されていれば削除されるパディングビット数、あるいはデータレジスタ1182中の有効ビット数が削除されるビット数以下であれば0を足したものとなる。このようにして、バレルシフタ1255から出力されるデータには、単一復号サイクルの後にデータレジスタ1182にロードされる新しいデータが含まれることになる。データレジスタ1182の内容は、最大ビットが復号されるためにレジスタからシフトアウトされ、ストリッパ1171から0、8、16、24、32ビットがデータレジスタ1182に付加されるといった具合に変更される。データレジスタ1182に復号できるだけの十分なビットが存在しない場合には、ストリッパ1171からのデータが存在すれば現サイクルにおいてロードされる。現サイクルにおいてストリッパ1171からのデータが存在しない場合には、データレジスタ1182からの復号ビットは、十分なビット数であれば削除され、十分なビット数でなければデータレジスタ1182の内容は変更されない。
【0322】
マーカプレシフタ1173、ポストシフタ1181、マーカレジスタ1183は、データプレシフタ1172、データポストシフタ1180、データレジスタ1182とそれぞれ同一の部位である。部位1173、1181,1183内のデータフローならびにこれらの部位間のデータフローも、部位1172、1180、1182間でのデータフローと同一である。同様の制御信号が制御部1185より双方の部位セットに送られる。これらの部位の差異は、マーカプレシフタ1173とデータプレシフタ1172の入力データ種別と、マーカレジスタ1183とデータレジスタ1182の内容がどのように用いられるか、という点である。図88に示すように、ストリッパ1171からのタグ1261は8ビットワードとして入力され、データレジスタ1182に向かうデータバイトごとに2ビット割り当てられている。図85に示した符号化手法によれば、有効かつマーカ後部であるバイトを示す2ビットタグの最大ビットは1である。ストリッパ1171から同時に送られる4つのタグの最大ビット位置のみが、マーカプレシフタ1173の入力1262として送出される。このようにして、マーカプレシフタへの入力には、はじめに符号化されたデータビットでマーカの後部に位置する位置を示す1がセットされたビットが存在することになる。同時に、これらはデータレジスタ1182中でマーカが後に続くはじめに符号化されたデータビットの位置をマークしている。マーカレジスタ1183中のマーカ位置ビットとデータレジスタ1182中のデータビットの同期的な振る舞いによって、制御ブロック1185はパディングビットの検出や削除を行うことができるとともに、復号データと同時にマーカ位置を復号器の出力に送出することができる。上述の通り、2つのプレシフタ(データ1172とマーカ1173)、ポストシフタ(データ1180とマーカ1181)、レジスタ(データ1182とマーカ1183)は同一の制御信号を与えられているため、完全な並列、同期動作が可能となる。
【0323】
復号部1184(図89にも示されている)は、データレジスタ1182の最大16ビットを入力し、復号されたハフマン値、復号される現在の入力符号長、入力符号に続く付加ビット長(復号値の関数となる)を抽出するための組み合わせ回路復号部1184に送られる。付加ビット長は、対応する前のハフマンシンボルが復号された時点で明らかになり、次のハフマンシンボルの開始位置となる。従って、クロックサイクルごとに1つの値が復号される速度を維持する場合には、ハフマン値の復号を組み合わせ回路ブロックで行わなければならない。復号部は、図89に示すように、16ビットトークンをデータレジスタ1182から入力し、ハフマン値(8ビット)、対応するハフマン符号化されたシンボル(4ビット)、付加ビット(4ビット)を生成するような組み合わせ回路ブロックとしてハードワイヤされた4つのPLAスタイルの復号テーブルを備えることが望ましい。
【0324】
パディングビットの削除処理は、制御部1185の一部であるパディングビットの復号部においてデータレジスタ1182中でパディングビット列が検出された際の実際の復号処理において行われる。図90にパディングビットの復号部を示す。マーカレジスタ1183、1242の8最大ビット中にマーカ位置ビットが存在するかどうかが調べられる。マーカ位置ビットが存在した場合には、マーカレジスタ1242中のマーカビットに先立つビットに対応するデータレジスタ1182、1241中のすべてのビットが現在のパディング領域として判断される。現在のパディング領域の内容は、パディングビット検出部1243によってすべて1であるかどうかがチェックされる。現パディング領域のすべてのビットが1である場合には、パディングビットであると判断されデータレジスタから削除される。ここで、削除処理は、データレジスタ1182、1241(同時にマーカレジスタ1183、1242)の内容を対応するシフタ1172、1173、1180、1181を用いて1クロックサイクルで左にシフトさせることで行われる。この処理は、復号値が出力されないことを除いて通常の復号モードと同一である。現パディング領域のすべてのビットが1でない場合には、パディングビット削除サイクルではなく通常の復号サイクルが実行される。パディングビットの検出は上述のように各サイクルごとに行われ、データレジスタ1182にパディングビットが存在する場合には削除される。
【0325】
図87は、制御部1185を詳細に示したものである。制御部の中心部位はレジスタ1223であり、データレジスタ1182中の現有効ビット数を保持している。マーカレジスタ1183中の有効ビット数は常にデータレジスタ1182中の有効ビット数と等しい。制御部は3つの機能を実行する。第一の機能は、レジスタ1223に格納されるデータレジスタ1182中の新しいビット数の計算である。第二の機能は、シフタ1172、1173、1180、1181、1186、1187、復号部1184、出力フォーマット部1188への制御信号の生成である。第三の機能は、上述のようにデータレジスタ1182中のパディングビットの検出である。
【0326】
データレジスタ1182中の新しいビット数(new_nob)は、データレジスタ1182(nob)中の現ビット数と現サイクルにおいてストリッパ1171からロード可能なビット数(nos)との加算し、現サイクルにおいてデータレジスタ1182から削除されるビット数(nor)を減算したものとして計算される。ここで、現サイクルは、復号サイクルあるいはパディングビット削除サイクルである。従って、新しいビット数は以下のように計算される。
【0327】
new_nob=nob+nos−nor
これらの処理は加算器1221と減算器1222とで実行される。なお、現サイクルにおいてストリッパ1171からデータが入力されない場合には(nos)が0となる。また、データレジスタ1182においてビットが足りない、即ちデータレジスタ中のビットが制御部1185からの現符号長と続く付加ビット長との和以下であることにより、現サイクルにおいて復号処理が行われない場合にも(nos)は0となる。値(new_nob)は64を越えることがあり、ブロック1224において越えているかどうかがチェックされる。このような場合には、ストリッパ1171は停止状態となり、新しいデータのロードがなされない。マルチプレクサ1233は、ストリッパ1171からロードされたビット数をゼロにするために用いられる。ここで、ストリッパ1171を停止させる信号は図示されていない。復号部1231からの信号「パディングサイクル」はマルチプレクサ1234を制御し、パディングビット数あるいは復号ビット数(符号ビットと付加ビットとの長さ)を削除すべきビット数(nor)として選択する。復号ビット数がデータレジスタ中のビット数(nob)以上であると、比較器1228において判断されると、マルチプレクサ1234に与えられるシフトすべき有効ビット数はNANDゲート1230においてゼロに設定される。すなわち、(nor)はゼロに設定され、データレジスタのビットの削除は行われない。マルチプレクサ1234の出力は、ポストシフタ1182と1183の制御にも用いられる。データレジスタ1182の幅はデッドロック状態を避けるように設定される。すなわち、ストリッパ1171からの最大ビット数を収容するだけの領域をデータレジスタに確保するように、あるいは復号/パディングビット削除サイクルの結果として十分な有効ビット数が削除されるように設定される。
【0328】
復号サイクルにおいて削除されるビット数の計算は加算器1226において実行される。オペランドは組み合わせ回路復号部1184から入力される。16ビットの符号長は復号部において”0000”と符号化されるため、”ou reduce”ロジック1225では”0000”が”10000”に符号化され、現在の符号なしのオペランドが得られる。このオペランドと減算器1227の出力とが、出力フォーマットシフタ1186と1187への制御信号を与える。
【0329】
ブロック1229はEOI(画像終了)マーカ位置の検出に用いられる。EOIマーカ自身はストリッパ1171において削除されるが、ストリッパ1171で削除される以前にEOIマーカに先立つ位置に存在していたデータの最終ビットとなるパディングビットは存在する。比較器1229では、レジスタ1223に格納されているデータレジスタ1182中のビット数が8以下であるかどうかをチェックする。8以下であれば、ストリッパ1171から新しいデータは入力されず(データレジスタ1182が復号されるデータ部の残りのビットを保持している)、残りのビットが削除されたEOIマーカの前のパディング領域サイズを示すことになる。さらなるパディング領域の処理やパディングビットの削除などは、上述のRSTマーカの前のパディングビットの場合に用いた手順と同一である。
【0330】
バレルシフタ1186、1187と出力フォーマット部1188とはサポートする役割を有し、実施例に応じたさまざまな実装を考えることができる。また、まったく実装されないこともあり得る。これらへの制御信号は上述のように制御部1185より与えられる。付加ビットプレシフタ1186はデータレジスタから32ビットを入力し、現在復号されているハフマン符号長だけ左にシフトする。このようにして、現在復号されている符号に続くすべての付加ビットは、バレルシフタ1186の出力に合わせて左に位置することになり、バレルシフタ1187への入力として送られる。付加ビットポストシフタ1187は、データの出力フォーマットとして用いられ図91にも示されている11ビットフィールドにおいて、左整列から右整列に付加ビット位置を調整する。付加ビットフィールドは出力ワードフォーマット1196においてビット8からビット18に拡張され、実際の付加ビット数に応じて最大ビットのいくつかは無効であることもある。このビット数はJPEG標準で規定されているように1196のビット0から3に符号化される。出力データフォーマットとして異なるフォーマットを用いる場合には、フォーマットに応じてバレルシフタ1186、1187とその機能を変更することになる。
【0331】
出力フォーマットブロック1188は復号値をパックする処理を行い、JPEG標準では制御部1185から与えられるDC/AC係数(1196,ビット0から7)とDC係数指示ビット(1196,ビット19)、付加ビットポストシフタ1187から与えられる付加ビット(1196,ビット8から18)、マーカレジスタ1183から与えられるマーカ位置ビット(1196、ビット23)とを図91に示すフォーマットに従ってワードに構成する処理を行う。出力フォーマット部1188は、復号部の出力インタフェースに関する機能要件にも対処する。出力フォーマット部の実装は、異なる機能要件の結果として出力インタフェースを変更することになると、通常それに応じて変更される。上述のハフマン復号器は非常に効果的な復号処理を提供し、高速復号処理を実現する。
【0332】
3.17.8 画像変換命令
これらの命令はソース画像の一般アフィン変換を行うためのものである。変換画像の一部を生成する処理は大きく2つのエリアに分けられる。一つはソース画像のどの部位が現在の出力スキャンラインと関連するかを決定するステップ、もう一つは必要なサブサンプリング/補間処理を行ってピクセルごとに出力画像を生成するステップである。
【0333】
図92は、ソース画像の適切な領域が復号されているものとして、目的ピクセル値を計算するために必要なステップ720のフローチャートを示している。まず、サブサンプリングが行われていればサブサンプルが721で考慮される。次に、他の補間処理722と他のサブサンプリング処理といった2つの処理が通常実装されている。通常、補間とサブサンプリングとは別のステップであるが、補間とサブサンプリングとを一緒に行う場合もある。補間処理においては、まず周囲の4ピクセルを探し、プレ乗算723が必要であるかどうかを、双線形補間724を行う前に決定する。双線形補間処理724は一般に計算量が非常に多くなるため、これにより画像変換処理動作が制約される。目的ピクセル値を計算する最後のステップは、ソース画像から双線形補間されたサブサンプルを加算する処理である。加算されたピクセル値はさまざまな方法で積分727され、目的画像ピクセル728が生成される。
【0334】
画像変換命令のための命令ワード符号を図93に示すとともに、マイナーオプコードフィールドの説明を以下の表に示す。
【0335】
命令ワード:マイナーオプコードフィールド
【0336】
【表19】
Figure 0004227218
Figure 0004227218
【0337】
命令オペランドや結果フィールドの説明を以下に示す。
【0338】
命令オペランドと結果ワード
【0339】
【表20】
Figure 0004227218
【0340】
オペランドAは、実際の変換を定義するために必要なすべての情報を記述している「カーネル記述子」として知られているデータストラクチャを指す。このデータストラタチャは2つのフォーマットのうちの1つとなる(A記述子のLビットで定義される)。図94はカーネル記述子の長い符号フォーマットを示し、図95は短い符号フォーマットを示す。カーネル記述子は、以下の情報を記述する。
1. ソース画像開始座標730(符号なしの固定長、24.24解像度)。位置(0、0)が画像の左上。
2. 水平731と垂直732(サブサンプル)デルタ(2の補数、固定長、24.24解像度)
3. 後述の固定長行列係数中のバイナリポイントの位置を示す3ビットのbpフィールド733
4. (存在する場合には)積分行列係数735。これらは、bpフィールドによって暗黙的に指定されたバイナリ点の位置である20のバイナリ点の「可変」ポイント解像度(2の補数)である。
5. カーネル記述子中の残りのワード数を示すrlフィールド736。この値は列数と行数とを掛けたものから1を引いた値となる。
【0341】
記述子のカーネル係数は列ごとに並べられるが、ジグザグスキャンとなるように隣り合う列は逆方向に並べられる。
【0342】
図96において、オペランドBはソース画像のスキャンラインを指すインデックステーブルへのポインターから成る。インデックステーブルの構造は図96に示されているように、オペランドB740がインデックステーブル741を指し、インデックステーブルが必要なソース画像ピクセルのスキャンライン(例えば742)を指すという構造である。一般に、インデックステーブルとソース画像ピクセルとはキャッシュ可能であり、ローカルメモリに位置している。
【0343】
オペランドCは水平/垂直サブサンプルレートを保持している。水平/垂直サブサンプルレートは、C記述子が存在する際に指定されるサブサンプル重み行列の次元によって定義される。行列rとcの次元は、図97に示すように画像変換命令のデータワードに符号化されている。
【0344】
結果ピクセルP[N]のチャネルNは以下の式に基づいて計算される。
【0345】
【数4】
Figure 0004227218
【0346】
内部的には、積分値は各チャネルごとの36のバイナリ点として保持される。フィールド中のバイナリ点の位置は、BPフィールドによって指定される。BPフィールドは削除する積分結果の先のビット数を示している。36ビットの積分値は符号付きの2の補数として表現され、指定されたようにクランプ処理あるいはラップ処理される。図98に、係数符号におけるBPフィールドの解釈例を示す。
【0347】
3.17.9 畳込み命令
レンダリング画像に適用される畳込み処理は、2次元畳込みカーネルをソース画像に適用して結果画像を生成するものである。畳込み処理は通常、エッジ先鋭化やいろいろな画像フィルタにおいて用いられる。畳込み処理はコプロセッサ224において実装され、画像変換処理ではカーネルが各出力ピクセルごとにカーネル幅だけ移されるのに対し、畳込み処理では各出力ピクセルごとに1ソースピクセルが移動するといった点以外は、画像変換処理と同様の処理である。
【0348】
ソース画像が値S(x,y)を有し、nxm畳込みカーネルが値C(x,y)を有すると、SとCの畳込みH[n]のn番目のチャネルは、
【0349】
【数5】
Figure 0004227218
【0350】
で与えられる。ここで、i∈[0,c],j∈[0,r]である。
【0351】
オフセット値の意味、中間結果の解像度、bpフィールドの意味は画像変換命令と同一である。
【0352】
図99は、畳込みカーネル750がソース画像751に適用し、結果画像752を生成する例を示した図である。ソース画像アドレス生成や出力ピクセル計算は、画像変換命令と同様に行われる。命令オペランドも画像変換と同様の形式である。図100は、畳込み命令の命令ワード符号を示したものであり、以下の表が種々のフィールドの説明である。
【0353】
命令ワード
【0354】
【表21】
Figure 0004227218
【0355】
3.17.10 行列乗算
行列乗算は、2つの色空間においてアフィン変換の関係が存在するような色空間変換処理などに用いられる。行列乗算は以下の式で定義される。
【0356】
【数6】
Figure 0004227218
【0357】
行列乗算命令オペランドと結果ワードは以下のフォーマットを有する。
【0358】
命令オペランドと結果ワード
【0359】
【表22】
Figure 0004227218
【0360】
図101に行列乗算命令のための命令ワード符号を示すとともに、以下の表にマイナーオプコードフィールドを示す
命令ワード
【0361】
【表23】
Figure 0004227218
Figure 0004227218
【0362】
3.17.11 ハーフトーン化
コプロセッサ224はハーフトーン処理のための多値レベルディザーを備える。2から255までの値は意味のあるハーフトーンレベルとなる。ハーフトーンするデータは、スクリーンが対応してメッシュあるいはアンメッシュである限り、バイト(アンメッシュあるいはメッシュデータからの1チャネル)あるいはピクセル(メッシュ)のどちらでも良い。4つの出力チャネル(あるいは同一チャネルから4バイト)まで、一緒にパックされたようなあるいはバイトごとに1符号にアンパックされたようなパックビット(2レベルハーフトーンの場合)あるいは符号(2出力レベル以上の場合)生成することができる。
【0363】
出力ハーフトーン値は以下の式を用いて計算される。
【0364】
(P×(l−1)+d)/255
ここで、pはピクセル値(0≦p≦255)、lはレベル数(2≦l≦255)、dはデイザ行列値(0≦d≦254)である。オペランド符号は以下の通りである。
【0365】
命令オペランドと結果ワード
【0366】
【表24】
Figure 0004227218
Figure 0004227218
【0367】
命令ワード符号では、マイナーオプコードはハーフトーンレベル数を指定する。オペランドB符号はハーフトーンスクリーンのためのものであり、タイル合成と同様に符号化される。
【0368】
3.17.12 階層的画像フォーマット復号
階層的画像フォーマット復号処理は複数のステップを含む。これらのステップは、水平補間、垂直補間、ハフマン復号、残部融合である。各ステップは別の命令でもって実行される。ハフマン復号ステップでは、補間ステップからの補間された値に付加される残りの値がハフマン符号化される。従って、JPEG復号部がハフマン復号において用いられる。
【0369】
図102に、水平補間処理を示す。出力ストリーム761は入力ストリーム672の2倍のデータとなり、最後のデータ値763は複製されている764。図103は4倍の水平補間を行う例である。
【0370】
階層的画像フォーマット復号の第2ステップでは、線形補間によりピクセル列を2倍あるいは4倍に垂直にアップサンプルする。このステップでは、1ピクセル列がオペランドA,他の列がオペランドBとなる。
【0371】
垂直補間の場合には2倍、4倍どちらの場合でも、出力データストリームは入力ストリームと同数のピクセルとなる。図104に、2つの入力データストリーム770、771を用いて2倍補間の出力ストリーム772と4倍補間の出力ストリーム773を生成する垂直補間の例が示されている。ピクセル補間の場合には、補間処理は4つのチャネルピクセルの4チャネルごとに別々に行われる。
【0372】
残部融合処理は、2つのデータストリームのバイトごとの加算を含む。第一ストリーム(オペランドA)はベース値ストリームであり、第二ストリーム(オペランドB)は残値ストリームである。
【0373】
図105に、残部融合処理を用いた場合の2つの入力ストリーム780、781と対応する出力ストリーム782を示す。
【0374】
図106は、階層的画像フォーマット命令の命令ワード符号を示したものであり、以下の表にマイナーオプコードフィールドの詳細を示す。
【0375】
命令ワード−マイナーオプコードフィールド
【0376】
【表25】
Figure 0004227218
【0377】
3.17.13 命令コピー命令
これらの命令は2つのそれぞれ別のグループに分けられる。
a.汎用データ移動命令
これらの命令は、入力インタフェースモジュール、入力インタフェーススイッチ252、ピクセルオーガナイザ246、JPEG符号化部241、結果オーガナイザ249、出力インタフェースモジュールからなるコプロセッサ224内の通常のデータフローパスを用いる。この場合、JPEG符号化モジュールはデータを処理を行わずに直接送る。
【0378】
データ操作動作の他の命令としては以下のものが挙げられる。
・サブバイト値(ビット、2ビット値、4ビット値)のバイトへのパッキング、アンパッキング
・ワード内でのバイトのパッキングとアンパッキング
・整列
・バイトレーンスワッピングと複製
・メモリクリア
・値の複製
データ操作動作は、ピクセルオーガナイザ(入力)と結果オーガナイザ(出力)の組み合わせで実行される。多くの場合、これらの命令は他の命令と組み合わせて用いられる。
b.ローカルDMA命令
データ操作は行われない。図2に示すように、ローカルメモリ236と周辺インタフェース237間でデータ転送(双方向)が行われる。これらの命令は実行が他の命令とオーバラップする唯一の命令である。最大これらの命令の1つが「オーバラップしていない」命令と同時に実行することができる。
【0379】
メモリコピー動作では、オペランドAはコピーするデータを示し、結果オペランドはメモリコピー命令の目的アドレスを示す。汎用のメモリコピー命令では、オペランドBによって入力へのデータ操作動作が規定され、オペランドCによって出力オペランドワードへの動作が規定される。
【0380】
3.17.14 フロー制御命令
フロー制御命令は、図9に示したような命令実行モデルのさまざまな部位を制御するための命令群である。フロー制御命令としては、命令ストリームを実行しちえるときに1つの仮想アドレスから他のアドレスへの移動を可能にする条件付きジャンプあるいは条件なしジャンプを含む。条件付きジャンプ命令は、コプロセッサやレジスタでもって関連するフィールドをマスクし、所定の値と比較することにより決定される。これにより命令の一般性を保つことができる。更に、フロー制御命令は、オーバラップ命令と非オーバラップ命令との間の同期をとるために、あるいはマイクロプログラミングの一部として用いられる待機命令をも含む。
【0381】
図107に、フロー制御命令の符号を示す。また、以下の表はマイナーオプコードの説明である。
【0382】
命令ワード−マイナーオプコードフィールド
【0383】
【表26】
Figure 0004227218
Figure 0004227218
【0384】
ジャンプ命令においては、オペランドAワードはジャンプ命令の目的アドレスを指定する。マイナーオプコードのSビットが0にセットされれば、オペランドBはコプロセッサレジスタを指定し、条件のソースとして用いる。オペランドB記述子の値はレジスタのアドレスを指定し、オペランドBワードの値がレジスタ内容を比較する値となる。オペランドCワードは結果に適用されるビットごとのマスクを指定する。すなわち、ジャンプ命令条件は以下のビットごとの式が満たされていれば真となる。
【0385】
(((register value xor Operand B)andOperand C)=0x00000000)
更に、マイクロプログラミングレベルで十分に制御するためのレジスタアクセスのためにも当該命令が用いられる。
3.18 アクセラレータカードのモジュール
図2において、種々のモジュールを更に説明する。
3.18.1 ピクセルオーガナイザ
ピクセルオーガナイザ246は入力インタフェーススイッチ252からのデータストリームのアドレスを指定してバッファに格納する。入力データはピクセルオーガナイザの内部メモリに格納されるか、あるいはMUVバッファ250に格納される。入力ストリームに対する必要なのデータ処理を全部済ませた後、必要に応じて入力ストリームを主データパス242あるいはJPEG符号化器241に渡す。ピクセルオーガナイザの動作モードは通常のCBusインタフェースによって構成することができる。ピクセルオーガナイザ246はPO_CFG制御レジスタの指定するような五つのモードのうちの一つのモードで動作する。これらのモードは次のとおりである。
(a)アイドルモード:ピクセルオーガナイザ246が動作しないモード。
(b)シーケンシャルモード:入力データは内部FIFOに格納されるようになり、ピクセルオーガナイザ246はデータの32ビットアドレスを生成して入力インタフェーススイッチ252にデータを要求するモード。
(c)色空間変換モード:ピクセルオーガナイザが色空間変換のためにピクセルをバッファするモード。更に、MUVバッファ250に格納されているインターバルおよび分数値を要求する。
(d)JPEG圧縮モード:ピクセルオーガナイザ246が画像データをMCUの形式でMUVバッファに格納するモード。
(e)畳込み演算および画像変換モード:ピクセルオーガナイザ246が行列係数をMUVバッファ250に格納し、必要であれば主データパス242にもそれを伝えるモード。
【0386】
ピクセルオーガナイザ246は主データパス242とJPEG符号化器241の両方ともの動作のためにMUVバッファ250を使う。色空間変換において、インターバルおよび分数テーブルはMUV RAM250によって格納され、36ビットのデータ(4つのカラーチャネル)×(4ビットのインターバル値と8ビットの分数値)としてアクセスされる。画像変換および畳込み演算のために、MUV RAM250は行列係数および関連する構成データを格納する。係数行列は16行×16列に制限され、各係数の幅は最大20ビットである。MUV RAM250は1クロックサイクルあたり1つの係数を必要とする。係数データに加えて、バイナリポイント、ソーススタート座標、サブサンプルデルタ等の制御情報も主データパス242に伝えなければならない。この制御情報は、行列係数より先にピクセルオーガナイザ246によってフェッチされる。
【0387】
JPEG圧縮において、ピクセルオーガナイザ246は、MUVバッファ250を使ってMCUをダブルバッファする。JPEG圧縮の性能向上のためには、ダブルバッファ技術を使うことが望ましい。MUV RAM250の1半分は入力インタフェーススイッチ252からのデータを使って書き込まれる。一方、もう一方の半分は、JPEG符号化器241に送るべきデータを得るためにピクセルオーガナイザによって読み出される。 ピクセルオーガナイザ246は、必要とされる所におけるカラー成分の水平サブサンプリングを行うとともに、入力画像のサイズがMCUの整数倍でない場合にはMCUをパディングする。
【0388】
ピクセルオーガナイザ246は、図32において前述した、バイトレーンスワップと、正規化と、バイト入り代えと、バイトパックおよびアンパックと、複写動作とを含む入力データのフォーマットをも行う。動作はピクセルオーガナイザレジスタを設定することにより必要に応じて行われる。
【0389】
図108において、ピクセルオーガナイザ246をより詳細に説明する。 ピクセルオーガナイザ246は、CBusインタフェース制御部801に含まれている自身のレジスタセットの制御に従い作動しており、CBusインタフェース制御部801はグローバルCBusを経由して命令制御部235に接続されている。ピクセルオーガナイザ246にはオペランドフェッチ部802が含まれており、ピクセルオーガナイザ246が必要とするオペランドデータを入力インタフェーススイッチ252から要求する。、オペランドデータのスタートアドレスは、実行直前にセットされるPO_SAIDレジスタによって指定される。PO_SAIDレジスタは、PO_DMRレジスタのLビットによる指定に応じて、即座のデータを保持することもある。現在アドレスポインタはPO_CDPレジスタに格納され、入力インタフェーススイッチの要求があればそのバースト長さだけ増加される。データがMUV RAM250にフェッチされるとき、データの現在オフセットはPL_MUVレジスタによって指定されるMUV RAM250のベースアドレスと連結される。
【0390】
オペランドフェッチ部802によってフェッチされたシーケンシャル入力データをバッファするために、FIFO803が用いられる。データ操作部804は、図32において説明したような様々な操作を実行する。データ操作部の出力はMUVアドレス生成部805に伝えられる。MUVアドレス生成部805は構成レジスタに従ってデータをMUV RAM250、主データパス242、JPEG符号化器241のどちらかに伝える。ピクセルオーガナイザ制御部806は、ピクセルオーガナイザ246のサブモジュール全てのために必要な制御信号を生成する状態機械である。必要な信号の中では、種々のBusインタフェース上での通信を制御する信号も含まれる。ピクセルオーガナイザ制御部は、状態レジスタの設定に従い他モジュール239が必要とする診断情報を出力する。
【0391】
図109において、図108のオペランドフェッチ部802をより詳細に示す。オペランドフェッチ部802には、命令バスアドレス生成部(IAG)810が含まれており、オペランドデータをフェッチせよという要求を生成する状態機械を含む。 この要求は要求仲裁部811に送られが、要求仲裁部811はアドレス生成部810の要求とMUVアドレス生成部805の要求(図108)との間を仲裁しており、勝ちの要求を入力(MAG)インタフェーススイッチ252に送るようにしている。要求仲裁部811は要求を扱うための状態機械を含んでいる。これは、FIFOカウント部814を用いてFIFOの状態をモニタし、次の要求をいつデスパッチすべきかを決定する。バイトイネーブル生成部812はIAG810の情報を受け取り、入力インタフェーススイッチ252がリターンする各オペランドにおける有効なバイトを指定するバイトイネーブルパタン816を生成する。バイトイネーブルパタンは関連するオペランドデータとともにFIFOに格納される。MAG要求とIAG要求が同時に到着したとき、要求仲裁部811はMAG要求をIAG要求より優先して処理する。
【0392】
図108において、MUVアドレス生成部805は異なるいくつかのモードで動作する。これらのモードにおいて、第1はJPEG(圧縮)モードである。このモードでは、JPEG圧縮のための入力データがデータ操作部804によって供給され、MUVバッファ250はダブルバッファとして使われる。MUV RAM250アドレス生成部805は、データ操作部804によって処理された入力データを格納するに適するMUVバッファのアドレスを生成する。MAG805は、格納されたピクセルからカラー成分データを取り出すための読み出しアドレスを生成するとともに、JPEG圧縮用の8×8ブロークを形成するように動作する。MAG805は、MCUが画像と一部重なっている場合も扱う。図110は、MAG805が行うパディング動作の一例を示す。
【0393】
普通のピクセルデータにおいて、MAG805は、4つの8ビットRAMのMUV RAM250における同じアドレス内に、4つのカラー成分を格納する。同じカラーチャネルからデータを同時に取り出すために、MCUデータは左にバレルシフトされてからMUV RAM250に格納される。データの左にシフトされるバイト数は、書き込みアドレスの下位2ビットによって決定される。例えば、図111は、サブサンプリングの要らない場合32ビットピクセルデータがMUV RAM250内で配置されるデータ構造を示す。3チャネル又は4チャネルインタリーブJPEGモードにおいては、入力データのサブサンプリングが選択されることもあり得る。サブサンプリングを伴うマルチチャネルJPEG圧縮モードにおいて、MAG805(図108)は、JPEG符号化器の最適性能のために32ビットデータがMUV RAM250に格納される前にサブサンプリングを行うようになっている。最初四つの入力ピクセルの中で、MUV RAM250に格納される第1および第4番目のチャネルだけが有用なデータを含んでいる。第2および第3番目のチャネルのデータはサブサンプリングされ、ピクセルオーガナイザ246のレジスタに格納される。次の4つの入力ピクセルにおいて、第2および第3番目のチャネルはサブサンプリングされたデータをもって埋められる。図112は、マルチチャネルサブサンプリングモードにおけるMCUデータ構成の一例を示す。MAGは単一チャネルアンパックデータ全てをマルチチャネルピクセルデータと全く同様に扱う。MUV RAMから読み出された単一チャネルパックデータの一例が図113に示されている。
【0394】
書き込みプロセスによって入力MCUがMUV RAMに格納されている間、読み出しプロセスはMUV RAMから8×8ブロックを読み出す。一般的に、前記ブロックは各チャネルに対してデータを順次読み出すことによって、四つの係数ずつMAG805によって生成される。ピクセルデータとアンパック入力データにおいて、格納されるデータは図111に示すように整理される。従って、サンプルされなかったピクセルデータからなる8×8ブロックを合成するためには、読み出しプロセスはMUV RAMからデータを斜行しながら読み出す。図114は、このようなプロセスの一例を示す。図114には、四つのチャネルデータにおける読み出しシケンス示されており、MUV RAM250の格納形式が同一チャネルから多数の値を同時に読み出すことを容易にしていることが分かる。
【0395】
色変換モードにおいて、MUV RAM250はインターバルおよび分数値を格納するキャッシュとして用いられ、MAG805はそのキャッシュの制御部として働くようになっている。MUV RAM250は3つのカラーチャネル値をキャッシュする。ここで、各カラーチャネルは256対の4ビットインターバルおよび分数値を有する。DMUを通じた各ピクセル出力において、MUV RAM250から前記値を得るためにMAG805が使われる。この値が得られないときに、MAG805は欠けているインターバルおよび分数値をフェッチせよというメモリ読み出し要求を出す。帯域の有効利用のために、要求あたりエントリ一つだけをフェッチする手法のかわりに、多数のエントリをフェッチするような手法を取る。
【0396】
画像変換および畳込み演算のために、MUV RAM250はMDPの行列係数を記憶している。MAGはMUV RAM250に格納されている全ての行列係数をスキャンする。画像変換および畳込み命令の始めにおたって、MAG805はオペランドフェッチ部に要求を出し、オペランドフェッチ部がカーネル記述“ヘッダ”(図94)とバスト要求の第1行列係数とをフェッチするようにする。
【0397】
図115において、図108のMUVアドレス生成部(MAG)805をより詳細に示す。MAG805はIBus要求を多重化するIBus要求モジュール820を備えており、IBus要求は画像変換制御部(ITX)821と色空間変換(CSC)制御部822によって生成される。この要求は、要求を実行するようになっているオペランドフェッチ部に送られる。ピクセルオーガナイザ246は画像変換、色空間変換のどちらか1つのモードで動作するようになっているため、制御部821,822の間では仲裁が要らないことになる。IBus要求モジュール820は、オペランドフェッチ部への要求を生成するのに必要なバストアドレスとバスト長さとを含む情報を、関連するピクセルオーガナイザから導出する。
【0398】
JPEG制御部824は、JPEG書き込み制御部とJPEG読み出し制御部という2つの状態機械を備えており、JPEGモードにおいて使われる。前記二つの制御部は同時に作動するようになっており、内部レジスタを用いることによってお互いに同期を取る。
【0399】
JPEG圧縮動作において、DMUはMCUデータを出力しMUV RAMに格納する。JPEG書き込み制御部は水平パディングとピクセルサブサンプリングの制御とを担当しており、JPEG読み出し制御部は垂直パディングを担当する。水平パディングはDMU出力を停止することによって行われ、垂直パディングは既に読み出した8×8ブロックを再び読み出すことによって行われる。
【0400】
JPEG書き込み制御部は、ソース画像におけるDCUおよびDMU出力ピクセルの現在位置をトラッキングしており、水平パディングのためにいつDMUを停止すべきかを決定するのにその情報を用いる。MCUがMUV RAM250に書き込まれたときに、JPEG書き込み制御部は内部レジスタをセットするかまたはリセットすることによって、MCUが画像の右エッジにあるかあるいは画像の最低エッジにあるかを表す。JPEG読み出し制御部は、前記レジスタの内容に基づき、垂直パディングが必要であるかや画像の最後のMCUまで読んだのかを判断する。
【0401】
JPEG書き込み制御部はDMU出力データをトラッキングし、DMU出力データをMUV RAM250に格納する。
【0402】
前記制御部は、レジスタセットを用いて入力ピクセルの現在位置を記憶する。この情報はDMU出力を停止して水平パディングを行うときに使われる。
【0403】
全てのMCUがMUV RAM250に書き込まれたときに、前記制御部はMCU情報をJPEG−RW−IPCレジスタに書き込み、以後JPEG読み出し制御部によって利用し得るようにする。
【0404】
この制御部は、最後のMCUがMUV RAM250に書き込まれた後、SLEEP状態に入り現在の命令が終了するまでその状態に残る。
【0405】
JPEG読み出し制御部は、MUV RAM250に格納されているMCUから8×8ブロックを読み出す。マルチチャネルピクセルにおいては、制御部がMCUを数回に渡って読み出すようになっており、MUV RAMに格納されている各ピクセルから、各読み出しにおける異なるバイトを抽出する。
【0406】
この制御部はJPEG−RW−IPCによって提供される情報を用いて、垂直パディングを行うべきかを検出する。垂直パディングはMUV RAM250から読み出した直前の8バイトを再び読み出すことによって行われる。
【0407】
画像変換制御部821はIBusからカーネルディスクリプタを読み出し、カーネルヘッダをMDP242に伝える。そして、po.lenレジスタで指定された回数だけ行列係数をスキャンする。画像変換および畳込み命令において、PO246による全てのデータ出力はIBusから直接フェッチされるようになっており、DMUには伝えられない。
【0408】
カーネルヘッダの直後フェッチされる第1行列係数の最初8ビットは、フェッチすべき残りの行列係数の数を表す。カーネルヘッダは修正されずに直接MDPに伝えられるが、行列係数はMDPに伝えられる前にサイン拡張される。
【0409】
ピクセルサブサンプラ825は、それぞれが入力ワードの1バイトに対して動作する二つの同じチャネルサブサンプラを備える。関連する構成レジスタが起動されていないときに、ピクセルサブサンプラは自身の入力をそのまま自身の出力にコピーする。一方、構成レジスタが起動されているときに、サブサンプラは入力データに対して平均を取るか又は間引きを行うかすることによって入力データをサブサンプルする。
【0410】
MUV多重化モジュール826は現在アクティブである制御部からMUV読み出しおよび書き込み信号を選ぶ。内部多重化部は、MUV RAM250を使う種々の制御部を経由して、読み出しアドレス出力を選ぶ。MUV RAM書き込みアドレスはMUV多重化モジュールの8ビットレジスタに格納されている。MUV RAM250を用いる制御部は次のMUV RAMアドレスを決定するための制御を行うとともに、書き込みアドレスレジスタをロードする。
【0411】
MUV有効アクセスモジュール827は色空間変換制御部によって用いられ、データ操作部による現在ピクセル出力のインターバルおよび分数値がMUV RAM250において利用できるかを決定する。一つ以上のカラーチャネルが欠けているとき、MUV有効アクセスモジュール827は関連するアドレスをIBus要求モジュール820に伝え、インターバルおよび分数値をバーストモードでロードする。キャッシュミスがサービスされると、MUV有効アクセスモジュール827は今までフェッチされたインターバルおよび分数値のセットを表す内部有効ビットをセットする。
【0412】
複写モジュール829は、内部ピクセルレジスタが定める回数だけ、入力データを複写する。複写モジュールが現在の入力ワードを複写している間、入力ストリームは停止されるようになる。PBusインタフェースモジュール830は、ピクセルオーガナイザ246を主データパス242およびJPEG符号化器241にリタイムするか或いはその逆の処理をするのに使われる。最後に、MAG制御部831は種々のサブモジュールをイニシエイトする信号とシャットダウンする信号とを生成する。なお、MAG制御部831は、主データパス242およびJPEG符号化器241からの入力PBus信号に対する多重化をも行う。
【0413】
3.18.2 MUVバッファ
図2においては、これまでの説明から明らかなようにピクセルオーガナイザ246はMUVバッファ250と相互関係にある。
【0414】
再コンフィギュレーション可能なMUVバッファ250は単純ルックアップテーブルモード(モード0)、多重ルックアップテーブルモード(モード1)、JPEGモード(モード2)を含む様々な処理モードをサポートしている。それぞれのモードで、バッファには異なるタイプのデータオブジェクトが格納される。例えば、バッファに格納されているデータワード、様々な検索テーブルの値、単一チャネルデータ、複数チャネルデータはデータオブジェクトである。一般的に、データオブジェクトは異なるサイズを持つ。更に再コンフィギュレーション可能なMUVバッファ250に格納されたデータオブジェクトはバッファのオペレーティングモードに依存した様々な方法で実際にアクセスできる。
【0415】
異なるタイプのデータを書き戻したり及び格納するのに必要な様々な方法を適切にするために、データオブジェクトはしばしば、格納される前に符号化される。データオブジェクトのコーディングに用いられる方法はデータオブジェクトのサイズ、表現されているデータオブジェクトのフォーマット、どのようにデータオブジェクトがバッファから書き戻されるのか、バッファ上に形成されたメモリモジュールの構成状態によって決定される。
【0416】
図116は再コンフィギュレーション可能なMUVバッファ250を実装するために用いられるコンポーネントのブロックダイアグラムである。再コンフィギュレーション可能なMUVバッファ250はエンコーダ1290、ストレージデバイス1293、デコーダ1291、アドレス読み込み・ローテーンョン信号発生器1292からなる。入力データストリーム1295にデータオブジェクトが入力された時には、データオブジェクトはエンコーダ1290により内部データに符号化され、内部データストリーム1296に配置される。符号化されたデータオブジェクトはストレージデバイス1293に格納される。
【0417】
格納されたデータオブジェクトを復号化する場合には、符号化されたデータは符号化データ出力ストリーム1297によりストレージデバイスから取り出される。符号化データ出力ストリーム1297上の符号化されたデータはデコーダ1291によって復号化される。復号化されたデータオブジェクトは出力データストリーム1298上に現れる。
【0418】
ストレージデバイス1293への書き込みアドレス1035はMAG805(図108)により与えられる。書き込みアドレス1299,1300,1301も同様にMAG805(図108)によって与えられ、アドレス読み込み・ローテーション信号発生器1292によってストレージデバイス1293に分配される。アドレス読み込み・ローテーション信号発生器1292はまた、入力・出力ローテーション信号1303,1304をエンコーダ、デコーダそれぞれに対して生成する。書き込み有効信号1306と1307は外部ソースから与えられる。コントローラ801(図108)によって与えられる処理モード信号1302はエンコーダ1290、デコーダ1291、アドレス読み込み・ローテーション信号発生器1292、ストレージデバイス1293に接続される。インクリメント信号1308はアドレス読み込み・ローテーション信号発生器内の内部カウンタをインタリメントし、JPEGモード(モード2)でも用いられることがある。
【0419】
再コンフィギュレーション可能なMUVバッファ250が単純ルックアップテーブルモード(モード0)である場合には、本質的にバッファ250はむしろ、単一モードのメモリモジュールの様に動作する。データオブジェクトは本質的にメモリモジュールにアクセスする方法と同様な方法でバッファに格納あるいはバッファから取り出せる。
【0420】
再コンフィギュレーション可能なMUVバッファ250が多重ルックアップテーブルモード(モード1)で動作中の時、バッファ250はストレージデバイス1293に格納されている最大3つの検索テーブルをもちいて複数のテーブルに分割される。検索テーブルは同時かつ独立にアクセスすることができる。一例を挙げると、インターバルおよびフラクションの値は多重ルックアップテーブルモードのストレージデバイス1293に格納される、テーブルは入力データストリーム1295の下位3バイトを利用してインデックスがつけられる。3バイトのそれぞれはストレージデバイス1293に格納された独立の検索テーブルに発行される。
【0421】
画像がJPEG圧縮されているとき、画像は符号化されたデータストリームに変換される。ピクセルは原画像からMCUのフォーマットで取り出される。MCUは画像の左から右に、上から下に読み出される。それぞれのMCUは多数の8×8のブロックに再合成される。多数の8×8ブロックはMCUから抽出される。MCUは原画像のカラーコンポーネント、複数チャネルのJPEGモード、サブサンプリングの必要性等のいくつかの要因に依存している。8×8のブロックはその後フォワードDCT(FDCT)、量子化、エントロピー符号化される。JPEG圧縮の場合には、符号化されたデータはデータストリームからシーケンシャルに読み込まれる。データストリームはエントロピー復号化、逆量子化、逆DCT(IDCT)が行われる。IDCT処理の出力は8×8のブロックである。多数の8×8ブロックはMCUを再構成するように統合される。JPEG圧縮を用いるとき、多数の8×8ブロックは前述の要因に依存する。再コンフィギュレーション可能なMUVバッファ250はMCUを多数の8×8ブロックに分解したり、多数の8×8ブロックをMCUに再構成したりするときにも用いられる。
【0422】
再コンフィギュレーション可能なMUVバッファ250がJPEGモードの処理を行っているときはバッファ250への入力データストリーム1295はJPEG圧縮処理を行っているピクセルあるいはJPEG圧縮処理を行っている単一のコンポーネントを含んでいる。バッファ250の出力データストリームはJPEG伸長処理の単一チャネルデータブロックあるいはJPEG伸長処理のピクセルデータを含んでいる。このJPEG圧縮の例では、入力ピクセルはY,U,V,Oの4チャネルまで構成できる。指定の数のピクセルが完成したピクセルブロックとして処理処理されたときには、単一のコンポーネントデータブロックの抽出が開始できる。それぞれの単一のコンポーネントデータブロックはバッファに格納された同チャネルのピクセルからなるデータにより構成される。従ってこの例では、4つまでの単一のコンポーネントデータブロックをひとつのピクセルデータブロックから抽出できる。この具体例では、再コンフィギュレーション可能なMUVバッファ250がJPEG圧縮用のJPEGモード(モード2)で処理を行っているときには、多数の単位最小コード(MCU)はそれぞれ64の単一あるいは複数チャネルのピクセルをバッファに格納でき、多数の64バイト長の単一チャネルのコンポーネントデータブロックをバッファに格納されたそれぞれのMCUから抽出できる。例えば、バッファ1289がJPEG伸長を行うためにJPEGモード(モード2)である間は、出力データストリームは、Y,U,V,Oの最大4つのコンポーネントを持つ出力ピクセルから構成される。要求された数の完成した単一のコンポーネントデータブロックをバッファに書き込んだときは、ピクセルデータの抽出ができる。異なる色のコンポーネントに対応する4つの単一のコンポーネントデータブロックからのバイトは出力ピクセルとして取り出される。
【0423】
図117は図116のエンコーダ1290の詳細図である。ピクセルブロックの伸長のでは、入力データオブジェクトそれぞれはストレージデバイス1293に格納される前にバイト方向のローテーションにより符号化される(図129)。ローテーションの大きさは入力ローテーション制御信号1303により決定される。この例ではピクセルデータが最大の4バイトであったときは、32ビットの4入力1出力のマルチプレクサ1320および1325が、4つのうちの1つの可能な入力ピクセルのローテーションの選択に用いられる。例えば、もしピクセルの4つのバイトが(3,2,1,0)のようにラベルが付けられていたとすると、このピクセルのローテーションは(3,2,1,0)(0,3,2,1)(1,0,3,2)(2,1,0,3)となる。4つの符号化されたバイトはストレージデバイスの1290に出力される。
【0424】
バッファがJPEGモード(モード2)以外のモード、例えば、単一ルックアップテーブルモード(モード0)、多重ルックアップテーブルモードである時には、バイト方向のローテーションは必要ではなく、また入力データオブジェクトに対して行えない。入力データオブジェクトは後者の場合に、ノーローテーションの値をもつ入力ローテーション制御信号を無視することによって、ローテーションにより妨害を受ける。この値1323はである。2入力1出力のマルチプレクサ1321は制御信号1326を入力ローテーション制御信号1303とノーオペレーション値1323の選択をすることによって生成する。現在の処理モード1302はマルチプレクサ選択信号を生成するために、ピクセルブロック分解モードの値と比較される。。信号1326によって制御される4入力1出力のマルチプレクサ1320は入力データオブジェクトの4つのローテーションのうち1つを選択し、符号化された入力データストリーム1326上に符号化された有力データオブジェクトを生成する。
【0425】
図118は符号化された出力データストリーム1297を復号化するデコーダ1291を実装する組み合わせ回路の回路図である。デコーダ1321はエンコーダと本質的に同様な方法で動作する。デコーダはデータバッファがJPEGモード(モード2)である場合のみにデータを操作する。下部の符号化されたデータストリーム1297内の符号化された出力データオブジェクトの下位32ビットはデコーダに渡される。データはエンコーダ1290でローテーションするのとは逆の感覚でバイト方向のローテーションを用いて復号化される。32ビットの4入力1出力のマルチプレクサは、可能な4つの種類の符号化データのうちの1つを選択するために用いられる。例えば4バイトの入力ピクセルが(3,2,1,0)の様にラベルが付けられているとすると、このピクセルのローテーションの種類は(3,2,1,0)(2,1,0,3)(1,0,3,2)(0,3,2,1)の4つが可能である。出力ローテーション制御信号1304はバッファがピクセルブロック分解ノードの時と、他のオペレーションモードでノーオペレーション値が無視されたときに使用される。ノーオペレーション値1333は0である。2入力1出力のマルチプレクサ1331は、出力ローテーション制御信号1304とノーオペレーション値1333の選択を行うことで信号1334を生成する。現在の処理モード1302はマルチプレクサ選択信号1332を生成するために、ピクセルブロック分解モードの値と比較される。信号1334▲2▼よって制御される4入力1出力のマルチプレクサ1330は符号化された出力データストリーム1297上の符号化された出力データオブジェクトの4種類のローテーションを選択し、出力データストリーム1298上に出力データを生成する。
【0426】
図116において、回路で用いられる内部読み込みアドレス生成の方法は、再コンフィギュレーション可能なMUVバッファ250の処理モード1302によって選択される。単一ルックアップテーブルモード(モード0)と多重ルックアップテーブルモード(モード1)では読み込みアドレスは外部読み込みアドレス1299,1300,1301の形でMAG805(図108)によって生成される。単純ルックアップテーブルモード(モード0)ではストレージデバイス1293上にメモリモジュール1380,1381,1382,1383,1384,1385(図121)は一緒に処理する。メモリモジュール1380から1385(図121)に与えられる書き込みアドレスと読み込みアドレスは本質的に同じである。即ち、ストレージデバイス1293は外部回路に1つの読み込みアドレスと1つの書き込みアドレスの供給のみを必要とし、これらのアドレスをメモリモジュール1380から空1385(図121)に分配するために内部ロジックを使用する。モード0では、読み込みアドレスは外部アドレス1299(図116)により与えられ、本質的に変化しないまま内部アドレス1348(図121)に分配される。外部読み込みアドレス1349,1350,1351(図121)はモード0では使用されない。書き込みアドレスは外部書き込みアドレス1305(図116)により与えられ、本質的に修正なしで各メモリモジュール1380から1385(図121)の書き込みアドレスに接続される。
【0427】
ここでは、多重ルックアップテーブルモード(モード1)における3ルックアップテーブルの構成を示す。3つのテーブルが独立にアクセスされるとき、符号化された入力データは1380から1385(図121)までのすべてのメモりもジュールに同時に書き込まれ、従って3つのテーブルそれぞれに1つのインデックスが必要となる。メモリモジュール1380から1385(図212)への3つのインデックス、即ち読み込みアドレスはストレージデバイス1293により与えられる。これらの読み込みアドレスは、内部ロジックを用いて1380から1385の適切なメモリモジュールに分配される。本質的に単一ルックアップテーブルモードのときと同様な手法で、外部から与えられる書き込みアドレスは、本質的な変更なしに1308から1385のそれぞれのメモリモジュールのアドレスに接続される。その結果、多重ルックアップテーブルモード(モード1)では外部読み込みアドレス1299,1300,1311は内部読み込みアドレス1348,1349,1350にそれぞれ分配される。内部読み込みアドレス1352はモード1では使用されない。JPEGモード(モード2)で使用される内部アドレス生成方法は前述の方法とは異なる。
【0428】
図119はJPEG圧縮を行うJPEGモード(モード2)における、再コンフィギュレーション可能なデータバッファ用の、読み込みアドレスおよびローテーション信号生成回路1292を実装する組み合わせ回路の回路図である。JPEGモード(モード2)では、信号生成器1292はコンポーネントカウンタ1340とデータバイトカウンタ1341の出力を、ストレージデバイス1293を含むメモリーモジュールの内部読み込みアドレスを計算するために用いている。コンポーネントブロックカウンタ1340はストレージデバイスに格納されている、ピクセルデータブロックから抽出したコンポーネントブロック数を生成する。そのブロック数はデータバイトカウンタ1341の出力を4倍することで与えられる。具体的には、ピクセルブロック分解モードにおける内部読み込みアドレス1348、1349、1350、1351は次のように計算される。コンポーネントブロックカウンタはオフセット値1343、1344、1345、1347を計算するために使用され、また出力データバイトカウンタ1341はベース読み込みアドレス1354を生成するために用いられる。オフセット値1343はベース読み込みアドレス1354に加算された1358で、加算値は内部読み込みアドレス1348(あるいは1349,1350,1351)である。メモリモジュールのオフセット値は、多重メモリモジュールで実行される同時読み込みに対して一般的に異なる値をとるが、コンポーネントブロックの抽出においては本質的に同じである。ピクセルデータブロック分解モードにおける4つの内部読み込みアドレスを計算するのに用いられるベースアドレス1354も同様である。インクリメント信号1308はコンポーネントバイトカウンタのインクリメント信号として使用される。カウンタは読み込みが成功する度にインクリメントされる。コンポーネントブロックカウンタインクリメント信号1356は、単一校正用をデータブロックが正常にバッファから取り出された後、コンポーネントブロックカウンタ1340をインクリメントするのに用いられる。
【0429】
出力ローテーション制御信号1304(図116)はコンポーネントブロックカウンタの出力と出力データバイトカウンタの出力から取り出され、本質的に内部アドレスの生成と同じ方法である。コンポーネントブロックカウンタの出力はローテーションオフセット1347を計算するのに用いられる。出力ローテーション制御信号1304はローテーションオフセット1355とベース読み込みアドレス1354の和の最下位2ビットにより与えられる。入力ローテーション制御信号は、アドレス及びローテーション制御信号生成器の例の様に、外部書き込みアドレス1305の最下位2ビットにより与えられる。
【0430】
図120は、再コンフィギュレーション可能なMUVバッファ250に格納された単一コンポーネントデータからの多重チャネルピクセルデータの再構成に用いられるもう1つのアドレス生成器1292である。この場合、バッファはJPEG伸長のためのJPEGモード(モード2)となる。この場合、単一コンポーネントデータブロックはバッファに格納され、ピクセルデータブロックはバッファから取り出される。この例では、メモリモジュールへの書き込みアドレスは、本質的変更なしで外部書き込みアドレス1305によって与えられる。単一コンポーネントブロックは連続したメモリに格納される。この例の入力ローテーション制御信号1303は単に書き込みアドレスの最下位2ビットによってセットされる。ピクセルカウンタ1360は、バッファ内に格納されている単一コンポーネントブロックから抽出されたピクセル数の記録を保持するために用いられる。ピクセルカウンタの出力は、読み込みアドレス1348、1349、1350、1351及び出力ローテーション制御信号1304を生成するために用いられる。一般に読み込みアドレスは、ストレージデバイス1293を構成するそれぞれのモジュール毎に異なっている。この例では、読み込みアドレスは単一コンポーネントブロックインデックス1362、1363、1364、1365あるいは1365とバイトインデックス1361の2つの部分からなる。特定のブロックの単一コンポーネントブロックインデックスを計算するために、オフセットが出力ピクセルカウンタのビット3と4に加えられる。一般にオフセット1366、1367、1368、1369はそれぞれの読み込みアドレスで異なる。ピクセルカウンタのビット2からビット0は読み込みアドレスのバイトインデックス1361に用いられる。読み込みアドレスは図120に示されるように、単一コンポーネントブロックインデックス1362、1363、1364、1365あるいは1365とバイトインデックス1361の結合の結果である。この例では、出力ローテーション制御信号1304は、本質的な変化なしにピクセルカウンタの出力のビット4とビット3により生成される。インクリメント信号1308はピクセルカウンタ1360をインクリメントするためのピクセルカウンタインクリメント信号として使用される。ピクセルカウンタ1360はピクセルが正常にバッファから取り出されたときにインクリメントされる。
【0431】
図121はストレージデバイス1293の構造である。ストレージデバイス1293は1383、1384、1385の3つの4ビットワイドメモリモジュールと1380,1381、1382の3つの8ビットワイドメモリモジュールを持つことができる。メモリモジュールは単一ルックアップテーブルモード(モード0)の36ビットのワード、多重ルックアップテーブルモード(モード1)の12×3ビットのワード、JPEGモード(モード2)における32ビットのピクセルあるいは4×8ビットの単一コンポーネントデータを格納するために結合できる。通常それぞれのメモリモジュールは符号化された入力及び出力データストリーム(1296と1297)の異なる部分に関連づけられる。たとえば、メモリモジュール1380は符号化された入力データストリーム1296のビット0からビット7に接続されデータ入力ポートと符号化された出力データストリーム1297のビット0からビット7に接続されたデータ出力ポートをもつ。この例ですべてのメモリモジュールの書き込みアドレスは一緒に接続され、同時に同じ値を共有する。一方、図121に示されるメモリモジュールの読み込みアドレス1386,1387,1388,1390,1391は読み込みアドレス生成器1292により与えられ、これらは一般に異なる値をとる。例では、共通の書き込み有効信号はすべての8ビットメモリモジュールに対して書き込み有効信号を出すために用いられ、第二の共通の書き込み有効信号はすべての4ビットメモリモジュールに対して書き込み有効信号を出すために用いられる。
【0432】
図122はストレージデバイス1293内のメモリモジュールにアクセスするための読み込みアドレス1386,1387,1388,1389,1390を生成するための組み合わせ回路の回路図である。符号化されたそれぞれの入力データオブジェクトは部分部分に分解され、それぞれの部分はストレージデバイスの独立したメモリモジュール内に格納される。従って通常、すべての処理モードにおけるすべてのメモリモジュールの書き込みアドレスは本質的には同じであり、メモリモジュールの書き込みアドレスを計算するために実質的にロジックは必要ない。一方、読み込みアドレスは通常、処理毎に異なり、それぞれの処理モードにおけるメモリモジュールそれぞれに対しても異なる。再コンフィギュレーション可能なMUVバッファ250の出力データストリーム1298内のすべてのバイトはJPEG圧縮のJPEGモード(モード2)のバッファに格納されているピクセルデータから抽出された単位コンポーネントデータ、あるいはJPEG伸長のJPEGモードのバッファ内に格納されて単一コンポーネントデータから抽出されたピクセルデータを含まなくてはならない。出力データに対する要求はバッファへの4つの読み込みアドレス1348、1349、1350、1351の生成によって満たされる。多重ルックアップテーブルモード(モード1)においては、最大3つの検索テーブルがバッファに格納され、従って最大3つまでの読み込みアドレス1348、1349、1350が3つの検索テーブルにインデックスをつけるために必要である。すべてのメモリモジュールの読み込みアドレスは単一ルックアップテーブルモード(モード0)の場合と同じであり、読み込みアドレス248のみがこのモードで用いられる。図122に示されている制御回路の例はストレージデバイス1293を構成する6つのメモリモジュールそれぞれの読み込みアドレス1386−1391を計算するために、バッファの処理モード信号と最大4つの読み込みアドレスを用いる。読み込みアドレス生成器1292は入力信号として外部アドレスバス1348,1349、1350、1351からなる外部読み込み信号をもちい、ストレージデバイス1293を構成するメモリモジュールの内部読み込みアドレス1386,1387、1389、1390を生成する。
【0433】
図123はバッファ250が単一ルックアップテーブルモードにある時に、どのようにして20ビットの行列係数がバッファ250に格納されるのかを示した図である。この場合、データオブジェクトが再コンフィギュレーション可能なMUVバッファに書き込まれるときにはキャッシュ上のデータオブジェクトに対してエンコーディングは通常行われない。行列係数は8ビットメモリモジュール1380,1381,1382に格納される。行列係数のビット7からビット0はメモリモジュール1380に格納され、ビット15からビット8はメモリモジュール1381に格納され、ビット19からビット16はメモリモジュール1382の下位4ビットに格納される。命令の残りのために必要であるようなバッファに格納されたデータオブジェクトは何回も取り出される。単一ルックアップテーブルモードにおける、すべてのメモリモジュールの読み込みと書き込みのアドレスは本質的に同じである。
【0434】
図124は多重ルックアップテーブルモード(モード1)において、どのようにしてバッファにテーブルエントリが格納されるかを示した図である。この場合、3つの検索テーブルはバッファに格納され、それぞれの検索テーブルは4ビットのインターバル値と8ビットの小数値をもつ。通常インターバール値は4ビットのメモリモジュールに格納され、小数値は8ビットのメモリモジュールに格納される。この場合3つの検索テーブル1410,1411,1412はメモリバンク1380と1383、1381と1384、1382と1385に格納される。分離過去も未有効制御信号1306と1307(図121)はストレージデバイスに格納されている小数値に影響せずにストレージデバイス1293にインターバル値を書き込むことができる。本質的に同様な方法でインターバル値に影響を与えずに小数値を書き込むことができる。
【0435】
図125はピクセルデータブロックを単一要素データブロックに分解するJPEGモード(モード2)の状態の再コンフィギュレーション可能なMUVバッファ250にどのようにしてピクセルデータが書き込まれるのかを示した図である。ストレージデバイス1293は、8ビットメモリモジュールと同様な方法で統合して扱われるメモリモジュール、1381と1384を含むメモリモジュール1380、1381、1382、1383、1384からなる4つの8ビットメモリバンクとして統括される。メモリモジュール1385はJPEGモード(モード2)では使用されない。32ビットの符号化されたピクセルは4つのバイトに分解され、それぞれが異なる8ビットのメモリモジュールに格納される。
【0436】
図126は単一コンポーネントモードであるストレージデバイス1293にどのようにして単一コンポーネントデータブロックが格納されるのかを示した図である。ストレージデバイス1293は、8ビットメモリモジュールと同様な方法で統合して扱われるメモリモジュール、1381と1384を含むメモリモジュール1380、1381、1382、1383、1384からなる4つの8ビットメモリバンクとして統括される。メモリモジュール1385はJPEGモード(モード2)では使用されない。32ビットの符号化されたピクセルは4つのバイトに分解され、それぞれが異なる8ビットのメモリモジュールに格納される。この場合、単一コンポーネントブロックは64バイトからなる。単いるコンポーネントブロックが亜バッファに書き込まれるときは、それぞれに異なる量のバイトローテーションが適用される。32ビットの符号化されたピクセルデータはバッファ内の異なる単一コンポーネントデータブロックを読むことで取り出される。
【0437】
より詳細な再コンフィギュレーション可能なデータバッファ250の統括方法は、ピクセルオーガナイザの節を参照せよ。
【0438】
以上の具体例では、再コンフィギュレーション可能はデータバッファが、異なる命令と関係するデータの処理に用いられることを示した。3つの処理モードのある再コンフィギュレーション可能なデータバッファが明らかにされた。異なるアドレスの生成技術がバッファの処理モードのそれぞれにおいて必要となる。単一ルックアップテーブルモード(モード0)は画像変換において、行列係数をバッファに格納するのに用いられる。多重ルックアップテーブルモード(モード1)では多チャネルの色空間変換(CSC)における多数のインターバル及びフラクション検索テーブルをバッファに格納するのに用いられる。JPEGモード(モード2)はJPEG圧縮、JPEG伸長それぞれにおいて、MCUデータを8×8の単一コンポーネントブロックに分解、あるいは8×8の単一コンポーネントブロックをMCUに再合成するのに用いられる。
【0439】
3.18.3 結果オーガナイザ
MUVバッファ250は結果オーガナイザ249においても用いられる。結果オーガナイザ249は、メインデータパス242あるいはJPEGコーダ241のストリームをバッファしてフォーマットする。結果オーガナイザ249はまた、図42で説明した結果データの圧縮、非圧縮、非正規化、バイトレーンスワップ、再編成にも関係する。更に結果オーガナイザ249は外部インターフェースコントローラ238、ローカルメモリコントローラ236、周辺インターフェースコントローラ237の要求に対し、その結果を転送する。
【0440】
JPEG伸長モードの時、結果オーガナイザ249はMUV RAM250をJPEGコーダ249の画像データをダブルバッファするために用いる。ダブルバッファはMUVRAM250の半分に書き込まれているJPEGコーダ241のデータを用いてJPEG伸長する場合に、同時に残りの半分に書きこまれた画像データが指定の格納場所に出力されるとき、そのパフォーマンスをあげることができる。
【0441】
1,3及び4チャネル画像データは、同一チャネルからの8ビットのコンポーネントを含む8×8ブロックの形のJPEG伸長を行っている間に、結果オーガナイザ249に渡される。結果オーガナイザはこれらのブロックを指定の順番でMUVRAM250に格納し、また複数チャネルのインターリーブ画像のために、データをMUVRAM250から読みこみを行っている時のチャネルのメッシュを格納する。例えば、YUVによる3チャネルのJPEG圧縮ではJPEGコーダ241は3つの8×8ブロックを、初めにY、次にU、最後にVの順で出力する。メッシュ処理がはそれぞれブロックか1つのコンポーネントを取り出すことによって行われ、ピクセルを(YUVX)の形で構成する。ここでXは未使用チャネルである。バイトスワッピングは出力チャネルのスワップが必要となたときに行われる。結果オーガナイザはまた、伸長された出力データのクロマデータの再構成のための必要なサブサンプリング処理を行う必要がある。このことは生成するためにそれぞれのプログラムチャネルを繰り返すという意味を含んでいる。
【0442】
図127にもどると図2の結果オーガナイザ249の詳細が示されている。結果オーガナイザ249は、その処理に設定されるレジスタのレジスタファイルを含む通常の標準CBusインターフェース840周辺に基礎をおいている。結果オーガナイザ249の処理はピクセルオーガナイザ249と同様であるが、リバースデータ操作が行われる。データ操作ユニット842はバイトレーンスワッピング、コンポーネント代入、コンポーネント解放、非正規化をMUVアドレス発生器805により生成されるデータに対して行う。実行された処理は図42を参照して前述の通り説明され、内部レジスタにセットされた様々なフィールドに従って処理が行われる。FIFOキュー843は出力データをそれがRBus制御ユニット844を用いて出力される前にバッファを行う。RBus制御ユニット844はアドレスデコーダとアドレス生成器によって構成される。格納モジュール用のアドレスは、必要な出力バイト数のデータに加えて、内部レジスタに格納される。更に、内部RO_CUTレジスタはいくつくらいの出力バイトが出力バスのバイトストリーム上に送られる前に欠落したかを決定する。加えて、RO_LMTレジスタは出力制限が中止された後の次のデータを用いて最大いくつのデータ項目が出力されるかを決定する。MAG805はJPEG伸長時にMUVRAM250のアドレスを生成する。MUVRAM250はJPEGコーダからの出力をダブルバッファするために用いられる。MAG805は内部コンフィギュレーションレジスタに依存するMUVRAM250におけるコンポーネントのメッシュを行い、ピクセルの入った単一チャネル、3チャネル、4チャネルの出力を行う。バイトレーンスワッピングがピクセルデータを適切な場所に格納する前に必要となるので、MUVRAM250から得られるデータはデータ操作ユニットを通して渡される。結果オーガナイザ249がJPEGモードになっていないときはMAG805は単にPBusレシーバ845のデータをデータ操作ユニット842にダイレタトに送る。
【0443】
3.18.4 オペランドオーガナイザB及びC
図2に再び戻って、2つの独立なオペランドオーガナイザ247と248はデータキャッシュコントロール240のデータバッファの機能と、JPEGコーダ241あるいはメインデータパス242にデータを転送する機能を持つ。オペランドオーガナイザ247と248は様々なモードで操作される。
(a) オペランドオーガナイザがCBus要求にたいしてのみ応答するアイドルモード
(b) 現在の命令のデータがオペランドレジスタの内部レジスタに格納されている時の直接モード
(c) オペレータオーガナイザがシーケンシャルアドレスおよびデータキャッシュコントローラ240のバッファが満杯である時のデータを生成するシーケンシャルモード。
【0444】
多数のメインデータパス242の処理モードは、少なくともどちらかのオペランドオーガナイザにシーケンシャルモードであることを要求する。オペランドオーガナイザB247における、合成を含むこれらのモードは、ほかのイメージを用いて合成されるバッファピクセルで必要である。オペランドオーガナイザC248はそれぞれのデータチャネルの値の減衰を行う合成処理に用いられる。ハーフトーンモードではオペランドオーガナイザB247は8ビットの行列係数のバッファを行い、階層的画像フォーマット分解モードではオペランドオーガナイザB247は垂直補間と残部融合命令の両方のデータのバッファを行う。
(d) 定常モードではオペランドオーガナイザBは単一の内部データワードの組立とそのワードを内部レジスタによって指定された回数繰返すことを行う。
(e) タイルモードではオペランドオーガナイザBはピクセルタイルを構成するデータのバッファを行う。
(f) ランダムモードでは、オペランドオーガナイザはデータキャッシュコントローラにMDP242あるいはJPEGコーダ241のアドレスをダイレクトに転送する。
【0445】
内部長さレジスタは、シーケンシャル、タイル、定常の各モードの処理の時に、オペランドオーガナイザ247、248の個々で生成される項目の数を決定する。オペランドオーガナイザ247、248それぞれは、はそれまでに処理されたデータ項目の数を保持し、内部レジスタによって決定される値に達したら停止する。オペランドオーガナイザそれぞれは、バイトレーンスワッピングを用いた入力データのフォーマット、コンポーネントの代入、圧縮・非圧縮・正規化機能、にたいしてより信頼がある。要求された処理は内部レジスタを用いてコンフィギュレーションされる。更に、オペランドオーガナイザ247と248それぞれはデータ項目を制限するためにコンフィギュレーションされる。
【0446】
図128では、オペランドオーガナイザ(247、248)のより詳細な構成が示されている。オペランドオーガナイザ247、248は通常の標準CBusインターフェースとオペランドオーガナイザ全体の制御を司るレジスタ850を含む。更に、OBus制御ユニット851はデータキャッシュコントローラに接続され、シーケンシャル、タイル、定常の各モードのアドレス生成、オペランドオーガナイザ247,248のOBusインターフェースの通信を可能にする制御信号の生成、入力ストリームの過去のクロックサイクルから保存される状態を必要とする、正規化、繰り返し等を行うデータ操作ユニットの制御を行う。オペランドオーガナイザ247、248がシーケンシャル、あるいはタイルモードであるときには、OBusコントローラユニット851はデータの要求をデータキャッシュコントローラに送る。このときアドレスは内部レジスタによって決定されている。
【0447】
それぞれのオペランドオーガナイザは更に、様々なモードの処理において、データキャッシュコントローラ240からのデータをバッファするために用いられる36ビット幅のFIFOバッファ852を含んでいる。
【0448】
データ操作ユニット853は、ピクセルオーガナイザ246のデータ操作ユニット804に対応する機能と同じ機能を行う。
【0449】
メインデータパス/JPEGコーダインターフェース854は通常処理モードにおいてメインデータパスやJPEGコーダモジュール242、241でやりとりされるデータ及びアドレスを分配する。MDP/JCインターフェース854はデータ操作ユニット853からのデータをメインデータパス及びそのデータを繰り返すように構成されたプロセスに送る。色変換モードの場合には、ユニット851、854はデータキャッシュコントローラ240と色変換テーブルの高速アクセスを確立するためにバイパスされる。
【0450】
3.18.5 主データパス部
以下の実施例の特徴は、複数の画像処理動作を高速で行うことのできる低価格のコンピュータアーキテクチャを提供する画像プロセッサに関するものである。更に、画像プロセッサは、元々は規定されなかった画像処理動作を行うように構成されることのできる、柔軟性のあるコンピュータアーキテクチャを提供することを目的とする。また、画像プロセッサは、同じロジックをたくさん持っていて、設計プロセスが簡単で安くなるような、コンピュータアーキテクチャを提供することをも目的とする。
【0451】
コンピュータアーキテクチャは制御レジスタブロック、復号ブロック、データオブジェクトプロセッサ、および、フロー制御ロジックを具備する。制御レジスタブロックは画像処理動作に関する全ての情報を格納する。復号ブロックは情報を構成信号に復号し、入力データオブジェクトインターフェースを構成する。入力データオブジェクトインターフェースはデータオブジェクトを外部から受け取り格納する。そして、これらのデータオブジェクトをデータオブジェクトプロセッサに配分する。ある画像処理動作においては、入力データオブジェクトインターフェースがデータオブジェクトのアドレスを生成することもあり、これらのデータオブジェクトのソースが正しいデータオブジェクトを提供できるようになる。データオブジェクトプロセッサは、受け取ったデータオブジェクトに対して算術演算を行う。フロー制御ロジックは、データオブジェクト処理ロジックの中のデータオブジェクトフローを制御する。
【0452】
特に、データオブジェクトプロセッサは、いくつかの同一なデータオブジェクトサブプロセッサを備えることができ、各サブプロセッサは、入力データオブジェクトの一部を処理する。データオブジェクトサブプロセッサは、データオブジェクトの当該部分に対し算術演算を行ういくつかの同一な多機能算術部、出力データオブジェクトを処理する後処理ロジック、および、多機能算術部と後処理部とを接続する多重化ロジックを有する。多機能算術部は計算されたデータオブジェクトのための記憶装置を具備する。この記憶装置は、フロー制御ロジックによってイネーブルされるか又はデスエーブルされる。多機能算術部および多重化ロジックは、復号ロジックによって生成された構成信号によって構成される。
【0453】
なお、復号ロジックからの構成信号は外部プログラミングエージェントによって変化されることができる。このメカニズムを通じて、どのような多機能ブロックおよび多重化ロジックであっても、外部プログラミングエージェントによって個々に構成することができ、前もって規定されなかった画像処理動作を行うように画像プロセッサを構成することを可能にする。本発明の実施例が持つこれらの特徴およびその他の特徴を以下で詳述する。
【0454】
図2において、前述したように、主データパス部242はJPEGデータ符号化以外の全てのデータ操作動作および命令を行う。これらの命令には、合成、色空間変換、画像変換、畳込み演算、行列の乗算、ハーフトーン処理、メモリ複写、および階層画像フォーマットの解凍が含まれる。主データパス242はピクセルオーガナイザ246およびオペランドオーガナイザ247、248から、ピクセルとオペランドデータとを受け取り、結果出力を結果オーガナイザ249に送る。
【0455】
図129は、主データパス部242のブロック図である。主データパス部242は汎用の画像プロセッサであって、入力インターフェース1460、画像データプロセッサ1462、命令ワードレジスタ1464、命令ワード復号器1468、制御信号レジスタ1470、レジスタファイル1472、および、ROM1475を備える。
【0456】
命令制御部235は、バス1454を通じて、命令ワードを命令ワードレジスタ1464へ移す。それぞれの命令ワードは、実行すべき画像処理動作の種類や画像処理動作の様々なオプションを選択するプラグなどの情報を含んでいる。命令ワードは、バス1465を経由して命令ワード復号器1468に運ばれる。それで、命令制御部235は、命令ワードを復号するように命令ワード復号器1468に指示することができる。その指示を受けると、命令復号器1468は命令ワードを制御信号に復号する。それから、これらの制御信号はバス1469を経由して制御信号レジスタ1470に運ばれる。それから、制御信号レジスタの出力は、バス1471を経由して入力インターフェース1460および画像データプロセッサ1462に接続される。
【0457】
主データパス部242をより柔軟性のあるものにするために、命令制御部235が制御信号レジスタ1470に直接書き込むこともできる。これによって、主データパス部242の構造を熟知している誰でも、主データパス部242の細かい構成を行えるようになり、主データパス部242は命令ワードで記述されていない画像処理動作をも実行できるようになる。
【0458】
所望の画像処理動作を実行するために必要な全ての情報を命令ワードに収容できない場合、命令制御部235は、その収容できない必要な全ての情報をレジスタファイル1472のいくつかの選ばれたレジスタに書き込むことができる。この情報は、バス1473を経由して、入力インターフェース1460および画像データプロセッサ1462に伝えられる。ある画像処理動作において、入力インターフェース1460は主データパス部242の現在状態を反映するために、レジスタファイル1472の選ばれたレジスタの内容を更新することもあり得る。画像処理動作を実行するときに問題が生じたとき、命令制御部235は前述の特徴を用いて、問題を容易に発見できるようになる。
【0459】
命令ワードの復号が終了し、制御信号レジスタに所望する制御信号がロードされたとき、命令制御部235は主データパス部242に所望画像処理動作の実行を始めるように指示することができる。この指示を受けると、入力インターフェース1460はバス1451からのデータオブジェクトを受け取り始める。入力インターフェース1460は、実行される画像処理動作の種類に応じて、オペランドバス1452又はオペランドバス1453からのオペランドデータを受け取り始めるか、或は、オペランドデータのアドレスを生成してオペランドバス1452又はオペランドバス1453からのオペランドデータを受け取り始める。入力インターフェース1460は、制御信号レジスタ1470の出力に応じて、入力データを格納して配列し直す。アフィン画像変換動作および畳込み演算のような計算を行うとき、入力インターフェース1460はバス1452および1453を経由してフェッチされるべき座標をも生成する。
【0460】
画像データプロセッサ1462は、入力インターフェース1460に配列し直してもらったデータオブジェクトに対して主算術演算を行う。画像プロセッサ1462は、所定の補間ファクタで行われる2つのデータオブジェクトの間の補間、2つのデータオブジェクトの乗算、及びその結果を255で割る割算、2つのデータオブジェクトに対する通常の乗算及び足し算、データオブジェクトの分数部に対する様々な精度での切り捨て、データオブジェクトのオーバフローをある最大値に、そしてデータオブジェクトのアンダフローをある最低値にそれぞれ抑えるクランプ、データオブジェクトのスケーリング及びクランピングというような処理を行うことができる。バス1471の制御信号は、前記の算術演算中のどれがデータオブジェクトに対して行われるか、及びその動作の順序などを制御する。
【0461】
ROM1475は、8.8フォーマットで切り捨てられた255/xの被除数を有するが、ここで、xは0から255までの数である。ROM1475は、バス1476を経由して、入力インターフェース1460および画像データプロセッサ1462に接続される。ROM1475は短い長さのブレンドを生成し、データオブジェクトに255を掛け、その結果を他のデータオブジェクトで割るというような動作に用いられる。
【0462】
オペランドバス、例えば1452の数は2に制限されるが、大多数の画像処理動作においては十分である。
【0463】
図130は、入力インターフェース1460をより詳細に示す。入力インターフェース1460は、データオブジェクトインターフェース部1480、オペランドインターフェース部1482および1484、アドレス生成状態器1486、ブレンド生成状態器1488、行列乗算状態器1490、補間状態器1494、データ同期部1500、算術部1496、他レジスタ1498、並びに、データ分配ロジック1505を備える。
【0464】
データオブジェクトインターフェース部1480と、オペランドインターフェース部1482及び1484とは、外部からデータオブジェクト及びオペランドを受け取る。インターフェース部1482,1484は、2つとも制御バス1515からの制御信号によって構成される。インターフェース部1482,1484は、受け取ったばかりのデータオブジェクト/オペランドを含むデータレジスタを内部に有しており、2つとも前記データレジスタが有効であるときはVALID信号を出力する。インターフェース部1482,1484のデータレジスタの出力はデータバス1505に接続される。インターフェース部1482、1484のVALID信号はフローバス1510に接続される。オペランドをフェッチするように構成されたとき、オペランドインターフェース部1482および1484は、算術部1496からのアドレスと、行列乗算状態器1490と、データオブジェクトインターフェース部1480のデータレジスタの出力とを受け取り、その中で必要なアドレスを制御バス1515からの制御信号に応じて選択する。いくつかの場合、特に、外部からデータを受けて格納する必要がない場合、オペランドインターフェース部1482および1484のデータレジスタは、データオブジェクトインターフェース部1480または算術部1496のデータレジスタの出力からデータを格納するように構成されることが有り得る。
【0465】
アドレス生成状態器1486は、アフィン画像変換動作および畳込み演算動作において算術部1496を制御し、ソース画像のアクセスされるべき次の座標を計算する。
【0466】
アドレス生成状態器1486は、制御バス1515のSTART信号が設定されることを待つ。制御バス1515のSTART信号が設定されると、アドレス生成状態器1486はデータオブジェクトインターフェース部1480に対してSTALL信号を解除して、データオブジェクトが到着することを待つ。なお、アドレス生成状態器1486は、アドレス生成状態器1486がフェッチすることを必要とするカーネルデスクリプタのデータオブジェクトの数と同じとなるようにカウンタを設定する。カウンタの出力は、復号され、オペランドインターフェース部1482および1484のデータレジスタと他レジスタ1498とのイネーブル信号になる。データオブジェクトインターフェース部1480からVALID信号が起動されると、アドレス生成状態器1486はカウンタを減少させるようになり、データオブジェクトの次の部分が異なるレジスタにラッチされる。
【0467】
カウンタが零に達すると、アドレス生成状態器1486はオペランドインターフェース部1484からインデックステーブル値とピクセルとをフェッチし始めよとオペランドインターフェース部1482に指示する。なお、アドレス生成状態器1486は、行の数と列の数とをそれぞれ持つ2つのカウンタをロードする。全てのクロックエッジにおいて、かつオペランドインターフェース部1482などからのSTALL信号によって停止されないとき、カウンタは減少され残りの行と列を出力する。そして、算術部1496は、フェッチされるべき次の座標を計算する。両方のカウンタが零に達すると、カウンタは行と列の数を再びロードし、算術部1496は次の行列の左上端を探すように構成される。
【0468】
ピクセルの真の値を決定するために補間が使われる場合、アドレス生成状態器1486は2つのクロックサイクルごとに、行および列の数を減少させる。これは1ビットカウンタを使って実行され、その出力は行および列カウンタのイネーブルとして用いられる。行列が一度スキャンされた後、状態器は長さカウンタのカウントを減少させる信号を送る。カウンタが1に達して、かつ最終インデックステーブルアドレスがオペランドインターフェース部1482に送られたとき、状態器は最終信号を出し、開始ビットをリセットする。
【0469】
ブレンド生成状態器1488は、算術部1496を制御して、ブレンド長さのための0から255までの数列を生成する。この数列は、ブレンド開始値とブレンド終了値との間を補間する補間ファクタとして使われる。
【0470】
ブレンド生成状態器1488はどちらかのモード(ジャンプモード又はステップモード)で実行すべきであるかを決める。ブレンド長さが256以下である場合はジャンプモードが使われ、そうでない場合はステップモードが使われる。
【0471】
ブレンド生成状態器1488は、下記の計算を行い、その結果をレジスタ(reg0,reg1,reg2)にセットする。ブランドランプが予め決定された長さでステップモードにある場合、511−長さをreg0(24ビット)に、512−2*長さをreg1(24ビット)に、そして、終了−開始をreg2(4×9ビット)に、それぞれラッチする。ランプがジャンプモードにある場合は、0をreg0(24ビット)に、255/(長さ−1)をreg1(24ビット)に、そして、終了−開始をreg2(4×9ビット)に、それぞれラッチする。
【0472】
ステップモードにおいて、以下の処理が各サイクルにおいて実行される。
【0473】
reg0>0であるとき、reg0にreg1を加え、その結果をreg0に格納する。もう一つのインクリメンタがイネーブルされることもできるが、その場合には出力が1だけ増加される。reg0≦0であるとき、reg0に510を加え、その結果をreg0に格納する。インクリメンタは増加されない。インクリメンタの出力はランプ値である。
【0474】
ジャンプモードにおいて、以下の処理が各サイクルにおいて実行される。
【0475】
reg0にreg1を加える。加算の出力は24ビットであり、16.8の固定少数点フォーマットで出力される。前記加算出力をreg0に格納する。分数結果の第1ビットが1である場合、整数部を増加させる。
【0476】
インクリメンタの整数部の下位8ビットはランプ値である。このランプ値、即ちreg2の出力と、ブレンド開始値とは画像データプロセッサ1462に送られ、ランプを生成する。
【0477】
行列乗算状態器1490は、変換行列を用いて入力データオブジェクトに対する線形色空間変換を行う。変換行列は4×5次元である。第1から第4列にはデータオブジェクトの4チャネルを掛けるようになっており、最後列は積の和に加えられるべき常係数を含んでいる。制御バス1515からのSTART信号が起動されたとき、行列乗算状態器は以下のように動く。
【0478】
1)バス1482及び1484から変換行列の常係数をフェッチすべきライン番号を生成する。なお、他レジスタ1498をイネーブルして常係数が格納できるようにする。
【0479】
2)1ビットフリップフロップを備えていて、ライン番号を生成して、バス1482および1484から行列の半分をフェッチするときにアドレスとして使う。なお、データオブジェクトの半分から、前記行列の半分に掛けられるべきものを選択する“MAT_SEL”信号をも生成する。
【0480】
3)データオブジェクトインターフェース部1480から入力されるデータオブジェクトがないとき終了する。
【0481】
補間状態器1494は、データオブジェクトの水平補間を行う。水平補間において、主データパス部242はバス1451からデータオブジェクトストリームを受け取り、隣のデータオブジェクトの間を補間する。そして、元ストリームの2倍、又は4倍の長さであるデータオブジェクトのストリームを出力する。データオブジェクトはバイト又はピクセルにパックされることがあり得るため、補間状態器1494は、スループットが最大になるようにそれぞれの場合に異なる操作を行う。補間状態器1494は以下のように動作する。
【0482】
1)INT_SEL信号を生成することによって、データ配分ロジック1503が入力データオブジェクトを再配列するようにし、正しいデータオブジェクト対に対して補間を行うようにする。
【0483】
2)隣接するデータオブジェクト対の間を補間するための補間ファクタを生成する。
【0484】
3)データオブジェクトインターフェース部1480がもうデータオブジェクトを受け入れないようにするSTALL信号を生成する。これが必要とされる理由は、出力ストリームが入力ストリームより長いからである。STALL信号はフローバス1510に送られる。
【0485】
算術部1496は、算術計算を行うなめの回路を具備しており、制御バス1515の制御信号によって構成される。これは、アフィン画像変換および畳込み演算と合成においてのブレンド生成という2つの命令のみによって使われる。
【0486】
アフィン画像変換および畳込み演算において、算術部1496は以下のような演算を行う。
【0487】
1)次のxおよびy座標を計算する。x座標を計算するために、算術部1496は加算器を用いて現在のx座標に水平および垂直デルタのx成分を加えるか、減算器を用いて現在のx座標から水平および垂直デルタのx成分を引くようにする。y座標を計算するために、算術部1498は加算器を用いて現在のy座標に水平又は垂直デルタのy成分を加えるか、減算器を用いて現在のy座標から水平又は垂直デルタのy成分を引くようにする。
【0488】
2)y座標をインデックステーブルオフセットに加算しインデックステーブルアドレスを計算する。ピクセルの元の値を求めるために補間を使う場合、前記の和はインデックスエントリを求めるために、更に4だけ増加される。
【0489】
3)x座標をインデックステーブルエントリに加算し、ピクセルのアドレスを求める。
【0490】
4)長さカウントから1を引く。
【0491】
ブレンド生成において、算術部1496は以下のように作動する。
【0492】
1)ステップモードにおいて、ある1つのランプ加算器を用いてランプ生成アルゴリズムの内部変数を計算する。一方、その他の1つの加算器は、インターバル変数が零より大きいときにランプ値を増加させるために用いられる。
【0493】
2)ジャンプモードにおいては、ジャンプ値を現在のランプ値に加えるために1つの加算器のみが必要とされる。
【0494】
3)ジャンプモードでは、分数の切り捨てが行われる。
【0495】
4)ランプ生成の始めにあたって、ブランドの終了からブランドの開始を引く。
【0496】
5)長さカウントから1を引く。
【0497】
他レジスタ1498は、データオブジェクトインターフェース部1480、並びに、オペランドインターフェース部1482及び1484において、データレジスタ以外の余分の格納空間を提供する。他レジスタ1498は、内部変数を格納するか、或はデータオブジェクトインターフェース部1480からの過去のデータオブジェクトをバッファするのにおいて使われるのが普通である。レジスタ1498は、制御バス1515の制御信号によって構成される。
【0498】
データ同期部1500は、制御バス1515の制御信号によって構成される。データ同期部1500は、STALL信号をデータオブジェクトインターフェース部1480、並びに、オペランドインターフェース部1482および1484に提供することによって、あるインターフェース部が、他のインターフェースは持っていない一部データオブジェクトを受け取った場合、他のインターフェースの全てかデータを受け取るまでそのインターフェース部を停止させる。
【0499】
データ配分ロジック1505は、行列乗算状態器1490からのMAT_SEL信号と、補間状態器1494からのINT_SEL信号とを含む制御バス1515の制御信号に応じて、データバス1510およびレジスタファイル1472からのデータオブジェクトをバス1530を経由して再配列する。再配列されたデータはバス1461へ出力される。
【0500】
図131は、図129の画像データプロセッサ1462をより詳細に示す。画像データプロセッサ1462は、パイプライン制御部1540と、多数のカラーチャネルプロセッサ1545,1550,1555、及び1560とを有する。全てのカラーチャネルプロセッサは、入力インターフェース1460(図131)によって駆動されるバス1565から入力を受け取る。全てのチャネルプロセッサとパイプライン制御部1540は、バス1472を経由する、制御信号レジスタ1470からの制御信号によって構成される。全てのカラーチャネルプロセッサは、図129のレジスタファイル1472及びROM1475からの入力をもバス1580を経由して受け取ることがある。全てのカラーチャネルプロセッサとパイプライン制御部との出力はグループされてバス1570となり、画像データプロセッサ1462の出力1455を形成する。
【0501】
パイプライン制御部1540は、全てのカラーチャネルプロセッサのレジスタをイネーブル又はデスエーブルすることによって、全てのカラーチャネルプロセッサのデータオブジェクトのフローを制御する。パイプライン制御部1540の中には、レジスタパイプラインがある。パイプラインの形態及び長さは、バス1471からの制御信号により構成されるようになっており、パイプライン制御部1540のパイプラインとカラーチャネルプロセッサのパイプラインとは、その形態が同じである。パイプライン制御部はバス1565からVALID信号を受け取る。パイプライン制御部1540のパイプラインステージそれぞれにおいて、入力VALID信号が起動され、パイプラインステージが停止されていない場合、パイプラインステージは全てのカラーチャネルプロセッサに対してレジスタイネーブル信号を起動させるとともに入力VALID信号をラッチする。それから、ラッチの出力、即ち、VALID信号は、次のパイプラインステージに移る。このようにして、パイプラインにおけるデータオブジェクトの移動が、データ記憶装置を用いずに、シミュレートかつ制御される。
【0502】
カラーチャネルプロセッサ1545,1550,1555、及び1560は、入力データオブジェクトに対する主な算術動作を行い、各プロセッサは出力データオブジェクトの1つのチャネルを担当している。好適な実施例においては、大多数のピクセルデータオブジェクトが最大4つのチャネルを持っているため、カラーチャネルプロセッサの数は4に制限される。
【0503】
カラーチャネルプロセッサの中には、ピクセルの不透明(opacity)チャネルを処理する部分がある。図131には示されていないが、制御バス1471に接続されている追加の回路があり、カラーチャネルプロセッサは不透明チャネルを正しく処理するように制御バス1471からの制御信号を変換する。これは、ある画像処理動作においては、不透明チャネルに対する動作がカラーチャネルに対する動作と少し異なるからである。
【0504】
図132は、カラーチャネルプロセッサ1545,1550,1555、1560を(図132においては一般的に1600で示した)より詳細に示す。各カラーチャネルプロセッサ1545,1550,1555、1560は、処理ブロックA1610と、処理ブロックB1615と、ビッグ加算器1620と、分数切り捨て部1625と、クランプまたはラッパー1630と、出力多重化部1635とを備えている。カラーチャネルプロセッサ1600は、制御信号レジスタ1470からの制御信号をバス1602を経由して、パイプライン制御部1540からのイネーブル信号をバス1604を経由して、レジスタファイル1472からの情報をバス1605を経由して、その他カラーチャネルプロセッサからのデータオブジェクトをバス1603を経由して、入力インターフェース1460からのデータオブジェクトをバス1601を経由して、それぞれ受け取る。
【0505】
処理ブロックA1610は,バス1601からのデータオブジェクトに対していくつかの算術動作を行い、部分的に計算されたデータオブジェクトをバス1611に出力する。処理ブロックA1610が画像処理動作のために行うべき処理を以下に説明する。
【0506】
合成において、処理ブロックA1610はデータオブジェクトバス1451からのデータオブジェクトに不透明度を掛け、ブレンド開始値とブレンド終了値との間を図129の入力インターフェース1460からの補間ファクタによって補間し、図129のオペランドバス1452からのオペランドをプレ乗算するかまたはブレンドカラーに不透明度を掛けるかする。そして、プレ乗算されたオペランドまたはブレンドカラーデータに対する乗算を減衰させる。
【0507】
一般色空間変換において、処理ブロックA1610は、図129のバス1451からの2つの分数値を用いて4つのカラーテーブル値の間を補間する。
【0508】
アフィン画像変換および畳込み演算において、処理ブロックA1610はソースピクセルの色に不透明度をプレ乗算し、現在x座標の分数部を用いて同じ行のピクセルの間を補間する。
【0509】
線形色空間変換において、処理ブロックA1610はソースピクセルのカラーに不透明度をプレ乗算し、プレ乗算されたカラーデータに変換行列係数を掛ける。
【0510】
水平補間と垂直補間において、処理ブロックA1610は2つのデータオブジェクトの間を補間する。
【0511】
レジデュアルマージンにおいて、処理ブロックA1610は2つのデータオブジェクトを加算する。
【0512】
処理ブロックA1610は多数の多機能ブロック1640と、処理ブロックAグルーロジック1645とを備える。多機能ブロック1640は制御信号によって構成されていて、以下の機能のどちらかの1つを実行することができる。
【0513】
2つのデータオブジェクトに対し加減算を行う。
【0514】
1つのデータオブジェクトを伝える。
【0515】
2つのデータオブジェクトの間をある補間ファクタによって補間する。
【0516】
色に不透明度をプレ乗算する。
【0517】
2つのデータオブジェクトを掛け、その積に第3のデータオブジェクトを掛ける。
【0518】
2つのデータオブジェクトに対し加減算を行い、その結果に不透明度をプレ乗算する。
【0519】
多機能ブロック1640のレジスタは、図131のパイプライン制御部1540によって生成される、バス1604からのイネーブル信号によってイネーブルされるかデスエーブルされる。処理ブロックAグルーロジック1645はバス1601からのデータオブジェクトおよびバス1603からのデータオブジェクトと、いくつかの多機能ブロック1640の出力とを受け取り、これらをその他の選択された多機能ブロック1640の入力に送る。処理ブロックAグルーロジック1645もバス1602からの制御信号によって構成される。
【0520】
処理ブロックB1615は,バス1601からのデータオブジェクトとバス1611からの部分的に計算されたデータオブジェクトとに対して算術動作を行い、部分的に計算されたデータオブジェクトをバス1616に出力する。処理ブロックB1615が画像処理動作のために行う処理を以下に説明する。
【0521】
非正のオペレータをもつ合成において、処理ブロックB1615はデータオブジェクトバス1451からのプレ処理されたデータオブジェクトと、オペランドバス1452からのオペランドに対して、バス1603からの合成被乗数を掛けるとともに、8.8フォーマットの255/不透明度の値であるROMの出力を、クランプ/ラップされたデータオブジェクトに掛ける。
【0522】
正のオペレータをもつ合成において、処理ブロックB1615は、プレ処理された2つのデータオブジェクトを加算する。更に、不透明チャネルにおいては、前記の和から255を引いて、その差をオフセットに掛け、その積を255で割る。
【0523】
一般色空間変換において、処理ブロックB1615は、バス1451からの2つの分数値を用いて4つのカラーテーブル値の間を補間し、残っている分数値を用いて処理ブロックA1610からの部分的に補間されたカラー値と、以前の補間結果との間を補間する。
【0524】
アフィン画像変換および畳込み演算において、処理ブロックB1615は、現在y座標の分数部を用いて、部分的に補間されたピクセルの間を補間し、補間されたピクセルにサブサンプルウェート行列の係数を掛ける。
【0525】
線形色空間変換において、処理ブロックB1615はソースピクセルのカラーに不透明度をプレ乗算し、プレ乗算されたカラーに変換行列係数を掛ける。
【0526】
処理ブロックB1615は、多数の多機能ブロックと、処理ブロックBグルーロジック1650とを備える。多機能ブロックは、処理ブロックA1610のものと同様であるが、処理ブロックBグルーロジック1650においては、バス1601,1603,1611,1631からのデータオブジェクトと、選択された多機能ブロックの出力とを受け入れ、これらを選択された多機能ブロックの入力に送る。処理ブロックBグルーロジック1650もバス1602からの制御信号によって構成される。
【0527】
ビッグ加算器1620は、処理ブロックA1610と処理ブロックB1615からの部分的結果のいくつかを結合する。これは、バス1601を経由して入力インターフェース1640から、バス1611を経由して処理ブロックA1610から、バス1616を経由して処理ブロックB1615から、そして、バス1605を経由してレジスタファイル1472から、それぞれの入力を受け取り、バス1621に結合された結果を出力する。ビッグ加算器1620も、バス1602の制御信号によって構成される。
【0528】
ビッグ加算器1620は、様々な画像処理動作に従って、異なる構成にすることができる。ビッグ加算器1620の所定の画像処理動作における動作を以下に説明する。
【0529】
非正のオペレータを持つ合成において、ビッグ加算器1620は処理ブロックB1615からの2つの部分積を合算する。
【0530】
正のオペレータを持つ合成において、オフセットイネーブルが起動されているときに、ビッグ加算器1620は不透明度チャネルからオフセットのある先処理されたデータオブジェクトの和を引く。
【0531】
アフィン画像変換/畳込み演算において、ビッグ加算器1620は処理ブロックB1615からの積を累算する。
【0532】
線形色空間変換において、第1サイクルでビッグ加算器は2つの行列係数/データオブジェクト積と常係数とを合算する。第2サイクルで、直前サイクルの和に他のもう2つの行列係数/データオブジェクト積を加える。
【0533】
分数切り捨て(丸め)部1625は、バス1621を経由してビッグ加算器1620からの入力を受け取り、出力の分数部を切り捨てる。分数部を表すビットの数は、レジスタファイル1472からバス1605のBP信号によって表示される。BP信号を解釈する仕方を以下の表に表す。切り捨てられた出力はバス1626に提供される。
【0534】
分数テーブル
【0535】
【表27】
Figure 0004227218
【0536】
分数切り捨て部1625は、分数の切り捨ての以外に2つの作業を行う。
【0537】
1)切り捨てられた結果が負であるかどうかを決定する。
【0538】
2)切り捨てられた結果の絶対値が255より大きいかどうかを決定する。
【0539】
クランプ又はラッパー1630はバス1626を経由して分数切り捨て部1625から入力を受け取り、下記の動作をその順序に従い行う。
【0540】
切り捨てられた結果の絶対値を求めるべきというオプションがイネーブルされているとき、その絶対値を求める。
【0541】
データオブジェクトのアンダフローをある最低値に、そして、データオブジェクトのオーバフローをある最大値に、それぞれクランプする。
【0542】
出力多重化部1635は、バス1616の処理ブロックBの出力とバス1631のクランプまたはラッパーの出力とのなかで、最終の出力を選択する。なお、データオブジェクトに対して、いくつかの最終処理をも行うが、以下は所定の画像処理動作のために行われる動作を説明する。
【0543】
非正のオペレータをもつ、プレ乗算なしの合成において、多重化部1635は処理ブロックB1615のいくつかの出力を結合し、プレ乗算なしのデータオブジェクトを形成する。
【0544】
非正のオペレータをもつ、プレ乗算ありの合成において、多重化部1635はクランプまたはラッパー1630の出力を通過させる。
【0545】
正のオペレータをもつ合成において、多重化部1635は処理ブロックB1630のいくつかの出力を結合し、データオブジェクト結果を形成する。
【0546】
一般色空間変換において、多重化部1635は出力データオブジェクトに対して、翻訳・クランプ機能を適用する。
【0547】
他の動作において、多重化部1635は、クランプ又はラッパー1630の出力を通過させる。
【0548】
図133は、例えば1640のような、1つの多機能ブロックをより詳細に示す。多機能ブロック1640は、モード検出部1710と、2つの加算オペランド論理部1660及び1670と、3つの多重化論理部1680,1685,及び1690と、2入力加算部1675と、2つの加数を持つ2入力乗算部1695と、レジスタ1705とを備える。
【0549】
モード検出部1710は、図129の制御信号レジスタ1470からのMODE信号1711と、図129の入力インターフェース1460からの2つのSUB信号1712及びSWAP信号1713とを受け取る。モード検出部1710は、これらの信号を復号して、加算オペランド論理部1660および1670と、多重化論理部1680,1685,および1690に伝えられる制御信号を生成する。そして、この制御信号は、多機能ブロック1640を種々な動作のできるように構成する。多機能ブロック1640は、8つのモードを有する。
【0550】
1)加減算モード:SUB信号1712に従い、入力1655を入力1665に加えるか、または、入力1665から引く。更に、SWAP信号693に従い、入力をスワップすることもできる。
【0551】
2)バイパスモード:入力1655を出力にバイパスする。
【0552】
3)補間モード:入力1675を補間ファクタとして、入力1655と1665の間を補間する。SWAP信号1713に従い、入力1655および1665をスワップすることができる。
【0553】
4)プレ乗算モード:入力1655に入力1675を掛け、その結果を255で割る。INCレジスタ1708の出力は、正しい結果を得るためにバス1707における、このステージの結果を増加すべきかどうかを、次のステージに教える。
【0554】
5)乗算モード:入力1655に入力1675を掛ける。
【0555】
6)加減算およびプレ乗算モード:入力1665を入力1655に加えるか、または、入力1655から引き、その結果に入力1675を掛け、そして、この積を255で割る。INCレジスタ1708の出力は、正しい結果を得るためにバス1707にあるこのステージの結果を増加すべきかどうかを、次のステージに教える。
【0556】
加算オペランド論理部1660及び1670は、加算器によって減算もできるようにするために、必要に応じて入力に対する1の補数を求める。加算器1675は、バス1662と1672の加算オペランドロジック1660及び1670の出力を合算し、その和をバス1677に出力する。
【0557】
多重化ロジック1680,1685、及び1690は、所望の機能を実行するために適する被乗数と加数を選ぶ。これらは全てモード検出部1710からのバス1714の制御信号によって構成される。
【0558】
2つの加数を持つ乗算部1695は、バス1682からの入力をバス1677からの入力に掛ける。そして、前記積にバス1687および1692からの入力の和を加える。
【0559】
加算器1700は、乗算部1695の出力の下位8ビットに乗算部1695の出力の上位8ビットを加える。加算器1700の桁上げはINCレジスタ1701にラッチされる。INCレジスタ1701は、信号1702によってイネーブルされる。レジスタ1705は乗算部1695からの積を記憶する。これも信号1702によってイネーブルされる。
【0560】
図134は、合成動作のブロック図を示す。この合成動作は3つの入力データストリームを受け取る。
【0561】
1)累算ピクセルデータ:この累算部モデルにおいて、結果が格納された位置と同一な位置から誘導される。
【0562】
2)合成オペランド:カラーと不透明度からなる。カラーと不透明度の両方はフラット、ブレンド、ピクセル、またはタイルであることができる。
【0563】
3)減衰:オペランドデータを減衰する。減衰はフラットなビットマップまたはバイトマップであることができる。
【0564】
ピクセルデータは典型的に4つのチャネルからなる。その3つのチャネルがピクセルのカラーを形成する。残りのチャネルはピクセルの不透明度である。ピクセルデータはプレ乗算されても、或はされなくてもよい。ピクセルデータがプレ乗算されるとき、各カラーチャネルに不透明度を掛ける。ピクセルがプレ乗算されると合成動作の式が簡単になるため、ピクセルデータがプレ乗算されてから他のピクセルと合成されるのが普通である。
【0565】
好適な実施例で実行される合成命令を表1に示す。各命令はプレ乗算されたデータに働きかける。(ac0,a0)はプレ乗算されたピクセルカラーacと不透明度a0を、rは“オフセッド”値、wc()はラップ/クランプ・オペレータを意味し、表1におけるover、in、out.atopの各オペレータの逆オペレータも実装されている。また、合成モデルは左側に累算器を備える。
【0566】
図134における合成ブロック1760は、3つのカラーサブブロックと不透明サブブロックを具備する。各々のカラーサブブロックは、入力ピクセルの1つのカラーチャンネルと不透明チャンネルに対して動作して、出力ピクセルのカラーを得る。以上の動作を擬似コードの形で以下に示す。
【0567】
PIXEL Composite(
IN colorA,colorB: PIXEL;
IN opacityA,opacityB: PIXEL;
IN comp_op:COMPOSITE_OPERATOR)

PIXEL result;
IF comp_opがrover,rin,rout,ratopであるとTHEN
colorAとcolorBをスワップする;
opacityA, opacityBをスワップする;
END IF;
IF comp_opがover,rover,loado,又は、plusであるとTHEN
X=1;
ELSE IF comp_opがin,rin,atop,又は、ratopであるとTHEN
X=opacityB;
ELSE IF comp_opがout,rout,又は、xorであるとTHEN
X=not(opacityB);
ELSE IF comp_opがloadzero,loadc,又は、loadcoであるとTHEN
X=0;
END IF;
IF comp_opがover,rover,atop,ratop,又は、xorであるとTHEN
Y=not(opacitya);
ELSE IF comp_opがplus,loadc,又は、loadcoであるとTHEN
Y=not(opacitya);
ELSE IF comp_opがplus,loadc,又は、loadcoであるとTHEN
Y=1
ELSE IF comp_opがin,rin,out,rout,loadzero,又は、loado THEN
Y=0;
END IF;
result=coloA*X+colorB*Y;
RETURN result;
命令’load’と’loado’が不透明チャンネルに対して異なる意味を持っているため、以上のコードは不透明サブブロックにおいて異なる。
【0568】
図134におけるブロック1765は、ブロック1760の出力をクランプまたはラップする。ブロック1765がクランプするように構成されると、許容される最小値より小さい全ての値を最小値に、許容される最大値より大きい全ての値を最大許容値に抑える。ブロック1765がスワップするように構成されると、以下の式を計算する。
((x−min)mod(max−min))+min,
ここで、minとmaxはカラーにおいて許容される最小値と最大値を意味する。最小値と最大値としては、0と255が望ましい。
【0569】
図134におけるブロック1770は、ブロック1765からの結果をプレ乗算する。これはプレ乗算されたカラー値に255/oを掛けることによりピクセルをプレ乗算する。ここで、oは合成後の不透明度を意味する。255/oの値は合成エンジン内のROMから得られる。ROM内の値は8.8フォーマットで記憶されており、分数以下の部分は丸められる。乗算の結果は16.8フォーマットで格納される。逆プレ乗算されたピクセルを生成するために、この結果は8ビットで丸められる。
【0570】
ブランド生成部1721は特定の開始値と終了値を持つ特定長さのブランドを生成する。これは以下の2つのステージに渡って行なわれる。
【0571】
1)ランプ生成
2)補間
ランプ生成において、合成エンジンは命令の長さに対して、0から255まで線形増加する数列を生成する。ランプ生成には、長さが255以下の“ジャンプ”モードと長さが255より長い“ステップ”モードの2つがある。モードは長さの上位24ビットによって決まる。ジャンプモードにおいて、ランプ値の増加分はクロック周期ごとに少なくとも1である。ステップモードおいて、ランプ値の増加分はクロック周期ごとに最大1である。
【0572】
ジャンプモードにおいて、合成エンジンはステップ値255/(長さ−1)を求めるために8.8フォーマットのROMを用いる。この値は16ビット累算器に加えられる。累算器の出力は8ビットで切り捨てられて数列を形成する。ステップモードおいて、合成エンジンはBresenhamの線描アルゴリズムに似たアルゴリズムを用いる。そのアルゴリズムを以下に示す。
【0573】
Void line draw(length: INTERGER)

d=511− length;
incrE=510;
incrNE=512−2*length;
ramp−0;
for(i=0;i(length;i++)

if d(=0 then
d+= incrE;
else{
d+= incrNE;
ramp++;



その後、ランプからブランドを生成するために次の式が使われる。
【0574】
Blend=((end−start)x ramp/255)+start255による割算に対して切り捨てが行われる。上記式は、2つの加算器と、各チャンネルのランプによって(end−startに対し)“プレ乗算”を行なうブロックとを必要とする。
【0575】
主データパス部242が行なうことのできる他の画像処理は、一般色空間変換である。一般化色空間変換(GCSC)は出力カラー値を求めるためにピースワイズトライーリニア(3次線形)補間を用いる。3次元の入力空間から1次元もしくは4次元出力空間入力変換が行なわれるのが望ましい。
【0576】
いくつかの場合においては、色域のエッジにおけるトライーリニア補間の正確さが問題になる。この問題はエッジ付近に対して敏感なプリントデバイスにおいて著しくなる。この問題を避けるためにGCSCは、選択的に拡張出力色空間において計算されることができ、次の式を用いて適当な範囲内にスケール及びクランプされる。
【0577】
0 if x≦63
out=2(x−64)if(64≦x≦191)
255 if(192≦x)
好適な実施例が実行できるその他の画像処理には、画像変換および畳込み演算である。画像変換においてソース画像はスケール、回転、スキューされる。畳込み演算において、ソース画像のピクセルは畳込み行列をもってサンプリングされ、目的画像を生成する。目的画像におけるスキャンラインを生成するためには次の段階が必要である。
【0578】
1)図135に示すような目的画像のスキャンラインを逆変換する。これによって目的画像のスキャンラインを生成するに必要なソース画像のピクセルを識別することができる。
【0579】
2)ソース画像の必要部分を解凍する。
【0580】
3)目的画像の水平、垂直サブサンプリング距離、開始x,y座標をソース画像に逆変換する。
【0581】
4)上記情報を処理部に伝送し、必要なサブサンプリングと補間を行ない、出力画像のピクセルを求める。
【0582】
サブサンプリング、補間、目的ピクセルの書き込みなどは好適な実施例によって行なわれ、ソース画像における関連する部分、使うべきサブサンプリング周波数などの計算はホストアプリケーションによって行なわれる。
【0583】
図136は目的ピクセル値の計算において必要な段階のブロック図である。図136は必要なソース画像のピクセルが利用可能であるものと想定している。
【0584】
目的ピクセルを計算する最後の段階は、ソース画像から2次線形補間された全てのサブサンプルを合算することである。
【0585】
主データパス部242における適当な設定によって引き出される画像変換エンジンのブロック図を図137に示す。画像変換エンジン1830はアドレス生成部1831、プレ乗算部1832、補間部1833、累算部1834、切捨て、クランプ、絶対値を求める論理部1835からなる。
【0586】
アドレス生成部1831は、結果ピクセルを構成するのに必要なソース画像のx,y軸を生成する。また、これは入力インデックステーブル1815と画像1810のピクセルからインデックスオフセットを求めるためのアドレスを生成する。アドレス生成部1831がソース画像のx,y軸を生成する前にカーネルディスクリプタを読む。カーネルディスクリプタのフォーマットには2つの種類があり、それを図138に示す。カーネルディスクリプタは、
1)ソース画像の開始座標(符号なしの固定小数点、24.24精度)。位置(0、0)は画像の左上端である。
【0587】
2)水平、垂直のサブサンプルデルタ(2の補数、24.24精度)
3)固定小数点行列係数における2進小数点の位置を示す3ビットのbpフィールド。図150はbpフィールドの定義とその説明を示す。
【0588】
4)累算行列係数。これは20個の2進位置(2の補数)を持つ”可変”小数点精度のものであり、2進小数点の位置はbpフィールドにより暗黙的に規定される。
【0589】
5)カーネルディスクリプタのワードの残り個数を示すrlフィールド。この値は行の個数と(列の個数−1)とを掛けたものと同じである。
【0590】
短いカーネルディスクリプタにおいて、xの開始座標の定数部を除いた他のパラメータは次のような値を持つ。
【0591】
xの開始座標の分数<−0,
yの開始座標<−0,
水平デルタ<−1.0,
垂直デルタ<−1.0.
アドレス生成部1831が構成された後、現座標を計算する。これにはサブサンプル行列の次元に応じて2つの方法がある。サブサンプル行列の次元が1×1である場合、アドレス生成部1831は十分な座標が得られるまで水平デルタを現座標に加える。
【0592】
サブサンプル行列の次元が1×1でない場合、アドレス生成部1831は行列の1つの行が終るまで水平デルタを現座標に加える。その後、アドレス生成部1831は次の行の座標を求めるために垂直デルタを現座標に加える。アドレス生成部1831は次の座標を求めるため、1つ以上の列が終るまで現座標から水平デルタを引く。その後、アドレス生成部1831は垂直デルタを現座標に加え、そしてこの過程を繰り返す。図150の上端におけるダイアグラムは行列へのアクセス方法を示す。この構造を用いて、行列はジグザグでスキャンされ、この方法によって現在のx,y軸が計算されるので、必要なレジスタ数は少なくてもよい。累算行列係数はカーネルディスクリプタにおいて同様な順序で並べなければならない。
【0593】
現座標を生成した後、アドレス生成部1831はインデックステーブルのアドレスを求めるため、y軸をインデックステーブルベースアドレスに加える(ソースピクセルが補間されている場合、アドレス生成部1831は次のインデックステーブルも求める必要がある)。インデックステーブルベースアドレスは(y+0)におけるインデックステーブルエントリを指す。インデックステーブルからインデックスオフセットを求めた後、アドレス生成部1831はそれをx座標に加える。この和は、ソース画像から1ピクセルを求めるときに用いられる(ソースピクセルが補間されている場合は2ピクセル)。ソースピクセルが補間されている場合、アドレス生成部1831はx座標を次のインデックスオフセットに加え、2以上のピクセルを得る。
【0594】
画像変換の座標を求めるとき、畳込み演算においても類似な手法を使う。畳込み演算との唯一の差異は、畳込み演算は次の出力ピクセルにおける行列の開始座標が前ピクセルにおける行列の開始座標から水平デルタだけ離れていることである。画像変換において、次のピクセルにおける行列の開始座標は、以前の出力ピクセルにおける行列の右上端ピクセルの座標から水平デルタだけ離れている。
【0595】
図139において、中段のダイアグラムは上記の差を示す。
【0596】
プレ乗算部1832は必要であればピクセルのカラーチャネルと不透明チャネルを掛ける。
【0597】
補間部1832は必要なピクセルの真の色を求めるためソースピクセルを補間する。これはソース画像メモリから2ピクセルを取り、現在のx座標の分数部分を用いて補間し、その結果をレジスタに入力する。その後、ソース画像メモリの次の列の2ピクセルを取り、同じくxの分数を用いて補間する。その後、補間部1833は現在のy座標の分数部を用いて、この補間値とその前の補間値を補間する。
【0598】
累算部1834は2つの作業をする。
【0599】
1)行列係数とピクセルを掛ける。
【0600】
2)全ての行列に対する上の結果を累算した値を次のステージに出力する。
【0601】
累算部1834の初期値は、チャネルに応じて、0もしくは特定の値に初期化される。
【0602】
ブロック1835は累算部1834の出力を切り捨て、必要であればアンダーフローやオーバーフローした値を最大値または最小値に制限する。そして、必要であれば出力の絶対値を求めることもある。累算部の出力において2進小数点の位置はカーネルディスクリプタのbpフィールドによって指定される。bpフィールドは、累算結果において捨てるべきビットの数を示す。これは、図139における下端のダイアグラムに示されている。この累算値は符号ありの2の補数として扱われる。
【0603】
主データパス部242が行えるもう1つの画像処理動作は行列乗算である。行列乗算は2つの空間の間でアフィン関係がある場合の色空間変換に使われる。これが、(3次線形補間に基づく)一般色空間変換との差異である。
【0604】
行列乗算の結果は次の式によって定義される。
【0605】
【数7】
Figure 0004227218
【0606】
ここで、riは結果ピクセルであり、aiはAオペランドピクセルである。行列のサイズは5列4行でなければならない。
【0607】
図140は、主データパス部242において行列乗算を行なう乗算−加算器のブロック図である。この中にはピクセルチャンネルに行列係数を掛ける乗算部、その結果を合算する加算器、必要に応じて出力値をクランプしそして絶対値を求める論理部からなる。
【0608】
行列乗算が終了するためには2クロックサイクルが必要である。各サイクルごとに多重化部を設定し、乗算部と加算部のデータが正しく選択されるようにする。
【0609】
第0サイクルにおいて、ピクセルの最下位2バイトが多重化部1851、1852によって選択される。次にその係数を行列の左側における2つの列、即ち、キャッシュにおける第0ラインにある行列係数に掛ける。
【0610】
第1サイクルにおいて、ピクセルのより上位2バイトがトップ多重化部によって選択される。次にその係数を行列の右側における2つの列に掛ける。乗算の結果は最終サイクルの結果に加えられる1854。加算部における和は8ビットに切り捨てられる1855。
【0611】
“オペランド論理部”1856は、加算部1854の入力が4つになるように乗算部出力を再配列する。これは乗算部の結果に対する加算を可能にするための再配列を行い、24ビット係数と8ビットピクセル成分との正しい積を出力するようにする。
【0612】
“AC論理部”1855は加算部の出力の最下位12ビットを切捨て、設定に従い切り捨てられた結果の絶対値を求める。その後、設定に応じて、その結果をクランプまたはラップする。“AC論理部”がクランプするように設定されたとき、0以下の全ての値は0に、255以上の全ての値は255に抑えられる。“AC論理部”がラップするように設定されたとき、定数部分の下位8ビットが出力される。
【0613】
主データパス部242は、上記以外の画像処理を行なうように設定されることもできる。
【0614】
設計再利用によってコストが低減されるとともに、様々な画像処理動作を早く行なうことのできるコンピュータアーキテクチャについて以下述べるようにする。なお、このコンピュータアーキテクチャは柔軟性をもっているため、外部プログラミングエージェントであってもそのアーキテクチャにさえ慣れていれば、元々予測しなかった画像処理動作をも実行できるようにコンピュータを構成することができる。また、設計のコアーは主にいくつかの多機能ブロックからなるため、設計の苦労を著しく減らすことができる。
【0615】
3.18.6 データキャッシュ制御部とキャッシュ
データキャッシュ制御部240は、コプロセッサ224における4キロバイトの読み出しデータキャッシュ230を備えている。データキャッシュ230はダイレクトマップRAMキャッシュとして配列されており、外部メモリにおける同じ長さを持つラインのいずれも、キャッシューメモリ230(図2)における同じ長さの同じラインに直接マッピングされることができる。キャッシュメモリにおけるこのラインを普通キャッシュラインと呼び、上記キャッシュメモリは、多数のこのようなキャッシュラインからなる。
【0616】
データキャッシュ制御部240は2つのオペランドオーガナイザ247、248からのデータ要求をサービスする。まずデータがキャッシュ230に存在するかを確認する。そうでなければデータが外部メモリからフェッチされる。データキャッシュ制御部240にはプログラムのできるアドレス生成部があり、データキャッシュ制御部240がいくつかの異なるアドレッシングモードで動作するのを可能にする。また、要求されたデータのアドレスがデータキャッシュ制御部240によって作られるようになる特殊アドレシングモードもある。このモードでは8ワード(256ビット)までのデータをオペレーションオーガナイザ247、248に同時に送ることができる。
【0617】
キャッシュRAMは8つの独立してアドレス可能なメモリバンクからなる(異なるラインアドレスによってアドレスされた)。各々のバンクからのデータが256ビットに単位付けられる一部の特殊アドレシングモードに必要である。この配置は、お互いに異なるバンクから来たものであれば、8つの32ビット要求までを同時にサービスすることができる。
【0618】
キャッシュは、詳細に後述する以下のモードにおいて動作する。必要であれば、すべてのキャッシュが自動的に入れ込まれるようにすることも可能である。
【0619】
1.ノーマルモード
2.単一出力一般色空間変換モード
3.多出力一般色空間変換モード
4.JPEG符号化モード
5.低速JPEG復号モード
6.行列乗算モード
7.デスエーブルモード
8.無効化モード
図141は、図2におけるデータキャッシュ制御部240のアドレス、データ、制御フローとデータキャッシュ230とを示す。
【0620】
データキャッシュ230は、前述したダイレクトマップキャッシュを具備する。データキャッシュ制御部240は、各キャッシュラインにおけるタグエントリを有するタグメモリ1872を具備しており、タグエントリはキャッシュラインが現在マップされている外部メモリアドレスの最上位部を有する。また、現在のキャッシュラインが有効であるかどうかを示すライン有効状態メモリ1873も備える。全てのキャッシュラインの初期状態は無効である。
【0621】
データキャッシュ制御部240は、オペランドオーガナイザC247(図2)とオペランドオーガナイザC248(図2)からのデータ要求をオペランドバスインターフェースを通じて同時にサービスできる。動作において、オペランドオーガナイザ247、248(図2)のどちらかの一方もしくは両方はインデックス1874を提供し、データ要求信号1876を出す。アドレス生成部1881はインデックス1874に対して1つもしくはそれ以上の完全な外部アドレス1877を生成する。キャッシュ制御部1878は、生成されたアドレス1877のタグアドレスに対するタグメモリ1872を検査するとともに、関連するキャッシュラインが有効であるかどうかを調べるためにライン有効状態メモリ1873を検査することにより、要求されたデータがキャッシュ230に存在するかどうかを判断する。要求されたデータがキャッシュメモリ230に存在するとき、要求データ1880と共に、アクノレッジメント(応答)信号1879が関連するオペレーションオーガナイザ247、248に送られる。要求されたデータがキャッシュメモリ230に存在しないとき、入力バスインターフェース1871と入力インターフェーススイッチ252(図2)を通じて、要求されたデータ1870が外部メモリからフェッチされる。データ1870は要求信号1882を出力し、要求されたデータ1870が生成されたアドレス1877を提供することによってフェッチされる。アクノリッジ信号1883及び要求されたデータ1870はそれぞれキャッシュ制御部1878及びキャッシュメモリ230に送られる。それから、そのキャッシュメモリ230に関連するキャッシュラインが新しいデータ1870によって更新される。新しいキャッシュラインのタグアドレスもタグメモリ1872に書き込まれ、新しいキャッシュラインにおけるライン有効状態1873が起動される。アクノリッジ信号1879はデータ1870とともに関連するオペランドオーガナイザ247又は248(図2)に送られる。
【0622】
図142において、データキャッシュ230のメモリ構成を示す。データキャッシュ230は、キャッシュライン長が32である128個のキャッシュラインC0,...,C127をもつダイレクトマップキャッシュとして整理される。キャッシュRAMは別々のアドレス指定のできるメモリバンクB0,...,B7を具備しており、各メモリバンクは32ビットのバンクライン128個のを持ち、各キャッシュラインCiは8つのメモリバンクB0,...B7において相当する8つのバンクラインB0i,...,B7iを有する。
【0623】
生成された外部メモリアドレスの構成を図143に示す。生成されたアドレスは20ビットタグアドレス、7ビットラインアドレス、3ビットバンクアドレス、2ビットバイトアドレスからなる32ビットのワードである。20ビットタグアドレスはタグアドレスとタグメモリ1872に記憶されているタグと比較するのに使われる。7ビットラインアドレスはキャッシュメモリ1870にある関連するキャッシュラインのアドレスに使われる。3ビットバンクアドレスはキャッシュメモリ1870のメ関連するモリバンクのアドレスに使われる。2ビットバイトアドレスは32ビットバンクラインの関連するバイトのアドレスに使われる。
【0624】
図144は、データキャッシュ制御部240とデータキャッシュ230の構造のブロック図を示す。ここで、128×256ビットRAMはキャッシュメモリ230を構成し、これは8つの128×32ビットの分離住所付けが可能なメモリバンクからなる。このRAMは書き込み可能ポート(write)、書き込みアドレスポート(write_addr)、書き込みデータポート(write_data)を持つ。また、読み可能ポート(read)、8つの読みアドレスポート(read_addr)、8つの読みデータ出力ポート(read_data)を持つ。キャッシュメモリ230の全てのメモリバンクへの同時書き込みを可能にさせるためキャッシュ制御ブロック1878から書き込み可能信号が生成される。必要によって、データキャッシュ230は書き込みデータポート(write_data)を通じて外部メモリからの1もしくはそれ以上のラインのデータに更新される。書き込みアドレスポート(write_addr)にラインアドレスを提供し、8:1多重化器MUXを利用することによって1ラインのデータが書き込まれる。8:1多重化器MUXはデータキャッシュ制御部(addr_select)の制御の下で生成された外部アドレスからラインアドレスを選択する。キャッシュメモリ230の全てのメモリバンクへの同時読み込みを可能にさせるため、キャッシュ制御ブロック1878から読み可能信号が生成される。この方法で、キャッシュメモリ230のメモリバンクの8つの書きアドレスポート(read_ddr)に提供される各々のラインアドレスに応じて、8つの読みデータポート(read_ata)から8つの異なるバンクラインのデータを同時に読み込むことができる。
【0625】
各々のキャッシュメモリ230のバンクはプログラム可能アドレス生成器1881を持っている。これは違う8つの位置への、関連する8つのメモリバンクからの同時アクセスを可能にする。各々のアドレス生成器1881はアドレス生成器1881の作動モード設定のためのdccモード入力、インデックスパケット入力、ベースアドレス入力、アドレス出力を持つ。プログラム可能アドレス生成器1881の作動モードは、
(a)dccモード入力への信号が各々のアドレス生成器1881をランダムアクセスモードにし、外部メモリアドレスがインデックスパケット入力へ提供され、一つもしくはそれ以上のアドレス生成器1881のアドレス出力に出力されるランダムアクセスモード;
(b)dccモード入力への信号が各々のアドレス生成器1881を適切なモードにするJPEGエンコーディングと復号、色空間変換、行列乗算モード。このモードでは、各々のアドレス生成器1881にはインデックスパケット入力へのインデックスが入力され、インデックスアドレスを生成する。作動モードによって、アドレス生成部は最大8つの異なる外部メモリアドレスを生成させることができる。
【0626】
8つのアドレス生成部1881は8つの異なる論理回路からなっており、各々は入力としてベースアドレス、出力として外部メモリアドレスを持つdccモードとインデックスからなる。
【0627】
べースアドレスレジスタ1885はインデックスパケットの組合せである現在のベースアドレスを記憶し、dccモードレジスタ1888はデータキャッシュ制御部240の現在の作動モード(dccモード)を記憶する。
【0628】
タグメモリ1872は1ブロック、128×20ビットのマルチポートRAMで構成される。このRAMは1つの書きポート(update−line−addr)、1つの書き可能ポート(write)、8つの読みポート(tag0_data,...,tag7_data)を持っている。これは、8つのアドレス生成器1881が現在記憶されている、1つもしくはそれ以上に生成されたメモリアドレスの、ラインのタグアドレスを決定することによりポート(read0line−addr,...,read7line−addr)において8つの同時のルックアップを可能にする。これらラインの現在のタグアドレスはポート(tag0−data,...,tag7−data)からタグ比較部1886に出力される。ポート(update−line−addr)のタグメモリ1872への書き込みを可能にするため、必要によって、キャッシュ制御ブロック1872によりタグ書き信号は生成される。
【0629】
128ビットのラインvalidメモリ1873は、キャッシュメモリ230の各キャッシュラインのvalid状態を保っている。これは1つの書きポート(update−line−addr)、1つの書き可能ポート(update)、8つの読み込みポート(read0line−addr,...,read7line−addr)、8つの読み可能ポート(linevalid0,...,linevalid7)からなる128×1ビットのメモリである。タグメモリと同じように、これは8つのアドレス生成部1881に、1つ若しくはそれ以上に生成されたメモリアドレスの個々のラインアドレスに対して、現在のラインにセーブされているラインvalid状態を決定させることにより、ポート(read0line−addr,...,read7line−addr)に対しての8つの同時ルックアップを可能にする。このラインの現ラインvalideビットはポート(linevalid0,...,linevalid7)からタグ比較部1886に出力される。必要によっては、ラインvalid状態メモリ1873の書きポートに、ポート(update−line−addr)からラインvalid状態メモリ1873への書き込みを可能にするための書き信号がキャッシュ制御ブロック1878から生成する。
【0630】
タグ比較部1886は8つのタグ比較器からなっており、現在生成された外部アドレスのラインアドレスによってアクセスされるラインのタグメモリ1872に現在セーブされているタグアドレスを受け取るためのtag_data入力、現在生成された外部メモリアドレスのタグアドレス受け取るためのtag_addr入力、比較されるタグアドレス部を設定するための現動作モード信号(dcc_mode)を受け取るためのdcc_input、現在生成された外部アドレスのラインアドレスによってアクセスされるラインにあるラインvalid状態メモリ1873に現在セーブされているラインvalid状態を受け取るためのline_valid入力を持っている。比較部1886は8つのアドレス生成部1881それぞれに対して8つのhit出力を持つ。生成された外部メモリアドレスのタグアドレスと、生成された外部メモリのラインアドレスによってアクセスされる位置にあるタグメモリ1872の内容とが一致する時、hit信号とそのラインへのラインvalid状態ビット1873が出力される。この実施例では、外部メモリにセーブされているデータ構造は小さくなり、タグアドレスの最上位ビットが全て同じである。従って、タグアドレスの変化する最下位ビットだけを比較すれば良い。これはタグ比較部1866がタグアドレスの変化する最下位ビットを比較するよう現作動モード信号(dcc_mode)を設定することで可能になる。
【0631】
キャッシュ制御部1878はキャッシュメモリ230にあるデータへのアクセスが可能なとき、オペランドB247、オペランドC248からの要求(proc_req)と通知(proc_ack)を受け取る。動作モードによっては、キャッシュメモリ230の8つまでのバンクから異なるアドレスのデータが要求される。要求データがキャッシュメモリ230からアクセスできる時、タグ比較部1886からそのメモリのラインにヒットを出す。出されたヒット信号(hit0,...,hit7)に対して、キャッシュ制御部1878はポート(cache_read)に読み込み可能信号を生成し、ヒット信号が出されたキャッシュラインへの読み込みを可能にする。ヒット信号(hit0,...,hit7)ではなく要求(proc_req)1876が出された時には、生成された要求(ext_req)と供にデータのキャッシュラインの外部メモリアドレスが外部メモリに送られる。このキャッシュラインは入力(ext_data)が可能な時、それを通じてキャッシュメモリ230の8つのバンクに書き込まれる。この場合、タグ情報もラインアドレスのタグメモリ1886に書き込まれ、そのラインのライン状態ビット1873が出力される。
【0632】
キャッシュメモリ230の8つのバンクからのデータは、データオーガナイザ1892にあるいくつかの多重化器を通じて出力され、所定の方法で出力データパケット1894に位置付けられる。ある動作モードでデータオーガナイザ1892は、現動作モード信号(dcc_mode)と生成された外部メモリアドレスのバイトアドレス(byte_addr)を用いる事によって、8つのメモリバンクから出力された8つの32ビットワードから8ビットワードを選択、出力することができる。他のモードでデータオーガナイザ1892は、8つのメモリバンクから出力された8つの32ビットワードを直接出力する。前述した通り、データオーガナイザはこのデータを決められた方式に整列し出力する。
【0633】
要求は次の段階で行われる。
【0634】
1)プロセッシングユニットはキャッシュ制御部1878にあるプロセッシングユニットインターフェースにアドレスを送りパケットデータを要求する。
【0635】
2)8つのアドレス生成ユニット1881は動作モードに従い、キャッシュメモリの各ブロックのアドレスを生成する。
【0636】
3)生成されたアドレスのタグ位置は3ポートのタグメモリ1886の4ブロックにセーブされているタグアドレスと比較され、8つの生成されたアドレスに相当するライン部によって位置づけられる。
【0637】
4)それらが一致し、そのラインのラインvalid状態1873が出されたら、要求されたデータはキャッシュメモリ230に存在するとみなされる。
【0638】
5)存在しないデータは外部バス1890を介してフェッチされ、キャッシュメモリ230の8つのブロックはその外部メモリからのデータラインの内容に更新される。新しいデータのタグアドレスはタグメモリ1886に書き込まれ、そのラインのラインvalid状態1873が出される。
【0639】
6)全ての要求データがキャッシュメモリ230に存在すれば、それは決められたパケット形式でプロセッシングユニットに現れる。
【0640】
前述した通り、コプロセッサ224の全ての部分(図2)は標準CBusインターフェース303(図20)を含めている。データキャッシュ制御部240とキャッシュ230の標準CBusインターフェースレジスタの詳細は、付録BのB42からB46までに記載されている。このレジスタの設定はデータ制御部240の作動を制御する。簡単のため、2つのレジスタ(base_addressとbcc_mode)だけを図153に示す。
【0641】
データキャッシュ制御部240とデータキャッシュ230が有効ならば、データキャッシュ制御部は最初全てのキャッシュラインを無効にして標準モードで動作する。ある命令の終わりには、データキャッシュ制御部240とキャッシュ230はいつも標準動作モードに切り替わる。”Invalidate”モードを除いた全てのモードには”Auto−fill and validate”と言うオプションがある。dcc_cfg2レジスタに1ビットをセットすることにより、全てのキャッシュをbase_addressレジスタにセーブされているアドレスから始めることができる。この動作の間、オペランドオーガナイザB、C247,248からのデータ要求は中止される。キャッシュはこの動作が終わった後に有効になる。
a.標準キャッシュモード
このモードでは、2つのオペランドオーガナイザにより要求データの外部メモリアドレスが提供される。アドレス生成部1881が外部メモリアドレスを出力し、内部タグメモリを用いてそれがメモリキャッシュ230に存在するのかを確かめる。両方の要求データがキャッシュ230に存在しない場合、入力インターフェーススイッチ252からデータが要求される。持続的かつ同時的要求に構えてラウンド・ロビンスケジューリングが採用される。
【0642】
同時的な要求に対し、1つのデータアイテムがキャッシュに存在すれば、それは要求したデータバスの後ろの32ビットに位置するようになる。他のデータは入力インターフェーススイッチを通じて外部に要求される。
b.シングル出力一般色空間変換モード
このモードでは、要求はオペランドオーガナイザ部Bから12ビットバイトのアドレス形式で出される。図60に示されている様に、要求データアイテムは8ビットカラー出力値である。12ビットアドレスはアドレス生成部1881のindex_packet入力に入力され、8つのアドレス生成部1881は図96に示される形式の32ビット外部メモリアドレスを生成する。この生成されたアドレスのバンク、ライン、バイトアドレスは表12と図61によって決められる。外部メモリアドレスは、8つの9ビットラインとバイトアドレスとして解釈され、それはRAMの8つのバンクのバイトを指すために使われる。キャッシュは補間のため主データパス242によりオペランドオーガナイザ部に、図60に示された前述の原理で戻されたバンクの8バイト値を求めるためにアクセスされる。全てのシングル出力一般カラー値テーブルはキャッシュメモリ230に収まるため、シングルカラー変換モードを適用する前にシングル出力カラー値テーブルをキャッシュメモリ230にロードするのが望ましい。
c.マルチ出力一般色空間変換モード
このモードでは、12ビットワードアドレスがオペランドオーガナイザ部B247から受けられる。要求データアイテムは図62を参照して前述した32ビットカラー出力値である。12ビットアドレスはアドレス生成部1881のindex_packet入力に入力され、8つのアドレス生成部1881は、図96に示される形式の8つの異なる32ビット外部メモリアドレスを作る。外部メモリアドレスのラインとタグアドレスは、表12と図63によって決定される。外部メモリアドレスは、図63を参照して前述したように、7ビットラインアドレスと2ビットタグアドレスに分けられる9ビットアドレスを有する8個の9ビットアドレスとして解釈される。タグアドレスが発見されなかった場合、入力インターフェーススイッチ252(図2)から適切なデータがロードされるまでキャッシュは停止する。データが利用可能な場合、出力データはオペランドオーガナイザ部に出力される。
d.JPEG符号化モード
このモードでは、JPEG符号化モードに必要なテーブルなどがキャッシュRAMのバンクにセーブされる。テーブルの記憶についてはJPEG符号化モード(表14、16)のところに述べられている。
e.低速JPEG復号モード
このモードでは、データは表17に従って生成される。
f.行列乗算モード
このモードでは、キャッシュは256バイトラインのデータにアクセスするために使われる。
g.Disabledモード
このモードでは、全ての要求は入力インターフェーススイッチ252にパスされる。
h.Invalidate(無効化)モード
このモードでは、ラインvalid状態ビットをクリアすることにより、全てのキャッシュの内容が無効にされる。
【0643】
3.18.7 入力インターフェーススイッチ
図2で、入力インターフェーススイッチはピクセルオーガナイザ部246、データキャッシュ制御部240、命令制御部235からの要求データを調節する役割を果たす。またこれは外部インターフェース制御部238とローカルメモリ制御部236に必要なアドレスとデータを伝送する。
【0644】
入力インターフェーススイッチ252はベースアドレス若しくはホストメモリマップにあるメモリオブジェクトのいずれかのレジスタにその設定を保存する。20個のアドレスビットが必要なため、これはページ境界に整列されるバーチュアルアドレスである。ピクセルオーガナイザ部、データキャッシュ制御部、命令制御部からの要求に対して、入力インターフェーススイッチ252は、まずデータの開始アドレスの上位6ビットからコプロセッサのベースアドレスビットを減じる。この結果が負であるか、この結果の上位6ビットが0ではない場合はPCIバスが望ましい伝送先であることを意味する。
【0645】
結果の上位6ビットが0である場合は、データマップがコプロセッサのメモリ位置を現すことを意味する。その後、入力インターフェーススイッチはコプロセッサの位置が正しいか否かを判別するため次の3ビットを検査する。
【0646】
コプロセッサの正当な位置は、
1)コプロセッサのベースアドレスからオフセット0x01000000から始まる一般インターフェースが占める16メガバイト。
【0647】
2)コプロセッサのメモリオブジェクトのベースアドレスからオフセット0x02000000から始まるローカルメモリ制御部(LMC)が占める32メガ
バイト。
【0648】
不当なコプロセッサの位置を指す要求は、入力インターフェーススイッチによりエラーと見なされる。
【0649】
PCIバスはコプロセッサのメモリオブジェクトが占める領域以外のアドレスのデータソースとなる。入力インターフェーススイッチは要求データがPCIバスからのものなのか、それとも一般インターフェースからのものかをEICに知らせるためiソース信号を用いる。
【0650】
アドレス復号処理の後、正当な要求は適切なIBusインターフェースに伝送される。EICとLMCはi−ack信号が出された時、入力インターフェーススイッチにデータを伝送する。しかし入力インターフェーススイッチは入力されるワード数をカウントしないので、現在のデータ伝送がいつ終わるのかを、ピクセルオーガナイザ部により制御されるi−oe信号、命令制御部、データキャッシュ制御部が監視すなければならない。
【0651】
入力インターフェーススイッチ252はピクセルオーガナイザ部、データキャッシュ制御部、命令制御部の3つのモジュールを調節する。これらはデータを同時に要求することができるが、物理的な資源は2つしかないため、その要求は直に処理されない。入力インターフェーススイッチに使われる調節技術は優先権をベースにし、またプログラムも可能である。入力インターフェーススイッチの設定レジスタにある制御ビットは、命令制御部、データキャッシュ制御部、ピクセルオーガナイザ部の相対的優先権を指定する。優先権が低いモジュールからの要求は、その他の2つのモジュールからの同じ資源へのアクセス要求がない場合に受け入れられる。少なくとも2つの要求発行元に同じ優先順位が与えられると、要求が受付けられる発行元を決定するためにラウンドロビン技術を用いる必要が生じる。
【0652】
1つのソースに直ちにアクセスするのが不可能であるため、入力インターフェーススイッチは要求されたデータのアドレスとバースト長を記憶し、要求元から提供されたデータをプリフェッチするかどうかをみる必要がある。あるソースに対する処理の中で、IBus処理がない場合には優先権を決める調整処理が必要になる。
【0653】
図145に命令インターフェーススイッチ252の詳細を示す。スイッチ252は標準CBusインターフェースとレジスタファイル860以外にアドレス復号器863と調節部864の間に2つのIBusトランシーバ661を持つ。
【0654】
アドレス復号器863はピクセルオーガナイザ部、データキャッシュ制御部、命令制御部から受けた要求に対するアドレス復号をする。アドレス復号器863は、アドレスが正当なのかを検査する他、必要によってアドレスを再マッピングする。調節部864はどの要求をIBusトランシーバ661からIBusトランシーバ662に伝送するのかを決める。優先権はプログラム可能である。
【0655】
IBusトランシーバ861、862は、マルチプレクシングとデマルチプレクシング機能と、他のインターフェースから入力インターフェーススイッチへの通信を可能にするためのトライステートのバッファーリング機能を有している。
【0656】
3.18.8 ローカルメモリ制御部
図2において、ローカルメモリ制御部236は、ローカルメモリの制御及びローカルメモリとコプロセッサ内のモジュールとの間におけるアクセス要求の処理の全てを担当する。ローカルメモリ制御部236は、結果オーガナイザ249からの書き込み要求と入力インターフェーススイッチ252からの読み出し要求に応答する。更に、周辺インターフェース制御部237と通常の一般CBus入力からの読み出しと書き込み要求に対しても応答する。ローカルメモリ制御部はプログラム可能なプライオリティシステムを用いており、更にスループットを最大化するためにFIFOバッファを採用している。
【0657】
本発明においては、ファーストイン・ファーストアウト(FIFO)バッファの他に、メモリアレイからポートをデカップルするためにマルチポートバーストダイナミックメモリ制御部が用いられている。
【0658】
図146は、本発明の第1の実施例に従い、4ポートバーストダイナミックメモリ制御部のブロック図を示している。この回路には、メモリアレイ1910へのアクセスを必要とする2つの書き込みポート(A1944とB1946)と2つの読み出しポート(C1948とD1950)が含まれている。読み出しポート1948、1950のデータパスは別個のFIFO1936、1938経由でメモリアレイ1910から出てくるのに対し、2つの書き込みポートからのデータパスは別個のFIFO1920、1922を通り、多重化部1912経由でメモリアレイ1910に向かう。中央制御部1932は、ダイナミックメモリ1910へのインターフェースに必要な全てのコントロール信号を駆動すると共に全体のポートアクセスを調整する。リフレッシュカウンタ1934は、メモリアレイ1910のためにダイナミックメモリのリフレッシュサイクルの必要時期を決め、制御部1932と共にこれらを調整する。
【0659】
好ましくは、メモリアレイ1910に対するデータの読み出しと書き込みは、書き込みポート1944、1946からFIFO1920、1922へ、或はFIFO1936、1938から読み出しポート1948、1950への転送の2倍のレートで行われる。この結果、書き込みと読み出しポート1944、1946、1948、1950を通してデータを転送するのに要する時間に対し、メモリアレイ1910からの転送、又はメモリアレイ1910への転送に要する時間(いかなるメモリシステムのボトルネックである)を可能な限り短くするのである。
【0660】
データは、書き込みポート1944、1946のいずれかを経由してメモリアレイ1910に書き込まれる。書き込みポート1944、1946に接続された回路は、初期値ゼロのFIFO1920、1922のみを認知する事になる。書き込みポート1944、1946を通してのデータ転送は、FIFO1920、1922が一杯になるか、又はバーストが終了するまでスムーズに進んでいく。データが最初にFIFO1920、1922に書き込まれると、制御部1932はDRAMへのアクセスのための他のポートとの仲裁を行う。アクセスが得られると、データは最高レートでFIFO1920、1922から読み出され、メモリアレイ1910に書き込まれる。DRAM1910へのバースト書き込みサイクルは、FIFO1920、1922にプリセットされた数のデータワードが貯えられた場合、又は書き込みポートからのバーストが終了した場合のみに開始される。いずれの場合においても、DRAM1910へのバーストは許可された時点から進み、FIFO1920、1922が空になるか、又はより高いプライオリティポートからのサイクル要求があるまで続く。いずれのイベントにおいてもデータは、FIFOが充満するか、又は現在のバーストが終了し、新たなバーストが開始するまで、書き込みポートからFIFO1920、1922へ邪魔されなく続けて書き込まれる。後者の場合、新しいバーストは、以前のバーストがFIFO1920、1922を空にしてDRAM1910に書き込まれるまでは進行されない。前者の場合には、最初のワードがFIFO1920、1922から読み出されてDRAM1910に書き込まれるや否やデータ転送が再開される。FIFO1920、1922からのデータ転送が最高レートであるため、書き込みポート1944、1946がストールするのは、制御部1832が他のポートからのサイクル要求で割り込みされた時のみ可能である。書き込みポート1944、1946からFIFO1920、1922へのデータ転送に対するいかなる割り込みも、できるだけ最小に維持するのが望ましい。
【0661】
読み出しポート1948、1950は逆の順で動作する。読み出しポート1948、1950が読み出し要求を出すと、即刻、DRAMサイクルが要求される。この要求に対する許可が得られるとメモリアレイ1910が読まれ、対応するFIFO1936、1938にデータが書き込まれる。最初のデータワードがFIFO1936、1938に書き込まれるやいなや、読み出しポート1948、1950による読み出しが可能になる。このように最初のデータワードを得るには初期遅延が存在するが、その後の連続するデータワードの獲得にはおそらくそれ以上の遅延は出て来ないのである。DRAMの読み出しは、より高いプライオリティのDRAM要求があるか、読み出しFIFO1936、1938が一杯になった場合、或は読み出しポート1948、1950がそれ以上データを要求しなくなったら終了する。一旦このようにして読み出しが終了すると、FIFO1936、1938へプリセットされているデータワードの数に余裕ができるまで再開されない。一旦読み出しポートがサイクルを終了すると、FIFO1936、1938に残っているいかなるデータも廃棄される。
【0662】
常にDRAMコントロールが最小値を上回るようにするため、プリセットされている数のデータワードが全て転送されるまで(或は、対応するFIFO1920、1922が空になるか、読み出しFIFO1936、1938が一杯になるまで)バーストが割り込みされないようにDRAMアクセスへの再仲裁は制限される。
【0663】
全てのアクセスポート1944、1946、1948、1950はそれぞれに対応するバースト開始アドレスを持っており、これらはバーストの開始時にカウンタ1942にラッチされている。このカウンタはポートに対する取り引きのためのカレントアドレスを保持しており、例え転送が割り込みされても、いつでも正しいメモリアドレスで再開する事が可能である。現在アクティヴなDRAMサイクルのアドレスのみが多重化部1940により選択され、行アドレスカウンタ1916と列アドレスカウンタ1918に送られる。アドレスの低次Nビットは列カウンタ1918に入力され、一方の上位アドレスビットは行カウンタ1916へ入力される。多重化部1914は、DRAMの行アドレスタイムの間には行カウンタ1916からメモリアレイ1910へ行アドレスを出力し、DRAMの列アドレスタイムの間には列カウンタ1918から列アドレスを送る。行アドレスカウンタ1916と列アドレスカウンタ1918は、いかなるバーストの開始時においてもメモリアレイDRAM1910へロードされる。これは、ポートサイクルの開始時と、割り込みされたバーストの継続時の両方に当てはまる事実である。列アドレスカウンタ1918は、それぞれのメモリへの転送が起きた後にインクリメントされ、行アドレスカウンタ1916は列アドレスカウンタ1918がゼロに変わるとインクリメントされる。後者の場合にはバーストが終了され、新たな行アドレスで再開されなければならない。
【0664】
本実施例では、メモリアレイ1910は4×8ビットバイトラインを含んでおり、ワード当たり32ビットを構成すると仮定している。更に、それぞれの書き込みポート1944、1946に対応する4バイトの書き込みイネーブル信号のセット1950、1952があり、個別的にデータがメモリアレイ1910内のそれぞれの32ビットデータワードのそれぞれの8ビット部分に書き込まれるようにする。メモリアレイ1910に書き込まれるそれぞれのワード内のいかなるバイトにデータの書き込みに対するマスクを任意にかける事が可能であるため、対応するFIFO1926、1928にそれぞれのデータワードと共に書き込みイネーブル情報を貯えておく必要がある。これらのFIFO1926、1928は書き込みFIFO1920、1922のコントロールに用いられるのと同じ信号でコントロールされるが、FIFO1920、1922へのデータの書き込みに必要とされる32ビットの代わりに4ビットのみが用いられる。同様に、多重化部1930は多重化部1912と同じようにコントロールされる。選択された書き込みイネーブルは、制御部1932へ入力され、制御部はこれらの情報を用い、多重化部1912によりメモリアレイ1910へ入力される書き込みデータと同期してメモリアレイ1910内のアドレスされたワードへの書き込みを選択的に可能又は不可能にする。
【0665】
図146の構成は制御部1932の制御下で動作する。図147は、図146において制御部1932の動作の詳細を示す状態図である。パワーアップの後とリセットの完了時に、状態器は強制的にIDLE100状態になり、この状態ですべてのDRAMコントロール信号がインアクティブ(high)になり、多重化部1914は行アドレスをDRAMアレイ1910へ送る。リフレッシュまたはサイクル要求が検出されると、RASDEL11962状態へ遷移される。次のクロックエッジでサイクル要求とリフレッシュがなくなったら、状態器はIDLE1900状態に戻る。そうでないと、DRAM tRP(RASプリチャージタイミング制限)周期が満たされた時にRAS0N1966状態へ遷移され、この時、行アドレスストローブ信号RASはローレベルになる。tRCD(RASからCASへの遅延タイミング制限)が満たされた後、COL1968状態へ遷移され、DRAMアレイ1910へ入力するための列アドレスを選択するように多重化部1914がスイッチされる。次のクロックエッジでCAS0N1970状態に遷移され、DRAM列アドレスストローブ(CAS)信号がアクティブローになる。一旦、tCAS(CASアクティヴタイミング制限)が満たされたら、CASOFF1972状態へ遷移され、この状態でDRAM列アドレスストローブ(CAS)は再びインアクティヴハイになる。ここで、更なるデータワードが転送されることになっていると共に、より高いプライオリティのサイクル要求や、リフレッシュが差し迫ってないか、或は再仲裁するには速すぎる場合、それから一旦tCP(CASプリチャージタイミング制限)周期が満たされたらCASON1970状態へ復帰し、DRAM列アドレスストローブ(CAS)は再びアクティヴローになる。もし更なるデータワードの転送がない、或は再仲裁が発生し、より高いプライオリティのサイクル要求や、リフレッシュが差し迫っている場合、tRAS(RASアクティヴタイミング制限)とtCP(CASプリチャージタイミング制限)が両方満たされたら、その代わりにRAS0FF1974状態へ遷移される。この状態で、DRAM行アドレスストローブ(RAS)信号はインアクティヴハイになる。次のクロックエッジで状態器はIDLE1860状態に復帰し、次のサイクル開始を準備する。
【0666】
RASDEL2 1964状態でリフレッシュ要求が検出されると、一旦tRP(RASプリチャージタイミング制限)が満たされたら、RCASON 1980状態に遷移される。この状態でDRAM列アドレスストローブがアクティヴローになり、RASリフレッシュサイクルの前にDRAM CASを開始する。次のクロックエッジで遷移はRRASON 1978へ行われ、DRAM行アドレスストローブ(RAS)はアクティヴローになる。tCAS(CASアクティヴタイミング制限)が満たされると遷移はRCASOFF 1976へ行われ、DRAM列アドレスストローブ(CAS)はインアクティヴハイになる。一旦tRAS(RASアクティヴタイミング制限)が満たされると遷移はRASOFF1974へ行われ、DRAM行アドレスストローブ(RAS)はインアクティヴハイになり、有効的にリフレッシュサイクルを終了させる。状態器は通常のDRAMサイクルのために上記のような振る舞いを継続し、IDLE 1960状態へ遷移する。
【0667】
図146のリフレッシュカウンタ1934は単純にカウンタであり、15マイクロ秒当たりに一回の固定レート、或は特殊DRAM業者の要求により定まったレートでリフレッシュ要求信号を発生させる。リフレッシュ要求が発行されると、この要求は図147の状態器により認知されるまで発行状態を続ける。このアクノレッジメントは、状態器がRCASON1980状態に入った時に行われ、状態器がリフレッシュ要求の撤去を検出するまでその状態を続ける。
【0668】
図148には、疑似コードフォームで図146の仲裁器1924の動作が示されている。ここでは、4つのサイクル要求発行者の中でどれにメモリアレイ1910へのアクセスを許可するかを決める方法と、アクセスへの公平さを保つためにサイクル要求者のプライオリティを修正するメカニズムを記述している。これらのコードに用いられたシンボルは図149に説明されている。
【0669】
それぞれの要求発行者は、その要求のプライオリティを表す4ビットを持っている。上位の2ビットは一般の構成レジスタに設定されている構成値により全般的なプライオリティにプリセットされている。プライオリティの下位2ビットは仲裁者24により更新される2ビットカウンタに収められている。仲裁の勝者を決める際に、仲裁者1924は単にそれぞれの要求者の4ビットの値を比較し、最高値の要求者にアクセスを許可する。要求者にサイクルが許可されると、下位2ビットのプライオリティカウンタの値はゼロになり、同一の上位2ビットのプライオリティ値と勝者より低い下位2ビットのプライオリティ値を持つ他の要求者の下位2ビットのプライオリティカウントは全て1ずつインクリメントされる。この結果、今メモリアレイ1910へのアクセスを許可された要求者は同一の上位2ビットプライオリティ値を持つ要求者の間で最も低いプライオリティになる。上位2ビットのプライオリティ値が勝者とは違った値を持つ要求者の下位2ビットのプライオリティ値は影響されない。プライオリティの上位2ビットの値は要求者の全般的なプライオリティを決め、下位2ビットの値は同一の上位プライオリティの要求者の間で公平な仲裁スキームを実現している。このスキームを用いることにより、ハードウェアで結線された固定プライオリティ(それぞれの要求者の上位2ビットがユニーク)から部分的な入れ替えと、部分ハードウェア結線(全てではないが、一部の上位2ビットプライオリティが他のと異なる)、厳密に公平な入れ替え(全ての上位2ビットのプライオリティ値が同一)までのいろいろな仲裁スキームが実現できる。
【0670】
図149は、それぞれの要求者に対するプライオリティビットの構造とそのビットの利用法を示している。ここでは、図148に用いられているシンボルの意味も定義されている。
【0671】
上記の実施例で各種のFIFO1920、1922、1938、それから1936は幅32ビット、深さ32ワードである。この深さは効率と消費される回路エリアの間の良い線での妥協を与えている。しかし、深さの値は、パフォーマンスの変化と共に特定のアプリケーションのニーズに合わせて変えられる。
【0672】
また、ここに示されている4ポート構成は単に一つの実施例である。メモリアレイと読み出しまたは書き込みポートのいずれかとの間に単一のFIFOバッファを用意するだけでも効果は得られる。しかし、多数の読み出しと書き込みポートを用いると最高のスピード向上が得られることになる。
【0673】
3.18.9 他モジュール
他モジュール239は、コプロセッサ224の動作、リセット同期、内部診断信号を必要に応じて外部ピンにまわすことによるエラーと割り込み信号のマルチプレクシング、CBusの内部と外部フォームとの間のインタフェーシングや内部と一般Bus信号の一般/外部Cbus出力ピンへのマルチプレクシングなどのためのクロックの発生と選択を行う。勿論他モジュール239の動作は、用いられるASICテクノロジによるクロッキングへの要求と具現詳細により異なる。
【0674】
3.18.10 外部インターフェース制御部
次に記述される本発明の特徴は、仮想メモリを共有するコプロセッサを有するホストコンピュータで仮想メモリを提供するための方法と装置に関連している。本発明の実施例は、コプロセッサがホストプロセッサと連動し仮想メモリモードで動作可能になるよう模索している。
【0675】
特に、コプロセッサはホストプロセッサの仮想メモリモードで動作することが可能である。コプロセッサには、ホストプロセッサの仮想メモリテーブルを参照することができる仮想メモリ対物理メモリマッピングデバイスが含まれており、コプロセッサにより生成された命令アドレスをホストプロセッサのメモリ内の対応する物理アドレスにマッピングする。むしろ、仮想メモリ対物理メモリマッピングデバイスは、グラフィックイメージを生成するためにコンピュータグラフィックコプロセッサの一部を形成する。コプロセッサには、イメージに種々の複雑な動作を行える多数のモジュールが含まれる。マッピングデバイスはコプロセッサとホストプロセッサとの間の相互作用に関与するのである。
【0676】
外部インターフェース制御部(EIC)238は、コプロセッサのPCI Busと一般Busへのインターフェースを提供する。更に外部インターフェース制御部は、コプロセッサの内部仮想アドレス空間とホストシステムの物理アドレス空間との間をつなぐメモリマネジメントも提供する。外部インターフェース制御部238は、入力インターフェーススイッチ252からの要求に応じてホストメモリからデータを読み出す時や、結果オーガナイザ249からの要求に応じてホストメモリにデータを書き込む時にPCI Bus上のマスタとして作動する。PCI Busへのアクセスは、“PCI Local Bus Specification,draft 2.1”PCI special interest group,1994の標準に従って具現する。
【0677】
外部インターフェース制御部238は、入力インターフェーススイッチ252と結果オーガナイザ249からのPCI取り引きのための同時要求を仲裁する。仲裁は構成可能であるのが望ましい。受け取った要求のタイプには、一度にホストコプロセッサの1行以下のキャッシュライン読み出しや、ホストの1行と2行の間のキャッシュラインの読み出しと、2行又はそれ以上のキャッシュラインの読み出しが含まれる。長さ無制限の書き込みも外部インターフェース制御部238により具現される。更に外部インターフェース制御部238は、随意にデータのプリフェッチングも行う。
【0678】
外部インターフェース制御部238の構築には、全てのコプロセッサの内部モジュールのために仮想メモリからホストの物理メモリへのアドレスマッピングを提供するメモリマネジメントが含まれる。このマッピングは、アクセスを要求するモジュールに対し完全に透明である。外部インターフェース制御部238がホストメモリへのアクセス要求を受け取ると、メモリマネジメントユニットを初期化して、その要求されたアドレスを変換する。メモリマネジメントユニットがアドレスの変換に失敗すると、場合によっては一つまたはそれ以上のPCI Busの取り引きがアドレスの変換を完了する結果になる。これは、メモリマネジメントユニット自身がPCI Busへ取り引きを要求するもう一つのソースになれることを意味する。入力インターフェーススイッチ252や結果オーガナイザ249から要求されたバーストが仮想ページの境界を越えると、外部インターフェース制御部238は自動的にメモリマネジメントユニットを作動し、全ての仮想アドレスのマッピングを正しくやり直す。
【0679】
メモリマネジメントユニット(MMU)(図150の915)は、16個のルックアサイドバッファ(TLB)が基本になっている。TLBは仮想対物理アドレスマッピングのキャッシュとして作動する。TLBでは次のような作業が可能である。
【0680】
1)比較:仮想アドレスが与えられると、TLBは対応する物理アドレスかTLBミス信号(アドレスにマッチする有効なエントリがない場合)のいずれかを返す。
2)置換:TLBには、既存エントリや有効でないエントリの代わりに新しい仮想対物理マッピングが書き込まれる。
【0681】
3)無効化:仮想アドレスが与えられた時、TLBのエントリにマッチするとマッチしたエントリを無効化する。
【0682】
4)全無効化:すべてのTLBエントリを無効化する。
【0683】
5)読み出し:TLBエントリの仮想や物理アドレスは、4ビットアドレスベースで読み出される。テストのみに用いられる。
【0684】
6)書き込み:TLBエントリの仮想や物理アドレスは、4ビットアドレスベースで書き込まれる。
【0685】
TLB内のエントリは図151に示すようなフォーマットになっている。それぞれの有効なエントリは、20ビットの仮想アドレス670、20ビットの物理アドレス671、それから対応する物理ページが書き込み可能か否かを表すフラグで構成される。エントリの許容ページサイズは4Kバイトである。MMU内のレジスタは、比較に用いられた10ビットまでのアドレスにマスクをかけるのに用いることができる。これによってTLBのページは4Mバイトまでサポートされる。マスクレジスタは1つのみであるため、すべてのTLBエントリは同サイズのページを参照する。
【0686】
TLBには、“Least−Recently Used”(LRU)置換アルゴリズムが用いられている。新しいエントリは最も長い時間が経過したエントリに上書きされる。なぜなら、それは最後に書き込まれたか、或は比較作業で一致したものだからである。これは無効なエントリがない場合のみに適用される。無効なエントリがある場合には、有効なエントリに上書きする前に無効なエントリに書き込まれる。
【0687】
図152はTLB比較操作の流れを示す。受け取られた仮想アドレス880は881〜883の3つの部分に分けられる。下位12ビット881は常にページ内のオフセットの部分であるため、対応する物理アドレスビット885へダイレクトに送られる。次の10ビット882は、マスクビットにより設定された通り、ページサイズによってオフセットの部分か、ページ番号の部分かのいずれかである。マスクレジスタ887内のゼロの値は、ビットがページオフセットの部分であるためTLB比較に用いてはいけないということを示している。10アドレスビットは10マスクビットとロジカルに“ANDED”(論理積)され、TLBルックアップのために下位10ビットの仮想ページ番号889を与える。仮想アドレスの上位10ビット883は、仮想ページ番号889の上位10ビットとしてダイレクトに用いられる。
【0688】
このように生成された20ビットの仮想ページ番号はTLBに送られる。これがエントリの1つと一致すると、TLBは対応する物理ページ番号872と一致した位置の番号を返す。物理アドレス873は、マスクレジスタ887を再び用いて物理ページ番号から生成される。物理ページ番号872の上位10ビットは物理アドレス873の上位10ビットとしてダイレクトに用いられる。物理アドレス872の次の10ビットは、物理ページ番号(対応するマスクビットが1の場合)か仮想アドレス(マスクビットが0の場合)かのいずれかから875に選択される。物理アドレスの下位12ビット885は仮想アドレスからダイレクトに与えられる。
【0689】
最後に、マッチに従いLRUバッファ876が更新され、マッチされたアドレスの使用を表す。
【0690】
TLBミスは、入力インターフェーススイッチ252や結果オーガナイザ249がTLB872に存在しない仮想アドレスへのアクセスを要求した時に発生する。この場合、MMUは要求されたアクセスの処理を進める前に、ホストメモリ203のページテーブルから要求された仮想対物理変換をフェッチし、それをTLBに書き込まなければならない。
【0691】
ページテーブルはホストメインメモリのハッシュテーブルである。それぞれのページテーブルエントリは、図153に示すようなフォーマットの2つの32ビットワードで構成されている。2番目のワードは物理アドレスのための上位20ビットを構成し、下位12ビットは予約されている。対応する仮想アドレスの上位20ビットは最初のワードに与えられている。下位12ビットには有効(V)ビットと書き込み可能(W)または“リードオンリ”ビットが含まれており、残りの10ビットは予約されている。
【0692】
ページテーブルエントリには、基本的にTLBエントリと同じ情報が含まれている。ページテーブルの余分のフラグは予約されている。ページテーブル自身は、通常メインメモリ203内の複数のページにわたって分散され、一般に仮想空間と隣接していて物理空間とは接していない。
【0693】
MMUには、ソフトウェアにより設定された16のページテーブルポインタのセットが含まれており、それぞれはページテーブルの部分を含んでいる4Kバイトメモリ領域への20ビットポインタである。これは、コプロセッサ224が64Kバイトサイズのページテーブルをサポートし、8Kページマッピングを有することを意味している。4Kバイトページサイズのシステムにおいて、これは最大32Mバイトのマッピングされた仮想アドレス空間を意味する。むしろページテーブルポインタは、TLBに用いられるページサイズとは関係なく、常に4Kバイトのメモリ領域を参照することである。
【0694】
TLBミス後のMMU操作は、次のように図154の690に示している。
【0695】
1.TLBに存在しない仮想ページ番号891上のハッシュファンクション892を実行し、ページテーブルへ13ビットのインデックスを生成する。
【0696】
2.ページテーブルインデックス894、896の上位4ビット894を用い、ページテーブルポインタ895を選択する。
【0697】
3.20ビットのページテーブルポインタ895とページテーブルインデックス896の下位9ビットを連結し、最下位3ビットに000を設定することにより(ページテーブルエントリはホストメモリ内の8バイトを占めるため)、要求されたページテーブルエントリの物理アドレス890を生成する。
【0698】
4.ページテーブルエントリの物理アドレス898から始め、ホストメモリから8バイトを読み出す。
【0699】
5.8バイトのページテーブルエントリ900がPCIバスへ返されたとき、VALIDビットが1にセットされていれば仮想ページ番号はTLBミスを起こした元の仮想ページ番号と比較される。両者がマッチしないと、上記のプロセスを用いて次のページテーブルエントリがフェッチされる(物理アドレスは8バイトずつインクリメントされる)。この過程はマッチする仮想ページ番号のページテーブルエントリが見つかるまで、或は無効なページテーブルエントリに遭うまで続けられる。無効なページテーブルエントリに遭った場合には、ページフォールトエラーが出され処理は中止する。
【0700】
6.マッチする仮想ページ番号を有するページテーブルエントリが見つかると、置換操作によって完全なエントリがTLBに書き込まれる。新しいエントリはLRUバッファ876によってポイントされたTLB位置に置かれる。
【0701】
それからTLBの比較作業が再び行われ、順調に続いて、元の要求されたホストメモリアクセスの処理が可能になる。新しいエントリがTLBに書き込まれると、LRUバッファ876は更新される。
【0702】
EIC238に具現されているハッシュファンクション892は、20ビットの仮想ページ番号(vpn)に対し、次の方程式を用いる。
【0703】
index=((vpn>>S1)XOR(vpn>>S2)XOR(vpn>>S3))&0x1fff;
ここで、S1,S2、S3は独立的にプログラム可能なシフト量(正、又は負)で、それぞれ4つの値を取ることができる。
【0704】
ページテーブルの線形探索が4Kバイトの境界を越えると、MMUは自動的に次のページテーブルポインタを選択し、正しい物理メモリ位置で探索を継続する。この作業には、ページテーブルの最後から最初へのラッピングが含まれる。ページテーブルは、探索が常に終了されるように常に少なくとも1つの無効(null)エントリを含んでいる。
【0705】
ソフトウェアがホストメモリ内のページを置換するたびに、新しい仮想ページのためのページテーブルエントリを追加し、置換されたページに対応するエントリを削除しなければならない。また、古いページテーブルエントリはコプロセッサ224のTLBにキャッシュされてはいけない。これは、MMU内のTLB無効化サイクルを果たすことにより行われる。
【0706】
無効化サイクルは無効化作業を引き起こすビットと共に無効化される仮想ページ番号をし、MMUへのレジスタ書き込みを通じて果たされる。このレジスタ書き込みは、ソフトウェアによって直接、或は命令デコーダにより割り込みされた命令を通じて果たされる。無効化作業は、提供された仮想ページ番号のためにTLB上で果たされる。TLBエントリにマッチすると、エントリは無効にマークされ、無効化された位置が次の置換作業で用いられるようにLRUテーブルが更新される。
【0707】
未決定の無効化作業はいかなる未決定のTLB比較より高いプライオリティを持っている。無効化作業が完了すると、MMUは無効化ビットをクリアし、次の無効化処理が可能であることを知らせる。
【0708】
MMUが要求された仮想アドレスのための有効なページテーブルエントリを見つけられない場合、これをページフォルトという。MMUはエラー信号を出し、フォルトを起こした仮想アドレスをソフトウェアがアクセス可能なレジスタに保管する。MMUはアイドル状態に入り、エラーが解決されるまで待機する。割り込みがクリアされると、MMUは次の要求された取り引きから再び作業を始める。
【0709】
読み出し専用とマークされた(書き込み可能とマークされてない)ページへの書き込み作業がなされた時にもページフォルトが出される。
【0710】
外部インターフェース制御部(EIC)238は、一般バスへアドレスされている入力インターフェーススイッチ252と結果オーガナイザ249からの取り引き要求に応じられる。それぞれの要求モジュールは現在の要求が一般バス用かあるいはPCIバス用かを表す。入力インターフェーススイッチ252と結果オーガナイザ249とのコミュニケーションに共通バスを用いるのとは異なり、一般バス要求へのEIC操作はPCI要求への操作と完全に分かれている。更にEIC 238は、一般バス空間にダイレクトにアドレスするCbus取り引きタイプにも応じられる。
【0711】
図150は、外部インターフェース制御部238の構造を示している。IBus要求は多重化部910を通り、多重化部910は要求の目的地をもとにして(PCIまたは一般バス)適当な内部モジュールへ要求を導く。一般バスへの要求は、RBusとCBusも持っている一般バス制御部911へ送られる。RBus上の一般バスとPCIバス要求は異なるコントロール信号を用いるため、このバスには多重化部が必要とされない。
【0712】
PCIバスへ導かれたIBus要求はIBusドライバ(IBD)912によって扱われる。同様に、PCIへのRBus要求はRBusレシーバ(RBR)914によって処理される。IBD912とRBR914は仮想アドレスを、物理アドレスを返すメモリマネジメントユニット(MMU)915に送る。IBD、RBR、それからMMUは、それぞれPCIトランザクションを要求できて、これらはPCIマスタモード制御部(PMC)917によって生成され、コントロールされる。IBDとMMUはPCI読み出しのみを要求し、RBRはPCI書き込みのみを要求する。
【0713】
別個のPCIターゲットモード制御部(PTC)918は、ターゲットとしてコプロセッサへアドレスされた全てのPCIトランザクションを処理する。これはCBusマスタモード信号を命令制御部へ送り、すべての他モジュールへのアクセスを可能にする。PTCは、返されたCBusデータをPMC経由でPCIバスへ送るため、PCIデータバスピンのコントロールは単一のソースから出される。
【0714】
EICレジスタとモジュールメモリへアドレスされたCBusトランザクションは標準CBusインターフェース7によって扱われる。全てのサブモジュールはコントロールレジスタからビットをもらい、ステータスレジスタにビットを返す。これらは標準CBusインターフェース内部に位置している。
【0715】
PCIバストランザクションのためのパリティ生成とチェックは、PMCとPTCのコントロール下で作動するパリティ生成とチェック(PGC)モジュール921によって処理される。生成されたパリティは、パリティエラー信号と同様にPCIバスへ送られる。パリティチェックの結果は、エラーレポートのためにPTCのコンフィギュレーションレジスタにも送られる。
【0716】
図155は、図150のIBusドライバ912の構造を示している。受け入れたIBusアドレスとコントロール信号はサイクルの始点でラッチされる930。オアゲート931はサイクルの始まりを検出し、コントロールロジック932に開始信号を発生する。仮想ページ番号を形成するラッチ930の上位アドレスビットはカウンタ935にロードされる。仮想ページ番号は、936にラッチされた物理ページ番号を返すMMU915(図150)へ送られる。
【0717】
物理ページ番号と下位仮想アドレスビットは、マスク937によって再結合され、PMC 717(図102)へのPCI要求のためのアドレス938を形成する。また、サイクルのためのバーストカウントもカウンタ939にロードされる。プリフェッチ動作は異なるカウンタ941とアドレスラッチと比較回路943を用いる。
【0718】
PMCから返されたデータは、データがプリフェッチの一部か否かを表すマーカと共にFIFO944にロードされる。データがFIFO944の前の部分で使用可能になってくると、ラッチ945、946経由で読み出し、ロジックによりクロックアウトされる。読み出しロジック946はIBusアクノレッジメント信号も生成する。
【0719】
中央コントロールブロック932は、状態器を含め、全てのアドレスとデータ要素の順次処理、それからPMCへのインターフェースをコントロールする。
【0720】
仮想ページ番号カウンタ935は、IBusアドレスからのページ番号ビットで、IBusトランザクションの開始と共にロードされる。この20ビットカウンタの上位10ビットは常に受け入れるアドレスからくる。下位10ビットに対しては、それぞれのビットは対応するマスクビット937が1にセットされていれば受け入れるアドレスからロードされ、そうでないと、カウンタビットが1にセットされる。20ビットの値はMMUインターフェースへ送られる。
【0721】
通常の動作で、仮想ページ番号は初期アドレス変換の後で用いられない。しかし、IBDがバーストのページ境界越えを検出した場合には、仮想ページカウンタがインクリメントされ、もう1つの変換が行われる。カウンタがロードされた時仮想ページ番号の一部でない下位ビットが1にセットされているため、20ビットの値への単純インクリメントは実際のページ番号フィールドのインクリメントをもたらす。インクリメントされた後、次のインクリメントのためにカウンタをセットアップするために、マスクビット937が再び用いられる。
【0722】
物理アドレスは、変換後、MMUが有効な物理ページ番号を返すたびにラッチされる936。マスクビットは、返された物理ページ番号と元の仮想アドレスビットとを正しく結合するために用いられる。
【0723】
物理アドレスカウンタ938は物理アドレスラッチ936からロードされる。これはPMCからワードが返されるたびにインクリメントされる。インクリメントされるたびにカウンタはモニタされ、トランザクションがページ境界を越えようとしているか否かを判断する。マスクビットは、カウンタのどのビットが比較に用いられるかを判断するのに使用される。カウンタがページ内に残っているワードの数が2つ以下であることを検出すると、コントロールロジック932に信号を出し、2つのデータ転送後現在のPCI要求を終了し、必要に応じて新たなアドレス変換を要求する。カウンタは新しいアドレス変換後に再びロードされ、PCI要求が再開する。
【0724】
バーストカウンタ939は、トランザクションの始点でIBusバースト値と共にロードされる6ビットのダウンカウンタである。これはPMCからワードが返されるたびにデクリメントされる。カウンタの値が2つ以下になると、コントロールロジック932へ信号を出し、これで2つのデータ転送後、PCIトランザクションを終了することができる(プリフェッチングが可能でない限り)。
【0725】
プリフェッチアドレスレジスタ943は、いかなるプリフェッチの最初のワードの物理アドレスと共にロードされる。続くIBusトランザクションが開始し、それからプリフェッチカウンタが少なくとも1つのワードが巧くプリフェッチされたことを示したら、トランザクションの最初の物理アドレスがプリフェッチアドレスの値と比較される。両者がマッチすると、プリフェッチデータはIBus引取りを満たすのに用いられ、最後にプリフェッチされたワードの後のアドレスでPCIトランザクション要求が開始する。
【0726】
プリフェッチカウンタ941は4ビットのカウンタで、プリフェッチ動作中にPMCによってワードが返されるたびに最大入力FIFOの深さと同じカウントまでインクリメントされる。続くIBusトランザクションがプリフェッチアドレスとマッチすると、プリフェッチカウントがアドレスカウンタに足され、それからバーストカウンタから引かれ、PCI要求が要求される位置で開始できるようになる。代わりに、IBusトランザクションがプリフェッチされたデータの一部だけを必要とすると、要求されたバーストの長さはプリフェッチカウントから引かれ、それからラッチされたプリフェッチアドレスに足され、残りのプリフェッチデータは更なる要求を満たすために保留される。
【0727】
データFIFO944は、8ワード×33ビットの非同期フォールスルーFIFOである。PMCからのデータは、データがプリフェッチの一部であるか否かを表すビットと共にFIFOに書きこまれる。FIFOの先端からのデータは、使用可能になるや否やFIFOから読み出されIBusへ送られる。データ読み出し信号を生成するロジックはclkと同期して動作し、IBusアクノレッジメント出力を発生する。トランザクションがプリフェッチされたデータを用いて満たされる場合に、コントロールロジックからの信号は、FIFOから読み出すプリフェッチされたデータの数の情報をを読み出しロジックに与える。
【0728】
図156は、図150のRBusレシーバ914の構造を示している。コントロールは2つの状態器950、951との間でスプリットされる。書き込み状態器951はRBusへのインターフェースをコントロールする。入力アドレス752はRBusバーストの始点でラッチされる。バーストのそれぞれのデータワードは、バイトイネーブルと共にFIFO754に書き込まれる。FIFO954が充満するようになると書き込みロジック951によってr−レディが取り消され、オーガナイザがそれ以上のワードを書き込まないようにする。
【0729】
書き込みロジック951は、再同期開始信号を介してメイン状態器950にRBusバーストの開始を通知し、オーガナイザがそれ以上のワードを書き込まないようにする。仮想ページ番号を形成する上位アドレスビットはカウンタ957にロードされる。仮想ページ番号はMMUへ送られ、MMUからは物理ページ番号958が返される。物理ページ番号と仮想アドレスの下位ビットはマスクに従って再結合され、カウンタ960にロードされ、PMCへのPCI要求のためのアドレスを提供する。PCI要求のそれぞれのワードのためのデータとバイトイネーブルは、すべてのPMCMインターフェースコントロール信号も扱うメインコントロールロジック950によってFIFO 954からクロックアウトされる。メイン状態器は、ビジー信号を介してアクティヴであることを示し、それは書き込み状態器へ再同期して返される。
【0730】
書き込み状態器951は、r−ファイナルを用いてRBusバーストの終了を検出する。するとFIFO954へのデータのロードを中止し、メイン状態器にRBusバーストが終了したことを通知する。メイン状態器はデータFIFOが空になるまでPCI要求を継続する。それからビジーを取り消し、書き込み状態器が次のRBusバーストを開始するようにする。
【0731】
図150に再び戻り、メモリマネジメントユニット915は、IBusドライバ(IBD)912とRBusレシーバ(IBR)914のために仮想ページ番号から物理ページ番号への変換を担当する。図157に、メモリマネジメントユニットの詳細を示している。16エントリの変換ルックアサイドバッファ(TLB)970は、TLBアドレスロジック971から入力データを受け取って出力を送り返す。状態器が含まれているTLBコントロールロジック972は、RBRまたはIBDからTLBアドレスロジックにバッファされている要求を受け取る。要求を受け取ると、入力のソースとTLBによって行われる作業を選択する。有効なTLB作業は、比較、無効化、全無効化、書き込みと読み出しである。TLB入力アドレスのソースとしては、IBDとRBRインターフェース(比較作業用)、ページテーブルエントリバッファ974(TLBミスサービス用)またはTLBアドレスロジック内のレジスタなどがある。TLBは、TLBコントロールロジックにそれぞれの作業のステータスを返す。成功した比較作業からの物理ページ番号はIBDとRBRへ送り返す。TLBは最も最近アクセスされた(LRU)位置の記録を保有し、これはTLBアドレスロジックにとっては書き込み作業用の位置として用いるのに有用である。
【0732】
比較作業が失敗した場合、TLBコントロールロジック972はページテーブルアクセスコントロールロジック976にPCI要求を開始するよう信号を出す。ページテーブルアドレスゼネレータ977は、内部ページテーブルポインタレジスタを用い、仮想ページ番号をもとにPCIアドレスを生成する。PCI要求から返されたデータは、ページテーブルエントリバッファ974へラッチされる。要求される仮想アドレスにマッチするページテーブルエントリが見つかると、物理ページ番号がTLBアドレスロジック977へ送られ、その後ページテーブルアクセスコントロールロジック976はページテーブルアクセスが完了したことを通知する。それからTLBコントロールロジック972は、TLBに新たなエントリを書き込み、比較作業を再び開始する。
【0733】
SCIへのレジスタ信号とSCIからのレジスタ信号は両方の方向に再同期される980。信号は全てのサブモジュールへ行き来する。モジュールメモリインターフエース981は、標準CBusインターフェースからTLBとページテーブルポインタメモリ要素へのアクセスをデコードする。TLBアクセスは読み出し専用で、データを得るためにTLBコントロールロジックを用いる。ページテーブルポインタは読み出し・書き込み両方可能で、モジュールメモリインターフェースによってダイレクトにアクセスされる。これらのパスには同期回路も含まれている。
【0734】
3.18.11 周辺インターフェース制御部
図158には、図2の周辺インターフェース制御部(PIC)の一例を詳細に示している。PIC 237は、外部周辺デバイスへ、又はデバイスからデータを転送するいくつかのモードの1つで動作する。基本的なモードは、
1)ビデオ出力モード:このモードで、データは外部ビデオクロックとクロック・データイネーブルのコントロール下で、周辺へ転送される。PIC 237は、出力データに対し必要とされるタイミングで出力クロックとクロックイネーブルサインを送る。
【0735】
2)ビデオ入力モード:このモードで、データは外部ビデオクロックとクロック・データイネーブルのコントロール下で、周辺へ転送される。
【0736】
3)セントロニクスモード:このモードは、IEEE 1284標準に定義されている標準プロトコルに従い、周辺へと周辺からデータを転送する。
【0737】
PIC 237は、必要に応じて、内部データソースや目的地から外部インターフェースのプロトコルを分離する。内部データソースは、出力データの単一ストリームにデータを書き込み、選択されているモードによって外部周辺機器へ転送される。同様に、外部周辺からの全てのデータは単一入力データストリームに書き込まれ、可能な内部データ目的地の1つに要求されたトランザクションを満たすのに用いられる。
【0738】
可能な出力データのソースとしては、LMC236(ABusを用いる)、RO249(RBusを用いる)、それから一般CBusの3つが挙げられる。PIC 237は、これらのデータソースからのトランザクションに一度に1つのみに応答する。1つのソースからのトランザクションは次のソースが考慮される前に完全に終了するのである。一般に、いつでも1つのみのデータソースしかアクティヴになってはならないのである。2つ以上のソースがアクティヴになった場合にはCBus、ABus、RBusのプライオリティで順に処理される。
【0739】
通常通り、モジュールはPICの内部レジスタが含まれている標準CBusインターフェース990のコントロール下で動作する。
【0740】
更に、CBusインターフェース992は、コプロセッサ224を介して周辺デバイスをアクセスし、コントロールすることができる。ABusインターフェース991もローカルメモリ制御部とのメモリ相互作用を処理することができる。結果オーガナイザ249に加え、ABusインターフェース991とCBusインターフェース992は両方ともバイト−ワイドFIFOが含まれている出力データパス993へデータを送る。出力データパスへのアクセスは、どのソースが出力ストリームに対してプライオリティまたは所有権を持っているかを常にチェックする仲裁者によってコントロールされる。出力データパスは、どっちがイネーブルになっているかによってビデを出力制御部994とセントロニクス制御部997とインターフェースする。それぞれのモジュール994、997は出力データパスの内部FIFOから一度に1バイトを読み出す。セントロニクス制御部997は、周辺デバイスをコントロールするために標準セントロニクスデータインターフェースを具現する。ビデオ出力制御部には、要求されるビデオ出力プロトコルに従い、出力パッドをコントロールするロジックが含まれている。同様に、ビデオ入力制御部998には、用いられているいかなるビデオ入力標準もコントロールするロジックが含まれている。ビデオ入力制御部998は入力データパスユニット999へ出力を出し、これは再びビデオ入力制御部998かセントロニクス制御部997かのいずれかによって一度に1バイトずつ非同期でFIFOに書き込まれるデータとバイトワイド入力FIFOを構成する。
【0741】
データタイマ996には種々のカウンタが含まれており、出力データパス993と入力データパス999内のFIFOの現在状態をモニタするために用いられている。
【0742】
以上のことから、コプロセッサを用いると多重イメージまたは単一イメージの多重部分を同時に生成するために二重ストリームの命令を実行するのが可能に思われる。一次命令ストリームは現在ページの出力イメージを得るのに用いられ、一次命令ストリームがアイドルになっている間に次のページのレンダリングを始めるために二次命令ストリームを用いることができる。その結果、標準モードの動作で、現在ページのイメージはレンダリングされてからJPEGコーダ241を用いて圧縮される。イメージをプリントする必要がある時に、コプロセッサ241は二度JPEGコーダ241を用いてJPEGエンコーデッドイメージを解凍する。出力デバイスにからそれ以上のJPEGデコーデッドイメージの部分が必要とされないアイドルタイムの間に、次のページまたはバンドの構成のために命令を実行するのが可能である。一般にこのプロセスは、コプロセッサの動作オーバーラップにより、イメージを生成するレートを上げる。特に、コプロセッサ224を用いると、コプロセッサに付いたプリンタによってプリントが行われ、結果的にレンダリングスピードが上がるため、イメージプロセシング作業のスピードアップの面でベネフィットが得られるのである。
【0743】
上記好適な実施例は本発明の1つの実施形態であり、本発明の範囲を外れずに当業者にとって自明な修正ができることが、以上から明らかであろう。
【0744】
付録A
コプロセッサマイクロプログラミング
この節では新しい命令の実行毎にコプロセッサ内で行われる動作について詳述する。命令実行の間にコプロセッサにより行われるすべてのセルフコンフィグレーションは内部のレジスタのリード/ライトにより実現されており、従って、コプロセッサは外部のCバスインターフェースあるいはホストによってPCIバスインターフェースを用いることで完全にマイクロプログラミング可能である。但し、ホストを用いるマイクロプログラミングの場合には一般的にホスト同期の問題から困難となることが予想される。
本章は読者がコプロセッサについて以下の点で十分な知識を持っていることを前提している。
1.実行モデル
2.命令セットとコーディング
3.レジスタセット
4.内部構造
A.1 一般事項
A1.1 コプロセッサのセットアップに関する一般事項
コントロール命令とローカルDMA命令以外のすべての命令については、コプロセッサで内のデータの流れは基本的にピクセルオーガナイザの制御下におかれる。ピクセルオーガナイザは入力データストリームの先頭のフェッチ、データのカウント、及び最後のデータがフェッチされた時期の決定について責任を持っている。コプロセッサ内のその他のモジュールは基本的に、送られてきたデータに単に応答するだけである。
A1.2 モジュールのコンフィグレーション順序
すべてのモジュールが命令毎にセットアップされるわけではない。いくつかのモジュールは命令デコーディング時に、全くコンフィグレーションされない。モジュールのコンフィグレーション順序は常にPO,DCC,OOB,OOC,MDP,JC,RO,PICの順である。
A1.3 その他のレジスタの設定
命令が、あるレジスタ値の設定を含んで符号化された場合にはそのレジスタは次の順序に従うマイクロプログラミングにより設定される。
1.設定されるべきレジスタを持つモジュールに、ほかにレジスタセットが存在しなければ、そのレジスタはほかのいかなるレジスタ設定よりも先に設定される。
2.設定されるべきレジスタを持つモジュールに、ほかにもレジスタセットがあるときはそのレジスタはほかのレジスタの設定が終わった後に、そのモジュールの_cfgレジスタの直前に設定される。
A1.4 整合性のない命令オペランドのコーディング
多くの命令は、オペランド及び結果のデータタイプが指定されているので、ほかのデータタイプが指定された場合には、無意味な結果を返す。各オペランドに対し、コプロセッサは次の手順で目的のオペランドのフォーマットを決定する。
1.オペランドの内部フォーマットが1つのピクセル(圧縮バイトあるいは 非圧縮バイト)に特化されている場合には、対応するオペランドオーガナイザはこれを反映して設定される。データキャッシュコントローラはコンフィグレーションされず、従ってノーマルモードで演算が継続される。
2.オペランドの内部フォーマットが「その他の形式」に特化されている場合には、コプロセッサは命令からオペランドのフォーマットを生成する。オペランドBとオペランドCについては前進的である。オペランドAについて「その他の形式」は元来指定されていなく、コプロセッサの振る舞いは定義されていない。対応するオペランドオーガナイザはバイパスモードになり、データキャッシュコントローラは得られたフォーマットのオペランドデータを管理するように設定される。
マイクロプログラミングは合理的に様々なモジュール間で相互独立である。
A1.5 疑似命令の文法
・命令の実行順序は左端の番号で決定される。
・レジスタ名はHelvetica Bold体でかかれている。
・レジスタフィールドはregister.fieldによって示される。
・I,Dは現在復号化されている命令ワードとデータワードをそれぞれ示す。
・A,B及びCは現在復号化されているオペランドワードA、オペランドワードB、オペランドワードCを示す。
・A_deskriptor,B_deskriptorおよびC_deskriptorは現在復号化されている命令のデータワードのデスクリプタを示す。
・Rは現在復号化されている命令の結果ワードを示す。
・”X:Y”はXとYの連結を示す。
・”@X”はコプロセッサのレジスタ番号Xを示す。
・”Cbus(X)”はCバスオペレーションXの実行を示す。
・”Cbus(X)”はCバスオペレーションXによる受け取りデータを示す。
・”X”は仮想メモリ番地Xを示す。
・”??”は不明な値、あるいは未定の値を示す。
・”set”はデータマニピュレーションレジスタの設定を示す。
A.2 合成演算子
注:
1.主要オペコードは0xCと0xD
2.曖昧さは最上位アドレスのバイト(すなわち、最上位バイト)であると考える。
3.アキュムレータあるいはオペランドはプレ乗算されていてもよい。
4.結果は非プレ乗算されていてもよい。
5.命令長は入力ピクセルの数により定義されている。
Figure 0004227218
Figure 0004227218
Figure 0004227218
A.3 色空間変換
注:
1.入力空間は常に3次元である。デフォルトでは3つの最下位なピクセルのチャネルである。曖昧さは排除される。
2.カラーテーブルのフォーマットはひとつの出力チャネルを含むものか、4つの出力チャネルを含むもののうちどちらかである。
Figure 0004227218
Figure 0004227218
Figure 0004227218
A.4 JPEG命令
注:
1.オペコードは0x2である。
2.オペランドCはセットするためのレジスタでもよい。
3.オプションは多数存在する。
・サブサンプリングを行う/行わない。
・フィルタリングを行う/行わない。
・1,3あるいは4スキャン。
4.これらの命令は命令実行前に設定されたいくつかのレジスタと関係している。
A.4.1 伸長
注:1.以下のレジスタは命令実行前に設定されている必要がある。
・ro_idr:出力画像次元数レジスタ
・ro_cut:出力カットレジスタ
・ro_lmt:出力制限レジスタ
Figure 0004227218
Figure 0004227218
Figure 0004227218
A.4.2 圧縮
注:
1.以下のレジスタは命令実行前に設定されている必要がある。
・po_idr:出力画像次元数レジスタ
・jc_rml:再スタートマーカのインターバル
・ro_cut:出力カットレジスタ
・ro_lmt:出力制限レジスタ
Figure 0004227218
Figure 0004227218
Figure 0004227218
A.5 データコーディング
注:
1.すべてのデータコーディング操作は圧縮、圧縮解除いずれの場合も同じ様に扱われる。これらの操作設定はJPEGの時とほとんど同じである。
2.可能なエンコーディング操作
・ハフマン符号化
・予測符号化
3.可能なデコーディング操作
・高速ハフマン復号化
・低速ハフマン復号化
・packbits復号化(バージョンA)
・packbits復号化(バージョンB)
・予測復号化
4.オペランドCは設定するためのレジスタでも良い。
5.以下のレジスタは命令実行前に設定されている必要がある。
・ro_cut:出力カットレジスタ
・ro_lmt:出力制限レジスタ
Figure 0004227218
Figure 0004227218
Figure 0004227218
A.6 変換と畳み込み
1.オペコードは0x4(畳み込み)と0x5(変換)。
2.コプロセッサは画像変換と画像畳み込みのそれぞれのために必要となるスーパーセットである操作を行う。画像変換と画像畳込みの唯一の違いは、コプロセッサに関する限り、画像変換ではカーネルステップサイズがカーネルの大きさ(水平、垂直)なのに対して、畳込みではステップサイズが1ソースピクセルとなっていることである。
3.オプション:
・隣接ピクセルへのスナッピングおよび補間
・ピクセル(カーネル)の蓄積を行うか否か
・ソースピクセルのプレ乗算を行うか否か
・最終結果のクランプ、ラッピング、絶対値
4.注:変換と畳込みは元の位置には実行できない。つまり、ソースのポインタとデスティネーションのポインタが同じであるときは、その内容が破壊される。
Figure 0004227218
Figure 0004227218
Figure 0004227218
A.7 行列乗算
注:
1.オペコードは0x3
2.オプション:
・ソースピクセルのプレ乗算を行うか否か
・最終結果のクランプ、ラッピング、絶対値化
・オペランドCはレジスタに書き込んでも良い
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
A.8 ハーフトーン処理
注:
1.オペコードは0x7
2.オプションはハーフトーンのレベル値のみ
3.ハーフトーンスクリーンが適切にメッシュあるいはアンメッシュされているかぎり、ピクセルあるいはバイトに対して行うことができる。
Figure 0004227218
Figure 0004227218
Figure 0004227218
A.9 メモリーコピー
注:
1.オペコードは0x92.この命令はメモリーコピーの操作を完了するために、全く個別の機構を用いている。
・汎用データ転送命令はコプロセッサにおける通常のデータフローを利用し、POおよびRO内のデータ操作ユニットを用いる様々な関数を利用できる。
・ペリフェラルDMA命令はPICとLMC間の直接的なコネクションを利用する。このことはデータ操作ができないことを意味し、後続の命令と同時実行が可能である。
A.9.1 汎用データ転送
Figure 0004227218
Figure 0004227218
A.9.2 ペリフェラルDMA転送
注:
1.同時実行でもそうでなくとも良い。このことは、ICによって扱われている。
2.オペランドCは設定するレジスタでも良い
3.PICはデータを扱うモジュールなので、この命令はほかの”能動”命令と異なる。
Figure 0004227218
Figure 0004227218
A.10 フォトCD伸長
この命令群は3つの異なる操作すなわち、水平補間、垂直補間、残部融合から構成される。垂直補間と残部融合の設定方法は同じである。 これら全ての命令のオペコードは0x9である。
A.10.1 水平補間
注:
1.ピクセルあるいはバイトに対して実行可能
2.この命令はオペランドが1つの命令であり、オペランドCは設定するレジスタでも良い。
Figure 0004227218
Figure 0004227218
A.10.2 垂直補間と残部融合
注:
1.垂直補間と残部融合の設定は同じである。
2.ピクセルとバイトの両方に対して実行可能。
3.この命令はオペランドが2つの命令であり、オペランドCはレジスタセットでも良い。
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
A.11 制御命令
注:
1.制御命令は2種類の操作、すなわちフロー制御命令と内部アクセス命令からなる。
A.11.1 フロー制御
注:
1.オペコードは0xB
2.フロー制御命令は現在、各種ジャンプ命令と各種の待機命令から成っている。
3.コプロセッサ内では明確な設置は行われず、またこの命令は、”能動”命令ではない。つまり、ほかの命令のようにコプロセッサ内のサブモジュールが実際に何かを行ったりはしない。
4.オペランドCは設定するレジスタでも良い。
Figure 0004227218
A.11.2 内部アクセス(リード)
注:
1.オペコードは0xA
2.リード命令はデータをコプロセッサ外に転送する。
3.ROが実際にコプロセッサ内ですべてを行う唯一のモジュールである。
Figure 0004227218
A.11.3 内部アクセス(ライト)
注:
1.オペコードは0xA
2.ライト命令はデータをコプロセッサ内に転送する。
3.この命令は”能動”命令ではないので、IC以外のモジュールは実際には何も行わない。
Figure 0004227218
A.12 予約された命令
注:
1.オペコード0x0,0xFは予約されている。
2.予約された命令はマスク可能なエラーを出す。
3.これらの予約された命令はコプロセッサが今後改訂されたときにほかの命令として使用されることになっている。
付録B:レジスタ
1.1 レジスタおよびテーブル
本節ではコプロセッサのレジスタについて解説する。これらのレジスタは3通りの方法で変更可能である。
1.特定のコプロセッサの命令群ははレジスタの読み書きをするためにある。これらの命令群を用いることでレジスタは、イニシエータのPICバスサイクルの開始あるいは汎用インターフェースのトランザクションを用いて、ローカルメモリインターフェースに関連するメモリへの、あるいはメモリからの読み書きが行われる。
2.多くのレジスタは命令実行の副作用により内容が変化する。命令実行のためにコプロセッサが自身の設定を行うという主要な機構は、様々なレジスタを現在の状態を反映するように設定することで実現されている。命令実行終了後には各レジスタはコプロセッサの状態を反映する。
多くの典型的な処理はある命令により完全に特定され、設定される。いくつかのレジスタでは命令実行の直前に設定する必要がある。
「予約」レジスタビットの意味
あらゆるレジスタ或はその構成要素の「予約」の意味は次の通りである。
・予約された場所への書き込みは行えるが、そのデータは棄却される。
・予約された場所からの読み込みは行えるが、そのデータは不定である
全ての特定されていないレジスタ及びレジスタフィールドは「予約」である。
1.1.1レジスタの分類
コプロセッサ内のレジスタは本節に記述される振る舞いに基づいて分類される。これらの記述は
・外部:モジュール外部(からのアクセス)。CBusインターフェースを用いた外部アクセスである。すなわち、命令コントローラあるいは外部CBusインターフェースによるターゲットモードのPCIを用いる。注、レジスタは、バイセットモードを介してPCIバスからセットできない。
・内部:モジュール内部(からのアクセス)
状態レジスタ
状態レジスタは外部からは読み込み専用で、内部からは読み書き可能。
コンフィグ1レジスタ
コンフィグ1レジスタは外部からは読み書き可能で、内部からは読み込み専用である。
コンフィグ1レジスタはタイプCのCBus操作はサポートせず(すなわち、ビットセットモードをサポートしない)、アドレス値のようなバイト(またはそれより大きな)コンフィギュレーション情報を保持するレジスタとして用いられる。
コンフィグ2レジスタ
コンフィグ2レジスタも外部から読み書き可能で、内部からは読み込み専用である。
コンフィグ2レジスタはタイプCのCBus操作(すなわちビットセットモード)をサポートし、ビット単位で設定する必要のあるコンフィギュレーション情報を保持するレジスタとして用いられる。
コントロール1レジスタ
コントロール1レジスタは外部および内部から読み書き可能。
コントロール1レジスタはタイプCのCBus操作をサポートせず(すなわちビットセットモードをサポートしない)、アドレス値のようなバイト(またはそれより大きなコントロール情報を保持するレジスタとして用いられる。
コントロール2レジスタ
コントロール2レジスタは外部および内部から読み書き可能。
コントロール2レジスタはタイプCのCBus操作(すなわちビットセットモード)をサポートし、ビット単位で設定する必要のあるコントロール情報を保持するレジスタとして用いられる。
割り込みレジスタ
割り込みレジスタ内のビットは内部からは1にセットでき、外部からは1を書き込むことによって0にリセットできる。
モジュール割り込み/エラーレジスタもこのタイプである。モジュールの割り込み/エラーレジスタは3つのフィールドから構成される。
[7:0]モジュールによって生成されたあらゆるエラー状態(ステータス)を意味する
[23:8]モジュールによって生成されたあらゆる例外状態を意味する
[31:24]モジュールによって生成されたあらゆる割り込み状態を意味する1.1.2レジスタマップ
表1.1はコプロセッサのレジスタである。番号はアドレスではなくレジスタ番号である。
表1.1 コプロセッサレジスタ
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
1.1.3 レジスタ定義
汎用モジュールレジスタ
a. mm_cfg
Figure 0004227218
b.mm_stat
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
命令コントローラレジスタ
I. ic_cfg
ic_cfgレジスタは3つの部分に別れる。最下位バイトはグローバルコンフィギュレーション情報を含む。最下位から3番目のバイトはストリームAのコンフィギュレーション情報を含み、最上位バイトはストリームBのコンフィギュレーション情報を含む。 このレジスタのリセット値は0x00000000である。
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
m. is_stat
このレジスタは4つのセクションに分かれている。最下位バイトはICの内部状態を保持する。最下位から2番目のバイトは現在の命令の復号化された結果と現在及びプリフェッチした命令ストリームを保持する。最上位から2番目のバイトはAストリームに関してすべてのステータス情報を保持する。最上位バイトはBストリームに関する情報を保持する。このレジスタのリセット値は0x00000000である。
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
n. ic_err_int
このレジスタはIC内部で割り込みやエラーが発生したかどうかを示す、アクティブ・ハイのフラグを含む。それぞれのビットは1を書き込むことでクリアされる。
Figure 0004227218
Figure 0004227218
O. ic_err_int_en
このレジスタは様々なエラーや割り込みの許可のマスクを含み、リセット値は0x00000000である。
Figure 0004227218
Figure 0004227218
p. ic_ipa
このレジスタはストリームAの命令フェッチに用いられる仮想アドレスの最上位30ビットを保持する。2つの最下位ビットは命令が整列されてるはずであるとして0に仮定される。このレジスタのリセット値は0x00000000である。
Figure 0004227218
q. ic_tda
このレジスタはストリームAの“to do”値を保持する。これは適正な命令が存在するまでの32ビット(ラッピング)のシーケンス番号である。このレジスタのリセット値は0x00000000である。
Figure 0004227218
r. ic_fna
このレジスタはストリームAの「終了」値を保持する。これは32ビット(ラッピング)のシーケンス番号で最後に完了した命令を示している。このレジスタのリセット値は0x00000000である。
Figure 0004227218
s. ic_inta
このレジスタはストリームAの「割り込み」番号を保持する。これは機構が有効であり用意されている場合にどこへ割り込みをかけるかの、32ビット(ラッピング)のシーケンス番号である。このレジスタのリセット値は0x00000000である。
Figure 0004227218
t. ic_loa
このレジスタはストリームAで実行される最後の重複命令の32ビット(ラッピング)のシーケンス番号を保持する。このレジスタのリセット値は0x00000000である。
Figure 0004227218
u. ic_ipb
このレジスタはストリームBの命令フェッチに用いられる仮想アドレスの最上位30ビットを保持する。2つの最下位ビットは命令が整列されているはずであるとして0に仮定される。このレジスタのリセット値は0x00000000である。
Figure 0004227218
Figure 0004227218
v. ic_tdp
このレジスタはストリームBの“to do”値を保持する。これは適正な命令が存在するまでの32ビット(ラッピング)番号である。このレジスタのリセット値は0x00000000である。
Figure 0004227218
w. ic_fnb
このレジスタはストリームBの「終了」値を保持する。これは32ビット(ラッピング)のシーケンス番号で最後に完了した命令を示している。このレジスタのリセット値は0x00000000である。
Figure 0004227218
x. ic_intb
このレジスタはストリームBの「割り込み」番号を保持する。これは機構が有効であり用意されている場合にどこへ割り込みをかけるかの、32ビット(ラッピング)のシーケンス番号である。このレジスタのリセット値は0x00000000である。
Figure 0004227218
y. ic_lob
このレジスタはストリームBで実行される最後の重複命令の32ビット(ラッピング)のシーケンス番号を保持する。このレジスタのリセット値は0x00000000である。
Figure 0004227218
z. ic_sema
このレジスタはic_statレジスタの副作用を用いたエイリアスであり、このレジスタの読み込はストリームAのレジスタセマフォの要求の副作用である。
aa. ic_semb
このレジスタはic_statレジスタの副作用を用いたエイリアスであり、このレジスタの読み込みはストリームBのレジスタセマフォの要求の副作用である。
入力インターフェースレジスタ
ab. iis_cfg
Figure 0004227218
Figure 0004227218
ac. iis_stat
Figure 0004227218
Figure 0004227218
ad. iis_err_int
Figure 0004227218
ae. iis_err_int_en
Figure 0004227218
Figure 0004227218
af. iis_ic_addr
Figure 0004227218
ag. iis_dcc_addr
Figure 0004227218
ah. iis_po_addr
Figure 0004227218
ai. iis_burst
Figure 0004227218
aj. iis_base_addr
Figure 0004227218
ak. iis_test
Figure 0004227218
Figure 0004227218
外部インターフェースコントローラレジスタ
al. eic_cfg
Figure 0004227218
Figure 0004227218
am. eic_stat
Figure 0004227218
Figure 0004227218
an. eic_err_int
eic_err_intレジスタのエラー及び割り込みビットはEICのみによって設定でき、ソフトウェアのみによってリセットできる。通常のエラー及び割り込みビットはそのビットに1を書き込むことでリセットされる。PCIコンフィギュレーションレジスタビットのコピーであるエラービットはPCIコンフィギュレーションレジスタに書き込むことでクリアされなければならない。すなわち、eic_err_intでのコピーは何も影響しない。
Figure 0004227218
Figure 0004227218
ao. eic_err_int_en
Figure 0004227218
Figure 0004227218
ap. eic_test
Figure 0004227218
aq. eic_pob
Figure 0004227218
ar. eic_high_addr
Figure 0004227218
as. eic_wtlb_v
Figure 0004227218
at. eic_wtlb_p
Figure 0004227218
Figure 0004227218
au. eic_mmu_v
注:このレジスタの値は、MMUがページフォールトエラーあるいはMMUからPCIバスのエラーにより無効でないなら、いつでも変更可能である。
Figure 0004227218
av. eic_mmu_p
注:このレジスタの値は、MMUがページフォールトエラーあるいはMMUからPCIバスのエラーにより無効でないなら、いつでも変更可能である。
Figure 0004227218
Figure 0004227218
aw. eic_ip_addr
注:このレジスタの値はIBDがIBusからPCIバスへのエラーによって無効でないならいつでも変更可能である。
Figure 0004227218
ax. eic_rp_addr
注:このレジスタの値はRBRがRBusからPCIバスへのエラーによって無効でないなら、いつでも変更可能である。
Figure 0004227218
ay. eic_ig_addr注:このレジスタの値はGBCが汎用バスのエラーによって無効でないなら、いつでも変更可能である。
Figure 0004227218
Figure 0004227218
az. eic_rg_addr
注:このレジスタの値はGBCが汎用バスのエラーによって無効でないなら、いつでも変更可能である。
Figure 0004227218
PCIバスコンフィギュレーション空間のエイリアス
16ワードからなるPCIバスコンフィギュレーシヨン空間は0xc0から0xcfまでのアドレスで示されるレジスタにエイリアスされている。
ローカルメモリコントローラレジスタ
ba. lmi_cfg
Figure 0004227218
Figure 0004227218
このレジスタはLMCの処理モードとパラメータを決定するのに用いられる多くのコンフィギュレーションビットと制御ビットを含む。sdram_1ピンがハイの時SDRAM処理を特別に参照するビットは全く影響を持たない。 このレジスタはclkinの周波数が80MHzのとき3.2マイクロ秒のリフレッシュ間隔であるようなリセット値0x20000100をもつ。すべての特別なモードや機能は電源投入時には無効であり、すべてのアクセス権限は等しく0に設定される。リフレッシュはリセット時に有効であるが、ほかのモジュールは無効(E=0)である。リフレッシュはEビットに影響されない。
bb. lmi_stat
Figure 0004227218
ステータスレジスタはマシン内部の情報と同様にモジュールのアクティブや未決定ビットからなる。ステートマシンはCBusインターフェースの2倍のクロックで駆動されており、従って最新の80MHzクロック2サイクルそれぞれの状態情報を保持するのには2フィールド必要である。
bc. lmi_err_int
Figure 0004227218
エラーと割り込みのステータスレジスタは割り込み、例外、エラー状態の情報を保持する。レジスタは読み書きでき、読み込みはステータス情報を返し、特定ビットへの1の書き込みはそのビットをリセットする。0の書き込みはそのビットに対して全く影響を持たない。
Figure 0004227218
Figure 0004227218
このレジスタはリセット値0x00000000を持たなくてはならず、これは割り込み及びエラーが発生していないことを示す。予約ビットは常に0であり決して状態を変更できない。
bd. lmi_err_int_enレジスタ
Figure 0004227218
エラー、例外、割り込み有効レジスタはエラー、例外割り込み信号の有効、無効の選択に用いられる。レジスタは読み書きできる。このレジスタはlmi_err_intレジスタ内のエラー、例外、割り込みそれぞれに基づいて、ビット単位で有効化するのに用いられる。このレジスタのビットとlmi_err_intレジスタのビットとの間には1対1の対応がある。もしlmi_err_int_enレジスタの特定のビットがハイになったらlmi_err_intレジスタの対応するビットが有効になり、それがハイであるならば、LMCモジュールエラー、例外あるいは割り込み信号、c_err、c_exp、あるいはc_intが発生できる。もしlmi_err_int_enレジスタの特定のビットがクリアされたらたらlmi_err_intレジスタの対応するビットが無効になり、c_err、c_expあるいはc_intを発生させることはできない。LMCには例外はないので、このレジスタのexp_maskビットは全く影響せず、すべて予約である。
このレジスタのリセット値はすべてのエラー及び割り込み源を無効にする0x00000000である。使用されないビットは常に0であり、ハイにセットすることはできない。
be. lmi_dcfg
Figure 0004227218
Figure 0004227218
このコンフィギュレーションレジスタはDRAMチップを使用する場合のサイズやコンフィギュレーションを決定する設計パラメータを保持する。 このレジスタはすべてのタイミング制限の値を最大値にするようなリセット値0x0007ff80を保持する。
bf. lmi_mode レジスタ
Figure 0004227218
このコンフィギュレーションレジスタは初期化処理の一環としてSDRAMモードレジスタに書き込まれる情報を保持する。このレジスタは常に読み書き可能で、初期化ビットをセットすることによってSDRAMに書き込んでも良い。
このレジスタはリセット値0x0037をもつ。この有用なデフォルト値は電源投入プリチャージ後あるいはレベル1のリセット後直ちに要求される。これは読み込み遅延を3クロックに設定し、バースト長をシーケンシャルラップを用いたフルページに設定する。
あらゆるリセットの後、もしsdram_1ピンがローであれば、SDRAMモードレジスタを初期的にプログラムするために、初期化ビットはセットされる。モードレジスタの書き込み実行後、このビットは自動的にゼロにクリアされる。
周辺インターフェースレジスタ
bg. pic_cfg レジスタ
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
bh. pic_stat
Figure 0004227218
Figure 0004227218
bi. pic_err_int
pic_err_intレジスタのエラーおよび割り込みビットはPICのみによりセットされ、ソフトウェアのみによってリセットされる。それぞれのビットは1を書き込むことでリセットされる
Figure 0004227218
Figure 0004227218
bj. pic_err_int_en
Figure 0004227218
Figure 0004227218
bk. pic_abus_cfg
Figure 0004227218
Figure 0004227218
bl. pic_abus_addr
Figure 0004227218
bm. pic_cent_cfg
pic_cent_cfgレジスタはセントロニクスモードが有効の場合に、すべてのインターフェースの局面を制御する読み込み/書き込み信号及び読み込み専用ステータス信号を含んでいる。
Figure 0004227218
Figure 0004227218
Figure 0004227218
bn. pic_cent_dir
Figure 0004227218
bo. pic_reverse_cfg
Figure 0004227218
bp. pic_timer0
Figure 0004227218
bq. pic_timer1
Figure 0004227218
Figure 0004227218
データキャッシュコントローラレジスタ
br. dcc_cfg1
Figure 0004227218
bs. dcc_cfg2
Figure 0004227218
Figure 0004227218
bt. dcc_stat
Figure 0004227218
bu. dcc_err_int
Figure 0004227218
bv. dcc_err_int_en
Figure 0004227218
bw. dcc_lv0
Figure 0004227218
bx. dcc_lv1
Figure 0004227218
Figure 0004227218
by. dcc_lv2
Figure 0004227218
bz. dcc_lv3
Figure 0004227218
ca. dcc_addr
Figure 0004227218
cb. dcc_raddrb
Figure 0004227218
cc. dcc_raddrc
Figure 0004227218
Figure 0004227218
cd. dcc_test
Figure 0004227218
Figure 0004227218
オペランドオーガナイザレジスタ オペランドオーガナイザレジスタには同様の2つのオペランドオーガナイザが存在する:オペランドオーガナイザBとオペランドオーガナイザCである。これらの2つのオペランドオーガナイザ用のレジスタはここに記述されている。
ce. oon_cfg(oob_cfg=0x70,ooc_cfg=0x80)
Figure 0004227218
cf. oon_stat(oob_cfg=0x71,ooc_cfg=0x81)
Figure 0004227218
Figure 0004227218
cg. oon_err_int(oob_err_int=0x72,err_int=0x82)
Figure 0004227218
ch. oon_err_int_en(oob_err_int_en=0x73,err_int_en=0x83)
Figure 0004227218
ci. oon_dmr(oob_dmr=0x74,ooc_dmr=0x84)
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
cj. oon_subst(oob_subst=0x75,ooc_subst=0x85)
Figure 0004227218
ck. oon_cdp(oob_cdp=0x76,ooc_cdp=0x86)
Figure 0004227218
cl. oon_len(oob_len=0x77,ooc_len=0x87)
Figure 0004227218
cm. oon_said(oob_said=0x78,ooc_said=0x88)
Figure 0004227218
cn. oon_tile(oob_tile=0x79,ooc_tile=0x89)
Figure 0004227218
Figure 0004227218
ピクセルオーガナイザレジスタ
co. po_cfg
Figure 0004227218
Figure 0004227218
cp. po_stat
Figure 0004227218
Figure 0004227218
cq. po_err_int
Figure 0004227218
cr. po_err_int_en
Figure 0004227218
cs. po_dmr
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
ct. po_subst
Figure 0004227218
cu. po_cdp
Figure 0004227218
cv. po_len
Figure 0004227218
cw. po_said
Figure 0004227218
cx. po_idr
Figure 0004227218
Figure 0004227218
cy. po_muv_valid
Figure 0004227218
cz. po_muv
Figure 0004227218
主データパスレジスタ
da. mdp_cfg すべてのビットは0にリセットされる。
Figure 0004227218
Figure 0004227218
db. mdp_stat
すべてのビットは0にリセットされる。
Figure 0004227218
Figure 0004227218
dc. mdp_err_int
すべてのビットは0にリセットされる。
Figure 0004227218
Figure 0004227218
dd. mdp_err_int_en
すべてのビットは0にリセットされる。
Figure 0004227218
Figure 0004227218
de. mdp_test すべてのビットは0にリセットされる。
Figure 0004227218
df mdp_op1 すべてのビットは0にリセットされる。
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
dg mdp op2 すべてのビットは0にリセットされる。
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
dh mdp_por すべてのビットは0にリセットされる。
Figure 0004227218
di mdp_bi すべてのビットは0にリセットされる。mdp_biレジスタは種々のモードの様々なものに用いられる。
Figure 0004227218
Figure 0004227218
Figure 0004227218
dj mdp_bm すべてのビットは0にリセットされる。mdp_bmレジスタは異なるモードの異なるものに用いられる。
Figure 0004227218
Figure 0004227218
dk mdp_len すべてのビットは0にリセットされる
Figure 0004227218
Figure 0004227218
JPEG符号化器レジスタ dl jc_cfg
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
dm jc stat
Figure 0004227218
dn jc_err_int
Figure 0004227218
do jc_err_int_en
Figure 0004227218
Figure 0004227218
dp jc_rsi
Figure 0004227218
dq jc_decode
Figure 0004227218
Figure 0004227218
dr jc_res
Figure 0004227218
Figure 0004227218
ds jc_table_sel
Figure 0004227218
結果オーガナイザレジスタ
dt ro_cfg
Figure 0004227218
Figure 0004227218
du ro_stat
Figure 0004227218
Figure 0004227218
dv ro_err_int
Figure 0004227218
dw ro_err_int_en
Figure 0004227218
dx ro_dmr
Figure 0004227218
Figure 0004227218
Figure 0004227218
dy ro_subst
Figure 0004227218
dz ro_cdp
Figure 0004227218
ea ro_len
Figure 0004227218
eb ro_sa
Figure 0004227218
ec ro_idr
Figure 0004227218
ed ro_vbase
Figure 0004227218
ee ro_cut
Figure 0004227218
ef ro_lmt
Figure 0004227218
PCIコンフィギュレーション空間のエイリアス PCIコンフィギュレーション空間は256バイトの、PCIによって定義されたレジスタのブロックであり、ホストがPCIデバイスをコンフィギュレーションしたり、その状態を読んだりすることを認めている。それはPCIコンフィギュレーションサイクルを用いてアクセスされる。レジスタはまたコプロセッサの内部メモリの読み込み専用エリアにミラーされており、従ってPCIの通常のメモリサイクルを用いて読むことができる。
EICに実装されているコンフィギュレーション空間のフォーマットを図1.1に示す。
図1.1 コプロセッサPCI構成の空間的レイアウト
図1.1
Figure 0004227218
予約のレジスタと実装されたレジスタにおける予約のビットは読み込みに対しては0を返し、また書き込みによって影響しない。0x40−0xffの範囲のコンフィギュレーション空間のアドレスもまた予約である。ベンダー専用のコンフィギュレーションレジスタは定義されない。
eg ベンダーID
このレジスタは読み込み専用である。CISRAのベンダーIDは0x11ACである。
eh デバイスID
このレジスタは読み込み専用である。コプロセッサのデバイスIDは0x0001である。デバイスIDフィールドは二つの8ビットのフィールドに分割されている:最上位の8ビットはデバイスの特徴をを示す番号(0x0はコプロセッサ)で、最下位の8ビットはそのデバイスのバージョン番号(0x1はコプロセッサのバージョン)を示す。
ei コマンドレジスタ
コマンドレジスタのフィールドの定義を表1.142に示す。このレジスタのすべての予約されていないビットは読みこみ/書き込みができる。リセット後にはこのレジスタは0x0000にセットされる。
Figure 0004227218
Figure 0004227218
ej ステータスレジスタ ステータスレジスタのフィールドの定義を表1.143に示す。このレジスタの読み込みは通常通りである。このレジスタのいくつかのビットは読み込み専用である。その他のビットはコプロセッサのみにより1にセットされ、ホストのみによって0にリセットされる(テストモードを除く)。ホストはそのビットに1を書き込むことでリセットする;0の書き込みは意味をなさない。リセット後にはこのレジスタは0x0280にセットされる。
Figure 0004227218
Figure 0004227218
Figure 0004227218
ek リビジョンID これは読み込み専用のレジスタである。コプロセッサの初期リビジョンIDは0x01である。 el クラスコード これは読み込み専用のレジスタである。コプロセッサはPCISIGの定義されたクラスコードに適さないのでこのレジスタは0xFF0000にセットされる。
em キャッシュラインサイズ
これは32ビットワード単位でシステムのキャッシュラインサイズを決定する読み書き可能なレジスタである。これはコプロセッサがメモリ読み込みラインやメモリ多重読み込みコマンドを使用するときに決定する。コプロセッサはこのレジスタの0から255までの値をサポートする。このレジスタにおける0はメモリ読み込みラインおよびメモリ多重読み込みの形式を無効にする。このレジスタはリセット時には0x00にセットされる。
en 遅延タイマ
このレジスタはすべてのPCIの処理にCPUが使用する最大のクロック数を特定する読み書きできるレジスタである。コプロセッサはこのレジスタにおいて0から255の値をサポートする。このレジスタはリセット時には0x00にセットされる。
eo ヘッダタイプ
この読み込み専用のレジスタは0x00にセットされる。このことはコプロセッサがタイプ0のレイアウトのコンフィギュレーション空間を使用することを意味する。
ep ベースアドレス
この読み書き可能なレジスタはコプロセッサの内部レジスタ、内部メモリ、ローカルメモリ、及び汎用インターフェースをホストのメモリマップ内に配置するために用いられる。コプロセッサの様々なリソースは64MB(すべてが使用される訳ではない)を占有し、従ってこのレジスタの先頭6ビットだけが書き込み可能である。残りのビットはすべて0にハード的に結線されている。このレジスタの下位の4ビットは読み込み専用の制御ビットであり、これらもまた0に結線されている。このことはレジスタがメモリ空間を参照することを意味し、コプロセッサがホスト側の32ビット空間のどこにでもマッピングされ、コプロセッサのリソースがターゲットであるときはプリフェッチできないことを意味する。
eq サブシステムベンダーID
この読み込み専用レジスタはホストがシステムに実装されたPCIボードのベンダーを識別できるようにする(ボード上のPCIインターフェースに実装したコンポーネントのベンダーに対して)。このレジスタの内容はリセット時にEICコンフィギュレーションシリアルポートを用いてロードされる。
er サブシステムID
この読み込み専用レジスタはホストがシステムに実装されたPCIボードを識別できるようにする。このレジスタの内容はリセット時にEICコンフィギュレーションシリアルポートを用いてロードされる。このメカニズムはボードの機能あるいはコンフィギュレーションに必要な情報の外部からの符号化およびホストからの読み込みを可能にする。
es 割り込みライン
この読み書きできるレジスタはシステムソフトウェアが割り込みラインルーティング情報を記録できる様にするために使用され、割り込みサービスソフトウェアによりアクセスできる。コプロセッサ内の処理には全く影響を与えない。このレジスタはリセット時には0x00にセットされる。
et 割り込みピン
この読み込み専用レジスタはハード的に0x01に結線されている。このことはコプロセッサがPCIのinta_1割り込みピンを使用することを示す。
eu Min_Gnt
この読み込み専用レジスタはコプロセッサが要求する1/4マイクロ秒単位のバースト期間長をホストに示す。このレジスタの最適な値はまだ決まっていない。
ev Max_Lat
この読み込み専用レジスタは1/4マイクロ秒単位での、コプロセッサが要求するPCIバスのゲインコントロール最大遅延をホストに示す。このレジスタの最適な値はまだ決まっていない。
1.1.4 内部メモリマップ
本節ではコプロセッサの内部メモリマップ内のプレモジュールデータエリアに生ずるオブジェクトの詳細について述べる。
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
Figure 0004227218
1.1.5 メモリワードフィールド a eic_ptp
Figure 0004227218

【図面の簡単な説明】
【図1】ホストコンピュータ環境内のラスタ画像コプロセッサの動作を示す図、
【図2】図1のラスタ画像コプロセッサをより詳細に示した図、
【図3】ラスタ画像コプロセッサのメモリマップを示す図、
【図4】CPU,命令キュー、命令オペランド、共有メモリ中の結果、コプロセッサ間の関係を示す図、
【図5】命令生成部、メモリ管理部、キュー管理部、コプロセッサ間の関係を示す図、
【図6】命令をペンディング命令キューから読み込み、終了命令キューに配置するグラフィックスコプロセッサの動作を示す図、
【図7】命令キューの固定長巡回バッファ実装を示し、バッファが溢れるまで待機しする必要性を説明する図、
【図8】コプロセッサにおいて用いられる命令実行ストリームを示す図、
【図9】命令実行フローチャート、
【図10】コプロセッサにおいて用いられる標準命令ワードフォーマットを示す図、
【図11】標準命令の命令ワードフィールドを示す図、
【図12】標準命令のデータワードフィールドを示す図、
【図13】図2の命令制御部を模式的に示す図、
【図14】図13の実行制御部をより詳細に示した図、
【図15】命令制御部の状態遷移図、
【図16】図13の命令復号部を示す図、
【図17】図16の命令シーケンサをより詳細に示した図、
【図18】図16のIDシーケンサの状態遷移図、
【図19】図13のプレフェッチバッファ制御部をより詳細に示した図、
【図20】コプロセッサで用いられるレジスタ記憶とモジュール間関連の標準形式を示す図、
【図21】コプロセッサにおいて用いられる制御バス処理のフォーマットを示す図、
【図22】コプロセッサの一部内のデータフローを示す図、
【図23】コプロセッサにおいて用いられるさまざまなデータ再フォーマット例を示す図、
【図24】コプロセッサにおいて用いられるさまざまなデータ再フォーマット例を示す図、
【図25】コプロセッサにおいて用いられるさまざまなデータ再フォーマット例を示す図、
【図26】コプロセッサにおいて用いられるさまざまなデータ再フォーマット例を示す図、
【図27】コプロセッサにおいて用いられるさまざまなデータ再フォーマット例を示す図、
【図28】コプロセッサにおいて用いられるさまざまなデータ再フォーマット例を示す図、
【図29】コプロセッサにおいて用いられるさまざまなデータ再フォーマット例を示す図、
【図30】コプロセッサにおいて実行されるフォーマット変換を示す図、
【図31】コプロセッサにおいて実行されるフォーマット変換を示す図、
【図32】コプロセッサにおいて実行される入力データ変換処理を示す図、
【図33】コプロセッサにおいて実行されるさまざまなデータ変換を示す図、
【図34】コプロセッサにおいて実行されるさまざまなデータ変換を示す図、
【図35】コプロセッサにおいて実行されるさまざまなデータ変換を示す図、
【図36】コプロセッサにおいて実行されるさまざまなデータ変換を示す図、
【図37】コプロセッサにおいて実行されるさまざまなデータ変換を示す図、
【図38】コプロセッサにおいて実行されるさまざまなデータ変換を示す図、
【図39】コプロセッサにおいて実行されるさまざまなデータ変換を示す図、
【図40】コプロセッサにおいて実行されるさまざまなデータ変換を示す図、
【図41】コプロセッサにおいて実行されるさまざまなデータ変換を示す図、
【図42】コプロセッサにおいて実行されるさまざまな内部から出力データ変換を示す図、
【図43】コプロセッサにおいて実行されるさまざまなデータ変換例を示す図、
【図44】コプロセッサにおいて実行されるさまざまなデータ変換例を示す図、
【図45】コプロセッサにおいて実行されるさまざまなデータ変換例を示す図、
【図46】コプロセッサにおいて実行されるさまざまなデータ変換例を示す図、
【図47】コプロセッサにおいて実行されるさまざまなデータ変換例を示す図、
【図48】どのデータ変換が用いられるべきかを決定する内部レジスタで用いられるさまざまなフィールドを示す図、
【図49】データ正規化を用いるグラフィックスサブシステムのブロック図、
【図50】データ正規化装置の回路図、
【図51】合成処理において実行されるピクセル処理を示す図、
【図52】合成処理のための命令ワードフォーマットを示す図、
【図53】合成処理のためのデータワードフォーマットを示す図、
【図54】タイル処理のための命令ワードフォーマットを示す図、
【図55】画像に対するタイル命令の動作を示す図、
【図56】色値を再マッピングするための色区間/区間内位置テーブルの利用処理を示す図、
【図57】コプロセッサのMUVバッファ内の区間/区間内位置テーブルの格納形式を示す図、
【図58】コプロセッサにおいて実行される補間を用いた色変換処理を示す図、
【図59】コプロセッサにおいて実行されるエッジでの色変換処理の改善処理を示す図、
【図60】コプロセッサにおいて実行される1出力色のための色空間変換処理を示す図、
【図61】単一色出力色空間変換を用いたときのコプロセッサのキャッシュ内でのメモリ格納を示す図、
【図62】複数色空間変換で用いられる手法を示す図、
【図63】複数色空間変換処理において用いられるキャッシュのためのアドレス再マッピング処理を示す図、
【図64】色空間変換命令における命令ワードフォーマットを示す図、
【図65】複数色変換手法を示す図、
【図66】コプロセッサで実行されるJPEG変換処理でのMCUの生成を説明する図、
【図67】コプロセッサで実行されるJPEG変換処理でのMCUの生成を説明する図、
【図68】コプロセッサのJPEG符号化部の構造を示す図、
【図69】図68の量子化部をより詳細に示す図、
【図70】図68のハフマン符号化部をより詳細に示す図、
【図71】ハフマン符号化部と復号部とを示す図、
【図72】ハフマン符号化部と復号部とを示す図、
【図73】コプロセッサで用いられるJPEGデータの削除・制約処理を説明する図、
【図74】コプロセッサで用いられるJPEGデータの削除・制約処理を説明する図、
【図75】コプロセッサで用いられるJPEGデータの削除・制約処理を説明する図、
【図76】JPEG命令の命令ワードフォーマットを示す図、
【図77】一般の離散コサイン変換装置(従来例)のブロック図、
【図78】従来例のDCT装置の算術データパスを示す図、
【図79】コプロセッサで用いられるDCT装置のブロック図、
【図80】図79の算術回路をより詳細に示すブロック図、
【図81】図79のDCT装置の算術データパスを示す図、
【図82】JPEGフォーマットのように符号化されていないビットフィールド(バイト整列されているものとされていないもの)がインタリーブされた代表的なハフマン符号化データを示す図、
【図83】図84のJPEGデータのハフマン復号部の全体の構造をより詳細に示した図、
【図84】JPEGデータのハフマン復号部の全体の構造を示す図、
【図85】バイト整列された符号化されていないビットフィールドを入力データから削除するストリッパブロック中のデータ処理を示し、ストリッパから出力されるデータに対応するタグ符号の例をも示す図、
【図86】データプレシフタの構成とデータフローを示す図、
【図87】図81の復号部の制御ロジックを示す図、
【図88】マーカプレシフタの構成とデータフローを示す図、
【図89】JPEG符号化においてハフマン符号値を復号する組み合わせ回路のブロック図、
【図90】パディング領域の概念とパディングビットの復号部のブロック図、
【図91】復号部から出力され、コプロセッサにおいて用いられるデータフォーマットの例を示す図、
【図92】画像変換命令において用いられる手法を示す図、
【図93】画像変換命令における命令ワードフォーマットを示す図、
【図94】コプロセッサで用いられる画像変換カーネルのフォーマットを示す図、
【図95】コプロセッサで用いられる画像変換カーネルのフォーマットを示す図、
【図96】コプロセッサで用いられる画像変換のためのインデックステーブルの利用処理を示す図、
【図97】変換や畳込みで用いる命令のためのデータフィールドフォーマットを示す図、
【図98】命令ワードのbpフィールドの説明図、
【図99】コプロセッサで用いられる畳込み処理を示す図、
【図100】コプロセッサで用いられる畳込み命令の命令ワードフォーマット図、
【図101】コプロセッサで用いられる行列乗算の命令ワードフォーマット図、
【図102】コプロセッサで用いられる階層的画像操作処理を示す図、
【図103】コプロセッサで用いられる階層的画像操作処理を示す図、
【図104】コプロセッサで用いられる階層的画像操作処理を示す図、
【図105】コプロセッサで用いられる階層的画像操作処理を示す図、
【図106】階層的画像命令での命令ワード符号を示す図、
【図107】コプロセッサで用いられるフロー制御命令の命令ワード符号を示す図、
【図108】ピクセルオーガナイザをより詳細に示す図、
【図109】ピクセルオーガナイザにおけるオペランドフェッチ部をより詳細に示す図、
【図110】コプロセッサで用いられる種々の格納フォーマットを示す図、
【図111】コプロセッサで用いられる種々の格納フォーマットを示す図、
【図112】コプロセッサで用いられる種々の格納フォーマットを示す図、
【図113】コプロセッサで用いられる種々の格納フォーマットを示す図、
【図114】コプロセッサで用いられる種々の格納フォーマットを示す図、
【図115】コプロセッサのピクセルオーガナイザにおけるMUVアドレス生成部をより詳細に示す図、
【図116】コプロセッサで用いられる多重値(MUV)バッファのブロック図、
【図117】図116の符号化器の構造を示す図、
【図118】図116の復号器の構造を示す図、
【図119】JPEGモード(ピクセル分解)において読み出しアドレスを生成する図116のアドレス生成部の構造を示す図、
【図120】JPEGモード(ピクセル復元)において読み出しアドレスを生成する図116のアドレス生成部の構造を示す図、
【図121】図116の記憶装置を備えるメモリモジュールの構成を示す図、
【図122】読み出しアドレスをメモリモジュールに多重化する回路の構造を示す図、
【図123】単一ルックアップテーブルモードで動作するバッファ内にルックアップテーブルエントリがどのように格納されるかを示す図、
【図124】多重ルックアップテーブルモードで動作するバッファ内にルックアップテーブルエントリがどのように格納されるかを示す図、
【図125】JPEGモード(ピクセル分解)で動作するバッファ内にピクセルがどのように格納されるかを示す図、
【図126】JPEGモード(ピクセル復元)で動作するバッファから単一カラーがどのように格納されるかを示す図、
【図127】コプロセッサの結果オーガナイザの構造をより詳細に示す図、
【図128】コプロセッサのオペランドオーガナイザの構造をより詳細に示す図、
【図129】コプロセッサにおいて用いられる主データパス部のためのコンピュータアーキテクチャのブロック図、
【図130】更なる処理のために入力データオブジェクトを受け取り、格納し、再配列するための入力インターフェースのブロック図、
【図131】入力データオブジェクトに対して算術演算を実行するための画像データプロセッサのブロック図、
【図132】入力データオブジェクトの1つのチャネルに対して算術演算を実行するためのカラーチャネルプロセッサのブロック図、
【図133】カラーチャネルプロセッサにおける多機能ブロックのブロック図、
【図134】合成動作のためのブロック図、
【図135】スキャンラインの逆変換を示す図、
【図136】指定されたピクセルにおける値を計算するために必要なステップのブロック図、
【図137】画像変換エンジンのブロック図、
【図138】カーネルデスクリップションにおける2つのフォーマットを示す図、
【図139】bpフィールドの定義と解釈を示す図、
【図140】行列乗算を実行する乗算・加算部のブロック図、
【図141】コプロセッサでのキャッシュ及びキャッシュ制御部における制御、アドレス及びデータフローを示す図、
【図142】キャッシュのメモリ構成を示す図、
【図143】コプロセッサにおけるキャッシュ制御部のためのアドレスフォーマットを示す図、
【図144】カラーチャネルプロセッサにおける多機能ブロックのブロック図、
【図145】図144のキャッシュ及びキャッシュコントローラのコプロセッサ入力インターフェーススイッチを示す図、
【図146】主アドレス及びデータパスを示すコプロセッサの4ポートダイナミックローカルメモリ制御部を示す図、
【図147】図146の制御部における状態機構図、
【図148】図146の仲裁部における機能を詳細にリストした擬似コードを示す図、
【図149】図146において用いられる要求者プライオリティビットの構造および用語を示す図、
【図150】コプロセッサにおける外部インターフェース制御部をより詳細に示す図、
【図151】コプロセッサで用いられる物理アドレスへのマッピング処理又は物理アドレスからのマッピング処理を示す図、
【図152】コプロセッサで用いられる物理アドレスへのマッピング処理又は物理アドレスからのマッピング処理を示す図、
【図153】コプロセッサで用いられる物理アドレスへのマッピング処理又は物理アドレスからのマッピング処理を示す図、
【図154】コプロセッサで用いられる物理アドレスへのマッピング処理又は物理アドレスからのマッピング処理を示す図、
【図155】図150におけるIBus受信部をより詳細に示す図、
【図156】図2におけるRBus受信部をより詳細に示す図、
【図157】図150におけるメモリ管理部をより詳細に示す図、
【図158】図2における周辺インターフェース制御部をより詳細に示す図である。

Claims (8)

  1. コンピュータシステムにおいてホストCPUと少なくとも1つのコプロセッサとの間の協動作業を制御してCPU命令とコプロセッサ命令を略同時に別々に実行させ、これら命令の実行時に共通して使用されるメモリ空間を動的に割当てる制御方法であって、
    前記ホストCPUが、前記コプロセッサで実行されるべき命令セットにより使用されるメモリ資源を割当てる割当てステップと、
    前記ホストCPUが、前記実行されるべき命令セットを、ペンディング命令キューに挿入する挿入ステップと、
    前記コプロセッサが、前記ペンディング命令キューの中で実行した命令を終了命令キューに転送する転送ステップと、
    前記ホストCPUが、メモリ要求を満たすメモリが得られなかった場合に、前記終了命令キューに含まれている全ての命令で使用されていたメモリ資源を解放する解放ステップと、
    を有することを特徴とする制御方法。
  2. 前記CPUによる処理が中断され、前記ペンディング命令キューの内の所定量の命令が実行された後、前記解放ステップが実行されることを特徴とする請求項1に記載の制御方法。
  3. 前記所定量は、1/3,1/2,2/3のいずれかであることを特徴とする請求項に記載の制御方法。
  4. 前記ペンディング命令キューの内の所定数の命令が実行された後、前記解放ステップが実行されることを特徴とする請求項1に記載の制御方法。
  5. 所定サイズのメモリ、ホストCPU及び少なくとも1つのコプロセッサを有するコンピュータシステムにおける動的メモリ管理装置であって、
    前記ホストCPUに接続され、前記コプロセッサを実行させる命令列を発生する命令発生手段と、
    前記メモリ及び前記命令発生手段に接続され、前記コプロセッサの命令列を実行させるのに使用される前記コプロセッサのためのメモリ空間を動的に割当するメモリ管理手段と、
    前記命令発生手段、前記メモリ管理手段及び前記コプロセッサに接続され、当該コプロセッサにより実行されるペンディング中の命令のキューと前記コプロセッサにより実行された命令の一掃キューとに前記命令列を記憶するキュー管理手段とを有し、前記キュー管理手段は、前記メモリ管理手段がメモリ空間に対する要求を満足できないとき、実行済みの全ての命令を前記一掃キューから除去し、当該除去された命令に割り当てられていたメモリ空間を再度割当てることを特徴とする動的メモリ管理装置。
  6. 前記一掃キューから実行済みの命令を除去した後、前記メモリ管理手段が依然としてメモリ空間に対する要求を満足できないとき、前記コプロセッサにより実行されるペンディング中の命令のキューの所定量が当該コプロセッサにより実行されるまで、前記CPUによる処理が中断されることを特徴とする請求項に記載の動的メモリ管理装置。
  7. 前記所定量は1/3,1/2、及び2/3のいずれかであることを特徴とする請求項に記載の動的メモリ管理装置。
  8. 前記コプロセッサにより実行されるペンディング中の命令のキューの所定数の命令が前記コプロセッサにより実行されるまで、前記CPUによる処理が中断されることを特徴とする請求項に記載の動的メモリ管理装置。
JP16941698A 1997-04-30 1998-04-30 動的メモリ管理装置及びその制御方法 Expired - Fee Related JP4227218B2 (ja)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
AU6483 1994-06-27
AU6487 1997-04-30
AU6491 1997-04-30
AUPO6491A AUPO649197A0 (en) 1997-04-30 1997-04-30 Multi-instruction stream processor
AUPO6483A AUPO648397A0 (en) 1997-04-30 1997-04-30 Improvements in multiprocessor architecture operation
AUPO6487A AUPO648797A0 (en) 1997-04-30 1997-04-30 Page table pointers for co-processor virtual memory systems

Publications (2)

Publication Number Publication Date
JPH1185969A JPH1185969A (ja) 1999-03-30
JP4227218B2 true JP4227218B2 (ja) 2009-02-18

Family

ID=27157992

Family Applications (1)

Application Number Title Priority Date Filing Date
JP16941698A Expired - Fee Related JP4227218B2 (ja) 1997-04-30 1998-04-30 動的メモリ管理装置及びその制御方法

Country Status (1)

Country Link
JP (1) JP4227218B2 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100354768B1 (ko) 2000-07-06 2002-10-05 삼성전자 주식회사 영상 코덱 시스템, 그 시스템과 외부 호스트 시스템과의데이터 처리방법 및 그 시스템에서의 인코딩/디코딩제어방법
US8284844B2 (en) 2002-04-01 2012-10-09 Broadcom Corporation Video decoding system supporting multiple standards
KR100460009B1 (ko) * 2004-06-23 2004-12-04 엔에이치엔(주) 이미지 리소스를 로딩하는 방법 및 이미지 리소스 로딩시스템
EP3557425A1 (en) * 2018-04-19 2019-10-23 Aimotive Kft. Accelerator and system for accelerating operations
JP7103162B2 (ja) 2018-10-30 2022-07-20 富士通株式会社 演算処理装置及び演算処理装置の制御方法
KR102611162B1 (ko) 2019-04-04 2023-12-06 캠브리콘 테크놀로지스 코퍼레이션 리미티드 데이터 처리 장치 및 관련 제품
CN111831337B (zh) 2019-04-19 2022-11-29 安徽寒武纪信息科技有限公司 数据同步方法及装置以及相关产品
CN111782577B (zh) 2019-04-04 2023-03-24 安徽寒武纪信息科技有限公司 数据处理装置及方法以及相关产品
EP3825847B1 (en) * 2019-04-04 2022-05-11 Cambricon Technologies Corporation Limited Data processing method and apparatus, and related product
CN111949556A (zh) * 2019-05-14 2020-11-17 北京兆易创新科技股份有限公司 一种非易失存储器读处理方法及装置
CN112699067A (zh) * 2021-01-04 2021-04-23 瑞芯微电子股份有限公司 一种指令寻址方法及装置

Also Published As

Publication number Publication date
JPH1185969A (ja) 1999-03-30

Similar Documents

Publication Publication Date Title
EP0875859B1 (en) Method and apparatus for decoding data
US6259456B1 (en) Data normalization techniques
US6336180B1 (en) Method, apparatus and system for managing virtual memory with virtual-physical mapping
US6414687B1 (en) Register setting-micro programming system
US6707463B1 (en) Data normalization technique
US6289138B1 (en) General image processor
US6118724A (en) Memory controller architecture
US6237079B1 (en) Coprocessor interface having pending instructions queue and clean-up queue and dynamically allocating memory
JP4101253B2 (ja) 圧縮装置及びその方法
US7230633B2 (en) Method and apparatus for image blending
US7681013B1 (en) Method for variable length decoding using multiple configurable look-up tables
JP4227218B2 (ja) 動的メモリ管理装置及びその制御方法
JP3729540B2 (ja) 画像処理装置
JP4298006B2 (ja) 画像プロセッサ及びその画像処理方法
AU739533B2 (en) Graphics processor architecture
AU728882B2 (en) Compression
JPH11167627A (ja) 画像処理装置及びその方法
AU760297B2 (en) Memory controller architecture
AU766467B2 (en) Graphics processing system
AU727990B2 (en) Graphics processing system
AU717336B2 (en) Graphics processor architecture
US7558947B1 (en) Method and apparatus for computing vector absolute differences
DE69835392T2 (de) Graphisches Verarbeitungssystem

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20050428

RD01 Notification of change of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7426

Effective date: 20050428

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20050428

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080523

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20080717

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080722

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20080807

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20080822

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20081021

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20081125

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20081128

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

Free format text: PAYMENT UNTIL: 20111205

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20121205

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20131205

Year of fee payment: 5

LAPS Cancellation because of no payment of annual fees