(57)【特許請求の範囲】
【請求項１】
画像データを転送するためのバス制御装置であって、
画像データを入力する入力手段と、
メモリに接続され、入力された画像データをバースト転送モードで前記メモリに転送するための第１のデータバスと、
前記メモリに接続され、入力された画像データをシングル転送モードで前記メモリに転送するための第２のデータバスと、
転送される画像データのバウンダリがバースト転送モードで転送されるデータのバウンダリと一致しているか否か判定する判定手段と、
前記判定手段により画像データのバウンダリがバースト転送モードで転送されるデータのバウンダリと一致していると判定された場合、前記画像データを前記第１のデータバスによりバースト転送モードで転送し、画像データのバウンダリがバースト転送モードで転送されるデータのバウンダリと一致していないと判定された場合、前記画像データを前記第２のデータバスによりシングル転送モードで転送する制御手段と
を備えることを特徴とするバス制御装置。
【請求項２】
前記制御手段は、所定サイズのメモリ空間に画像データを転送する２次元ＤＭＡ転送を行うことを特徴とする請求項１に記載のバス制御装置。
【請求項３】
前記制御手段は、半導体基板上に集積されていることを特徴とする請求項１または２に記載のバス制御装置。
【請求項４】
画像データを転送するための制御装置であって、
メモリに接続され、前記メモリに格納された画像データをバースト転送モードで出力部に転送するための第１のデータバスと、
前記メモリに接続され、前記メモリに格納された画像データをシングル転送モードで前記出力部に転送するための第２のデータバスと、
転送される画像データのバウンダリがバースト転送モードで転送されるデータのバウンダリと一致しているか否か判定する判定手段と、
前記判定手段により画像データのバウンダリがバースト転送モードで転送されるデータのバウンダリと一致していると判定された場合、前記画像データを前記第１のデータバスによりバースト転送モードで転送し、画像データのバウンダリがバースト転送モードで転送されるデータのバウンダリと一致していないと判定された場合、前記画像データを前記第２のデータバスによりシングル転送モードで転送する制御手段と
を備えることを特徴とする制御装置。
【請求項５】
前記制御手段は、所定サイズのメモリ空間に画像データを転送する２次元ＤＭＡ転送を行うことを特徴とする請求項４に記載のバス制御装置。
【請求項６】
前記制御手段は、半導体基板上に集積されていることを特徴とする請求項４または５に記載のバス制御装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、例えばスキャナ等の画像入力装置やプリンタ等の画像出力装置のデータを効率的に制御するバス制御装置に関するものである。
【０００２】
【従来の技術】
従来、スキャナなどの画像入力装置とプリンタなどの画像出力装置とを組み合わせた複写機やファクシミリ、あるいはそれらを単体として備えたコンピュータシステムなど、デジタル複合機器と呼ばれる画像処理装置が実用化されている。このような装置では、画像入力機能、画像出力機能、コピー機能等の複合機能を実現するために、画像入力装置及び画像出力装置が同期して動作することが不可能な場合には、画像入力装置から一旦メモリに取り込んだ画像データを画像出力装置に出力することでコピー機能を実現していた。また、画像入力装置及び画像出力装置が同期して動作することが可能な場合には、画像入力装置から画像出力装置へ直接画像信号を転送する経路を設けてコピー機能を実現していた。
【０００３】
【発明が解決しようとする課題】
しかしながら、画像データは一般に非常に大きなサイズを有することが多く、例えば画像入力装置−メモリ−画像出力装置間のデータ転送を高速に行うための機構が必要である。それに加えて、転送すべき画像サイズは様々であり、画像データの転送に用いるバス幅が画像データのバウンダリに一致しないことも多い。この画像データのバウンダリに合わせたデータ転送を行う機構を画像伝送用のバスに設けると、その機構によりバスの転送速度が損なわれることになる、といった問題があった。
【０００４】
本発明は上記従来例に鑑みて成されたもので、高速な画像データの転送と画像データのバウンダリに合わせた画像データの転送とを両立することのできるバス制御装置を提供することを目的とする。
【０００５】
【課題を解決するための手段】
上記目的を達成するために、本発明では、バス幅に適合したデータを転送する場合には第１のバスを使用してデータを転送し、バス幅に適合しないデータを転送する場合には、シングル転送が可能な第２のバスを使用してデータを転送する。
【０００６】
また、本発明は次のような構成からなる。すなわち、画像データを転送するためのバス制御装置であって、画像データを入力する入力手段と、メモリに接続され、入力された画像データをバースト転送モードで前記メモリに転送するための第１のデータバスと、前記メモリに接続され、入力された画像データをシングル転送モードで前記メモリに転送するための第２のデータバスと、転送される画像データのバウンダリがバースト転送モードで転送されるデータのバウンダリと一致しているか否か判定する判定手段と、前記判定手段により画像データのバウンダリがバースト転送モードで転送されるデータのバウンダリと一致していると判定された場合、前記画像データを前記第１のデータバスによりバースト転送モードで転送し、画像データのバウンダリがバースト転送モードで転送されるデータのバウンダリと一致していないと判定された場合、前記画像データを前記第２のデータバスによりシングル転送モードで転送する制御手段とを備える。
【０００９】
また好ましくは、前記制御手段は、所定サイズのメモリ空間に画像データを転送する２次元ＤＭＡ転送を行う。
【００１０】
また好ましくは、前記第１のバス及び第２のバス制御手段は、半導体基板上に集積された構成される。
【００１１】
【発明の実施の形態】
次に本発明の実施の形態として、プロセッサコア、プロセッサ周辺コントローラ、メモリコントローラ、スキャナ／プリンタコントローラ、ＰＣＩインターフェースなどを内蔵したシングルチップ・スキャニング・プリンティングエンジンである“ＤｏＥｎｇｉｎｅ”を説明する。
【００１２】
１．ＤｏＥｎｇｉｎｅ概要
ＤｏＥｎｇｉｎｅは、ＭＩＰＳテクノロジー社のＲ４０００プロセッサとコンパチブルなプロセッサコア、プロセッサ周辺コントローラ、メモリコントローラ、スキャナー／プリンタコントローラ、ＰＣＩインターフェースなどを内蔵したシングルチップ・スキャニング・プリンティングエンジンである。高速並列動作、ビルディングブロック手法を採用し実装される。
【００１３】
プロセッサシェル（プロセッサコアを含むプロセッサ周辺回路の総称）内には最大でインストラクション、データそれぞれ１６Ｋバイトの計３２Ｋバイトのキャッシュメモリ、ＦＰＵ（浮動小数点演算ユニット）、ＭＭＵ（メモリ管理ユニット）、ユーザー定義可能なコプロセッサなどを内蔵することが可能である。
【００１４】
ＰＣＩバスインターフェースを有するので、ＰＣＩバススロットを有するコンピュータシステムと共に用いることができる。また、ＰＣＩサテライト構成に加え、ＰＣＩホストバスブリッジ構成にてＰＣＩバスコンフィギュレーションを発行することが可能であり、安価なＰＣＩ周辺デバイスと組み合わせることにより、マルチファンクションペリフェラル（複合機能周辺機器）のメインエンジンとして使用することも可能である。さらにＰＣＩバスインターフェースを有するレンダリングエンジン、圧縮・伸長エンジンと組み合わせることも可能である。
【００１５】
チップ内部に汎用ＩＯコアを接続するＩＯバス（Ｂバス）、及び、画像データ転送に最適化したグラフィックバス（Ｇバス:Graphics Bus)の２系統の独立したバスを有し、メモリ、プロセッサとこれらのバスをクロスバスイッチを介して接続することにより、マルチファンクションシステムにおける同時動作に必須の、並列性の高い高速データ転送を実現している。
【００１６】
メモリには、画像データに代表される、連続したデータ列のアクセスに対し、最高のコストパフォーマンスを有するシンクロナスＤＲＡＭ（ＳＤＲＡＭ）をサポートし、ＳＤＲＡＭのバーストアクセス高速データ転送のメリットを享受できない小さなデータ単位でのランダムアクセスにおける性能低下を最小に抑えるために、８Ｋバイトの２ウェイセットアソシアティブ・メモリフロントキャッシュをメモリコントローラ内に備える。メモリフロントキャッシュは、すべてのメモリライトに対するバススヌープが難しい、クロスバスイッチを採用したシステム構成においても、複雑な機構なしに、キャッシュメモリによる高性能化が達成出来る方式である。また、リアルタイムデータ転送（機器制御）が可能な、プリンタ及びスキャナーとのデータインターフェース(Video Interface)を有し、さらにハードウェアによる、機器間同期のサポート及び画像処理を行う事により、スキャナ、プリンタ分離型の構成においても、高品質で高速なコピー動作の実現が可能な構成となっている。
【００１７】
なお、ＤｏＥｎｇｉｎｅは、コアが３．３Ｖで動作し、ＩＯは５Ｖトレラントである。
【００１８】
図１及び図２，図３は、ＤｏＥｎｇｉｎｅを用いた装置あるいはシステムの構成例を示している。図１は分離構成型であり、パーソナルコンピュータ１０２には、それが備えるＰＣＩインターフェースを介してＤｏＥｎｇｉｎｅを備えたローカルボード１０１が装着される。ローカルボード１０１にはＤｏＥｎｇｉｎｅのほか、後述するメモリバスを介してＤｏＥｎｇｉｎｅと接続されたメモリと、色処理回路（チップ）が設けられている。このローカルボード１０１を介して、高速スキャナ１０３とカラー／モノクロプリンタ１０４とがパーソナルコンピュータ１０２に接続される。この構成により、パーソナルコンピュータの制御のもとで，ローカルボード１０１により、スキャナ１０３から入力された画像情報を処理し、プリンタ１０４から出力させることができる。
【００１９】
また、図２及び図３はスキャナ２０３とプリンタ２０２とを一体に組み込んだ例で、図２は通常の複写機に類する構成を、図３（ａ）はファクシミリ装置などの構成を示している。図３（ｂ）は、図３（ａ）をコントロールするコンピュータを示している。
【００２０】
これらのうち、図１，２は、ＰＣＩインターフェースを介して接続された外部のＣＰＵによりＤｏＥｎｇｉｎｅが制御されるというスレーブモードで使用されている例であり、図３は、ＤｏＥｎｇｉｎｅのＣＰＵが主体となり、ＰＣＩインターフェースを介して接続されたデバイスを制御するマスタモードで使用されている例である。
【００２１】
表１として、ＤｏＥｎｇｉｎｅの仕様を示す。外部インターフェースとして、ＰＣＩ，メモリバス，ビデオ，汎用入出力，ＩＥＥＥ１２８４，ＲＳ２３２Ｃ，１００ｂａｓｅＴ／１０ｂａｓｅＴ，ＬＣＤパネル及びキーを備えるが、更にＵＳＢを有していてもよい。内蔵ブロックとして、ＣＰＵコアに加えて、１次キャッシュ，キャッシュ付きメモリコントローラ，コピーエンジン，ＩＯバスアービタ（Ｂバスアービタ），グラフィックバスアービタ（Ｇバスアービタ）などを備えている。また、DMAコントローラはチャネル数が５であり、グラフィックバス（Ｇバス），ＩＯバス（Ｂバス）ともに、アービトレーションは優先度付きの先着順処理方式で行われる。
【表１】
0003976927.tif 000002
２．ＤｏＥｎｇｉｎｅの構成及び動作
本章では、ＤｏＥｎｇｉｎｅ の総論に加え、各機能ブロック毎のブロック図、概要、詳細、コアインターフェース、タイミング図などを解説する。
【００２２】
２．１．ＤｏＥｎｇｉｎｅのチップ構成
図４として、ＤｏＥｎｇｉｎｅのブロック図を示す。ＤｏＥｎｇｉｎｅ４００は次世代複合機能周辺機器（システム）(MFP:Multi Function Peripheral or MFS:Multi Function System)の主たるコントローラとして設計、開発された。
【００２３】
ＣＰＵ（プロセッサコア）４０１として、ＭＩＰＳテクノロジー社のＭＩＰＳＲ４０００コアを採用する。プロセッサコア４０１内には、８Ｋバイトずつのインストラクション，データのキャッシュメモリ、ＭＭＵなどが実装される。プロセッサコア４０１は、６４ビットのプロセッサバス（ＳＣバス）を介して、システム・バス・ブリッジ（ＳＢＢ）４０２に接続される。ＳＢＢ４０２は４×４の６４ビットクロスバスイッチであり、プロセッサコア４０１の他に、キャッシュメモリを備えたＳＤＲＡＭやＲＯＭを制御するメモリコントローラ４０３と専用のローカルバス（ＭＣバス）で接続されており、さらに、グラフィックバスであるＧバス４０４、ＩＯバスであるＢバス４０５と接続され、全部で４つのバスに接続される。システムバスブリッジ４０２は、これら４モジュール間を、可能な限り、同時平行接続を確保することができるように設計されている。
【００２４】
Ｇバス４０４はＧバスアービタ（ＧＢＡ）４０６により協調制御されており、スキャナやプリンタと接続するためのスキャナコントローラ４３０２やプリンタコントローラ４３０３に接続される。また、Ｂバス４０５は、Ｂバスアービタ（ＢＢＡ）４０７により協調制御されており、スキャナ／プリンタコントローラのほか、電力管理ユニット（ＰＭＵ）４０９，インタラプトコントローラ（ＩＣ）４１０，ＵＡＲＴを用いたシリアルインターフェースコントローラ（ＳＩＣ）４１１，ＵＳＢコントローラ４１２，ＩＥＥＥ１２８４を用いたパラレルインターフェースコントローラ（ＰＩＣ）４１３，イーサネットを用いたＬＡＮコントローラ（ＬＡＮＣ）４１４，ＬＣＤパネル，キー，汎用入出力コントローラ（ＰＣ）４１５，ＰＣＩバスインターフェース（ＰＣＩＣ）４１６にも接続されている。
【００２５】
２．２．プロセッサシェル
プロセッサシェルとは、プロセッサコアに加えＭＭＵ（Memory Management Unit)、命令キャッシュ、データキャッシュ、ライトバックバッファ及び掛け算ユニットを含んだブロックを指す。
【００２６】
（キャッシュメモリ）
図５に示したように、キャッシュメモリコントローラは、無効（Invalid)，有効かつクリーン（Valid Clean：キャッシュが更新されていない)，有効かつダーティ(Valid Dirty：キャッシュが更新されている)の３つのステートキャッシュを管理する。この状態に応じて、キャッシュは制御される。
【００２７】
２．３．インタラプトコントローラ
図６にインタラプトコントローラ４１０のブロック図を示す。
【００２８】
インタラプトコントローラ４１０は、Ｂバスインターフェース６０５を介してＢバス４０５に接続され、ＤｏＥｎｇｉｎｅチップ内の各機能ブロック及び、チップ外部からのインタラプトを集積し、ＣＰＵコア４０１がサポートする、６レベルの外部インタラプト及び、ノンマスカブルインタラプト（ＮＭＩ）に再分配する。各機能ブロックとは、電力管理ユニット４０９，シリアルインターフェースコントローラ４１１，ＵＳＢコントローラ４１２，パラレルインターフェースコントローラ４１３，イーサネットコントローラ４１４，汎用ＩＯコントローラ４１５，ＰＣＩインターフェースコントローラ４１６，スキャナコントローラ４３０２，プリンタコントローラ４３０３などである。
【００２９】
この際、ソフトウェアコンフィギュレーション可能なマスクレジスタ(Int Mask Logic 0 - 5)６０２により、各要因毎に割り込みをマスクをすることが可能である。また、外部インタラプト入力は、選択的エッジ検出回路６０１により、信号線ごとに、エッジセンス／レベルセンスを選択することが出来る。要因レジスタ（Detect and set Cause Reg 0 - 5）６０３は、各レベルごとに、どのインタラプトがアサートされているかを示すとともに、ライト動作を行うことで、レベルごとにクリアを行う事が出来る。
【００３０】
各レベルの割込み信号は、各レベル毎に少なくともひとつの割り込みがあれば割込み信号を出力すべく、論理和回路６０４により論理和として出力される。なお、各レベル内での複数要因間のレベル付けはソフトウェアにて行う。
【００３１】
２．４．メモリコントローラ
図７は、メモリコントローラ４０３のブロック図である。メモリコントローラ４０３は、メモリコントローラ専用のローカルバスであるＭＣバスにＭＣバスインターフェース７０１を介して接続され、最大１ギガバイトのシンクロナスＤＲＡＭ（ＳＤＲＡＭ）と、３２メガバイトのフラッシュＲＯＭあるいはＲＯＭをサポートする。ＳＤＲＡＭの特徴であるバースト転送時の高速性を活かすため、６４（１６×４）バースト転送を実現する。また、ＣＰＵやＢバスよりの連続したアドレスのシングル転送を考慮し、メモリコントローラ内にＳＲＡＭ（メモリフロントキャッシュ）７０２を内蔵し、ＳＤＲＡＭへ直接シングル転送を行うことを可能な限り回避して転送効率を向上させる。メモリコントローラ−ＳＤＲＡＭ間のデータバス幅は、信号ramData及びramParをあわせて７２ビット（このうち８ビットの信号ramParはパリティ）、フラッシュＲＯＭ間のデータバスfntromData，prgromDataの幅は３２ビットとする。
【００３２】
２．４．２．構成及び動作
メモリコントローラの各部はこれから説明するような構成となっている。
【００３３】
（ＭＣバスインターフェース（７０１））
ＭＣバスは、ＳＢＢ４０２−メモリコントローラ４０３間の専用のバスであり、またＳＢＢ内部の基本バスとして用いられている。
【００３４】
ＣＰＵ４０１とバスブリッジ４０２とを接続する専用バスＰＢｕｓのバースト転送が４バーストのみ規定しているのに対し、ＭＣバスにおいては１６バースト×４までの転送を追加している。このためにバースト長を示す信号としてｍＴＴｙｐｅ［６：０］を新たに定義した。
（ＭＣバス信号の定義）
ＭＣバスの各信号は下記の通り定義される。
・mClk（出力）           …  ＭＣバスクロック
・mAddr[31:0]（出力）    …  ＭＣバスアドレス
32ビットのアドレスバスであり、mTs_L  がアサートされた時点からmBRdy_Lがアサートされるまで保持される。
・mDataOut[63:0]（出力） …  ＭＣバスデータ出力
64ビットの出力データバスであり、mDataOe_Lがアサートされている時のみ有効である。
・mDataOe_L（出力）      …  ＭＣバスデータ出力イネーブル
mDataOut[63:0]が有効であることを示す。またその転送がWriteであることを示す。
・mDataIn[63:0]（入力）  …  ＭＣバスデータ入力
64ビットの入力データバスであり、mBRdy_LがアサートされているmClkの立ち上がりでサンプリングされる。
・mTs_L（出力）          …  ＭＣバストランザクション開始ストローブ
転送が開始したことを示す。転送の最初の１クロックの間だけアサートされる。転送が１クロックで終了し、次の転送がすぐに始められるのならばmTs_Lは引続きアサートされたままになる。
・mTType[6:0]（出力）    …  ＭＣバストランザクションタイプ
ＭＣバス上の転送のタイプを示す。シングル転送時はその転送の間、バースト転送時は最初の転送(beat）の間保持される。上位３ビットがソース（マスタ）をあらわし、下位ビットがシングル／バースト長をあらわす。タイプには次のようなものがある。
【００３５】
0003976927.tif 000003
・mBE_L[7:0]（出力）      …  ＭＣバストランザクションバイトイネーブル
シングル転送時、64ビットデータバス上の有効なバイトレーンを示す。バースト転送時はWrite時のみ有効であり、Read時は無視される。
・mBRdy_L（入力）         …ＭＣバスレディ
現在の転送(beat)が終了したことを示す。
・mTPW_L（出力）          …  次トランザクションがIn-page write（ページ内書き込み）
次の転送が同じページ（同じRowアドレス)のWriteであることを示し、最大４個までのWriteを続けることができる。ページサイズはあらかじめコンフィギュレーションレジスタに設定しておく。
・mBPWA_L（入力）          …  バスのページ内書き込み許可
ＭＣバススレーブ（メモリコントローラ）がページ内書き込みトランザクションを許可するかどうかを示し、mBRdy_Lと同じクロックでサンプリングされる。この時mBPWA_LがディアサートされていればmTPW_Lは無意味となる。
・mBRty_L（入力）          …  バスリトライ
ＭＣバススレーブ（メモリコントローラ）がアクセスを未実行のまま終了させる場合にアサートし、少なくとも１サイクル以上のアイドルの後に再試行しなければならないことを示す。（もしmBRdy_LとmBRty_Lが同時にアサートされた場合は、mBRty_Lが優先される。）
・mBerr_L（入力）          …  バスエラー
パリティエラーやその他のバスエラーが発生した場合にアサートされる。
【００３６】
なお、上述した入出力の別はＳＢＢからみての定義である。
（ＭＣバストランザクション）
ＭＣバス上のトランザクションとしては、以下のトランザクションをサポートする。
▲１▼ベーシックトランザクション(1,2,3,4,8バイト Read/Write)
mBE_L[7:0]信号に従い、１，２，３，４，８バイトのシングルトランザクションをサポートする。
▲２▼バーストトランザクション
（CPUからの）4-ダブルワードバーストまでのトランザクションをサポートする。
▲３▼Ｇバスからの16-ダブルワードバーストｘ4までのトランザクションをサポートする。
▲４▼In-page write（ページ内書き込み）トランザクション
mTPW_Lで示される同一ページ内の書き込みに関して、連続的なWriteアクセスをサポートする。
▲５▼バスリトライ
メモリコントローラ内の制限によりメモリアクセスができない場合は、mBRty_L信号をアサートし、バスリトライを通知する。
【００３７】
（ＳＤＲＡＭコントローラ（７０５））
メモリコントローラ４０３は、次のような構成を有するＳＤＲＡＭを以下のように制御する。
【００３８】
（ＤＲＡＭ構成）
ＤＲＡＭの構成としては、x4,x8,x16ビットタイプの１６／６４メガビットＳＤＲＡＭを64ビットデータバスで８バンク制御することができる。
【表２】
0003976927.tif 000004
（ＤＲＡＭアドレスビット構成）
ＤＲＡＭのアドレスビットの割付けについては、６４ビットＳＤＲＡＭの場合にはMA[13:0]を、１６ビットＳＤＲＡＭの場合にはMA[11:0]を使用する。
【表３】
0003976927.tif 000005
（ＳＤＲＡＭプログラマブル構成（モードレジスタ））
ＳＤＲＡＭは内部にモードレジスタを持ち、モードレジスタ設定コマンドを用いて下記の項目を設定する。
▲１▼バースト長
バースト長は、１，２，４，８，フルページのいずれかが設定可能であるが、CPUからのバースト転送長が４であることから、バースト長４が最適である。Ｇバスからの１６バースト以上の転送は、Read/Writeコマンド（オートプリチャージ無し）を連続して発行することにより実現する。
▲２▼ラップタイプ（Wrap Type）
バースト転送時のアドレスのインクリメント順を設定する。「シーケンシャル」または「インターリーブ」のどちらかが設定可能である。
▲３▼CASレイテンシ
CASレイテンシは、１，２，３のいずれかが設定可能であり、使用するＳＤＲＡＭのグレードと動作クロックにより決定される。
【００３９】
（ＳＤＲＡＭコマンド）
ＳＤＲＡＭに対して以下のコマンドをサポートする。各コマンドの詳細は、ＳＤＲＡＭデータブックに記載されている。
・モードレジスタ設定コマンド
・アクティブコマンド
・プリチャージコマンド
・ライトコマンド
・リードコマンド
・CBR(Auto)リフレッシュコマンド
・セルフリフレッシュ開始コマンド
・バーストストップコマンド
・NOPコマンド
（ＳＤＲＡＭリフレッシュ）
ＳＤＲＡＭは、2048サイクル/32ms(4096/64ms)であるので、16,625nsおきにCBRリフレッシュコマンドを発行する。メモリコントローラは設定可能なリフレッシュカウンタを持ち、自動的にCBRリフレッシュコマンドを発行する。Ｇバスからの16-バーストx nの転送中は、リフレッシュ要求を受け付けない。したがって、リフレッシュカウンタは16-バーストx 4転送の時間だけ余裕を持った値を設定しなければならない。また、セルフリフレッシュをサポートする。このコマンドを発行すると、パワーダウンモード(ramclke_L=Low)時にセルフリフレッシュが続行される。
【００４０】
（ＳＤＲＡＭ初期化）
メモリコントローラはパワーオンリセット後、ＳＤＲＡＭに対して以下の初期化を行なう。すなわち、電源投入後100μｓのポーズ期間をおいて、
▲１▼プリチャージウコマンドを用いて全バンクをプリチャージする。
▲２▼ＳＤＲＡＭのモードレジスタを設定する。
▲３▼オートリフレッシュコマンドを用いて、リフレッシュを８回行う。
【００４１】
（フラッシュＲＯＭコントローラ（７０４））
フラッシュＲＯＭコントローラ７０４は、romAddr[23:2]のアドレス信号と４個のチップセレクト(romCs_L[3:0])信号をサポートする。アドレス信号romAddr2〜romAddr9はパリティ信号ramPar0〜ramPar7とマルチプレクスされ、アドレス信号romAddr10〜romAddr23は、ＤＲＡＭアドレスramAddr0〜ramAddr13とマルチプレクスされている。
【００４２】
（ＳＲＡＭコントロール（メモリフロントキャッシュ））
メインメモリとして用いられるＳＤＲＡＭは、バースト転送は非常に高速であるが、シングル転送においてはその高速性が発揮できない。そこで、メモリコントローラ内にメモリフロントのキャッシュを実装し、シングル転送の高速化をはかる。メモリフロントキャッシュは、キャッシュコントローラ７０６とＳＲＡＭ７０２より構成される。ＭＣバスに定義されたmTType[6:0]信号により、その転送マスターと転送長を知ることができるので、各マスターごと、あるいは転送長ごとにキャッシュのオン／オフが設定可能である。キャッシュの方式は、次の通りである。なお、以下、特に断らない限り、単なるキャッシュあるいはキャッシュメモリという呼称は、プロセッサコアに内蔵されたキャッシュではなく、メモリコントローラが内蔵するメモリフロントキャッシュを指すものとする。
・２ウェイセットアソシアティブ
・8kバイトデータＲＡＭ
・128 x 21 x 2 タグＲＡＭ
・ＬＲＵ(Least Recently Used)アルゴリズム
・ライトスルー
・No Write Allocate
次にキャッシュコントローラ７０６を中心とする詳細なブロック図を図８に示す。
【００４３】
（キャッシュの動作）
ここで、ＭＣバスよりメモリリード／ライト転送が要求された場合のキャッシュの動作を図８のブロック図と、図９及び図１０に示すフローチャートを用いて説明する。
【００４４】
ＭＣバスよりデータ転送が開始されると、その転送の最初にＭＣバス上で示されるmTType[6:0]によって、その転送がキャッシュオンでおこなうか、オフでおこなうかの判断がおこなわれる。この説明では、転送がシングル転送であればオン、バースト転送であればオフと判断することにする（ステップＳ９０１）。すなわち、mTType(3)が“１”ｈであれば、シングル転送をあらわすのでキャッシュオンで、“０”ｈであればバースト転送をあらわすのでキャッシュオフで転送を行う。
【００４５】
シングル転送（キャッシュオン）の場合、アドレスlmaddr[31:0]が与えられると、lmaddr[11:5]がインデックスとしてb1_tag_ram８０１，b2_tag_ram８０２，b1_data_ram７０２−ａ，b2_data_ram７０２−ｂ，lru８０３ヘ与えられ、それぞれのブロックから、入力されたインデックスに対応するバリッドビット"v"及びb1_tag_addr，バリッドビット"v"及びb2_tag_addr，b1_out_data，b2_out_data，lru_inがそれぞれ出力される（ステップＳ９０２）。
【００４６】
b1_tag_ram８０１とb2_tag_ram８０２より出力されたb1_tag_addrとb2_tag_addrがそれぞれb1_comparater８０４，b2_comparater８０５でアドレスlmaddr[31:12]と比較され、その結果、すなわちヒットか否かがb1_hit_miss_L,b2_hit_miss_L信号によりキャッシュコントローラ７０６へ知らされ、判定される（ステップＳ９０３）。
【００４７】
ここでヒットであれば、リードかライトかが判定される（ステップＳ９０４）。ヒットであるとは、b1_tag_addrとb2_tag_addrのいずれかにアドレスlmaddr[31:12]と一致するものがある場合である。ヒットかつリードの場合にはつぎのようになる。すなわち、b1がヒットであり、要求された転送がリードであった場合は、すでに読み出されているb1_out_dataとb2_out_dataのうちb1_out_dataを選択し、lmaddr[4:3]で示される8バイトのデータをＭＣバスへ出力する（ステップＳ９０５）。同時にそのインデックスに対応するlruを“０”(=b1ヒット)に書き換えて、転送が終了する。b2がヒットであり、要求された転送がリードであった場合は、すでに読み出されているb1_out_dataとb2_out_dataのうちb2_out_dataを選択し、lmaddr[4:3]で示される8バイトのデータをＭＣバスへ出力する（ステップＳ９０５）。同時にそのインデックスに対応するlruを“１”ｈ（=b2ヒット)に書き換えて、転送が終了する。
【００４８】
一方、ヒットかつライトの場合にはつぎのようになる。すなわち、b1がヒットであり、要求された転送がライトであった場合は、インデックスで示されるb1_data_ram７０２−ａのlmaddr[4:3]で示される8バイトのデータのうちmBE_L[7:0]で示される有効なバイトレーンのみを書き換え、同時にそのインデックスに対応するlruを“０”ｈ(=b1ヒット)に書き換える。またＳＤＲＡＭも同様に書き換えて転送が終了する（ステップＳ９０６）。b2がヒットであり、要求された転送がライトであった場合は、インデックスで示されるb2_data_ram７０２−ｂのlmaddr[4:3]で示される8バイトのデータのうちmBE_L[7:0]で示される有効なバイトレーンのみを書き換え、同時にそのインデックスに対応するlruを“１”ｈ(=b2ヒット)に書き換える。またＳＤＲＡＭも同様に書き換えて転送が終了する（ステップＳ９０６）。
【００４９】
一方、b1,b2ともにミスである場合にも、リードかライトか判定される（ステップＳ１００１）。要求された転送がリードであった場合は、そのlmaddr[31:3]で示される8バイトのデータがＳＤＲＡＭより読み出され（ステップＳ１００３）、ＭＣバスヘ出力される（ステップＳ１００４）。同時にそのインデックスに対応するlruが読み出され、“０”ｈであった場合はb2_data_ramへＳＤＲＡＭからのデータを書きlruも“１”ｈへ書き換える。lruが“１”ｈであった場合はb1_data_ramヘＳＤＲＡＭからのデータを書き、lruも“０”ｈヘ書き換え終了する（ステップＳ１００５）。b1,b2ともにミスであり、要求された転送がライトであった場合は、ＳＤＲＡＭに書き込むだけで転送が終了する（ステップＳ１００２）。
【００５０】
ステップＳ９０１においてバースト転送（キャッシュオフ）の場合、リード、ライトともＳＤＲＡＭに対してだけ行われ（ステップＳ９０７−Ｓ９０９）、キャッシュデータやタグの書き換え等は行わない。
【００５１】
（ＲＯＭ／ＲＡＭインターフェース（７０７））
ＲＯＭ／ＲＡＭコントローラ７０７の構成を図１１に示す。ブロック１１０１〜ブロック１１０４により、ＳＤＲＡＭのデータ信号、アドレス信号、パリティ信号が、フラッシュＲＯＭのデータ信号、アドレス信号と多重化される。
【００５２】
２．４．３．タイミングダイアグラム
上述したメモリコントローラ４０３によるデータの読み出し・書き込み等の処理のタイミングを、図１２〜図１９を用いて説明する。
【００５３】
図１２は、ＣＰＵからのバースト読み出しのタイミングを示す。バースト長は４、ＣＡＳレイテンシは３である。図９のステップＳ９０９における処理に相当する。
【００５４】
図１３は、ＣＰＵからのバースト書き込みのタイミングを示す。バースト長は４、ＣＡＳレイテンシは３である。図９のステップＳ９０８における処理に相当する。
【００５５】
図１４は、Ｇバスデバイスからのバースト読み出しのタイミングを示す。Ｇバスのバースト長は１６、ＳＤＲＡＭのバースト長は４、ＣＡＳレイテンシは３である。図９のステップＳ９０９における処理に相当する。
【００５６】
図１５は、Ｇバスデバイスからのバースト書き込みのタイミングを示す。Ｇバスのバースト長は１６、ＳＤＲＡＭのバースト長は４、ＣＡＳレイテンシは３である。図９のステップＳ９０８における処理に相当する。
【００５７】
図１６は、メモリフロントキャッシュにヒットした場合のシングル読み出しのタイミングを示す。読み出されるデータmDataIn[63:0]としては、キャッシュメモリであるb1_data_ram７０２−ａあるいはb2_data_ram７０２−bから読み出されたb1/b2_out_dataが出力される。ＳＤＲＡＭのバースト長は４、ＣＡＳレイテンシは３である。図９のステップＳ９０５における処理に相当する。
【００５８】
図１７は、メモリフロントキャッシュにヒットしなかった場合のシングル読み出しのタイミングを示す。読み出されるデータmDataIn[63:0]としては、ＳＤＲＡＭから読み出されたデータramData[63:0]が出力される。また、このデータはb1/b2_in_dataとしてキャッシュメモリであるb1_data_ram７０２−ａあるいはb2_data_ram７０２−bにも書き込まれる。ＳＤＲＡＭのバースト長は４、ＣＡＳレイテンシは３である。図１０のステップＳ１００４及びＳ１００５における処理に相当する。
【００５９】
図１８は、メモリフロントキャッシュにヒットした場合のシングル書き込みのタイミングを示す。書き込まれるデータmDataOut[63:0]は、キャッシュメモリであるb1_data_ram７０２−ａあるいはb2_data_ram７０２−bに書き込まれるとともに、ＳＤＲＡＭにも書き込まれる。ＳＤＲＡＭのバースト長は４、ＣＡＳレイテンシは３である。図９のステップＳ９０６における処理に相当する。
【００６０】
図１９は、メモリフロントキャッシュにヒットしなかった場合のシングル書き込みのタイミングを示す。書き込まれるデータmDataOut[63:0]は、キャッシュメモリであるb1_data_ram７０２−ａあるいはb2_data_ram７０２−bには書き込まれず、ＳＤＲＡＭに対してだけ書き込まれる。ＳＤＲＡＭのバースト長は４、ＣＡＳレイテンシは３である。図１０のステップＳ１００２における処理に相当する。
【００６１】
なお、ここでは、ＭＣバスよりデータ転送が開始されると、その転送の最初にＭＣバス上で示されるmTType[6:0]によって、転送がシングル転送であればオン、バースト転送であればオフと判断しているが、バースト転送の場合に、さらにバースト長を判定し、バースト長がキャッシュの１ラインよりも小さい場合にはキャッシュオンとし、そうでない場合にはキャッシュオフとして動作するようにしてもよい。
【００６２】
また、ＭＣバスに、メモリへのデータ転送を要求したバスマスタの識別子を示す信号を含ませることで、メモリコントローラがその識別子を判定し、識別子に応じてキャッシュオン／キャッシュオフの制御を行うこともできる。この場合には、識別子とキャッシュオン／オフの別とを対応させた書換え可能なテーブルを用意し、それを参照してキャッシュのオンオフを切り替えることもできる。このテーブルは、例えば特定のアドレスを割り当ててＣＰＵ４０１などから書換え可能にすることもできる。
【００６３】
２．５．システムバスブリッジ（ＳＢＢ）及びＢバス，Ｇバス
図２０としてシステムバスブリッジ（ＳＢＢ）４０２のブロック図を示す。
【００６４】
ＳＢＢ４０２は、Ｂバス（入出力バス）,Ｇバス（グラフィックバス）,ＳＣバス（プロセッサローカルバス）及びＭＣバス間の相互接続をクロスバスイッチを用いて提供する、マルチチャネル双方向バスブリッジである。クロスバスイッチにより、２系統の接続を同時に確立することが出来、並列性の高い高速データ転送を実現出来る。
【００６５】
ＳＢＢ４０２は、Ｂバス４０５と接続するためのＢバスインターフェース２９０６と、Ｇバス４０４と接続するためのＧバスインターフェース２００６と、プロセッサコア４０１と接続するためのＣＰＵインターフェーススレーブポート２００２と、メモリコントローラ４０３と接続するためのメモリインターフェースマスターポートを備えるほか、アドレスバスを接続するアドレススイッチ２００３，データバスを接続するデータスイッチ２００４を含む。また、プロセッサコアのキャッシュメモリを無効化するキャッシュ無効化ユニット２００５を備えている。
【００６６】
Ｂバスインターフェース２００９には、ＢバスデバイスからのDMAライトを高速化するライトバッファと、Ｂバスデバイスのリードを効率化するリードプリフェッチキューを実装する。これらのキュー内に一時的に存在するデータに関するコヒーレンシ管理はハードウェアにて行う。なお、Ｂバスに接続されたデバイスをデバイスと呼ぶ。
【００６７】
プロセッサコアは３２ビットバスに対するダイナミックバスサイジングをサポートしているが、ＳＢＢ４０２ではこれをサポートしない、将来、バスサイジングをサポートしないプロセッサを用いる場合にもＳＢＢに必要な改造を最小限におさえるためである。
【００６８】
２．５．１．ＳＢＢ及び各バスの構成及び動作
（Ｂバスインターフェース）
図２１は、Ｂバスインターフェースのブロック図である。
【００６９】
Ｂバスインターフェース２００９は、ＢバスとＭＣバス間の双方向ブリッジ回路である。ＢバスはＤｏＥｎｇｉｎｅの内部汎用バスである。
【００７０】
Ｂバスインターフェース２００９内には、マスタコントロールブロック２０１１、スレーブコントロールブロック２０１０、データインターフェース２０１２、DMAC２０１３、Ｂバスバッファの５ブロックが含まれる。図２１上で、DMAC２０１３は、機能上３個のシーケンサとレジスタブロックに分割される。それら３つのシーケンサのうち、DMAメモリアクセスシーケンサはＢバススレーブコントロールブロック２０１０に、DMAｒｅｇシーケンサはＢバスマスターコントロールブロック２０１１に内蔵される。レジスタブロックであるDMAレジスタはＢバスデータインターフェース２０１２部に内蔵される。
【００７１】
またＢバスインターフェース２００９はＢバス側からのメモリへの書き込み時、及びDMAによるデバイスからメモリへの転送が起こった時に、キャッシュ無効化インターフェースを介してCPUシェル内のデータ、命令両キャッシュの無効化の制御を行う。
【００７２】
なお、CPUライト時のライトバックバッファはＢバスインターフェースには実装しないが、Ｂバス上の外部マスタライト時のライトバッファを実装する。これにより、バースト転送でない、連続した外部マスタからの書き込みが高速化される。このライトバッファのフラッシュは、Ｂバスアービタ４０７によるメモリへの接続が許された時点で行われる。Ｂバスマスタリードのライトバッファバイパスは行わない。
【００７３】
また、外部マスタのリードプリフェッチキューを実行する。これにより、外部マスタからの連続した、データストリームの読み出しの高速化を図る。リードバッファの無効化は、
１．Ｂバスの新たなリードがバッファにヒットしなかった場合。
２．CPUからメモリへのライトが行われた場合。
３．Ｇバスからメモリへのライトが行われた場合。
４．Ｂバスからメモリへのライトが行われた場合。
に行われる。
【００７４】
またＢバスインターフェース２００９にはＢバス４０５上の各デバイスとメモリ間のDMAコントローラ２０１３が内蔵される。システムバスブリッジ４０２にDMAコントローラを内蔵することにより、ブリッジ双方へ、同時にアクセス要求が発行出来、効率的なDMA転送が実現出来る。
【００７５】
Ｂバスインターフェース２００９はプロセッサ４０１からのアクセス要求に対して、ダイナミックバスサイジングの使用を要求しない。またＢバスマスタからのメモリアクセス要求時に、メモリコントローラ４０３からのバスサイジングにも対応しない。すなわち、メモリコントローラはバスサイジングを期待すべきではない。
【００７６】
（Ｂバス）
ＢバスはＤｏＥｎｇｉｎｅ内の汎用ＩＯバスであり、以下の仕様を持つ。
・アドレス、データ分離型３２ビットバス。
・任意のウェイトサイクルを挿入可能、最短はノーウェイト。
・バーストトランザクションのサポート。
・最大転送速度は、クロックが50MHz時に200Mbyte/Sec。
・バスエラーとバスリトライのサポート。
・複数バスマスタのサポート。
【００７７】
（Ｂバス信号定義）
以下にバス信号の定義を説明する。各信号毎に、「信号名（英語呼称）：入力元＞出力先  (，3States）…信号の説明」の要領で記載されている。なお、３ステートの項は３ステートの信号に限り記載した。
【００７８】
bAddr[31:2]（IOBus Address Bus）：Master＞Slabe，3State…   IOBusアドレスバス。
【００７９】
bData[31:0] （IOBus Data Bus）：DataDriver＞DataReceiver，3State  …  IOBusデータバス。
【００８０】
b(Datadrivername)DataOeReq（IOBus Data Output Enable Request）：Datadriver＞DefaultDriverLogic  …  後述する双方向ＩＯバスを実現するため、デフォルトドライバーコントロールロジックヘの出力信号である。Datadrivernameを持つデバイスが、バス上にデータをドライブするための要求信号である。データの出力を許可されたデバイスには、デフォルトドライバーコントロールロジックよりb(Datadrivername)DataOe_Lが出力される。Datadriverの例：Pci,Sbb,Jpeg,Spu。
【００８１】
b(Datadrivername)DataOe_L（IOBus Data Output Enable）：  dfaultDriverLogic＞Datadriver  …  b(Datadrivername)DataOeReqを出力したデバイスに対し、デフォルトドライバーロジックがデータバスへのデータのドライブを許す場合b(Datadrivername)DataOe_L信号をそのデバイスに対して返す。
【００８２】
bError_L（IOBus Bus Error）：Slave＞Master 3State  …  ＩＯバストランザクションがエラーで終了したことを示す。
【００８３】
b(Mastername)BGnt_L（IOBus Grant）：Arbiter＞Master  …  バスアービトレーションにより当マスタがバスの使用権を得たことを示す。Masternameの例：Pci,Sbb,Jpeg,Spu。
【００８４】
blnstNotData（IOBus Instruction/Data Output Indicator）：Master＞Slave，3State  …  ＢバスマスタがインストラクションフェッチをＢバススレーブに対して行う場合にHighにドライブする。データトランザクションの場合はLowにドライブする。
【００８５】
b(Mastername)CntlOeReq（IOBus Master Control Output Enable Request）：Master＞DefaultDriverLogic  …  Ｂバスマスタが、bStart_L,bTx_L,bWr_L,vInstNotDataとbAddr[31:2]を３ステートバス上にドライブしたい場合に、IOBus Output Control Logicに対してアサートする。IOBus Output Control Logic は各マスタからの、bMCntlOeReqに基づきドライブを許すマスタに対し、b(Mastername)CntlOe_L信号を返す。
【００８６】
b(Mastername)CntlOe_L（IOBus Master Control Output Enable）：DefaultDriverLogic＞Master  …  b(Mastername)CntlOeReqを出力したマスタに対し、デフォルトドライバーロジックがドライブを許す場合b(Mastername)CntlOe_L信号をそのマスタに対して返す。
【００８７】
bRdy_L（IOBus Ready）：Slave＞Master，3State  …  Ｂバススレーブは、現在のＢバスデータトランザクションが現在のクロックサイクルを最後に終了することを示すためにこの信号をアサートする。Ｂバスマスタは、この信号により、現在のトランザクションがこのクロックサイクルで終了することを知る。
b(Mastername)BReq_L（IOBus Bus Request）：Master＞Arbiter  …  Ｂバスマスタが、Ｂバスアービタに対し、バスの使用権要求を行う事を示す。
【００８８】
bRetry_L（IOBus Bus Retry）：Slave＞Master 3State  …  Ｂバススレーブがマスタに対し、バストランザクションの最実行を要求する。
【００８９】
b(Slavename)RdyOeReq（IOBus Slave Ready Output Enable Request）：Slave＞DefaultDriverLogic  …  Ｂバススレーブが、bRdy_L,bWBurstReq_L,bBurstAck_Lを３ステートバス上にドライブしたい場合に、IOBus Output Control Logicに対してアサートする。IOBus DefaultDriverLogicは各マスタからの、b(Slavename)RdyOeReqに基づきドライブを許すスレーブに対し、b(Slavename)RdyOe_L信号を返す。
【００９０】
b(Slavename)RdyOe_L（IOBus Slave Ready Output Enable）：DefaultDriverLogic＞Slave  …  b(Slavename)RdyOeReqを出力したマスタに対し、デフォルトドライバーロジックがドライブを許す場合b(Slavename)RdyOe_L信号をそのマスタに対して返す。
【００９１】
bSnoopWait（IOBus Snoop Wait）：SBB＞NextMaster  …  ＢバスインターフェースがＢバスに接続された他のデバイスに対し、キャッシュのスヌーピング実行中であることを示す。Ｂバスに接続されたデバイスはこの信号がアサートされている間は新たなトランザクションを発行できない。
【００９２】
bStart_L（IOBus Transaction START）：Master ＞Slave 3State  …  ＢバスマスタがＢバストランザクションをスタートすることを示す信号、Ｂバススレーブは、この信号を監視することにより、Ｂバストランザクションのスタートを知ることが出来る。
【００９３】
bTx_L（IOBus Transaction Indicator Input）：Master＞Slave 3State  …  ＢバスマスタがＢバススレーブに対し、Ｂバストランザクションが現在実行中である事を示すためにアサートする。
【００９４】
bWBurstGnt_L（IOBus Burst Write Grant）：Master＞Slave，3State  …  Ｂバスマスタが、Ｂバスバーストライトのリクエストに対し、バーストライト実行することを示すためにドライブする。
【００９５】
bWBurstReq_L（IOBus Burst Write Request）：Slave ＞Master，3Stete  …ＢバススレーブがＢバスマスタに対し、バースとライトを要求する場合にアサートする。
【００９６】
bWr_L（IOBus Write Transaction Indicater）：Master＞Slave，3State  …Ｂバスマスタが、Ｂバススレーブに対し、現在のトランザクションがライトである事を示すためにアサートする。
【００９７】
bByteEn[3:0]（IOBus Byte Enables）：DataDriver＞DataReceiver，3State  …  Ｂバス上にデータをドライブするエージェントが、各ビットに対応したbData[31:0]上のバイトレーンが有効である事を示すためにHighにドライブする。本信号の各ラインとbDataのバイトレーンは表４の対応関係にある。
【表４】
0003976927.tif 000006
bBurst_L（IOBus Extended Burst Request）：Master＞Slave，3Sate  …  Ｂバスマスタが拡張バーストを行いたい事を示す。アサート、ネゲートタイミングはbTx_Lと同一。
【００９８】
bBurstAck_L（IOBus Extended Burst Acknowledge）：Slave＞Maste，3State…  Ｂバススレーブが拡張バーストを行える事を示す。アサート、ネゲートタイミングはbRdy_Lと同一。
【００９９】
bBurstShortNotLong_L（IOBus Burst Length）：Master＞Slave，3State  …Ｂバスマスタが拡張バーストを行う場合のバースト長を示す。アサート、ネゲートタイミングはbTx_Lと同一であり、信号値とバースト長との対応は表５に示したとおりである。
【表５】
0003976927.tif 000007
Ｂバス信号は上述の通りである。ＤｏＥｎｇｉｎｅ内部のバスである、Ｂバス（及びＧバス）は接続される機能ブロック数が１０以上になるので、InOut分離バスですべてのブロックを接続することは、困難である。ＤｏＥｎｇｉｎｅでは、チップ内双方向バスを採用する。
【０１００】
（Ｇバスインターフェース）
図２２にＧバスインターフェース２００６のブロック図を示す。この概要は下記の通りである。
【０１０１】
（Ｇバス概要）
Ｇバスは、MFP用１チップコントローラＤｏＥｎｇｉｎｅ内部において、各画像データ処理部間のデータ転送を高速に実行するために定義されたバスである。６４ビットのデータバスをもち、4Gbyte(128byte boundary)のアドレス空間をサポートする。１６ビート(128byte=64ビット x 16) を１ロングバーストとした転送を基本とし、連続して４ロングバースト(512byte=16ビート x 4) までを可能とする。（シングルビートなど１６ビート以下の転送はサポートしない）
（Ｇバス信号定義）
信号の定義に用いる記号をまず定めておく。信号名の直後には、必要に応じて信号の方向が記述されている。それは次のように定める。
In（Input signal）  …  バスエージェントに対する入力信号
Out（Output signal）  …  バスエージェントからの出力信号
InOut（Bi-Directional Tri-State signal）  …  双方向の信号で、複数のバスエージェントがドライブする。一度にひとつのエージェントだけがドライブする。信号をドライブする各エージェントのイネーブルリクエスト信号をデフォルトドライバで集中管理し、どのエージェントがドライブするかはデフォルトドライバが決定する。どのエージェントもイネーブルリクエストを出さない場合や、複数のエージェントが同時にイネーブルリクエストを出している場合はデフォルトドライバ信号をドライブする。エージェントは、信号をロウにドライブする場合は、前後１クロックの間ハイにドライブしなければならない。信号のアサートはドライブを初めてから１クロック以上経過してからしか行えない。基本的に信号のリリースはネゲートした次のクロックで行う。
【０１０２】
なお、各信号名の後の“_L”はその信号がローアクティブであることを示す。信号の記述のしかたは、ほぼＢバス信号の記述に準ずる。説明は、システム信号、アドレス及びデータ信号、インターフェース制御信号、アービトレーション信号に分けて行う。また、バスエージェントとは、バスに接続されるバスマスタやバススレーブの総称である。
【０１０３】
（システム信号）
gClk（G-Bus Clock）  …   Ｇバス上のすべてのトランザクションについてタイミングを提供し、すべてのデバイスに対して入力となる。
【０１０４】
gRst_L（G-Bus Reset）  …   Ｇバス上のすべてのデバイスをリセットする。すべての内部レジスタはクリアーされ、すべての出力信号はネゲートされる。
【０１０５】
（アドレスおよびデータ信号）
gAddr[31:7]，InOut，（G-Bus Address）：Master＞Slave  …  Ｇバス上のデータ転送はすべて128byte（１６ビート）単位で行われるため、gAddr[31]〜gAddr[7]の２５ビットで4Gbyteのアドレス空間をサポートする。
drive:gTs_Lと同時にマスターがドライブ
assert:ドライブした次のクロック
negate:gAack_Lのアサートを確認したクロック。
【０１０６】
g(Mastename)AddrOeReq（G-Bus Address OutPut Enable Request）：Master＞DefaultDriverLogic  …  双方向Ｇバスを実現するための、デフォルトドライバロジックへの出力信号。バスマスタがアドレスバスをドライブするための要求信号。
【０１０７】
g(Mastername)AddrOe_L（G-Bus Address OutPut Enablet）：DefaultDriveLogic＞Master  …  g(Mastername)AddrOeReqを出力したバスマスタに対し、デフォルトドライバロジックがアドレスバスのドライブを許可することを示す信号。
【０１０８】
gData[63:0]，InOut，（ G-Bus Data）：DataDriver＞DataReceiver  …  64ビットデータバスで、ライト時はマスタがドライブ、リード時はスレーブがドライブ。
【０１０９】
［ライト］
drive:gTs_Lと同時にマスタがドライブ。ただし、gSlvBsy_Lがアサートされている時はネゲートされるまで待ってドライブ。
assert:ドライブした次のクロック。
change:gAack_Lのアサートを確認したクロック、その後は毎クロック。
negate:転送終了時、またはgTrStp_Lによる転送停止要求を確認した場合は、gAack_Lのアサートを確認したクロック。
【０１１０】
［リード］
drive：gAack_Lと同時にスレーブがドライブ。
assert:スレーブがReadyであればドライブした次のクロックで、ReadyでなければReadyになるまで待ってアサートされる。
change:gAack_Lのアサートを確認したクロック、その後は毎クロック。リードの場合はアサートしたクロックから毎クロック。
negate:転送終了時。
release:ネゲートの１クロック後、またはgTrStp_Lによる転送停止要求を確認したクロック。
【０１１１】
g(DataDrivername)DataOeReq（G-Bus Data OutPut Enable Request）：DataDriver＞DefaultDriverLogic  …  データドライバがデータバスをドライブするための要求信号。
【０１１２】
g(DataDrivername)DataOe_L（G-Bus Data OutPut Enablet）：DefaultDriverLogic＞DataDriver  …  g(DataDrivername)DataOeReqを出力したデータドライバに対し、デフォルトドライバロジックがデータバスのドライブを許可することを示す信号。
【０１１３】
（インターフェース制御信号）
gTs_L（InOut G-Bus Transaction Sart）：Master＞Slave  …  マスターにより１クロックの間Lowにアサートされ、転送の開始（アドレスフェーズ）をあらわす。マスターはgTs_Lと共に、gAddr,gRdNotWr,gBstCntをドライブし、転送の種類、データ量を明確にする。マスタは、ライトの場合ここで明確にした転送データ量をウェイトなしで出せることを保証しなければならない。また、リードの場合は明確にした転送データ量をウェイトなしで受けることを保証しなければならない。スレーブは途中でデータ転送ができなくなった場合はgBsStep_Lにより、次の１６ビートの転送をキャンセルすることがある。ただし、１６ビートの途中でキャンセルすることはない。
drive:gGnt_Lのアサートを確認したクロックでドライブ。
assert:ドライブした次のクロック。
negate:１クロックアサート後にネゲートされる。
【０１１４】
g(Mastername)TsOeReq（G-Bus Transaction Start OutPut Enable Request）：Master＞DefaultDriverLogic  …  バスマスタがgTs_Lをドライブするための要求信号。
【０１１５】
g(Mastername)TsOe_L（G-Bus Transaction Start OutPut Enablet）：DefaultDriverLogic＞Master  …  g(Mastername)TsOeReqを出力したバスマスタに対し、デフォルトドライバクロックがgTs_Lのドライブを許可することを示す信号。
【０１１６】
gAack_L，InOut，（G-Bus Address Acknowledge）：Slave＞Master  …  スレーブにより１クロックの間Lowにドライブされる。該当するスレーブが、転送を認識し、バスが空いていることを確認して、データ転送がスタートできることをマスターに知らせる。ライトの場合、スレーブはマスタから要求された転送データ量をウェイトなしで受けることを保証しなければならない。またリードの場合は、要求された転送データ量をウェイトなしで出せることを保証しなければならない。万が一、途中でデータ転送ができなくなった場合は、gBstStp_Lにより、次の１６ビートの転送をキャンセルすることができる。ただし、１６ビートの途中でキャンセルすることはできない。
drive:アドレスデコードビット時、gTs_Lのアサートを確認したクロックでドライブが開始される。ただし、gSlvBsy_Lがアサートされている時はネゲートされるまで待ってドライブされる。また、データバス使用中のため、まだドライブされていなかった場合は、gTrStp_Lによる転送停止要求を確認したクロックでドライブ開始される。
assert:スレーブがReadyであればドライブした次のクロックで、ReadyでなければReadyになるまで待ってアサートされる。gTrStp_Lによる転送停止に対する応答のときには、ドライブした次のクロックでアサートされる。
negate:ドライブ後にgTrStp_Lがアサートされた場合は、gTrStp_Lを確認したクロックでアサートされる。また、１クロックアサート後にネゲートされる。
【０１１７】
g(Slavename)AackOeReq（G-Bus Address Acknowledge OutPut Enable Request）：Slave＞DefaultDriverLogic  …  スレーブがgAack_Lをドライブするための要求信号。
【０１１８】
g(Slavename)AackOe_L（G-Bus Address Acknowledge OutPut Enablet）：DefaultDriverLogic＞Slave  …  g(Slavename)AackOeReqを出力したスレーブに対し、デフォルトドライバロジックがgAack_Lのドライブを許可することを示す信号。
【０１１９】
gSlvBsy_L，InOut，（G-Bus Slave Busy）：Slave＞Master  …  スレーブがドライブし、データバスでデータを転送中であることをあらわす。
drive：アドレスデコードヒット時、gTs_Lのアサートを確認したクロックでドライブ開始。ただし、gSlvBsy_Lがアサートされている時はネゲートされるまで待ってドライブ。
assert:スレーブがReadyであればドライブした次のクロックで、ReadyでなければReadyになるまで待ってアサート。
negate:転送終了時にネゲート。
release:ネゲートの１クロック後、またはgTrStp_Lによる転送停止要求を確認したクロック。
【０１２０】
g(Slavename)SlvBsyOeReq（G-Bus Slave Busy OutPut Enable Request）：Slave＞DefaultDriverLogic  …  スレーブがgSlvBsy_Lをドライブするための要求信号
g(Slavename)SlvBsyOe_L（G-Bus Slave Busy OutPut Enable）：DefaultDriverLogic＞Slave  …  g(Slavename)SlvBsyOeReqを出力したスレーブに対し、デフォルトドライバロジックがgSlvBsy_Lのドライブを許可することを示す信号。
【０１２１】
gRdNotWr，InOut，（G-Bus Read(High)/Write(Low)）：Master＞Slave  …  マスターによりドライブされ、HighでREAD、LOWでWRITEをあらわす。ドライブする期間はGAと同じである。
derive：gTs_Lと同時にマスターがドライブ。
assert：ドライブした次のクロック。
negate：gAack_Lのアサートを確認したクロック。
【０１２２】
g(Mastername)RdNotWrOeReq（G-Bus Read/Write OutPut Enable Reques）：Master＞DefaultDriverLogic  …  バスマスタがgRdNotWrをドライブするための要求信号。
【０１２３】
g(Mastername)RdNotWrOe_L（G-Bus Read/Write OutPut Enablet）：DefaultDriverLogic＞Master  …  g(Mastername)RdNotWrOeReqを出力したバスマスタに対し、デフォルトドライバロジックがgRdNotWrのドライブを許可することを示す信号。
【０１２４】
gBstCnt[1:0]，InOut，（G-Bus Burst Counter）：Master＞Slave  …  マスターによりドライブされ、連続して行うバースト転送の数（１〜４）をあらわす。信号の値とバースト転送するバイト数との対応は表６のようになる。
derive：gTs_Lと同時にマスターがドライブ。
assert：ドライブした次のクロック。
negate：gAack_Lのアサートを確認したクロック。
【表６】
0003976927.tif 000008
g(Mastername)BstCntOeReq（G-Bus Burst Counter OutPut Enable Request）：Master＞DefaultDriverLogic  …  バスマスタがgBstCntをドライブするための要求信号。
【０１２５】
g(Mastername)BstCntOe_L（G-Bus Burst Counter OutPut Enablet）：DefaultDriverLogic＞Master  …  g(Mastername)BstCntOeReqを出力したバスマスタに対し、デフォルトドライバロジックがgBstCntのドライブを許可することを示す信号。
【０１２６】
gBstStp_L，InOut，（G-Bus Burst Stop）：Slave＞Master  …  スレーブによりドライブされ、連続する次のバースト転送を受付不可であることをあらわす。１バースト（１６ビート）の転送の１５ビート目にアサートする。ストップしない場合にはドライブしない。
drive：１４ビート目。
assert：１５ビート目。
negate：１クロックアサート後
g(Slavename)BstStpOeReq（G-Bus Burst Stop OutPut Enable Request）：Slave＞ DefaultDriverLogic  …  スレーブがgBstStp_L上をドライブするための要求信号。
【０１２７】
g(Slavename)BstStpOe_L（G-Bus Burst Stop OutPut Enablet）：DefaultDriverlogic＞Slave  …  g(Slavename)BstStpOeReqを出力したスレーブに対し、デフォルトドライバロジックがgBstStp_Lのドライブを許可することを示す信号。
【０１２８】
（アービトレーション信号）
g(Mastername)Req_L，Out，（G-Bus Request）：Master＞Arbiter  …  マスターによりドライブされ、アービタに対してバスを要求する。各マスターデバイスごとに専用のgReq_Lを持つ。
assert：データ転送が必要なマスターがアサート
negate：gGnt_Lを受ければネゲート
g(Mastername)Gnt_L，In，（G-Bus GNT）：Arbiter＞Master  …  アービタによりドライブされ、バス要求に対して次のバス権を与える。各マスタデバイスごとに専用のgGnt_Lを持つ。プライオリティーの高いバスマスタから順にバス権を与える。同じプライオリティーのマスタに対しては、バス要求のあった順番にバス権を与える。
assert：他のマスターにgGnt_Lを与えていない時、または次のクロックで他のマスタに与えていたgGnt_Lをネゲートする時に、アービトレーションによって選ばれたマスタに対してアサートする。
negate：gAack_Lのアサートを確認したクロック
gTrStp_L，In，（G-Bus Transuaction Stop）：Arbiter＞Master,Slave  …  アービタによりドライブされ、gGnt_Lによりすでにアドレスフェーズを開始されたトランザクションを中止する。ただ、すでにgAack_Lによりデータフェーズを開始してしまったトランザクションについては中止できない。また、この信号はgAack_Lによりマスクがかけられており、gAack_Lがアサートされた時には、たとえアサートしていてもネゲートされ出力される。
assert：すでにアドレスフェーズを開始したトランザクションよりも高いプライオリティのマスタからバス要求がきた時。
negate：gAack_Lのアサートを確認したクロック
（Ｇバスライトサイクル）
Ｇバスのライトサイクルは次のようになる。
▲１▼マスタがバス要求、gReq_Lアサート。
▲２▼アービタが許可、gGnt_Lアサート。gReq_Lネゲート。
▲３▼gGnt_Lを受けて、マスタはgTs_L,gAddr,gRdNotWr,gBstCnt,をドライブ。
ライト動作の場合、gSlvBsy_Lがアサートされていなければ、同時にgDataもドライブする。gSlvBsy_Lがドライブされていれば、gSlvBsy_Lがフリーになるのを待ってドライブする。
▲４▼スレーブはgTs_Lがアサートされている時にアドレスをデコードし、ヒットすれば自分に対する転送であることを認識する。この時gSlvBsy_Lが他のスレーブによりアサートされていなければ、gSlvBsy_LとgAack_Lのドライブを始める。また、リードの場合はgDataもドライブする。gSlvBsy_Lが他のスレーブによりアサートされていれば、データバスは使用中であるということなので、ネゲートされるまで待ってドライブを始める。gSlvBsy_L,gAack_L,(gData)のドライブ開始後、スレーブがデータ転送の準備ができれば、それぞれの信号をアサートし、データ転送を開始する。
▲５▼gAack_Lがアサートされた時点でアドレスフェーズは終了し、マスタはgAddr,gRdNotWr,gBstCntをネゲートする。また、その時点からマスタはライトデータを毎クロック切り替え、gBstCntで指定されたデータ量だけ転送を行う。マスタとスレーブは、それぞれ自分でクロックをカウントして、データ転送の終了を知らなければならない。
【０１２９】
スレーブは転送の途中でマスタから要求されたデータ転送量を転送できなくなった場合は、bStStp_Lを１５ビート目でアサートすることで、次の１６ビートの転送をキャンセルすることがただし、１６ビートの途中でキャンセルすることはできない。
【０１３０】
マスタおよびスレーブは、gBstStp_Lがアサートされれば、次のクロックでデータの転送を終了させなければならない。
【０１３１】
（キャッシュインバリデーションユニット（ＣＩＵ））
キャッシュインバリデーションユニット（以下CIU）２００５は、Ｂバスからメモリへのライトトランザクションを監視し、これが起こった場合は、メモリへの書込が終了する前に、ＣＰＵシェルのキャッシュインバリデーションインターフェースを用い、ＣＰＵシェルに内蔵されたキャッシュの無効化を行う。
【０１３２】
ＣＰＵシェルは、次の３種類の信号を使用する。
・SnoopADDR[31:5] (Cache Invalidation Address)
・DCINV (Dcache（データキャッシュ）Invalidation Strobe)
・ICINV (Icache（インストラクションキャッシュ）Invalidation Strobe)
キャッシュの無効化は最大３クロックで行われる、Ｂバスからメモリへのライトは３クロックで終了することはないので、キャッシュインバリデーションユニット２００５は、CPUシェル４０１から出力されるStop_L信号を用いて無効化終了のハンドシェイクを行うことはしない。但し、将来の変更に備え、Ｂバス上にはbSnoopWaitをStop_Lと同一サイクルだけドライブする。
【０１３３】
なお、現在のインプリメンテーションでは、Ｂバスからのライトが起こった場合は、安全のためにIcacheもインバリデーションしている、もし、ＯＳでセルフモディファイングコードを禁止し、インストラクションとして使われる可能性のあるデータのローディング時に、意図的にインストラクションキャッシュのインバリデーションを行うなら、Icacheのインバリデーションはいらない。この場合は若干のパフォーマンスアップが望める。
【０１３４】
（メモリマップ）
図２３及び図２４にメモリマップを示す。図２３は、左から順に、仮想メモリマップ、物理メモリマップ、Ｇバスのアドレス空間でのメモリマップ、Ｂバスのアドレス空間でのメモリマップである。また、図２４は、レジスタ等を含む図２３における斜線部の５１２メガバイトを示すマップである。
【０１３５】
プロセッサコアのメモリモデルはR3000をベースにしている。プロセッサコアの物理アドレス空間は３２ビットアドレッシングにより４Ｇバイトある。仮想空間も同様に３２ビットアドレッシングを行なう。ユーザープロセスの最大サイズは２Ｇバイトである。アドレスマッピングはカーネルモードとユーザーモードで異なる。図はＭＭＵを使用しない場合のメモリマップである。
【０１３６】
（ユーザーモード仮想アドレッシング）
ユーザーモードの仮想アドレッシングでは２Ｇバイトのユーザ仮想アドレス空間(kuseg)が有効となる。このユーザーセグメントのアドレスは0x00000000から始まり、すべての有効なアクセスは０にクリアされたmsbを持つ。ユーザーモードにおいてmsbをセットしたアドレスの参照はアドレスエラー例外処理を引き起こす。TLBはkusegへのすべての参照をユーザーモードとカーネルモードで同様にマッピングする。また、キャッシャブルである。kusegは通常ユーザーコードやデータを保持するために使用される。
【０１３７】
（カーネルモード仮想アドレッシング）
カーネルモードの仮想アドレス空間には４つのアドレスセグメントを持っている。
・kuseg  仮想アドレスの0x00000000から２Ｇバイト。ページと単位としたキャッシングとマッピングが可能。このセグメントはカーネルメモリアクセスとユーザーメモリアクセスでオーバーラップしている。
・kseg0  仮想アドレスの0x80000000から５１２Ｍバイト。物理メモリの最初の５１２Ｍバイトにダイレクトにマップされる。参照はキャッシュされるが、アドレス変換にはTLBは使われない。kseg0は通常カーネルの実行コードやカーネルデータのために使用される。
・kseg1  仮想アドレスの0xA0000000から５１２Ｍバイト。物理メモリの最初の５１２Ｍバイトにダイレクトにマップされる。参照はキャッシュされず、アドレス変換にはTLBは使われない。kseg1は通常ＯＳによって、I/Oレジスタ、ＲＯＭコード、ディスクバッファのために使用される。
・kseg2  仮想アドレスの0xC0000000から１Ｇバイト。kusegと同様、TLBにより仮想アドレスから物理アドレスにマップされる。キャッシングは自由。ＯＳは通常kseg2をスタックやコンテキストスイッチによるリマップが必要なプロセス毎のデータのために使用する。
【０１３８】
（仮想アドレスメモリマップ（図２３（ａ），図２４（ａ）））
仮想アドレス空間は４Ｇバイトあり、システム上のすべてのメモリ、I/Oがアクセス可能である。kusegにはSYSTEM MEMORY(1GB)が存在する。
【０１３９】
kseg0には内蔵ＲＡＭ(16MB)が存在する。これは、例外処理のベクタをプログラミングしたい場合にインプリメントし、例外ベクタベースアドレスを0x80000000に設定する。このアドレスは物理アドレス空間の0x00000000にマッピングされる。
【０１４０】
kseg1にはＲＯＭ，Ｉ／Ｏ，レジスタが存在し、ブートＲＯＭ(16MB),ＳＢＢ内部レジスタとＭＣ内部レジスタ(16MB),IOBusI/O１(16MB:Ｇバスアービタ内部レジスタ、Ｂバスアービタ内部レジスタ、PMU内部レジスタなどのプリミティブなＢバスレジスタ),IOBusI/O2(16MB),IOBusMEM(16MB),Gbus MEM(32MB),FONT ROM(240MB）、FONT ROM or RAM(16MB)が含まれる。
【０１４１】
kseg2にはPCI I/O(512MB),PCI MEM(512MB)が存在する。
【０１４２】
kseg0,kseg1はどちらも物理アドレス空間の最初の512Mバイトにマッピングされるため、kseg0,kseg1とkusegの最初の512Mバイトはすべて同じ物理アドレス空間を参照していることになる。
【０１４３】
（物理アドレスメモリマップ（図２３（ｂ），図２４（ｂ）））
物理アドレス空間も仮想アドレス空間と同様４Ｇバイトあり、システム上のすべてのメモリ、I/Oがアクセス可能である。
【０１４４】
PCI I/O,PCI MEM,SYSTEM MEMORYについては仮想アドレスメモリマップと同一である。
【０１４５】
kseg1,kseg2はどちらも物理アドレス空間の最初の512Mバイトにマッピングされるので、ROM,I/O,Regは0x00000000からの空間に存在している。
【０１４６】
（Ｇバスメモリマップ（図２３（ｃ），図２４（ｃ）））
Ｇバスアドレス空間は４Ｇバイトあり、SYSTEM MEMORY,GBus MEM,FONTのみがアクセス可能である。
【０１４７】
（Ｂバスメモリマップ（図２３（ｄ），図２４（ｄ）））
Ｂバスアドレス空間は４Ｇバイトあり、PCI I/O,PCI MEM,SYSTEM MEMORY,IOBusI/O2,IOBus MEM,FONTのみがアクセス可能である。
【０１４８】
IOBus I/O1はプリミティブなレジスタのため、0x1C000000から0x20000000までの空間はPCIからプロテクトがかけられており、PCIからアクセスできない。
【０１４９】
（アドレススイッチ）
アドレススイッチ２００３は、ＳＣバス,Ｇバス,Ｂバス,ＭＣバス間のデータ転送を行なうために、マスターとなるバスからスレーブとなるバスへ、ＳＢＢ４０２を経由してアドレス信号を送るためのものである。ＳＢＢ４０２を経由する転送において、マスターとなり得るバスは、ＳＣバス,Ｇバス,Ｂバスであり、スレーブとなり得るバスはＢバス,ＭＣバスである。ＭＣバスに対してはＳＣバス,Ｇバス,Ｂバス,のいずれかがマスターとなり、ＢバスへはＳＣバスのみがマスターとなってアドレス信号を送る。
【０１５０】
また、ＳＣバス-Ｂバス間の転送と、Ｇバス-ＭＣバス間の転送は同時に行なうことができる。
【０１５１】
図２５に、アドレススイッチ２００３のブロック図を示す。スイッチシーケンサ２００３ａにより、スイッチ２００３ｂを切り替えてスレーブをＢバスとＭＣバスとで切り換え、スイッチ２００３ｃを切り替えてマスタをＳＣバス，Ｇバス，Ｂバスで切り換える。この構成により、ＭＣバスに対してはＳＣバス,Ｇバス,Ｂバス,のいずれかがマスターとなり、ＢバスへはＳＣバスのみがマスターとなり、また、ＳＣバス-Ｂバス間の転送と、Ｇバス-ＭＣバス間の転送は同時に行なうことができる。
【０１５２】
（データスイッチ）
データスイッチはＳＣバス,Ｇバス,Ｂバス,ＭＣバス間のデータ転送を行なう際に,ＳＢＢ内でデータの流れを切り替えるものである。ライト時はマスターからスレーブ、リード時はスレーブからマスターへデータが送られる。
【０１５３】
図２６にデータスイッチ２００４のブロック図を示す。この構成において、セレクタＡ−１〜Ａ−３及びＢ−１，Ｂ−２を表７のように切り替えることで、ＳＣバス，Ｇバス，Ｂバスのいずれかをマスタとし、Ｂバス，ＭＣバスのいずれかをスレーブとして、書き込みあるいは読み出しを行うように制御できる。
【表７】
0003976927.tif 000009
（アービトレーション）
ＳＢＢ４０２内のスイッチシーケンサ２００３ａは、各スイッチを切り替えるにあたって、ＳＢＢ外部からの以下の３種類の接続要求間のアービトレーションを行う。
１．ＣＰＵ
２．Ｇバスバスマスタ
３．Ｂバスバスマスタ
このアービトレーションは、現在のバススイッチ接続状況、及び、あらかじめ設定された優先順位により決定され、その結果アドレススイッチ、データスイッチの接続が切り替えられる。
【０１５４】
（タイミングダイアグラム）
図２７〜図３２にタイミング図を示す。図２７はＧバスからの書き込み／読み出しサイクルのタイミング図、図２８はＧバスのバースト停止サイクルのタイミング図、図２９〜図３２は、Ｇバスのトランザクション停止サイクルのタイミング図である。
【０１５５】
２．６．ＰＣＩバスインターフェース
図３３は、ＰＣＩバスインターフェース４１６のブロック図である。
【０１５６】
PCIバスインターフェース４１６は、ＤｏＥｎｇｉｎｅ内部汎用IOバスであるＢバスと、チップ外部IOバスであるPCIバスの間をインターフェースするブロックである。
【０１５７】
入力ピン設定により、リセット時にPCIバスコンフィギュレーション発行可能な、ホストブリッジ構成と、PCIバスコンフィギュレーションは発行しないターゲット（サテライト）構成とを切り替えることができる。図１０７は、入力ピン設定を読み込んで、ホストブリッジ構成に設定される場合の例を示す模式図である。ホストブリッジ構成では、スイッチ１１１１がハイレベルであるとＣＰＵ４０１はその値を読み込んで、ホストブリッジであると判定されれば、コンフィグレーションレジスタ３３０３の設定を行い、コンフィグレーションサイクルを発生させて、ＰＣＩバス上のデバイスのコンフィグレーションレジスタに必要なデータを書き込む。ホストブリッジはコンフィグレーションによってＰＣＩバスに接続された機器の構成を認識し、Ｄｏ  Ｅｎｇｉｎｅではそれらを利用することができる。
【０１５８】
一方、図示していないが、ピン１１１１がローレベルに設定されていれば、ホスト４０１はＤＯ  ＥＮＧＩＮＥ４００がターゲット構成であると判定し、コンフィグレーションレジスタ３３０３へのホストブリッジからの設定を待つ。ターゲットになれば、それ自身はホストブリッジ側の制御部から利用されることになる。
【０１５９】
ＤＯ  ＥＮＧＩＮＥでは、自身のコンフィグレーションレジスタにＰＣＩバスインターフェース３３０２を介してアクセスできる構成を有しているため、このようにホストブリッジとターゲットのどちらでも動作する。
【０１６０】
ＢバスインターフェースのマスタDMAコントローラ３３０１は、PCIバスシグナルインターフェース３３０２を介してPCIバスマスタからＤｏＥｎｇｉｎｅ内部のリソースにアクセス要求があった場合に、Ｂバスマスタとしてこのアクセス要求をＢバス内部にブリッジする。
【０１６１】
更に、このマスタDMAコントローラ３３０１は、PCIバス上でマッピングされるメモリからＤｏＥｎｇｉｎｅMemoryへのDMA転送を行う事が出来る。この際、プログラマが意図したＢバスDMAと、ＧバスDMAのアクセスの順番を守って動作させるために、転送先アドレス(bPciAddr[31:0])と、PCIマスターコントローラ３３０１のID信号(bPciID)を、Ｂバスとアービトレーションシーケンサに対して、バスリクエストと同時に発行する。
【０１６２】
マスタDMAコントローラ３３０１はバスグラント(bPciBGnt_L)を受け取り、バスを使用しデータ転送が終了した時点で、ID信号(bPciID）のアサートを取りやめる。
【０１６３】
なお、ＰＣＩバスは、33MHz,32ビット,PCI2.1準拠とする。
【０１６４】
２．７．Ｇバスアービタ
図３４は、Ｇバスアービタ（ＧＢＡ）４０６のブロック図である。
【０１６５】
Ｇバスのアービトレーションは、中央アービトレーション方式であり、各バスマスタに対して専用のリクエスト信号(g(mastername)Req_L)とグラント信号(g(mastername)Gnt_L)を持つ。図３４は、masternameはM1〜M4となっている。Busアービタ４０６は、Ｇバス上のバスマスタを４つまでサポートしており、以下のような特徴を持つ。
・アービタ内部のレジスタ３４０１ａの設定によりアービタをプログラミングすることが出来る。レジスタ設定はＢバスより行なう。
・すべてのバスマスタを同じ優先権として、公平にバス権を与える公平アービトレーションモードと、いずれかひとつのバスマスタの優先権を上げ、優先的にバスを使用させる優先アービトレーションモードがある。どのバスマスタに優先権を与えるかはレジスタ３４０１ｂの設定により決定される。
・優先バスマスタが連続してバスを使用することができる回数を設定することが可能。
・すでにアドレスフェーズを開始したが、データフェーズをまだ開始していないトランザクションについて、そのトランザクションをストップするためのトランザクションストップサイクルをサポート。
・複数のバスマスタにおける順序処理のプログラミングができる（後述）。プログラムされた順序は、レジスタテーブル３４０１ａに格納される。
・ＧバスマスタとＢバスマスタが同一メモリアドレスに順次書き込みを発行した場合に、プログラマの意図したアクセス順序を維持するための機構として、同期ユニットからのマスタID信号、ストップ信号に基づき、特定のマスタに対し、バス使用許可を与えることを保留する機構を持つ。
【０１６６】
なお、レジスタへのプログラミングは、Ｂバスを介してＣＰＵ４０１から行われる。
【０１６７】
（アービトレーションシーケンサ）
Ｇバスアービタの中核となるアービトレーションシーケンサ３４０２ａ，ｂは、１つの優先マスタとその他の４つの非優先マスタの間で５つのマスタによるアービトレーションを行なう。４つのバスマスタからのリクエスト信号とグラント信号を、リクエストディスパッチ回路３４０３とグラントディスパッチ回路３４０４によって４つの非優先マスタに割り付けることにより、公平アービトレーションモードが実現される。また、４つのバスマスタのうちのひとつを、高優先アービトレーションシーケンサ３４０２ａの優先マスタに割り付けることで、優先アービトレーションモードとして動作する。これらの割り付けは、レジスタ３４０１ａ，ｂの設定にしたがって行われる。これにより、優先バスマスタは、他のマスタより高い確率でバスの使用権を取得することが出来る。
【０１６８】
さらに、バスの取得機会確率の調整に加え、高優先シーケンサ３４０２ａに割り当てられたマスタは、連続してバスを使用する事が出来、連続して使用出来る回数をプログラマブルなレジスタにより可変する事ができる。これは、バスの占有率を調整出来、ある特定のマスタにより多くバスを使用させる様に出来ることを意味する。
【０１６９】
（公平アービトレーションモード）
このモードでは、すべてのバスマスタは同じ優先順位にあり、バス権を与えられる機会は公平である。バスがフリーの時は、一番最初にリクエストを出したバスマスタがバス権を得ることができる。また、複数のバスマスタが同時にリクエストを出した場合は、あらかじめ決められた順序にしたがって順次バス権が与えられる（ラウンドロビン方式）。例えば、Ｍ１からＭ４までのすべてのバスマスタが同じクロックでリクエストを出した場合は、Ｍ１→Ｍ２→Ｍ３→Ｍ４といった順序でバス権が与えられる。Ｍ４のトランザクションの終了時に再びすべてのバスマスタがリクエストを出している場合は、Ｍ１→Ｍ２→Ｍ３→Ｍ４→Ｍ１→Ｍ２…というように、同様の順序でバス権を与えていく。一部のバスマスタがリクエストを出している場合は、Ｍ４からＭ１へラウンドラップするとして、最後にバスを使用したマスタにもっとも近い大きい番号を持ったマスタへグラントを与える。
【０１７０】
一度バス権が他のバスマスタに移ると、他にリクエストを出しているすべてのバスマスタにバス権を与えた後でないと再びバス権を得ることができない。
【０１７１】
（優先アービトレーション）
このモードでは、ひとつのバスマスタ（レジスタ３４０１ｂに登録されたバスマスタ）が他のバスマスタよりも高い優先権を持つ優先バスマスタになり、他のバスマスタに比べ優先的にバス権が与えられる。優先バスマスタ以外のバスマスタの優先順位はすべて同じである。
【０１７２】
複数のバスマスタがリクエストを出しており、また優先バスマスタが連続したリクエストを行う場合、優先バスマスタと他の非優先バスマスタは交互にバス権を得る。
【０１７３】
非優先バスマスタから他のバスマスタにバス権が移ると、他にリクエストを出しているすべてのバスマスタにバス権を与えた後でないと、その非優先バスマスタは再びバス権を得ることができない。
【０１７４】
（トランザクション・ストップ・サイクル）
優先アービトレーションモードにおいて、優先バスマスタがリクエストを出した時、すでに他のバスマスタがアドレスフェーズを開始していても、データフェーズをまだ開始していなければ、そのトランザクションをストップし、優先バスマスタがバス権を得ることができる。ただし、その直前に優先バスマスタがバス権を持っていた場合は、連続したバス権を得ることができる回数を超えることはできない。
【０１７５】
優先バスマスタのトランザクションが終了した時、中止されたバスマスタがリクエストを出していれば、優先してバス権が与えられる。
【０１７６】
（優先バスマスタの切り替え）
優先バスマスタの切り替えを行なうには、レジスタ３４０１ｂを書き換えればよい。優先バスマスタを選択するレジスタが書き換えられると、その時に実行中のトランザクションの終了を待って、優先バスマスタが切り替えられる。アービタのステートはアイドル状態にもどり、その時点でリクエストを出していたバスマスタは、その時すべて同時にリクエストを出したものとして、あらためてアービトレーションが行われる。
【０１７７】
優先バスマスタの切り替えには十分注意を払う必要がある。優先させるべきバスマスタのDMAが終了しないうちに、異なったバスマスタに優先バスマスタを切り替えてしまうと、最初の優先バスマスタのDMAの優先度が下がってしまう。もしも最初の優先バスマスタの優先度を下げたくないのであれば、DMAが終了したのを確認してから優先バスマスタの切り替えを行なう必要がある。
【０１７８】
また別の方法として、レジスタ３４０１ｂが書き換えられても、ただちには優先バスマスタの切換えを行わず、すべてのバスマスタのバスリクエストがなくなった時点でバスの優先度を切り替える方法も可能である。この場合は、すべての優先度のアービトレーションシーケンサがアイドル状態にあることを示す信号を、各アービトレーションシーケンサからのアイドル信号のＯＲをとって作成し、この信号がアイドル状態の場合にのみ、レジスタに書き込まれた内容を３４０３、３４０４のセレクタに反映することにより、切換えのタイミングを制御することができる。
【０１７９】
優先バスマスタ切り替えを、システムブート時のみでなく、システム稼働中も動的に行う必要のあるソフトウェアでは、優先バスマスタの切り替えは、いったんＧバス上に新たなDMAリクエストが発生しないよう、すべてのバスマスタ及びDMAコントローラに対する設定を中止し、その後、Ｇバスアービタ４０６内のレジスタに適切な値をセットし、さらに、Ｇバスアービタ４０６内のステータスレジスタをチェックし、バスマスタの優先権が切り替わったのを確認した上で新たなＧバス上へのアクセス及びDMAの起動を行うべきである。
【０１８０】
優先バスマスタの動的切り替えは、オペレーティングシステムの実時間保証、タスクの優先順位の設定を変化もしくは違反させてしまう可能性があり、十分な考慮の上行われなければならない。
【０１８１】
（順序処理）
図３５は、ＤｏＥｎｇｉｎｅ４００内におけるＧバス４０４を中心とする、Ｇバス上のバスマスタによるDMAに係るブロック図である。
【０１８２】
複数のバスマスタが順次に処理を行うことが必要な場合、例えば、メモリ３５０１上のデータに対して、バスマスタ１により処理Ａを行った後、バスマスタ２により処理Ｂを行い、その処理後のデータをバスマスタ４に送るといった一連の処理を考える。
【０１８３】
この処理を行うソフトウェア、すなわちＣＰＵ４０１により実行されるプログラムにより、Ｂバス４０５を介して、バスアービタ４０６内のレジスタテーブル３４０１ａに、バスマスタがバスを使用する順序と、バス権の付与の開始条件と、終了条件がセットされる。この例では、
0003976927.tif 000010
というようにセットする。すなわち、Ｇバスアービタ４０６は、それぞれのバスマスタから、開始条件として設定された信号を受けるとそのバスマスタにバス使用権を与え、終了条件として設定された信号を受けるとバス使用権を奪う。
【０１８４】
ソフトウェアはそれぞれのバスマスタにDMAをセットする。それによって、それぞれのマスタはＧバスアービタ４０４に対してリクエスト(g(mastername)Req_L)を発行する。Ｇバスアービタ４０４はレジスタテーブル３４０１ａに登録された順序に従ってバスマスタ１にバス権を与える(gM1Gnt_L)。バスマスタ１はメモリ３５０１からある単位のデータをリードし、処理Ａを行って、バスマスタ１内部のバッファにデータをライトする。バスマスタ１はひとつの単位の処理が終了し、バッファの準備ができたことをgM1BufReady信号によりアービタ４０６に対して通知する。
【０１８５】
アービタ４０６はそれを受け、レジスタテーブル３４０１ａに登録された、バスマスタがバス権を与える条件とバス権を奪う条件にしたがって、バス権をバスマスタ１から奪いバスマスタ２に与える。バスマスタ２はバスマスタ１のバッファのデータをリードし、処理Ｂを行って、バスマスタ２内部のバッファにデータを格納する。この間にバスマスタ１のバッファが空になるとgM1BufEmptyがアサートされ、アービタ４０６はバスマスタ２にバス権を与えていたのを取りやめる。バスマスタ２は処理Ｂを行って、バッファの準備ができるとgM2BufReady信号により通知する。
【０１８６】
アービタ４０６はそれを受け、レジスタ３４０１ａの内容にしたがって、今度はバスマスタ４にバス権を与える。バスマスタ４はバスマスタ２のバッファからデータをリードする。バスマスタ２のバッファが空になると、gM2BufEmptyによってアービタ４０６に通知し、アービタ４０６はそれを受け、レジスタ３４０１ａの内容に従って再びバスマスタ１にバス権を与え、次のデータの処理を始める。
【０１８７】
それぞれのバスマスタにセットされたDMAがすべて終了すると、それぞれのバスマスタはプロセッサに割り込みによって通知する。ソフトウェアはすべてのバスマスタからの終了通知がそろったとき、一連の処理が終了したことを知る。
【０１８８】
以上説明した動作は完全順次モードでの動作であり、順次処理に関わるバスマスタ以外のバスマスタは、バスを使用することができない。この順次処理中でも、順次処理に関係のないバスマスタがバスを使用することを可能にするために優先順次モードが用意されている。これらのモードの切り替えではアービタ４０６内部のレジスタにプログラミングすることによって行なう。優先順次モードでは、順次処理を行なうバスマスタは優先的にバスを使用できるが、順次処理に関わらないバスマスタであればバスを使用することが許される。順次処理を行なうバスマスタと関わらないバスマスタの間のアービトレーションは、前述した優先アービトレーションモードと同等である。当然、順次処理に係わるバスマスタで、バス権を与えられる条件が満足されずに自分の順番が回ってきていないバスマスタにはバス権は与えられない。
【０１８９】
（アクセス順序を維持するための機構）
信号stopSpcがアサートされた場合は、Ｇバスマスタのひとつであるスキャナコントローラ／プリンタコントローラはアービトレーションの対象から除外され、たとえリクエストをアサートしていてもバス使用権を与えられることはない。アービトレーションはこのマスタを除外したマスタ間で行われる。詳細な説明はＢバスアービタの節で行なう。
【０１９０】
（タイミングダイアグラム）
図３６〜図３９において、Ｇバスアービトレーションのタイミングを説明する。図３６は、連続してバスを使用する回数が、バスマスタ１〜４のすべてについて１に設定されている場合の公平アービトレーションモード（フェアモード）の例である。バスマスタ１による２回目の（タイミング４から出されている）バス要求は、バス要求を出している他のバスマスタがすべて１回ずつ処理されるまで待たされている。
【０１９１】
図３７は、連続してバスを使用する回数が、バスマスタ１についてのみ２であり、他のバスマスタは１に設定されている場合の公平アービトレーションモードの例である。バスマスタ１が出している２回目の（タイミング４から出されている）バス要求は１回目の要求に続いて直ちに許可され、他のバスマスタはその処理がすむまで待たされている。
【０１９２】
図３８は、連続してバスを使用する回数がそれぞれ１ずつであり、バスマスタ１が優先バスマスタと設定されている場合の優先アービトレーションモードの例である。優先バスマスタと非優先バスマスタとは交互にバス使用権が認められるために、バスマスタ１の２回目のバス要求はバスマスタ２のバスの使用後に認められており、バスマスタ４のバス要求は、バスマスタ１の２回目のバスの使用後に認められている。また、バスマスタ２の２回目のバス要求は、バス要求を出している他のすべてのバスマスタ、図３８ではバスマスタ１及びバスマスタ４のバス使用が終了した後で認められている。
【０１９３】
図３９は、バスマスタ１からのバス要求により、バスマスタ４のバス要求が許可されているにもかかわらず中断された例である。この場合、バスマスタ１のバス使用が終了すると、バスマスタ２のバス要求に優先してバスマスタ４のバス要求が認められる。
【０１９４】
２．８．Ｂバスアービタ
図４０は、Ｂバスアービタ４０７のブロックである。
【０１９５】
Ｂバスアービタ４０７は、ＤｏＥｎｇｉｎｅ内部のＩＯ汎用バスであるＢバス４０５のバス使用要求を受け付け、調停の後、使用許可を選択された一つのマスタに対して与え、同時に２つ以上のマスタがバスアクセスを行う事を禁止する。
【０１９６】
アービトレーション方式は、３段階のプライオリティを持ち、それぞれのプライオリティに複数のマスタをプログラマブルに割り当てられる構成になっている。割り当ては、それぞれ最大で、最高のプライオリティに３マスタ、中間に７マスタ、最低レベルに３マスタとなる。
【０１９７】
また、ＧバスマスタとＢバスマスタが、同一メモリアドレスに順次書き込みを発行した場合に、プロブラマの意図したアクセス順序を維持するための機構として、同期ユニットからの、マスタＩＤ信号、ストップ信号に基づき、特定のマスタに対し、バス使用許可を与えることを保留する機構を持つ。
【０１９８】
（アービトレーションシーケンサ）
Ｂバスアービタは３つのアービトレーションシーケンサ４００２，４００３，４００４から構成される。それぞれ、高優先権、中優先権、低優先権を持ち、それぞれのシーケンサ内に、３，７，３本のバスマスタ用アービトレーションシーケンサが内蔵される。Ｂバス上のすべてのバスマスタになる可能性のあるユニットからのリクエスト信号とそれらへのグラント信号を、リクエストセレクタとグラントセレクタによって、これらの３つのシーケンサユニットに分配する。この分配は、ＢＢｕｓインタフェース４００５内のソフトウェアプログラマブルなレジスタ４００５ａにより、複数の組み合わせのなかから、一意の組み合わせを選択することが出来る。
【０１９９】
たとえば、最大７つのマスタのリクエストを中優先アービトレーションシーケンサ４００３に接続することにより、７つのマスタ間で公平なアービトレーションが実現される。また、バスマスタのうちのいくつかを、高優先アービトレーションシーケンサ４００２に割り付けることで、これらのマスタは他のマスタより、より高い確率でバスの使用権を取得することが出来る。さらに、いくつかのリクエストを低優先シーケンサ４００４に接続することで、これらのバスの使用率を低く抑える事が出来る。さらに、バスの取得機会確率の調整に加え、高優先シーケンサ４００２に割り当てられたマスタは、連続してバスを使用する事ができ、連続して使用出来る回数をプログラマブルなレジスタ４００５ａにより可変する事ができる。これは、バスの占有率を調整でき、ある特定のマスタにより多くの時間バスを使用させる様に出来る事を意味する。
【０２００】
（公平バスアービトレーション方式）
中優先シーケンサ４００３を例にとり、公平アービトレーションの実現方法を説明する。一つのシーケンサに接続されたすべてのバスマスタは同じ優先順位にあり、バス権を与えられる機会は公平である。バスがフリーの時は、一番最初にリクエストを出したバスマスタがバス権を得ることができる（ファーストカムファーストサーブ）。また、複数のバスマスタが同時にリクエストを出した場合は、あらかじめ決められた順序にしたがって順次バス権が与えられる（同時リクエスト発行時ラウンドロビン）。例えば、Ｍ１からＭ７までのすべてのバスマスタが同じクロックでリクエストを出した場合は、Ｍ１→Ｍ２→Ｍ３→Ｍ４→Ｍ５→Ｍ６→Ｍ７といった順序でバス権が与えられる。Ｍ７のトランザクションの終了時に再びすべてのバスマスタがリクエストを出している場合は、Ｍ１→Ｍ２→Ｍ３→Ｍ４→Ｍ５→Ｍ６→Ｍ７→Ｍ１→Ｍ２というように、同様の順序でバス権を与えていく。一部のバスマスタがリクエストを出している場合は、Ｍ７からＭ１へラウンドラップするとして、最後にバスを使用したマスタにもっとも近い大きい番号を持ったマスタへグラントを与える。
【０２０１】
（優先アービトレーション）
Ｂバスインターフェースは、高優先、中優先、低優先の３つのアービトレーションシーケンサが存在する。優先順位をつけたアービトレーションは、複数のバスリクエストを選択的に、高優先、低優先、のアービタに割り振ることにより実現される。
【０２０２】
たとえば、ひとつのマスタを高優先に割り当て、残りを中優先に割り当てることにより、ひとつのバスマスタが他のバスマスタよりも高い優先権を持つ優先バスマスタになり、他のバスマスタに比べ優先的にバス権が与えられる。同じ優先権のアービトレーションシーケンサに割り当てられたバスマスタの優先順位はすべて同じである。
【０２０３】
複数のバスマスタがリクエストを出しており、また優先バスマスタが連続してリクエストを行う場合、優先バスマスタと他のバスマスタは交互にバス権を得る。Ｍ３が優先マスタでＭ１，Ｍ２，Ｍ３，Ｍ４がリクエストを出し続けた場合Ｍ３→Ｍ１→Ｍ３→Ｍ２→Ｍ３→Ｍ４→Ｍ３→Ｍ１の順でバス使用権を与える。
【０２０４】
また、高優先バスマスタは、アービタ内のプログラマブルなレジスタにあらかじめ設定された回数だけ連続したバス権を得ることができる。連続したバスを使用出来る回数は最大で４回である。
【０２０５】
優先バスマスタ以外のバスマスタから他のバスマスタにバス権が移ると、そのバスマスタは、他にリクエストを出しているすべてのバスマスタにバス権を与えた後でないと再びバス権を得ることができない。ひとつのバスマスタが連続してリクエストを行う場合、他にリクエストを行っているバスマスタがいなければ、連続してバス権を得ることができるが、他のバスマスタがリクエストを行っていれば、そのバスマスタはあらかじめ設定された回数だけ連続してバス権を得ることができる。一度バス権が他のバスマスタに移ると、他にリクエストを出しているすべてのバスマスタにバス権を与えた後でないと再びバス権を得ることができない。
【０２０６】
低優先アービトレーションシーケンサ４００４には最大３本のリクエストを割り当てる事が出来る。低優先シーケンサ４００４に割り当てられたマスタへは、中優先、高優先シーケンサに割り当てられた、すべてのマスタのリクエストがなくならないと、バスの使用権が与えられない。このシーケンサへのバスマスタの割り当ては十分な注意を持って行われなければならない。
【０２０７】
（優先バスマスタの切り替え）
優先バスマスタの切り替えを行なうには、アービタ内のレジスタを書き換えればよい。優先バスマスタを選択するレジスタが書き換えられると、その時に実行中のトランザクションの終了を待って、優先バスマスタが切り替えられる。アービタのステートはアイドル状態にもどり、その時点でリクエストを出していたバスマスタは、その時同時にリクエストを出したものとして、あらためてアービトレーションが行われる。
【０２０８】
切り替えには十分注意を払う必要がある。優先させるべきバスマスタのDMAが終了しないうちに、異なったバスマスタに優先バスマスタを切り替えてしまうと、最初の優先バスマスタのDMAの優先度が下がってしまう。もしも最初の優先バスマスタの優先度を下げたくないのであれば、DMAが終了したのを確認してから優先バスマスタの切り替えを行なう必要がある。
【０２０９】
優先バスマスタ切り替えを、システムブート時のみでなく、システム稼働中も動的に行なう必要のあるソフトウェアでは、優先バスマスタの切り替えは、いったんＢバス上に新たなDMAリクエストが発生しないよう、すべてのバスマスタ及びDMAコントローラに対する設定を中止し、その後、Ｂバスアービタ４０７内のレジスタに適切な値をセットし、さらに、Ｂバスアービタ内のステータスレジスタをチェックし、バスマスタの優先権が切り替わったのを確認した上で新たなＢバス上へのアクセス及びDMAの起動を行うべきである。
【０２１０】
優先バスマスタの動的切り替えは、オペレーティングシステムの実時間保証、タスクの優先順位の設定を変化もしくは、違反させてしまう可能性があり、十分な考慮の上行われなければならない。
【０２１１】
（アクセス順序制御機構）
Ｂバスアービタ４０７はアクセス順序制御機構を含む。アクセス順序制御機構は、同期ユニット４００１と、Ｂバスアービタ４０７，Ｇバスアービタ４０６内に組み込まれたバス使用権発行抑制機構によって実現される。Ｂバスアービタ４０７内に組み込まれたバス使用権発行抑制機構は、Ｇバスアービタのそれと同様に動作する。つまり、stopPci信号が入力された場合は、Pciバスマスタからのバスリクエストが発行され、アービトレーションの結果、このマスタにバスの使用権を与えることが可能な状態でも、バスの使用権発行は行わず、他のマスタへバス使用権をあたえる。具体的には、stopPci信号が入力された場合は、直ちにbPciReq_Lをマスクすることにこれを行う。
【０２１２】
LANコントローラ４１４からのバスリクエストおよび、ストップ信号の場合もまったく同様に動作する。図４１に同期ユニット４００１のブロック図を示す。同期ユニット内には複数のDMAマスタ間すべての組み合わせに関して、それぞれコンペアユニット４１０１〜４１０３が接続される、ＤｏＥｎｇｉｎｅでは、Ｇbus上のDMAマスタはスキャナコントローラ／プリンタコントローラのみ存在する。Ｂバス上には、DMAPCIユニット、LANユニットの二つが存在する。ＳＢＢ内のＢバスインターフェースはＢバス上のバスマスタであるが、メモリには直接アクセスしないので、同期ユニット４００１にはＩＤと転送先アドレスを出力しない。
【０２１３】
図４２に同期ユニット内の一つコンペアユニット（Comparation Unit 1)を以下に示す。他のコンペアユニットも同様の構成を有する。
【０２１４】
PCIインターフェース４１６に付属するDMAブロックもしくは、スキャナコントローラ／プリンタコントローラから、同期ユニット４００１に対し、DMAライトがプログラミングされた時点で、転送先のアドレスとそのDMAブロック固有のリクエスト信号が通知される。
【０２１５】
各コンペアユニットは、各DMAブロックからリクエストが出力された時点で、アドレスを内部に持つタイマによる現在時刻とともに記憶する、次に他のDMAブロックから、DMAライトに関するアドレスとリクエストが入力された時点で、コンペアユニットは両アドレスを比較する。一致した場合にはさらに、それぞれのレジスタに格納された時間を比較し、時間的に後からDMAライトの要求を出してきたDMAブロックが接続されたバスのバスアービタに対し、このマスタに対するバス使用強化を与えないようにする。これは、stop(ID)という信号により各バスのバスアービタに通知される。
【０２１６】
各バスアービタはstop(ID)信号により通知されたマスタに対しては、アービトレーションによるバス使用権の割り当てを行わない。
【０２１７】
時間が経過し、先にアクセス要求を行ったバスマスタにより当該メモリアドレスへのDMAライトが終了すると、先のマスタは、同期ユニットに対するリクエストを取り下げる、同期ユニットは、２番目にDMAライトの要求を出した、DMAブロックの接続するバスのバスアービタに対し、このDMAブロックへの、バス使用権許可禁止信号の発行をとりさげる。そして、後からDMAライトを行うべきマスタのDMAライトが行われる。
【０２１８】
双方のDMAライトが終了し、双方のリクエストが取り下げられると、タイマーがリセットされる。タイマーのカウントアップは再度どちらかのマスタからのリクエストが出力された時点で再度行われる。
【０２１９】
２．９．スキャナコントローラ／プリンタコントローラ
図４３は、スキャナコントローラ／プリンタコントローラ及びその周辺の回路のブロック図である。スキャナ／プリンタコントローラは、スキャナおよびプリンタを、ＧバスまたはＢバスにインターフェースするブロックである。以下の３つの機能ブロックから構成される。
１．スキャナコントローラ
スキャナとビデオI/Fで接続され、動作制御およびデータ転送制御を行う。Ｇバス／ＢバスI/Fユニット４３０１ＡとはIF-バスで接続され、データ転送およびレジスタのリード・ライトが行われる。データ転送はマスタ機能を備える。スキャナコントローラは、ＤＭＡ要求する際に、転送先アドレス及び転送データ長に基づいてトランスファメモリアドレスのバウンダリが半端でないか判定し、その判定結果に応じてＧＢｕｓか、あるいはＢＢｕｓか、いずれを用いてデータを転送するか決定する。その結果、使用すると決定されたバスを要求する。例えば、転送アドレスの下位５ビットが０であれば、４バイトバウンダリに適合する。また、下位７ビットが０であれば１６バイトバウンダリに適合する。この場合には、データ長がそれぞれ４バイトあるいは１６バイトあれば、ＧＢｕｓの４ビートあるいは１６ビートバースト転送が使用可能である。これは、後述するとおり、ＧＢｕｓはこの２通りのバースト転送のみをサポートするである。
【０２２０】
この条件が満たされなければＧＢｕｓは使用できないため、ＢＢｕｓを要求して。左記の条件が満たされるまでそこでシングル転送することになる。また、これは、いわゆる２次元ＤＭＡと呼ばれる技術に関しても全く同様である。２次元ＤＭＡとは、あるメモリ空間をそのまま画像を描く平面としてみなし、その平面上に例えばスキャナから読み込んだ画像を張り付けるといった用途に用いられる手法である。２次元ＤＭＡの場合には、転送される画像データの転送先アドレスはかならずしも連続しておらず、転送先のメモリ空間中における画像の位置に対応したアドレスとなる。このような２次元ＤＭＡでも全く同様に、ＧＢｕｓとＢＢｕｓとが使い分けられる。
【０２２１】
以上のＧＢＵｓ／ＢＢｕｓの使い分けは、プリンタコントローラがマスタとして機能する場合にも全く同様である。
２．プリンタコントローラ
プリンタとビデオI/Fで接続され、動作制御およびデータ転送制御を行う。Ｇバス／ＢバスI/Fユニット４３０１ＢとはI/F-バスで接続され、データ転送およびレジスタのリード・ライトが行われる。データ転送はマスタとスレーブの両機能を備える。
３．Ｇバス／ＢバスI/Fユニット
スキャナコントローラ４３０２およびプリンタコントローラ４３０３をＧバスまたはＢバスに接続するためのユニットである。スキャナコントローラ４３０２とプリンタコントローラ４３０２にそれぞれ独立して接続され、ＧバスとＢバスに接続する。
４．ＣＰバス
スキャナとプリンタの、画像データおよび水平、垂直同期のための同期信号を直結するためのバスである。
【０２２２】
２．９．１．スキャナコントローラ
図４４にスキャナコントローラ４３０２のブロック図を示す。スキャナコントローラ４３０２は、ビデオI/Fによってスキャナと接続し、Ｇバス／ＢバスI/Fユニット（scc GBI）４３０１Ａにインターフェースするブロックである。Ｇバス／ＢバスI/Fユニット（scc GBI）４３０１Ａには、sccI/F-バスを介してインターフェースされる。大別して以下のブロックから構成される。
１．スキャナデバイスI/F４４０１
スキャナのビデオI/Fと信号の入出力をおこなう入出力ポート。
２．スキャナビデオクロックユニット４４０２
スキャナのビデオクロックで動作するユニット。
３．スキャナ画像データFIFOコントローラ４４０３
画像データ転送用のFIFOを制御する。
４．スキャナコントローラコントロールレジスタユニット４４０４
スキャナコントローラ全体を制御するためのレジスタ。
５．IRQコントローラ４４０６
スキャナコントローラ（Scc）内部で発生する割込み信号を制御する。
６．メモリフィルモードコントローラ４４０５
レジスタに設定された固定データをメモリに対して転送するモードをコントロールする。スキャナからの画像データと選択的に切り替えをおこなう。
７．ＦＩＦＯ（FIFO_SCC)４４０７
スキャナからのビデオデータを出力する際に、出力先のデバイスがビデオデータと非同期の可能性がある場合に用いられるＦＩＦＯである。
【０２２３】
なお、スキャナから入力する画像データの種類は、
１．RGB各８ビットのカラー多値データ
２．８ビット白黒多値データ
３．１ビット白黒２値データ
などが含まれる。
【０２２４】
次に、スキャナコントローラを構成する各ブロックの概要を説明する。
【０２２５】
［１．スキャナデバイスI/Fの概要］
図４５に、スキャナデバイスI/F４４０１のブロック図を示す。スキャナデバイスI/Fは、スキャナユニットのスキャナビデオI/F４５０１との間で信号を入出力する入出力ポートである。スキャナビデオI/Fからの入力ビデオ信号SVideoR[7:0], SVideoG[7:0], SVideoB[7:0]の各信号を、スキャナコントローラコントロールレジスタ４４０４からのVDInvt信号に応じて、レベル反転するかどうかを切り替えることが可能である。
【０２２６】
［２．スキャナビデオクロックユニットの概要］
図４６に、スキャナビデオクロックユニット４４０２のブロック図を示す。スキャナビデオクロックユニット４４０２は、スキャナからのビデオクロックで動作するブロックである。以下のブロックから構成される。
１．スキャナビデオデータマスク４６０１
スキャナからの画像データに対してデータマスクを行うブロックである。マスクされたデータはレジスタに設定された値のデータとなる。
２．スキャナビデオ同期コントロールユニット４６０２
スキャナからのビデオクロック, VSYNC, HSYNCの信号から、画像データを取り込むタイミング信号等を生成するブロックである。画像データの水平方向、垂直方向のデータ数とライン数を管理する。
３．ビデオデータ幅コンバータ
スキャナから入力した画像データを６４ビット幅のデータにパッキングして変換するブロックである。
【０２２７】
（スキャナビデオデータマスクの概要）
図４７にスキャナビデオデータマスク４６０１のブロック図を示す。スキャナビデオデータマスク４６０１は、スキャナから入力する画像データに対してピクセル単位でマスクを行う。マスクされた画像データはレジスタにより設定された値となる（RDMask[7:0], GDMask[7:0], BDMask[7:0]）。
【０２２８】
（スキャナビデオ同期コントロールユニットの概要）
図４８にスキャナビデオデータマスク４６０２のブロック図を示す。スキャナビデオ同期コントロールユニット４６０２は、スキャナから入力される画像データの垂直同期信号（SVSYNC）、水平同期信号（SHSYNC）、画像データ同期クロック（GTSVCLK）により、取り込む画像データのイネーブル信号（IVE）を生成する。また、画像データの主走査方向の遅延、取り込みピクセル数、副走査方向の遅延、取り込みライン数を管理する。さらに、設定量の画像データ取り込みを終了したタイミングでの状態信号（PENDP）を生成する。
【０２２９】
ラインカウンタ４８０１は副走査方向の遅延と取り込みライン数を管理して、画像読み取り有効ラインの垂直同期信号（ＥＨ）を生成する。ピクセルカウンタ４８０２は主走査方向の画像取り込み遅延と取り込み画素数を管理する。ページカウンタ４８０３は入力する画像データをページ単位で管理する。設定されたページ数分の画像データ入力を終了すると、終了信号（ALLPEND）を生成する。
【０２３０】
（スキャナ ビデオデータ幅コンバータ４６０３の概要）
図４９にスキャナビデオデータ幅コンバータ４６０３のブロック図を示す。これは、スキャナから入力する画像データを６４ビット幅にならべるユニットである。ならべたデータはFIFOに６４ビットデータで書き込まれる。入力できる画像データのタイプは、RGB各８ビットのカラー画像データ、多値８ビットの白黒画像データ、２値１ビットの白黒画像データの３種類である。スキャナコントローラコントロールレジスタ４４０４においてモード設定される。モードとしては、RGBカラー画像データをメモリ内に２４ビットでならべるモードと、１バイト付加して３２ビットでならべるモードとを備える。３種類の画像データは以下の信号ラインから入力される。
１．RGB各８ビットのカラー画像データ  …  R[7:0], G[7:0], B[7:0]
２．多値８ビットの白黒画像データ     …  R[7:0]
３．２値１ビットの白黒画像データ     …  R７
６４ビットデータへのならべかたとメモリ上でのならびかたは以下のとおりである。
【０２３１】
１．RGB各８ビットのカラー画像データ（２４ビット格納モード）
第１ピクセルR８ビット→ビット６３−５６
第１ピクセルG８ビット→ビット５５−４８
第１ピクセルB８ビット→ビット４７−４０
第２ピクセルR８ビット→ビット３９−３２
第２ピクセルG８ビット→ビット３１−２４
第２ピクセルB８ビット→ビット２３−１６
第３ピクセルR８ビット→ビット１５−８
第３ピクセルG８ビット→ビット７−０
メモリ上でのならびは、図５０の通りである。
【０２３２】
２．RGB各８ビットのカラー画像データ（３２ビット格納モード）
第１ピクセルR８ビット→ビット６３−５６
第１ピクセルG８ビット→ビット５５−４８
第１ピクセルB８ビット→ビット４７−４０
第２ピクセルR８ビット→ビット３１−２４
第２ピクセルG８ビット→ビット２３−１６
第２ピクセルB８ビット→ビット１５−８
メモリ上でのならびは、図５１の通りである。
【０２３３】
３．多値８ビットの白黒画像データ
第１ピクセル８ビット→ビット６３−５６
第２ピクセル８ビット→ビット５５−４８
第３ピクセル８ビット→ビット４７−４０
第４ピクセル８ビット→ビット３９−３２
第５ピクセル８ビット→ビット３１−２４
第６ピクセル８ビット→ビット２３−１６
第７ピクセル８ビット→ビット１５−８
第８ピクセル８ビット→ビット７−０
メモリ上でのならびは、図５２の通りである。
【０２３４】
４．２値１ビットの白黒画像データ
第１ピクセル１ビット→ビット６３
第２ピクセル１ビット→ビット６２
第３ピクセル１ビット→ビット６１
第４ピクセル１ビット→ビット６０
：
第６１ピクセル１ビット→ビット３
第６２ピクセル１ビット→ビット２
第６３ピクセル１ビット→ビット１
第６４ピクセル１ビット→ビット０
メモリ上でのならびは、図５３の通りである。
【０２３５】
次に、各パッキングユニットについて説明する。
【０２３６】
図５４は、ＢＷ８パッキングユニット４９０１により、多値８ビットの白黒画像データを６４ビット幅に変換する際のタイミング図である。スキャナからの８ビット白黒画像データＲ[7:0]は、信号ＶＥがハイレベルになると取り込まれ、１ピクセルずつ信号ＬＰ０〜ＬＰ７に同期して６４ビットラッチにラッチされる。８画素分揃うと、信号ＬＰ６４に同期して、ラッチされた８画素６４ビットが信号ＢＷ８[63:0]として出力される。
【０２３７】
図５５は、シフトレジスタ４９０２により２値白黒画像データを６４ビット幅に変換する際の画像データ入力のタイミング図である。スキャナからの２値白黒画像データＲ７（SVIDEOR0）は、信号ＶＥがハイレベルになると取り込まれ、１ビットずつシフトレジスタによりシフトされて、６４ビット取り込まれると。信号SVLATCH64に同期して、信号ＢＷ１［63:0］として出力される。
【０２３８】
図５６は、ＲＧＢパッキングユニット４９０３により、ＲＧＢ各８ビット（全２４ビット）の画像データを６４ビット幅に変換する際のタイミング図である。また、図５７は、RGBパッキングユニット４９０３のブロック図である。図において、スキャナビデオデータマスク４６０１から入力された画像データR[7:0]，G[7:0]，B[7:0]は、２４ビットデータラッチ５７０１Ａ，Ｂに入力される。データラッチＡ，Ｂは、クロックCLKを２分の１に分周した、互いに逆位相のラッチ信号LP0，LP1に同期してそれぞれ入力される２４ビットデータをラッチする。データラッチ５７０１Ａ，Ｂにラッチされたデータは、４８→３２ビットデータセレクタ５７０２に入力信号RGBHT[47:0]として入力され、２ビットの選択信号LP[3:2]に応じて３２ビット信号DATA[31:0]として出力される。出力の仕方は、選択信号の値に応じて３通りある。まず第１番目は、入力信号RGBHT[47:16]を出力信号DATA[31:0]とする方法である。第２番目は、入力信号RGBHT[15:0]を出力信号DATA[31:16]とし、入力信号RGBHT[47:32]を出力信号DATA[15:0]とする方法である。第３番目は、入力信号RGBHT[31:0]を出力信号DATA[31:0]とする方法である。
【０２３９】
データラッチ５７０１Ａ，Ｂに、ラッチ信号に同期させて交互に２４ビット画像データをラッチし、上記３通りの選択の仕方を順に切り換えることで、データセレクタ５７０２からの出力は、２４ビット／ピクセルのデータを３２ビットにまとめたデータとなる。ただし、上記第３の方法でセレクタ５７０２のデータが選択された後は、データセレクタに入力された２つのピクセル分のデータは両方とも更新されねばならない。そこで、図５６に示されている通り、選択信号SELUL[3:2]は１クロック分遅延される。
【０２４０】
このようにデータセレクタ５７０２で３２ビット幅に一旦変換されたデータは、データラッチ５７４０Ａ，Ｂに交互にラッチされ、データラッチ５７０４Ｂの内容が更新されたタイミング、すなわちラッチ信号SELUL1がハイレベルになるタイミングで、６４ビット幅に変換されたデータとして出力される。
【０２４１】
［３．スキャナ画像データ転送FIFOコントローラ４４０３の概要］
図５８に、スキャナ画像データ転送FIFOコントローラ４４０３のブロック図を示す。このブロックは、スキャナから入力された画像データをＧバスもしくはＢバスを介して転送するためのバッファとしてのFIFO５８０１と、そのFIFO５８０１をコントロールする回路から構成されている。FIFOとしては、容量５１２バイト（６４ビット×６４）のFIFOを備える。FIFOのデータ出力は、スキャナFIFOライトリードアービタ５８０２が、FIFO５８０１のエンプティフラグ（EF）を監視しながら制御する。FIFOのデータ入力はスキャナビデオクロックユニット４４０２からの要求信号（WREQ）によりおこなわれる。
【０２４２】
［４．スキャナコントローラコントロールレジスタ４４０４の概要］
図５９に、スキャナコントローラコントロールレジスタ４４０４のブロック図を示す。このブロックは、スキャナコントローラ内部を制御するレジスタを備えたブロックである。内部のレジスタは以下のとおりである。
１．スキャナ・コントローラ・パワー・マネージメント・コントロールレジスタ２．スキャナコントローラ・コントロールレジスタ
３．スキャナ・コントローラ・割り込み要因ステータスレジスタ
４．スキャナ・コントローラ・割り込み要因マスクレジスタ
５．スキャナ副走査マスクライン数設定レジスタ
６．スキャナ主走査マスクピクセル数設定レジスタ
７．スキャナ副走査ライン数設定レジスタ
８．スキャナ副走査ライン数カウンタ読み出しレジスタ
９．スキャナ副走査ピクセル数設定レジスタ
１０．スキャナ主走査ピクセル数カウンタ読み出しレジスタ
１１．スキャン・ページ数設定レジスタ
１２．スキャン・ページ数カウンタ読み出しレジスタ
１３．スキャナ・デバイス・コントロール・レジスタ
１４．スキャナ・デバイス・ステータス・レジスタ
１５．スキャナ・ビデオ・マスクデータ・レジスタ
１６．メモリ・フィル・データ・レジスタ
［５．IRQコントローラ４４０６の概要］
図６０に、IRQコントローラ４４０６のブロック図を示す。このブロックは、スキャナコントローラ内で発生する割り込み信号を管理する。割り込み発生要因には次のようなものがある。
１．設定されたページ分の画像データを入力終了（ALLEND）
２．１ページ分の画像データを入力終了（PageEnd）
３．スキャナからのSPRDY信号の立ち上がり（false→true）（INSPRDY）
４．スキャナからのSPRDY信号の立ち下がり（true→false）（INSPRDY）
５．スキャナからのSVSYNC信号の立ち上がり（false→true）（INSVSYNC）
６．スキャナからのSVSYNC信号の立ち下がり（true→false）（INSVSYNC）
７．画像データFIFOのEMPTY信号の立ち上がり（false→true）（EMPTY）
８．画像データFIFOのEMPTY信号の立ち下がり（true→false）（EMPTY）
９．画像データFIFOのFULL信号の立ち上がり（false→true）（FULL）
１０．画像データFIFOのFULL信号の立ち下がり（true→false）（FULL）
１１．画像データFIFOにオーバーライトが発生（FOW）
上記の割り込み要因に対応するフラグ情報（SCIRQ[31:21]）をスキャナコントローラコントロールレジスタ４４０６に出力する。スキャナコントローラコントロールレジスタ４４０６から、各割り込み要因に対するマスクビット（SCIMask[31:21]）とクリア信号（SCICLRP[31:21]）とが入力される。各割り込み要因の論理和をintSccに出力する。
【０２４３】
［６．メモリフィルモードコントローラ４４０５の概要］
図６１にメモリフィルモードコントローラ４４０５のブロック図を示す。このブロックは、レジスタに設定された固定データをGBIを介してメモリに転送するモードを制御する。このモード設定はMemfill信号によりおこなわれる。固定データの転送モード指定がなされると、sccGBIに出力されるデータは、レジスタに設定されたデータ（MFData[31:0]）が選択される。また、sccGBIにデータ転送するタイミング信号（sccWrite）はこのブロック内で生成される。
【０２４４】
（ｓｃｃＩＦ−バス）
ｓｃｃＩＦ−バスは、Ｇバス／ＢバスI/Fユニット４３０１Ａとスキャナコントローラ４３０２とを接続するローカルなバスである。このバスに含まれる信号には次のようなものである。なお、信号の入出力は、スキャナコントローラからＧバス／ＢバスI/Fユニット(GBI)に出力する信号をOUT, Ｇバス／ＢバスI/Fユニット(GBI)からスキャナコントローラに入力する信号をINで示す。なお、IF-バスはスキャナコントローラとプリンタコントローラに対して同一規定とするため、スキャナコントローラのサポートしない機能のための信号も記述する。基本クロックはＢバスのBclkを使用する。
・sccRst0_L         :IN
この信号により、スキャナコントローラ内部のFIFOを初期状態に戻す。
・sccDataOut[63:0]  :OUT
スキャナコントローラからＧバス／ＢバスI/Fユニット(GBI)に出力される６４ビットのデータバスである。スキャナコントローラがデータ転送動作する場合に画像データが転送される。
・sccWrite          :OUT
スキャナコントローラがデータ転送動作するときの、Ｇバス／ＢバスI/Fユニット(GBI)へのライト信号である。Ｇバス／ＢバスI/Fユニットは、sccWrite信号がアサートされているBclkの立ち上がりで、sccDataOut[63:0]を取り込む。sccWrite信号をアサートし続けることで、１クロック単位でデータがライトできる。・sccWriteEnable    :IN
スキャナコントローラがデータ転送動作時における、Ｇバス／ＢバスI/Fユニット(GBI)へのライト信号である。Ｇバス／ＢバスI/Fユニット(GBI)から出力される。Bclkの立ち上がりで、sccWriteEnable信号がアサートされていれば、次のクロックの立ち上がりで、ライト可能であることを示す。sccWrite信号のアサートは、sccWriteEnable信号を確認して行う。
・sccRegAddr[31:2]    :IN
Ｇバス／ＢバスI/Fユニット(GBI)からスキャナコントローラ内部のレジスタにアクセスするさいのレジスタアドレスバスである。sccRegStart_Lアサートと同時に有効となり、スキャナコントローラ内部レジスタへのアクセスであれば、sccRegAck_L信号で応答するまで有効である。
・sccRegbyteEn[3:0]  :IN
Ｇバス／ＢバスI/Fユニット(GBI)から出力されるsccRegDataIn[31:0]のバイトイネーブル信号である。sccRegStart_Lアサートと同時に有効となり、sccRegAck_L信号で応答するまで有効である。この信号で示された有効なバイトのみレジスタへの書き込みを行う。内部レジスタからの読み出し時は、この信号は無視し、全バイト出力する。この信号の各ビットとsccRegDataIn[31:0]のバイトとの対応は次の通りである。
sccRegbyteEn:       3          2          1        0
sccRegDataIn:    [31:24]    [25:16]    [15:8]    [7:0]
・sccRegStart_L      :IN
Ｇバス／ＢバスI/Fユニット(GBI)からスキャナコントローラ内部のレジスタにアクセスする際のアクセス要求信号である。“Low”でレジスタのアクセス要求を示す。sccRegAddr[31:2]信号、sccRegRdNotWr信号とともにアサートされ、Bclk１クロック分だけアサートされる。スキャナコントローラが、このアクセスに対するsccRegAck_Lを返さない限り、次のアクセスのアサートはされない。
・sccRegDataOut[31:0]  :OUT
Ｇバス／ＢバスI/Fユニット(GBI)からスキャナコントローラ内部のレジスタをリードアクセスする場合の３２ビットデータバスである。sccRegAck_L信号がアサートされているときに有効となる。
・sccRegDataIn[31:0]    :IN
Ｇバス／ＢバスI/Fユニット(GBI)からスキャナコントローラ内部のレジスタをライトアクセスする場合の３２ビットデータバスである。sccRegStart_Lアサートと同時に有効となり、スキャナコントローラ内部レジスタへのアクセスであれば、sccAck_L信号で応答するまで有効である。
・sccRegRdNotWr        :IN
Ｇバス／ＢバスI/Fユニット(GBI)からスキャナコントローラ内部のレジスタにアクセスするさいのアクセス方向（リードまたはライト）を示す信号である。”High”でスキャナコントローラ内部レジスタの内容がsccRegDataOut[31:0]に読みだされ、”Low”でsccRegDataIn[31:0]の内容がスキャナコントローラ内部レジスタに書き込まれる。sccRegStart_Lアサートと同時に有効となり、スキャナコントローラ内部レジスタへのアクセスであれば、sccRegAck_L信号で応答するまで有効である。
・sccRegAck_L          :OUT
スキャナコントローラ内部のレジスタアクセスが完了したことを示す信号である。スキャナコントローラからＧバス／ＢバスI/Fユニット(GBI)へ出力される。Bclk１クロック分だけアサートされる。sccRegReq_L信号がアサートされた次のクロックからセンスされる。
【０２４５】
なお、信号sccRst1_L, sccバイトEn[7:0], sccRead, sccDataIn[63:0]は、IFバスに含まれているものの、スキャナコントローラでは未使用である。
【０２４６】
図６２及び図６３は、上述の信号のタイミングの一例を示すタイミングダイアグラムである。図６２はスキャナコントローラ４３０２からデータを読み出してDMA転送する際のタイミングであり、図６３は、スキャナコントローラ４３０２の内部レジスタに対して読み出しあるいは書き込みを行うタイミングである。
【０２４７】
（パワーマネジメント）
スキャナコントローラ内部では、スキャナ・コントローラ・パワー・マネジメント・コントロールレジスタ（0X1B005000）の設定に応じたビデオクロック(SVCLK)のゲートコントロールを行い、それによりパワーマネージメントを行う。パワーマネジメントユニット（PMU）４０９に出力するPMステート信号（sccPmStat[1:0]）の値は、Gバス／BバスI/Fユニット４３０１Ａから入力されるsccDmaPmState[1:0]の状態とクロックの状態とを合わせて決定される。sccPmState[1:0]は図６４のとおりである。
【０２４８】
図６４において、sccDmaPmState[1:0]は、スキャナのＧバス／ＢバスインターフェースGBI_sccのパワー消費状態を示している。GBI_secにはパワー消費状態00〜11の4段階がある。この状態信号sccDmaPmState[1：0]は、GBI_sccからスキャナコントローラへ出力されている。
【０２４９】
また、スキャナコントローラのパワー消費状態は２段階あり、内部信号SPStatで示される。
【０２５０】
信号sccPmstate[1：0]は、GBI_sccとスキャナコントローラの２つの状態をあわせた状態を示している。この信号がシステムのパワーマネージメントユニットに出力される。すなわち、スキャナコントローラの電力消費状態は４段階でパワーマネジメントユニットに伝えられる。その段階は信号sccPmstate[1：0]の値で示される。値00が最低レベルであり、１増えるごとに示される電力消費量は大きくなる。
【０２５１】
（スキャナコントローラコアインターフェース）
図６５は、スキャナコントローラ４３０２における、上述した各ブロックを含むコア部分と、外部バスやスキャナとの間で入出力される信号をまとめた図である。このように、スキャナコントローラ４３０２は、システムバスブリッジ４０２との間をＧバスにより接続され、ＩＯデバイスやパワーマネジメントデバイス及びシステムバスブリッジとの間をＢバスにより接続され、プリンタコントローラとの間をＣＰバスで接続され、Gバス／BバスI/Fユニットとの間をＩ／Ｆバスにより接続されている。
【０２５２】
２．９．２．プリンタコントローラ
図６６にプリンタコントローラ４３０３のブロック図を示す。プリンタコントローラはビデオI/Fによってプリンタと接続し、Ｇバス／ＢバスI/Fユニットにインターフェースするブロックである。大別して以下のブロックから構成される。１．プリンタデバイスI/F６６０１
プリンタビデオI/FおよびオプションコントローラI/Fと信号の入出力をおこなう入出力ポートである。
２．プリンタビデオクロックユニット６６０２
プリンタのビデオクロックで動作するユニットである。
３．プリンタ画像データFIFOコントローラ６６０３
画像データ転送用のFIFOを制御する。
４．プリンタコントローラコントロールレジスタユニット６６０４
プリンタコントローラ全体を制御するためのレジスタユニットである。
５．IRQコントローラ６６０５
プリンタコントローラ（Prc）内部で発生する割込み信号を制御する。
６．プリンタコマンド／ステータスコントロールユニット６６０６
ビデオI/Fを介してプリンタとのコマンド／ステータス送受信を制御する。
７．オプションコントローラコントロールユニット６６０７
プリンタオプションコントローラを制御するユニットである。
８．ＦＩＦＯ(FIFO_PRC)６６０８
プリンタへとビデオデータを出力する際に、プリンタがビデオデータと非同期の可能性がある場合に用いられるＦＩＦＯである。
【０２５３】
プリンタへ出力する画像データの種類は次の５種類である。
１．RGB各８ビットのカラー多値データ（点順次）
２．８ビット白黒多値データ
３．１ビット白黒２値データ
４．CMYK各１ビットのカラーデータ（面順次）
５．CMYK各８ビットのカラーデータ（面順次）
次に、プリンタコントローラを構成する各ブロックの概要を説明する。
【０２５４】
［１．プリンタデバイスI/Fの概要］
図６７にプリンタデバイスI/F６６０１のブロック図を示す。このブロックは、プリンタビデオI/FおよびオプションコントローラI/Fから信号を入出力する入出力ポートである。PビデオR[7:0], PビデオB[7:0]の各信号はVDInvt信号により、出力信号をレベル反転するかどうかを切り替えることが可能である。
【０２５５】
［２．プリンタビデオクロックユニットの概要］
図６８にプリンタビデオクロックユニット６６０２のブロック図を示す。このブロックは、プリンタからのビデオクロックで動作し、以下のブロックから構成される。
１．プリンタビデオデータマスク６８０１(DFF8ENMask)
プリンタへの画像データに対して、データマスクを行うブロック。マスクされたデータはレジスタに設定された値のデータとなる。
２．プリンタビデオ同期コントロールユニット６８０２(Prc_syncユニット)
プリンタからのビデオクロック, VSYNC, HSYNCの信号から、画像データを出力するタイミング信号等を生成するブロック。画像データの水平方向、垂直方向のデータ数とライン数を管理する。
３．プリンタ ビデオデータ幅コンバータ６８０３(pvdwconv)
IFバスからの６４ビット幅で送られてくる画像データを、モードにより、RGB２４ビット、白黒８ビット、白黒１ビットのデータに変換するブロック。モード設定はレジスタにより行う。
【０２５６】
（プリンタビデオデータマスク）
図６９にプリンタビデオデータマスク６８０１のブロック図を示す。このブロックは、プリンタへ出力する画像データに対して、ピクセル単位でマスクを行う。マスクされた画像データはレジスタに設定された値となる（RDMask[7:0], GDMask[7:0], BDMask[7:0]）。
【０２５７】
（プリンタビデオ同期コントロールユニット）
図７０にプリンタビデオ同期コントロールユニット６８０２のブロック図を示す。このブロックは、プリンタへ出力する画像データの垂直同期信号（TOP）、水平同期信号（INPHSYNC）、画像データ同期クロック（GTVCLK）により、出力する画像データのイネーブル信号（VDOEN）、プリンタ画像データ転送FIFOコントローラ６６０３にデータの要求をする信号（RREQ）を生成する。
【０２５８】
また、画像データの主走査方向の遅延、取り込みピクセル数、副走査方向の遅延、取り込みライン数を管理する。ラインカウンタ７００１は設定量の画像データ出力を終了したタイミングでの状態信号（PENDP）を生成する。また、副走査方向の遅延と出力ライン数を管理して、画像出力有効ラインの垂直同期信号（EH）を生成する。ピクセルカウンタ７００２は主走査方向の画像出力遅延と出力画素数を管理する。ページカウンタ７００３は出力する画像データをページ単位で管理する。設定されたページ数分の画像データ出力を終了すると、終了信号（ALLPEND）を生成する。
【０２５９】
（プリンタ ビデオデータ幅コンバータ）
図７１にビデオデータ幅コンバータ６８０３のブロック図を示す。このブロックは、GBI(Ｇバス／ＢバスI/F)から入力する６４ビット幅のデータを画像データの形式に変換するユニットである。出力できる画像データのタイプは次の３種類。RGB各８ビットのカラー画像データ、多値８ビットの白黒画像データ、２値１ビットの白黒画像データである。RGB各８ビットのカラー画像データは２４ビット単位でメモリ上に格納されている場合（２４ビットモード）と、２４ビットに１バイトデータが付加されて３２ビット単位でメモリに格納されている場合（３２ビットモード）の２つのモード出力をサポートする。このモードは、プリンタコントローラコントロールレジスタ６６０４においてモード設定される。３種類の画像データは以下の信号ラインへ出力される。
１．RGB各８ビットのカラー画像データ  …  IR[7:0], IG[7:0], IB[7:0]
２．多値８ビットの白黒画像データ     …  IR[7:0]
３．２値１ビットの白黒画像データ     …  IR７
６４ビットデータのメモリ上でのならびかたは以下のとおりとなる。
【０２６０】
１．RGB各８ビットのカラー画像データ（２４ビットモード）
第１ピクセルR８ビット→ビット６３−５６
第１ピクセルG８ビット→ビット５５−４８
第１ピクセルB８ビット→ビット４７−４０
第２ピクセルR８ビット→ビット３９−３２
第２ピクセルG８ビット→ビット３１−２４
第２ピクセルB８ビット→ビット２３−１６
第３ピクセルR８ビット→ビット１５−８
第３ピクセルG８ビット→ビット７−０
この場合、メモリ上でのならびは、図７２に示した通りとなる。
【０２６１】
２．RGB各８ビットのカラー画像データ（３２ビットモード）
第１ピクセルR８ビット→ビット６３−５６
第１ピクセルG８ビット→ビット５５−４８
第１ピクセルB８ビット→ビット４７−４０
第２ピクセルR８ビット→ビット３１−２４
第２ピクセルG８ビット→ビット２３−１６
第２ピクセルB８ビット→ビット１５−８
この場合、メモリ上でのならびは、図７３に示した通りとなる。
【０２６２】
３．多値８ビットの白黒画像データ
第１ピクセル８ビット→ビット６３−５６
第２ピクセル８ビット→ビット５５−４８
第３ピクセル８ビット→ビット４７−４０
第４ピクセル８ビット→ビット３９−３２
第５ピクセル８ビット→ビット３１−２４
第６ピクセル８ビット→ビット２３−１６
第７ピクセル８ビット→ビット１５−８
第８ピクセル８ビット→ビット７−０
この場合、メモリ上でのならびは、図７４に示した通りとなる。
【０２６３】
４．２値１ビットの白黒画像データ
第１ピクセル１ビット→ビット６３
第２ピクセル１ビット→ビット６２
第３ピクセル１ビット→ビット６１
第４ピクセル１ビット→ビット６０
：
第６０ピクセル１ビット→ビット４
第６１ピクセル１ビット→ビット３
第６２ピクセル１ビット→ビット２
第６３ピクセル１ビット→ビット１
第６４ピクセル１ビット→ビット０
この場合、メモリ上でのならびは、図７５に示した通りとなる。
【０２６４】
次に、プリンタビデオデータ幅コンバータを構成するブロックについて説明する。
【０２６５】
（ＲＧＢｏｕｔユニット７１０１）
図７６にRGBoutユニット７１０１のブロック図を示す。このブロックは２４ビットモードでパックされた６４ビット幅のデータをRGB各８ビットのカラー画像データに変換するユニットである。
【０２６６】
［３．プリンタ画像データ転送FIFOコントローラの概要］
図７７にプリンタ画像データ転送FIFOコントローラ６６０３のブロック図を示す。このブロックは、プリンタへ出力する画像データをGBI(Ｇバス／ＢバスI/F)を介して転送するためのバッファとしてのFIFOと、そのFIFOをコントロールする回路でらう。容量５１２バイト（６４ビット×６４）のFIFO７７０１を備える。FIFOのデータ入力は、プリンタFIFOライトリードアービタ７７０２がFIFO７７０１のフルフラグ（FF）を監視しながら制御する。FIFOのデータ出力はプリンタビデオクロックユニット６６０２からの要求信号（RREQ）によりおこなわれる。
【０２６７】
［４．プリンタコントローラコントロールレジスタユニット］
図７８にプリンタコントローラコントロールレジスタ６６０４のブロック図を示す。このブロックは、プリンタコントローラ内部を制御するレジスタを備えたブロックである。内部のレジスタは以下のとおりである。
１．プリンタ・パワー・マネージメント・コントロールレジスタ
２．プリンタ・コントローラ・コントロールレジスタ
３．プリンタ・コントローラ・割り込み要因ステータスレジスタ
４．プリンタ・コントローラ・割り込み要因マスクレジスタ
５．プリンタ副走査マスクライン数設定レジスタ
６．プリンタ主走査マスクピクセル数設定レジスタ
７．プリンタ副走査ライン数設定レジスタ
８．プリンタ副走査ライン数カウンタ読み出しレジスタ
９．プリンタ主走査ピクセル数設定レジスタ
１０．プリンタ主走査ピクセル数カウンタ読み出しレジスタ
１１．プリント・ページ数設定レジスタ
１２．プリント・ページ数カウンタ読み出しレジスタ
１３．プリンタ・デバイス・コントロール・レジスタ
１４．プリンタ・デバイス・ステータス・レジスタ
１５．プリンタ・シリアル・コマンド・レジスタ
１６．プリンタ・シリアル・ステータス・レジスタ
１７．オプション・コントローラ・ＴＸ・レジスタ
１８．オプション・コントローラ・ＲＸ・レジスタ
１９．プリンタ・ビデオ・マスクデータ・レジスタ
２０．４階調出力レベル設定レジスタ
２１．１６階調出力レベル設定レジスタ１
２２．１６階調出力レベル設定レジスタ２
２３．１６階調出力レベル設定レジスタ３
２４．１６階調出力レベル設定レジスタ４
［５．ＩＲＱコントローラ］
図７９及び図８０にＩＲＱコントローラ６６０５のブロック図を示す。このブロックは、プリンタコントローラ内で発生する割り込み信号を管理する。割り込み要因から、割り込みを発生させる。各割り込み要因に対してマスク機能をもち、個別にクリアすることができる。割り込み要因は以下のとおりである。
１．画像データ転送全ページ終了（ALLPEnd）
２．画像データ転送１ページ終了（PageEnd）
３．シリアルステータス１バイト受信完了（INPSBSY）
４．シリアルコマンド１バイト送信完了（EndCBSY）
５．PPRDY信号立ち上がり（false→true）（INPPRDY）
６．PPRDY信号立ち下がりtrue→false）（INPPRDY）
７．RDY信号立ち上がり（false→true）（INRDY）
８．RDY信号立ち下がり（true→false）（INRDY）
９．PFED信号立ち上がり（false→true）（INPFED）
１０．PFED信号立ち下がり（true→false）（INPFED）
１１．SPCHG信号立ち上がり（false→true）（INSPCHG）
１２．SPCHG信号立ち下がり（true→false）（INSPCHG）
１３．PDLV信号立ち上がり（false→true）（INPDLV）
１４．PDLV信号立ち下がり（true→false）（INPDLV）
１５．TOPR信号立ち上がり（false→true）（INTOPR）
１６．TOPR信号立ち下がり（true→false）（INTOPR）
１７．CCRT信号立ち上がり（false→true）（INCCRT）
１８．CCRT信号立ち下がり（true→false）（INCCRT）
１９．VSREQ信号立ち上がり（false→true）（INPVSYNC）
２０．VSREQ信号立ち下がり（true→false）（INPVSYNC）
２１．オプションコントローラ TX送信＆RX受信完了
２２．画像データ転送FIFOのEMPTY信号の立ち上がり
２３．画像データ転送FIFOのEMPTY信号の立ち下がり
２４．画像データ転送FIFOのFULL信号の立ち上がり
２５．画像データ転送FIFOのFULL信号の立ち下がり
２６．画像データ転送FIFOにオーバーリードが発生（EERDOut）
上記の割り込み要因に対応するフラグ情報（PCIRQ[31:6]）をプリンタコントローラコントロールレジスタ６６０４に出力する。プリンタコントローラコントロールレジスタ６６０４から、各割り込み要因に対する、マスクビット（PCIMask[31:6]）とクリア信号（PCICLRP[31:6]）を入力する。各割り込み要因の論理和がintPrcに出力する。
【０２６８】
［６．プリンタコマンド／ステータスコントロールユニット］
図８１に、プリンタコマンド／ステータスコントロールユニット６６０６のブロック図を示す。このブロックは、プリンタを制御するためのシリアルコマンド／ステータスを送受信するブロックである。
【０２６９】
シリアルコマンドとしては、コマンドを送信している期間をあらわすINPCBSY信号、シリアルコマンドの同期クロックであるINPCCLK信号、シリアルコマンドINPSRCMD信号が生成される。
【０２７０】
シリアルステータスとしては、ステータスが送信されている期間を示すINPSBSY信号、シリアルステータスINPSRSTS信号が入力されて、８ビットのステータスPSRSTAT[7:0]を出力する。シリアルステータスを入力するための同期クロックはプリンタから出力されるINPPCLK信号、または、本ブロックで生成されるPCCLK信号のどちらかを選択可能である。選択はPSRCLKMode信号によりなされる。
【０２７１】
［７．オプションコントローラコントロールユニット］
図８２に、オプションコントローラコントロールユニット６６０７のブロック図を示す。このブロックは、オプションコントローラに対して、送信データ（TX）を出力するユニットである。TX送信のための、INSTROBE信号、INCKEN信号、CLK(OPCLK)信号を生成する。また、TX送信と同時に、受信データ（RX）の受信を行う。
【０２７２】
（ｐｒｃＩＦ−バス）
ｐｒｃＩＦ−バスは、Ｇバス／ＢバスI/Fユニット４３０１Ｂとプリンタコントローラ４３０３とを接続するローカルなバスである。このバスに含まれる信号には次のようなものである。なお、信号の入出力は、プリンタコントローラからＧバス／ＢバスI/Fユニット(GBI)に出力する信号をOUT, Ｇバス／ＢバスI/Fユニット(GBI)からプリンタコントローラに入力する信号をINで示す。IF-バスはスキャナコントローラとプリンタコントローラに対して同一規定とするため、プリンタコントローラのサポートしない機能のための信号も記述する。基本クロックはＢバスのBclkを使用する。
・prcRst0_L          ：IN
この信号により、プリンタコントローラ内部のFIFOを初期状態に戻す。
・prcDataIn[63:0]    ：IN
Ｇバス／ＢバスI/Fユニット(GBI)からプリンタコントローラに出力される６４ビットのデータバスである。プリンタコントローラがデータ転送動作する場合に画像データが転送される。
・prcRead            ：OUT
プリンタコントローラがデータ転送動作するとき、Ｇバス／ＢバスI/Fユニット(GBI)からのリード信号。Ｇバス／ＢバスI/Fユニット(GBI)は、prcRead信号がアサートされているBclkの立ち上がりに対して、prcDataIn[63:0]を有効とする。prcRead信号をアサートし続けることで、１クロック単位でデータがリードできる。
・prcReadEnable      ：IN
プリンタコントローラがデータ転送動作時、Ｇバス／ＢバスI/Fユニット(GBI)からのデータリード許可を示す信号。Ｇバス／ＢバスI/Fユニット(GBI)から出力される。Bclkの立ち上がりで、prcReadEnable信号がアサートされていれば、次のクロックの立ち上がりで、リード可能であることを示す。prcRead信号のアサートは、prcReadEnable信号を確認して行う。
・prcRegAddr[31:2]      ：IN
Ｇバス／ＢバスI/Fユニット(GBI)からプリンタコントローラ内部のレジスタにアクセスするさいのレジスタアドレスバス。prcRegStart_Lアサートと同時に有効となり、スキャナコントローラ内部レジスタへのアクセスであれば、prcRegAck_L信号で応答するまで有効である。
・prcRegbyteEn[3:0]    ：IN
Ｇバス／ＢバスI/Fユニット(GBI)から出力されるprcRegDataIn[31:0]のバイトイネーブル信号。prcRegStart_Lアサートと同時に有効となり、prcRegAck_L信号で応答するまで有効である。この信号で示された有効なバイトのみレジスタへの書き込みを行う。内部レジスタからの読み出し時は、この信号は無視し、全バイト出力する。この信号の各ビットとprcRegDataIn[31:0]のバイトとの対応は次の通りである。
prcRegbyteEn:       3          2          1        0
prcRegDataIn:    [31:24]    [25:16]    [15:8]    [7:0]
・prcRegStart_L        :IN
Ｇバス／ＢバスI/Fユニット(GBI)からプリンタコントローラ内部のレジスタにアクセスするさいのアクセス要求信号。”Low”でレジスタのアクセス要求を示す。prcRegAddr[31:2]信号、prcRegRdNotWr信号とともにアサートされ、Bclk１クロック分だけアサートされる。プリンタコントローラが、このアクセスに対する・prcRegAck_Lを返さない限り、次のアクセスのアサートはされない。
・prcRegDataOut[31:0]    ：OUT
Ｇバス／ＢバスI/Fユニット(GBI)からプリンタコントローラ内部のレジスタをリードアクセスする場合の３２ビットデータバス。prcRegAck_L信号がアサートされているときに有効となる。
・prcRegDataIn[31:0]    ：IN
Ｇバス／ＢバスI/Fユニット(GBI)からプリンタコントローラ内部のレジスタをライトアクセスする場合の３２ビットデータバス。prcRegStart_Lアサートと同時に有効となり、プリンタコントローラ内部レジスタへのアクセスであれば、prcRegAck_L信号で応答するまで有効である。
・prcRegRdNotWr          ：IN
Ｇバス／ＢバスI/Fユニット(GBI)からプリンタコントローラ内部のレジスタにアクセスするさいのアクセス方向（リードまたはライト）を示す信号。”High”でプリンタコントローラ内部レジスタの内容がprcRegDataOut[31:0]に読み出され、”Low”でprcRegDataIn[31:0]の内容がプリンタコントローラ内部レジスタに書き込まれる。PrcRegStart_Lアサートと同時に有効となり、プリンタコントローラ内部レジスタへのアクセスであれば、prcRegAck_L信号で応答するまで有効である。
・prcRegAck_L          ：OUT
プリンタコントローラ内部のレジスタアクセスが完了したことを示す信号。プリンタコントローラからＧバス／ＢバスI/Fユニット(GBI)へ出力される。BClk１クロック分だけアサートされる。prcRegstart_L信号がアサートされた次のクロックからセンスされる。
【０２７３】
なお、信号prcReq0_L, prcバイトEn[7:0], prcWrite, prcDataOut[63:0], prcReadEnableは、プリンタコントローラでは未使用となる。
【０２７４】
図８３及び図８４は、上述の信号のタイミングの一例を示すタイミングダイアグラムである。図８３はプリンタコントローラ４３０３へデータをDMA転送する際のタイミングであり、図６３は、プリンタコントローラ４３０３の内部レジスタに対して読み出しあるいは書き込みを行うタイミングである。
【０２７５】
（パワーマネジメント）
プリンタコントローラ内部では、プリンタ・コントローラ・パワー・マネジメント・コントロールレジスタ（0X1B007000）の設定に応じたビデオクロック(VCLK)のゲートコントロールを行い、それによりパワーマネージメントを行う。パワーマネジメントユニット（PMU）４０９に出力するPMステート信号（prcPmStat[1:0]）の値は、Gバス／BバスI/Fユニット４３０１Ｂから入力されるprcDmaPmState[1:0]の状態とクロックの状態とを合わせて決定される。prcPmState[1:0]は図８５のとおりである。
【０２７６】
図８５において、prcDmaPmState[1:0]は、プリンタのＧバス／ＢバスインターフェースGBI_prcのパワー消費状態を示している。GBI_prcにはパワー消費状態00〜11の4段階がある。この状態信号prcDmaPmState[1：0]は、GBI_prcからプリンタコントローラへ出力されている。
【０２７７】
また、プリンタコントローラのパワー消費状態は２段階あり、内部信号PPStatで示される。
【０２７８】
信号prcPmstate[1：0]は、GBI_prcとプリンタコントローラの２つの状態をあわせた状態を示している。この信号がシステムのパワーマネージメントユニットに出力される。すなわち、プリンタコントローラの電力消費状態は４段階でパワーマネジメントユニットに伝えられる。その段階は信号prcPmstate[1：0]の値で示される。値00が最低レベルであり、１増えるごとに示される電力消費量は大きくなる。
【０２７９】
２．９．３  Ｇバス／ＢバスＩ／Ｆユニット（ＧＢＩ）
図９２は、Ｇバス／ＢバスI/Fユニット４３０１のブロック構成図である。Ｇバス／ＢバスI/Fユニットは、スキャナ及びプリンタのそれぞれに用意されているが、その構成は同じであるため、ここでまとめて説明する。
【０２８０】
図９２において、ＧＢＩ４３０１は、ＧＢｕｓと接続してこれを制御するＧＢｕｓコントローラと、ＢＢｕｓと接続してこれを制御するＢＢｕｓコントローラとを含む。これらの間には、ＤＭＡアドレスを制御するＤＭＡコントローラ９２０５のほか、機能ブロックとＧＢｕｓ／ＢＢｕｓとの間をデータ転送に用いられるＦＩＦＯ９２０４、種々の設定値が書き込まれるレジスタユニット９２０６が含まれる。このうち、ＧＢＵＳコントローラとＦＩＦＯ９２０４は、ＧＢｕｓにあわせて１００ＭＨｚのクロックで動作し、その他のブロックはＢＢｕｓにあわせて５０ＭＨｚで動作する。
【０２８１】
ＧＢＩ４３０１は、ＧＢｕｓとＢＢｕｓの両方に接続されるべき機能ブロック（ＳＣＣ：スキャナコントローラとＰＲＣ：プリンタコントローラ）の、ＧＢｕｓとＢＢｕｓの選択的接続及び、両バスのインターフェースを提供する。ＧＢＩと各機能ブロックの間は、ＩＦＢｕｓ９２０１で接続される。機能ブロックでは、データの入出力先がＧＢｕｓかＢＢｕｓかを意識する必要はない。また、ＧＢＩ側でＤＭＡをサポートするので、機能ブロック側でアドレスを発生する必要もない。ＧＢＩは、各機能ブロックで共通に必要となる機能をまとめて、独立のユニットにしたものである。
【０２８２】
ＧＢＩがサポートするＩＦＢｕｓ９２０１に接続される機能ブロックは、連続したデータを受け取る、あるいは送り出すものとする。ＩＦＢｕｓにアドレス信号は含まれていない。ＧＢＩでは、Ｃｈａｎｎｅｌ０（ＧＢｕｓ／ＢＢｕｓ→ＩＦＢｕｓ０）とＣｈａｎｎｅｌ１（ＧＢｕｓ／ＢＢｕｓ→ＩＦＢｕｓ１）の２つのチャネルが用意され、それぞれに、ＤＭＡコントローラが用意されている。ただし、スキャナコントローラでは、Ｃｈａｎｎｅｌ０のみを、プリンタコントローラでは、Ｃｈａｎｎｅｌ１のみを使用（実装）する。
【０２８３】
ＤＭＡコントローラ９２０５は、Ｉ／Ｏ（アドレス固定）とメモリに対する設定が可能で、メモリの場合は、連続物理アドレスとチェーンテーブル方式（後述）のＤＭＡが設定できる。
【０２８４】
ＧＢＩは、データを、ＦＩＦＯを介して機能ブロックと入出力する。したがって、ＧＢＩがスレーブモードとして動作する場合、ＧＢＩのアドレスは、ＧＢｕｓ側が、０ｘ１８ｎ０＿００００〜０ｘ１８ｎ０＿００７Ｆ、ＢＢｕｓ側が、０ｘ１９ｎ０＿００００〜０ｘ１９ｎ０＿００１Ｆのみで同じロケーションがアクセスされる。ＦＩＦＯを使用しているため、バースト転送時のラップアラウンドに対応するのが困難である。ＢＢｕｓのラップアラウンドを伴うバースト転送要求に対しては、シングルアクセスとして応答する。ＧＢｕｓのラップアラウンドを伴う転送要求に対しては応答しない。
【０２８５】
なお、ＧＢＩ間で画像データのＤＭＡ転送を行う場合には、それぞれのＤＭＡコントローラにより制御が行われる。この際に、いずれの側がマスタになるかは特に決めないが、よりデータ転送のタイミングが厳格な方がマスタになることが望ましい。このため、本実施例では、GBI_PRCをマスタにし、GBI_SCCをスレーブにしてＤＭＡ転送を行っている。
【０２８６】
ＧＢＩ（ＧＢｕｓ／ＢＢｕｓインターフェース）は、
１．機能ブロックとのデータの受け渡しをするＦｉｆｏユニット
２．ＧＢｕｓに直結され、ＧＢｕｓとＦｉｆｏユニットをつなぐＧＢｕｓコントローラ９２０２
３．ＢＢｕｓに直結され、ＢＢｕｓとＦｉｆｏユニットをつなぐＢＢｕｓコントローラ９２０３
４．マスタモードの時に、ＤＭＡ転送要求を各バスコントローラに発行するＤＭＡコントローラ９２０５
５．レジスタの内容を保持し、各ブロックに信号を送るレジスタユニット９２０６
から構成される。レジスタユニット内には、割込み制御、パワー制御部も含んでいる。以下に、各部の説明をする。
【０２８７】
（Ｆｉｆｏユニット）
図９３に示したＦｉｆｏユニットは、ＧＢｕｓ／ＢＢｕｓとＩＦＢｕｓとの間の転送データのバッファとなる部分である。Ｆｉｆｏユニットは、互いに独立したＦｉｆｏユニット０とＦｉｆｏユニット１とから構成される。Ｆｉｆｏユニット０はＩＦＢｕｓからのデータ入力及びＧＢｕｓあるいはＢＢｕｓへのデータ出力のために用いられ、Ｆｉｆｏユニット１はＧＢｕｓあるいはＢＢｕｓからのデータ入力及びＩＦＢｕｓへのデータ出力のために用いられる。
【０２８８】
信号scGbiFifo0ClkあるいはscGbiFifo1Clkはゲーテッドクロックで、クロックを止めることで省電力モードを実現する。このクロックは、ＧＢＩ  ＦＩＦＯレジスタをライトすることにより停止し、マスタモードかスレーブモードに入る時に自動的に起動する。
【０２８９】
［Ｆｉｆｏユニット０］
Ｆｉｆｏユニット０は、ＩＦＢｕｓ０（ＩＦＢｕｓの仕様については後述）からのデータをＦｉｆｏに書き込み、ＧＢｕｓ／ＢＢｕｓに送り出す。信号ifDataOutB[63:0]、ifWriteB、ifWriteEnableGは、ＩＦＢｕｓと接続される。
【０２９０】
このＦｉｆｏユニット０が有するＦｉｆｏ０は、ＩＦＢｕｓからの６４ビットデータを入力とし、ＧＢｕｓ用の６４ビットデータＤａｔａＯｕｔ６４とＢＢｕｓ用の３２ビットデータＤａｔａＯｕｔ３２を出力する、６４ビット×１７段のＦｉｆｏである。
【０２９１】
Ｆｉｆｏユニット０から出力されるステータス信号には次のような信号がある。
・Ｆｉｆｏ０ＥｎａｂｌｅＢ１Ｇ：Ｆｉｆｏ０ＵｎｉｔからＢＢｕｓへ１ワード（３２ビット）転送可能であることを示す。マスタモードの時はＤＭＡコントローラが、スレーブモードの時にはＢＢｕｓコントローラが使用する。
・Ｆｉｆｏ０ＥｎａｂｌｅＢ４Ｇ：Ｆｉｆｏ０ＵｎｉｔからＢＢｕｓへ４ワード連続転送可能であることを示す。マスタモードの時はＤＭＡコントローラが、スレーブモードの時にはＢＢｕｓコントローラが使用する。
・Ｆｉｆｏ０ＥｎａｂｌｅＢ８Ｇ：Ｆｉｆｏ０ＵｎｉｔからＢＢｕｓへ８ワード連続転送可能であることを示す。マスタモードの時はＤＭＡコントローラが、スレーブモードの時にはＢＢｕｓコントローラが使用する。
・Ｆｉｆｏ０ＥｎａｂｌｅＧ４Ｇ：Ｆｉｆｏ０ＵｎｉｔからＧＢｕｓへ４ワード（１ワードは６４ビット）連続転送可能であることを示す。マスタモードの時はＤＭＡコントローラが、スレーブモードの時にはＧＢｕｓコントローラが使用する。
・Ｆｉｆｏ０ＥｎａｂｌｅＧ１６Ｇ：Ｆｉｆｏ０ＵｎｉｔからＧＢｕｓへ１６ワード連続転送可能であることを示す。マスタモードの時はＤＭＡコントローラが、スレーブモードの時にはＧＢｕｓコントローラが使用する。
・ｉｆＷｒｉｔｅＥｎａｂｌｅ：Ｆｉｆｏ０がＦｕｌｌ状態でないことを示す。ＩＦＢｕｓと接続され、機能ブロックにライト可能であることを伝える。
【０２９２】
また、Ｆｉｆｏ０からのＧＢｕｓの６４ビットデータのリードは、Ｆｉｆｏ０に入力されている信号Ｒｄ６４を使い、ＢＢｕｓの３２ビットデータのリードは、信号Ｒｄ３２を使う。どちらのリードによっても、ステータス信号及び、Ｆｉｆｏ０からの出力データであるＤａｔａＯｕｔ６４とＤａｔａＯｕｔ３２は更新される。
【０２９３】
（Ｂ２Ｇブロック）
Ｉ／Ｆバス及びＢＢｕｓのクロックは５０ＭＨｚであり、ＧＢｕｓのクロックは１００ＭＨｚである。このため、Ｆｉｆｏユニット０に含まれる不図示のＢ２Ｇなるブロックにより、ＩＦＢｕｓクロックに同期した書込み信号ｉｆＷｒｉｔｅＦｉｆｏＢ、あるいはＢＢＵｓクロックに同期した読出し信号ｂＲｅａｄＦｉｆｏＢの１クロック分を、Ｆｉｆｏユニットのクロック（ＩＦＢｕｓの２倍の周波数）のクロックに変換する。
【０２９４】
（ＣｈｋＩｌｌｅｇａｌブロック）
Ｆｉｆｏ０は、ＧＢｕｓ／ＢＢｕｓにより共有される。マスターモードでは、ＤＭＡコントローラがＧＢｕｓ／ＢＢｕｓの排他使用を制御しているが、スレーブモードでは、ＤＭＡマスターが排他使用を制御しなければならない。このため、Ｆｉｆｏユニット０に含まれるＣｈｋＩｌｌｅｇａｌブロックでは、ＧＢｕｓとＢＢｕｓから同時にＦｉｆｏ０にアクセスされた場合に、信号ｆｉｆｏＥｒｒｏｒＧをアサートする。すなわち、Ｇｂｕｓからの読出し信号ｇＲｅａｄＦｉｓｏＧ、あるいはＢＢｕｓからの読出し信号ｂＲｅａｄＦｉｓｏＢが同時にアサートされると、信号ｆｉｆｏＥｒｒｏｒＧをアサートする。この信号は、レジスタユニットでラッチされ、マスクされていなければ、割り込みを発生する。
【０２９５】
［Ｆｉｆｏユニット１］
Ｆｉｆｏユニット１は、ＧＢｕｓ／ＢＢｕｓからのデータを内蔵するＦｉｆｏ１に書き込み、ＩＦＢｕｓ１に送り出す。ｉｆＤａｔａＩｎｇ［６３：０］，ｉｆＢｙｔｅＥｎＧ［７：０］，ｉｆＲｅａｄＢ，ｉｆＲｅａｄＥｎａｂｌｅＧは、ＩＦＢｕｓと接続される。
【０２９６】
Ｆｉｆｏユニット１では、マスタモードでの逆方向ＤＭＡに対応するために、Ｆｉｆｏ１の前段にフロントバッファを設けてある。逆方向ＤＭＡ（入力信号ｒｅｖｅｒｓｅＭＯＤＥがイネーブル）の時には、フロントバッファにいったんバッファしてから、逆順でＦＩＦＯにデータを送り出す。それ以外のモード（信号ｒｅｖｅｒｓｅＭＯＤＥがディスエーブル）の時には、通常のＦＩＦＯとして機能する。
【０２９７】
（フロントバッファ）
ＧＢｕｓまたは、ＢＢｕｓからのデータを入力とし、Ｆｉｆｏ１へ出力する、バイトイネーブル付き６４＋４ビット×４段のバッファである。ＢＢｕｓからの書き込みでは、データはバイトイネーブル信号とともに書き込まれる。ＧＢｕｓからの書き込みでは、バイトイネーブルをすべて有効とし、データが書き込まれる。ＢＢｕｓからの書き込みでの６４ビットへのパッキングは行わない。
【０２９８】
ステータス信号として、フロントバッファが空状態であることを示す信号ＢｕｆＥｍｐｔｙが設けられている。
【０２９９】
逆方向ＤＭＡの時には、信号ｒｅｖｅｒｓｅＭＯＤＥがイネーブルであり、転送モードは、ＤＭＡコントローラで、ＧＢｕｓの４ｂｅａｔバースト転送、あるいはＢＢｕｓのシングル転送のみに制限される。ＧＢｕｓの４ｂｅａｔバースト転送のデータは、一度フロントバッファに貯めてから、逆順にして、Ｆｉｆｏ１にデータを送り出す（３２ビット単位で逆順にする）。
【０３００】
それ以外のモードの時には、信号ｒｅｖｅｒｓｅＭＯＤＥがディスエーブルであり、４段のＦＩＦＯとして機能する。入力信号ｄｕｍｍｙＷｒｉｔｅＦｉｆｏ１Ｂは一度ラッチされ、フロントバッファが空になった時点で、Ｆｉｆｏ１に送られる。
【０３０１】
（Ｆｉｆｏ１）
Ｆｉｆｏ１は、フロントバッファからのデータを入力とし、入力されたデータをＩＦＢｕｓへ出力する、バイトイネーブル付き６４＋８ビット×１６段のＦｉｆｏである。ＢＢｕｓからのデータは、バイトイネーブル信号とともに書き込まれる。ＧＢｕｓからのデータは、バイトイネーブルをすべて有効とし、書き込まれる。ＢＢｕｓからのデータの書き込みでは、６４ビットへのパッキングを行う。
【０３０２】
Ｆｉｆｏ１の内部状態と、フロントバッファのＢｕｆＥｍｐｒｙ信号を基に、以下のステータス信号を設けている。
・Ｆｉｆｏ１ＥｎａｂｌｅＢ１Ｇ：Ｆｉｆｏユニット１へＢＢｕｓから２ワード（３２ビット）転送可能であることを示す。Ｆｉｆｏ１にＢＢｕｓ１ワード以上の空きがあるか、フロントバッファが空の時に、イネーブルとなる。
・Ｆｉｆｏ１ＥｎａｂｌｅＢ４Ｇ：Ｆｉｆｏユニット１へＢＢｕｓから８ワード連続転送可能であることを示す。Ｆｉｆｏ１にＢＢｕｓ４ワード以上の空きがあるか、フロントバッファが空の時に、イネーブルとなる。
・Ｆｉｆｏ１ＥｎａｂｌｅＢ８Ｇ：Ｆｉｆｏユニット１へＢＢｕｓから１２ワード連続転送可能であることを示す。Ｆｉｆｏ１にＢＢｕｓ８ワード以上の空きがあるか、Ｆｉｆｏ１にＢＢｕｓ４ワード以上の空きがあり、かつフロントバッファが空の時に、イネーブルとなる。
・Ｆｉｆｏ１ＥｎａｂｌｅＧ４Ｇ：Ｆｉｆｏユニット１へＧＢｕｓから４ワード（１ワードは６４ビット）連続転送可能であることを示す。Ｆｉｆｏ１にＧＢｕｓ４ワード以上の空きがあるか、フロントが空の時に、イネーブルとなる。
・Ｆｉｆｏ１ＥｎａｂｌｅＧ１６Ｇ：Ｆｉｆｏユニット１へＧＢｕｓから１６ワード連続転送可能であることを示す。Ｆｉｆｏ１が空であるか、Ｆｉｆｏ１にＧＢｕｓ１２ワード以上の空きがあり、かつフロントバッファが空の時に、イネーブルとなる。
・ｉｆＲｅａｄＥｎａｂｌｅ：Ｆｉｆｏ１が空状態でないことを示す。ＩＦＢｕｓと接続され、機能ブロックにリード可能であることを伝える。
【０３０３】
信号Ｆｉｆｏ１ＥｎａｂｌｅＢ１Ｇ、Ｆｉｆｏ１ＥｎａｂｌｅＢ４Ｇ、Ｆｉｆｏ１ＥｎａｂｌｅＢ８Ｇは、マスタモード時にはＤＭＡコントローラが、スレーブモード時にはＢＢｕｓコントローラが使用する。
【０３０４】
信号Ｆｉｆｏ１ＥｎａｂｌｅＧ４Ｇ、Ｆｉｆｏ１ＥｎａｂｌｅＧ１６Ｇは、マスタモード時にはＤＭＡコントローラが、スレーブモード時にはＧＢｕｓコントローラが使用する。
【０３０５】
また、Ｆｉｆｏユニット１は、Ｆｉｆｏユニット０と同じく、Ｂ２Ｇブロック及びＣｈｋＩｌｌｅｇａｌブロックを備えている。
【０３０６】
（ＧＢｕｓコントローラ）
図９４は、Ｇｂｕｓコントローラ９２０２のブロック図である。Ｇｂｕｓコントローラ９２０２は、ＧＢＩがバスマスタとなってＧＢｕｓを制御するためのＧＢｕｓマスタコントローラと、スレーブとなった際の制御を行うためのＧＢｕｓスレーブコントローラと、データを制御するためのＧＢｕｓデータコントローラと、ＧＢｕｓインターフェースバッファとを含む。この構成により、ＧＢＩ４３０１は、ＧＢｕｓのマスタあるいはスレーブとして動作することができる。
【０３０７】
［ＧＢｕｓマスタ動作］
ＧＢｕｓコントローラは、ＧＢｕｓマスタコントローラにより、以下のような手順でＧＢｕｓマスタとしての制御を行う。
【０３０８】
１．ＤＭＡコントローラからの要求
ＤＭＡコントローラ９２０５は、チャネルＮの転送が可能な段階で、ｇＭＲｅｑ（Ｎ）信号を、ｇＭＡｄｄｒ（Ｎ）［３１：５］信号、ｇＭＢｓｔ４Ｎｏｔ１６＿Ｎ信号とともに、ｂＣｌｋ（Ｂｂｕｓクロック信号）で１クロックだけアサートして、ＤＭＡ転送を要求する。
【０３０９】
ｇＭＡｄｄｒ（Ｎ）［３１：５］信号、ｇＭＢｓｔ４Ｎｏｔ１６＿Ｎ信号は、ＧＢｕｓマスタコントローラによりｇＭＤｏｎｅ（Ｎ）信号、ｇＭＲｔｒｙ（Ｎ）信号、ｇＭＢＥｒｒ（Ｎ）信号のいずれかがアサートされるまで、変化させてはいけない。
【０３１０】
２．ＧＢｕｓアービタへの転送要求
ｇＭＲｅｑ（Ｎ）信号は、ＧＢｕｓマスタリクエストインターフェースでラッチされる（ｇＬａｔｃｈＲｅｑ（Ｎ）信号）。
【０３１１】
各チャネルのｇＬａｔｃｈＲｅｑ信号は、不図示のＧＢｕｓマスタリクエストアービタで調停され、ＧＢｕｓアービタ４０６に対し、ＤＭＡ要求信号ｇＲｅｑ＿Ｌ信号をアサートすると同時に、ＧＢｕｓマスタアドレスフェーズに、ｇＩｎｔＲｅｑ（Ｎ）信号を送る。
【０３１２】
３．ＧＢｕｓアービタからの転送許可
ＧＢｕｓアービタ４０６からのＤＭＡ許可信号ｇＧｎｔ＿Ｌ信号がアサートされると、ＧＢｕｓマスタアドレスフェーズから、信号ＧＧｎｔＳｅｎｓｅがアサートされ、ＤＭＡ要求信号ｇＲｅｑ＿Ｌはネゲートされる。同時に、ｇＬａｔｃｈＲｅｑ（Ｎ）信号とｇＩｎｔＲｅｑ（Ｎ）信号はネゲートされる。ＧＢｕｓマスタリクエストインターフェースは、信号ｇＳｌｖＢｓｙを監視し、データバスが使用可能になると、ＧＭＤａｔａＲｑ（Ｎ）信号をアサートする。この信号は、ＧＢｕｓマスタジェネレートエンドデータとＧＢｕｓデータコントローラに送られる。
４．ＧＢｕｓデータ転送
スレーブのｇＡａｃｋ信号を確認すると、データ転送を開始する。ＥｎｄＤａｔａ以外のＧＢｕｓの信号は、ＧＢｕｓマスタアドレスフェーズで生成される。ＥｎｄＤａｔａは、ＧＢｕｓマスタジェネレートエンドデータで生成される。ＧＢｕｓからＦｉｆｏあるいは、ＦｉｆｏからＧＢｕｓへのデータの移動は、ＧＭＤａｔａＲｑ（Ｎ）信号により、ＧＢｕｓデータコントローラが行う。なお、ｇＡａｃｋ信号の前にｇＲｔｒｙ信号を検出すると、ＧＢｕｓデータコントローラはデータ転送を行わない。
５．ＧＢｕｓデータ転送終了（あるいはリトライ）
ＧＢｕｓマスタジェネレートエンドデータは、ＧＢｕｓデータ転送の終了を、ｃｈｅｃｋＢＥｒｒ信号によりＧＢｕｓマスタリクエストインターフェースへ伝える。その信号を受けたＧＢｕｓマスタリクエストインターフェースは、内部で保持している要求をクリアすると同時に、バスエラーがなければ、ｇＭＤｏｎｅ信号をアサートする。バスエラーを検出した場合には、ｇＭＢＥｒｒ信号をアサートし、ＤＭＡコントローラ９２０５に転送が完了したことを伝える。
【０３１３】
また、ｇＲｔｒｙ信号を検出すると、ＧＢｕｓマスタリクエストインターフェースは、内部で保持している要求をクリアすると同時に、ｇＭＲｔｒｙ信号をアサートする。
【０３１４】
ＤＭＡコントローラ４９２０５は、ＧＢｕｓコントローラ９２０２から受けた信号がｇＭＤｏｎｅ信号であれば、転送アドレスや転送長等を更新する。受けた信号がｇＭＲｔｒｙ信号であれば、それらを更新せずに、次のアクションを起こす。ｇＭＢＥｒｒ信号の時には、ＤＭＡコントローラ９２０２は転送を中止し、マスクされていなければ、割り込みを発生する。
【０３１５】
［ＧＢｕｓスレーブ動作］
ＧＢｕｓコントローラは、ＧＢｕｓスレーブコントローラにより、以下のような手順でＧＢｕｓスレーブとしての制御を行う。
１．マスタからの転送要求
ＧＢｕｓスレーブリクエストインターフェースでは、ｇＴｓＲｅｇ信号アサートのタイミングで、ｇＡｄｄｒＲｅｇ信号とｇＲｄＮｏｔＷｒＲｅｇ信号（チャネル０か１）を確認する。ＧＢＩへのアクセスで、ｇＳＥｎａｂｌｅ（Ｎ）信号（スレーブモード：レジスタにより設定）がアサートされていれば、ｇＢｓｔ４Ｎｏｔ１６信号とＲｅａｄＦｉｆｏＥｎａｂｌｅ４／１６信号（チャネル０）かＷｒｉｔｅＦｉｆｏＥｎａｂｌｅ４／１６信号（チャネル１）から、転送可能か判断する。可能であれば、ｇＡａｃｋ信号を、そうでなければ、ｇＲｔｒｙ信号をアサートする。
２．ＧＢｕｓデータ転送
転送可能であれば、ＧＢｕｓスレーブリクエストインターフェースは、ｇＳｌｖＢｓｙ信号のネゲートを確認し、ｇＡａｃｋ信号をアサートし、そのタイミングを、ＧＳｌｖＳｔａｒｔ信号でＧＢｕｓスレーブリクエストスレーブビジーに伝える。また、ＧＢｕｓスレーブリクエストインターフェースは、データの転送開始を、ＧＳＤａｔａＲｑ（Ｎ）信号をアサートすることでＧＢｕｓデータコントローラに伝える。ＧＢｕｓからＦｉｆｏあるいは、ＦｉｆｏからＧＢｕｓへのデータの移動は、ＧＢｕｓデータコントローラが行う。ＧＢｕｓスレーブリクエストスレーブビジーは、ｇＳｌｖＢｓｙ信号を生成する。
３．ＧＢｕｓデータ転送終了
転送終了を示す信号は特にない。ｇＢＥｒｒ信号をアサートすることもない。ただし、ｇＳＥｎａｂｌｅ（Ｎ）信号がネゲートしてあれば、マスタのアクセスに対して応答しないので、タイムアウトによるバスエラーが発生する。
【０３１６】
（ＢＢｕｓコントローラ）
図９５は、ＢＢｕｓコントローラ９２０３のブロック図である。ＢＢｕｓコントローラ９２０３は、ＢＢｕｓマスタコントローラと、ＢＢｕｓデータコントローラ、ＢＢｕｓスレーブコントローラ及びＢＢｕｓインターフェースバッファを含む。この構成により、ＧＢＩ４３０１は、ＢＢｕｓのマスタあるいはスレーブとして動作することができる。
【０３１７】
［ＢＢｕｓマスタ動作］
１．ＤＭＡコントローラからの要求
ＤＭＡコントローラ９２０５は、チャネルＮの転送が可能な段階で、ｂＭＲｅｑ（Ｎ）信号を、ｂＭＡｄｄｒ（Ｎ）［３１：２］信号、ｂＭＢｕｒｓｔ８ｎ）信号、ｂＭＢｓｔ４Ｎｏｔ８＿Ｎ信号とともに、ＢＢｕｓクロック信号ｂＣｌｋで１クロックだけアサートする。また、チェーンＤＭＡモードでチェーンテーブルの読み込みが必要な段階で、ｃＭＲｅｑ（Ｎ）信号を、ｃＭＡｄｄｒ（Ｎ）［３１：２］信号とともに、ｂＣｌｋで１クロックだけアサートする。チェーンテーブルの読み込みでは、ＢＢｕｓのバースト転送を使用しない。こうして、ＤＭＡコントローラからＢＢｕｓのＤＭＡ転送が要求される。
【０３１８】
ｂＭＡｄｄｒ（Ｎ）［３１：２］信号，ｂＭＢｕｒｓｔ（Ｎ）信号，ｂＭＢｓｔ４Ｎｏｔ８＿Ｎ信号は、Ｆｉｆｏにアクセスを開始する（ｂＲｅａｄＦｉｆｏ、ｂＷｒｉｔｅＦｉｆｏがアサートされる）まで変化させてはいけない。
【０３１９】
また、ｃＭＡｄｄｒ（Ｎ）［３１：２］信号は、ｃＭＤｏｎｅ（Ｎ）信号，ｃＭｒｔｒｙ（Ｎ）信号，ｃＭＢＥｒｒ（Ｎ）信号のいずれかがアサートされるまで変化させてはいけない。
【０３２０】
２．ＢＢｕｓアービタへの転送要求
ＢＢｕｓｂＭＲｅｑ（Ｎ）信号及びｃＭＲｅｑ（Ｎ）信号は、ＢＢｕｓマスタリクエストインターフェースでラッチされる（ｂＬａｔｃｈＲｅｑ（Ｎ）信号及びｃＬａｔｃｈＲｅｑ（Ｎ）信号）。各要求信号は、ＢＢｕｓマスタリクエストアービタで調停され、ＢＢｕｓアービタ４０７に対してｂＢＲｅｑ＿Ｌ信号がアサートされる。
【０３２１】
３．ＢＢｕｓアービタからの転送許可
ＢＢｕｓアービタからの許可信号であるｂＢＧｎｔ＿Ｌ信号がアサートされると、ＢＢｕｓマスタリクエストアービタから、対応する要求元のＢＢｕｓマスタリクエストインターフェースに、ＢＧｎｔ（Ｎ）信号あるいはＣＧｎｔ（Ｎ）信号を送り、ｂＢＧｎｔ＿Ｌ信号はネゲートされる。ＢＢｕｓマスタリクエストインターフェースは、ｂＬａｔｃｈＲｅｑ（Ｎ）信号あるいはｃＬａｔｃｈＲｅｑ（Ｎ）信号をネゲートし、ｂＴｘ信号とｂＳｎｏｏｐＷａｉｔ信号を監視し、転送可能な状態になると、ＢＭＤａｔａＲｑ（Ｎ）信号及びＣＭＤａｔａＲｑ（Ｎ）信号をアサートする。この信号は、ＢＢｕｓマスタシーケンサとＢＢｕｓデータコントローラに送られる。
【０３２２】
４．ＢＢｕｓデータ転送
ＢＢｕｓマスタシーケンサは、ＢＢｕｓマスタがドライブすべきデータ以外のＢＢｕｓの信号をすべて生成する。ＢＭＤａｔａＲｑ（Ｎ）信号あるいはＣＭＤａｔａＲｑ（Ｎ）信号をトリガにして、ｂＳｔａｒｔＯｕｔ＿Ｌ（バーストモードであれば、同時にｂＢｕｒｓｔＯｕｔ＿Ｌ）をアサートし、ｂＲｄｙ（バーストモードであれば、ｂＢｕｒｓｔＡｃｋ）をチェックし、転送終了を検出する。ＢＢｕｓからＦｉｆｏ、あるいはＦｉｆｏからＢＢｕｓへのデータの移動は、ＢＭＤａｔａＲｑ（Ｎ）信号により、ＢＢｕｓデータコントローラが行う。
【０３２３】
なお、ｂＲｄｙ信号の前（あるいは同時に）にｂＲｅｔｒｙ信号を検出すると、ＢＢｕｓデータコントローラはデータ転送を行わない。
【０３２４】
５．ＢＢｕｓデータ転送終了（あるいは、リトライ、バスエラー）
ＢＢｕｓデータコントローラは、ＢＢｕｓマスタシーケンサのＢＭＬａｓｔＤａｔａ信号でデータの移動を終了する。また、ＢＢｕｓマスタシーケンサは、ＢＢｕｓデータ転送の終了をＤｏｎｅ信号により、ＢＢｕｓリクエストインターフェースへ伝える。リトライあるいはバスエラーであった場合には、それぞれ、Ｒｅｔｒｙ信号、Ｅｒｒｏｒ信号で伝える。ＢＢｕｓマスタリクエストインターフェースは、ＤＭＡコントローラに転送が完了したことを、［ｂｃ］ＭＤｏｎｅ（Ｎ）（以下、ｂまたはｃのいずれかであることを［ｂｃ］と表す）で、リトライ、バスエラー場合には、［ｂｃ］ＭＲｔｒｙ（Ｎ）信号、［ｂｃ］ＭＢＥｒｒ信号でそれぞれ伝える。
【０３２５】
ＤＭＡコントローラは、信号ｂＲｅａｄＦｉｆｏ、ｂＷｒｉｔｅＦｉｆｏにより、転送アドレスや転送長等を更新し、ＤＭＡのＢＢｕｓ転送の終了を示すｂＭＤｏｎｅ（Ｎ）信号か、ｂＭＲｔｒｙ（Ｎ）信号で、次のアクションを起こす。チェーンテーブルの読み込みの終了を示すｃＭＤｏｎｅ（Ｎ）信号は、内部のチェーンテーブルを更新し、ｃＭＲｔｒｙ（Ｎ）信号であれば、再び転送要求を発行する。
【０３２６】
［ｂｃ］ＭＢＥｒｒ（Ｎ）信号の時には、ＤＭＡコントローラは転送を中止し、マスクされていなければ割り込みを発生する。
【０３２７】
（バーストモードでのリトライ）
信号ｂＳｔａｒｔ＿Ｌと信号ｂＢｕｒｓｔ＿Ｌの同時アサートで、スレーブが、信号ｂＲｅｔｒｙ＿Ｌのアサートなしに、信号ｂＲｄｙ＿Ｌと信号ｂＢｕｒｓｔＡｃｋ＿Ｌの同時アサートで応答した場合、スレーブはバースト転送可能と判断される。そのバースト転送中は信号ｂＲｅｔｒｙ＿Ｌはチェックされない。つまり、最初のｂＲｄｙ＿Ｌのタイミングの時のみ、信号ｂＲｅｔｒｙ＿Ｌはチェックされる。なお、バースト転送中でも、信号ｂＥｒｒｏｒ＿Ｌは、各クロックでチェックされる。
【０３２８】
（信号ｂＥｒｒｏｒ＿Ｌ、ｂＲｅｔｒｙ＿Ｌ、ｂＲｄｙ＿Ｌの同時アサートについて）
信号ｂＥｒｒｏｒ＿Ｌがアサートされた場合、信号ｂＲｅｔｒｙ＿Ｌがアサートされていても、バスエラーとみなされる。信号ｂＥｒｒｏｒ＿Ｌがネゲートされ、信号ｂＲｅｔｒｙ＿Ｌがアサートされた場合、信号ｂＲｄｙ＿Ｌがアサートされていてもリトライと見なされる。
【０３２９】
（マスタモード時の信号ｂｙｔｅＥｎ＿Ｌ［３：０］について）
マスタモード時の信号ｂｙｔｅＥｎ＿Ｌ［３：０］は、シングルアクセス、バーストアクセスの最後の転送以外は、常に、“００００”である。
【０３３０】
［ＢＢｕｓスレーブ動作（レジスタアクセス以外）］
１．マスタからの転送要求
ＢＢｕｓマスタシーケンサは、ｂＳｔａｒｔ＿Ｌ信号アサートのタイミングで、ｂＡｄｄｒ信号とｂＷｒ＿Ｌ信号（チャネル０か１）を確認する。ＧＢＩへのアクセスで、ｂＳＥｎａｂｌｅ（Ｎ）信号（スレーブモード：レジスタにより設定）がアサートされていれば、ｂＢｕｒｓｔＳｈｏｒｔＮｏｔＬｏｎｇ信号（ｂＢｕｒｓｔ＿Ｌ信号がアサートされた時のみ）とＲｅａｄＦｉｆｏＥｎａｂｌｅ１／４／８信号（チャネル０）かＷｒｉｔｅＦｉｆｏＥｎａｂｌｅ１／４／８信号（チャネル１）から転送可能かを判断する。転送可能であれば、ｂＲｄｙＯｕｔ＿Ｌ信号（バーストモードであれば、ｂＢｕｒｓｔＡｃｋＯｕｔ＿Ｌ信号も）をアサートし、そうでなければ、ｂＲｅｔｒｙＯｕｔ＿Ｌ信号をアサートする。
【０３３１】
マスタのバーストモード（ｂＢｕｒｓｔ＿Ｌ信号がアサート）の要求に対して、Ｆｉｆｏの状態から、バースト転送はできないがシングル転送は可能な場合は、ｂＲｄｙＯｕｔ＿Ｌ信号のみアサートし、シングル転送を行う。また、マスタのバーストモード要求がラップアラウンドを発生する場合、ＧＢＩがラップアラウンドに対応していないため、可能であればシングル転送を行う（ｂＢｕｒｓｔＡｃｋＯｕｔ＿Ｌ信号をアサートしない）。
【０３３２】
２．ＢＢｕｓデータ転送
転送可能であれば、ＢＢｕｓマスタシーケンサは、必要なクロック分だけ、ｂＲｄｙＯｕｔ＿Ｌ信号をアサートし続ける。バースト転送の場合には、最初のｂＲｄｙＯｕｔ＿Ｌ信号のアサートのタイミングで、ｂＢｕｒｓｔＡｃｋＯｕｔ＿Ｌ信号を１ＢＢｕｓクロックだけアサートする。また、データの転送開始をＢＳＤａｔａＲｑ（Ｎ）信号で、データの転送終了をｂＭＬａｓｔＤａｔａ信号で、ＢＢｕｓデータコントローラに伝える。ＢＢｕｓからＦｉｆｏあるいは、ＦｉｆｏからＢＢｕｓへのデータの移動は、ＢＢｕｓデータコントローラが行う。
【０３３３】
３．ＢＢｕｓデータ転送終了
転送終了を示す信号は特にない。ｂＥｒｒｏｒＯｕｔ＿Ｌ信号をアサートすることもない。ただし、ｂＳＥｎａｂｌｅ（Ｎ）信号がネゲートしていれば、マスタのアクセスに対して、応答しないので、タイムアウトによるバスエラーが発生する。
【０３３４】
［ＢＢｕｓスレーブ動作（レジスタアクセス）］
ＧＢＩ及び機能ブロック内のレジスタのアクセスはＢＢｕｓから行う。レジスタのアクセスについては、ＧＢＩのモードや状態によらず、いつでもアクセス可能である。ｂＲｅｔｒｙＯｕｔ＿Ｌ、ｂＥｒｒｏｒＯｕｔ＿Ｌ信号をアサートすることはない。マスタのバーストモードの要求に対して、いつでもシングル転送で応答する（ｂＢｕｒｓｔＡｃｋＯｕｔ＿Ｌ信号をアサートしない）。
【０３３５】
レジスタコントローラ９２０６は、ｒｅｇＳｔａｒｔ＿Ｌ、ｒｅｇＡｄｄｒ［３１：２］、ｂｙｔｅＥｎＩｎ［３：０］、ｒｅｇＷｒ＿Ｌ信号（ＢＢｕｓの信号をＢＢｕｓクロックで叩いた信号）をセンスし、レジスタへの書き込みであれば、ｂＤａｔａＩｎ［３１：０］信号のデータを書き込み、Ａｃｋ信号（ＧＢＩでは、ｒｅｇＧｂｉＡｃｋ＿Ｌ、ＩＦＢｕｓでは、ｒｅｇＩｆＡｃｋ＿Ｌ）をアサートする。レジスタからの読み出しであれば、データを内部バス（ＧＢＩでは、ｒｅｇＧｂｉＤａｔａＯｕｔ［３１：０］、ＩＦＢｕｓでは、ｒｅｇＩｆＤａｔａＯｕｔ［３１：０］）に乗せて、Ａｃｋ信号（ＧＢＩでは、ｒｅｇＧｂｉＡｃｋ＿Ｌ、ＩＦＢｕｓでは、ｒｅｇＩｆＡｃｋ＿Ｌ）をアサートする。
【０３３６】
ＢＢｕｓスレーブジェネレートレディで、Ａｃｋ信号からｂＲｄｙＯｕｔ＿Ｌを作る。
【０３３７】
（ＧＢＩのレジスタアクセス以外のＢＢｕｓのサイクル）
ＧＢＩのスレーブモードでは、シングル転送のサイクルはいつも３ＢＢｕｓクロックである。バースト転送は、シングル転送と同じタイミングで、最初のｂＲｄｙＯｕｔ＿Ｌ信号をアサートし、その後ネゲートすることなしに必要なクロック分アサートを続ける。転送（シングルとバースト）ができない場合は、最初のｂＲｄｙＯｕｔ＿Ｌをアサートするタイミングで、ｂＲｅｔｒｙＯｕｔ＿Ｌだけアサートする。
【０３３８】
（ＢＢｕｓスレーブジェネレートレディブロック）
ＢＢｕｓスレーブジェネレートレディブロックは、ＢＢｕｓスレーブシーケンサからのＣｈａｎｎｅｌＲｄｙ＿Ｌ信号と、ＧＢＩレジスタユニットからのｒｅｇＧｂｉＡｃｋ＿Ｌ信号と機能ブロック（ＩＦＢｕｓ）からのｒｅｇＩｆＡｃｋ＿Ｌ信号をＯＲして、クロックで叩く。
【０３３９】
（ＩＦＢｕｓインターフェース）
ＩＦＢｕｓは、ＧＢＩと機能ブロックを接続する簡単なバスである。クロックは、ｂＣｌｋ（５０ＭＨｚ）を使用する。ここでいう入力信号とは、機能ブロックからＧＢＩへの方向の信号である。双方向信号はない。以下にＩＦＢｕｓの信号について説明する。“＿Ｌ”で終わる信号名は、ローアクティブであることを示す。これは、すでに説明した部分においても同様である。なお、実際のインプリメンテーションでは、信号名の“ｉｆ”は機能ブロックの名前に置き換える。
【０３４０】
・ｉｆＲｓｔ０＿Ｌ（チャネル０），ｉｆＲｓｔ１＿Ｌ（チャネル１）（出力）
ＩＦＢｕｓのリセット信号である。この信号により、ＩＦＢｕｓの状態を初期状態に戻す。ＧＢＩの内部レジスタにより、アサートされる。ＧＢＩと機能ブロックとの転送に先立って、必ずアサートする。
【０３４１】
・ｉｆＤａｔａＯｕｔＢ［６３：０］（入力：チャネル０のみ）
機能ブロックからＧＢＩへのデータ信号である。この信号は、Ｆｉｆｏユニット０に接続されている（図９３参照）。
【０３４２】
・ｉｆＷｒｉｔｅＢ（入力：チャネル０のみ）
機能ブロックからＧＢＩへのライト信号である。ＧＢＩは、ｉｆＷｒｉｔｅ信号がアサートされているｉｆＣｌｋの立ち上がりで、ｉｆＤａｔａＯｕｔ［６３：０］を書き込む。ｉｆＷｒｉｔｅＢ信号をアサートし続けることで、１クロック単位でデータがライトできる。この信号は、Ｆｉｆｏユニット０に接続されている（図９３参照）。
【０３４３】
・ｉｆＷｒｉｔｅＥｎａｂｌｅＧ（出力：チャネル０のみ）
機能ブロックからＧＢＩへのライト許可信号である。ｉｆＣｌｋの立ち上がりで、ｉｆＷｒｉｔｅＥｎａｂｌｅＧ信号がアサートされていれば、次のクロックの立ち上がりで、ライト可能であることを示す。ｉｆＷｒｉｔｅＢ信号のアサートは、ｉｆＷｒｉｔｅＥｎａｂｌｅＧ信号を確認して行う。この信号は、Ｆｉｆｏユニット０から出力される。
【０３４４】
・ｉｆＤａｔａＩｎＧ［６３：０］，ｉｆＢｙｔｅＥｎＧ［７：０］（出力：チャネル１のみ）
ＧＢＩから機能ブロックへのデータとバイトイネーブル信号である。この信号は、Ｆｉｆｏユニット１に接続されている。表８に信号ｉｆＢｙｔｅＥｎＧ［７：０］の各桁とｉｆＤａｔａＩｎＧ［６３：０］の各バイトユニットとの対応を示す。
【表８】
0003976927.tif 000011
・ｉｆＲｅａｄ（入力：チャネル１のみ）
ＧＢＩから機能ブロックへのリード信号である。ＧＢＩは、ｉｆＲｅａｄ信号がアサートされているｉｆＣｌｋの立ち上がりで、ｉｆＤａｔａＩｎＧ［６３：０］とｉｆＢｙｔｅＥｎＧ［７：０］を出力する。ｉｆＲｅａｄ信号をアサートし続けることで、１クロック単位でデータがリードできる。この信号は、Ｆｉｆｏユニット１に接続されている。
【０３４５】
・ｉｆＲｅａｄＥｎａｂｌｅＧ（出力：チャネル１のみ）
ＧＢＩから機能ブロックへのリード許可信号である。ｉｆＣｌｋの立ち上がりで、ｉｆＲｅａｄＥｎａｂｌｅＧ信号がアサートされていれば、次のクロックの立ち上がりで、リード可能であることを示す。ｉｆＲｅａｄ信号のアサートは、ｉｆＲｅａｄＥｎａｂｌｅＧ信号を確認して行う。この信号は、Ｆｉｆｏユニット１から出力される。
【０３４６】
・ｉｆＲｅｇＳｔａｒｔ＿Ｌ（チャネル共通）（出力）
ＢＢｕｓのｂＳｔａｒｔ＿Ｌをクロックで叩いた信号である。ｉｆＲｅｇＡｄｄｒ［３１：２］信号、ｉｆＲｅｇＲｄＮｏｔＷｒ信号ｉｆＢｙｔｅＥｎ＿Ｌ［３：０］信号とともに１クロックだけアサートされる。機能ブロックの内部レジスタへの書き込みの場合には、信号ｉｆＲｅｇＤａｔａＩｎ［３１：０］も有効となっている。機能ブロックでは、ｉｆＲｅｇＳｔａｒｔ＿Ｌがアサートされた時点で、アドレスをチェックし、機能ブロックの内部レジスタへのアクセスであれば、ｉｆＲｅｇＡｃｋ＿Ｌ信号で応答する。そうでなければ、次のｉｆＲｅｇＳｔａｒｔ＿Ｌのアサートを待つ。この信号は、ＢＢｕｓコントローラから出力される。
【０３４７】
・ｉｆＲｅｇＡｄｄｒ［３１：２］（チャネル共通）（出力）
ＢＢｕｓのｂＡｄｄｒ［３１：２］をクロックで叩いたアドレス信号である。信号ｉｆＲｅｇＳｔａｒｔ＿Ｌアサートと同時に有効となり、機能ブロックの内部レジスタへのアクセスであれば、ｉｆＲｅｇＡｃｋ＿Ｌ信号で応答する間で有効である。この信号は、ＢＢｕｓコントローラから出力される。
【０３４８】
・ｉｆＲｅｇＢｙｔｅＥｎ［３：０］（チャネル共通）（出力）
ＢＢｕｓのｂｙｔｅＥｎ＿Ｌ［３：０］をクロックで叩いたバイトイネーブル信号である。信号ｉｆＲｅｇＳｔａｒｔ＿Ｌアサートと同時に有効となり、機能ブロックの内部レジスタへのアクセスであれば、ｉｆＲｅｇＡｃｋ＿Ｌ信号で応答する間で有効である。機能ブロックの内部レジスタへの書き込みの場合には、この信号で示された有効なバイトのみ書き込みを行う。機能ブロックの内部レジスタからの読み出しの場合には、この信号は無視され、全バイト出力される。この信号は、ＢＢｕｓコントローラから出力される。表９に、信号ｉｆＲｅｇＢｙｔｅＥｎ［３：０］の各桁と信号ｉｆＲｅｇＤａｔａＩｎＧ［３１：０］の各バイトユニットとの対応を示す。
【表９】
0003976927.tif 000012
・ｉｆＲｅｇＲｄＮｏｔＷｒ（チャネル共通）（出力）
ＢＢｕｓのｂＷｒ＿Ｌをクロックで叩いた信号で、機能ブロックの内部レジスタへのアクセスの方向を示す。ハイで、機能ブロックの内部レジスタの内容が信号ｉｆＲｅｑＤａｔａＯｕｔ［３１：０］に出力され、ローで、ｉｆＲｅｑＤａｔａＩｎ［３１：０］のデータが、機能ブロックの内部レジスタに書き込まれる。信号ｉｆＲｅｇＳｔａｒｔ＿Ｌアサートと同時に有効となり、機能ブロックの内部レジスタへのアクセスであれば、ｉｆＲｅｇＡｃｋ＿Ｌ信号で応答する間で有効である。この信号は、ＢＢｕｓコントローラから出力される。
【０３４９】
・ｉｆＲｅｇＡｃｋ＿Ｌ（チャネル共通）（入力）
機能ブロックが内部レジスタへのアクセスを完了したことを示す信号である。信号ｉｆＲｅｇＳｔａｒｔ＿Ｌがアサートされた時点で、アドレスをチェックし、機能ブロックの内部レジスタへのアクセスであれば、レジスタのリードあるいはライトを行い、必ず、１クロックだけアサートする。機能ブロックの内部レジスタへのアクセスでない場合には、決してアサートしてはいけない。この信号は、ＢＢｕｓコントローラに接続される。
【０３５０】
・ｉｆＲｅｇＤａｔａＯｕｔ［３１：０］（チャネル共通）（入力）
機能ブロックの内部レジスタの内容が読み出されるデータバス信号である。信号ｉｆＲｅｇＡｃｋ＿Ｌ信号がアサートされているときに有効でなければいけない。この信号は、ＢＢｕｓコントローラに接続される。
【０３５１】
・ｉｆＲｅｇＤａｔａＩｎ［３１：０］（チャネル共通）（出力）
機能ブロックの内部レジスタに書き込まれるデータを示すバス信号である。信号ｉｆＲｅｇＳｔａｒｔ＿Ｌアサートと同時に有効となり、機能ブロックの内部レジスタへのアクセスであれば、ｉｆＲｅｇＡｃｋ＿Ｌ信号で応答する間で有効である。この信号は、ＢＢｕｓコントローラから出力される。
【０３５２】
・ＩｆＤｍａＰｍＳｔａｔｅ［１：０］（チャネル共通）（出力）
ＧＢＩの動作状態を示す信号。この出力は常に有効である。機能ブロックは、この信号と機能ブロック自身の動作状態を基に、パワーマネージメントユニットへのパワーマネージメントステータス信号を生成する。この信号は、レジスタユニットから出力される。どのような値が出力されるかは、後述のパワーマネジメントの項で説明する。
【０３５３】
（ＤＭＡコントローラ）
ＧＢＩには、チャネル０と１に、それぞれ図９６のようなＤＭＡコントローラ９２０５が存在する。
【０３５４】
ＤＭＡコントローラは、ＤＭＡメインコントローラ、フェッチチェインテーブル、カルキュレートピッチアドレス、ジェネレートアドレス、ＤＭＡリクエストの各部ロックから成る。
【０３５５】
レジスタユニット９２０６からは、表１０の信号によりＤＭＡのモードが伝えられる。
【表１０】
0003976927.tif 000013
次に、ＤＭＡコントローラの各部ロックについて説明する。
【０３５６】
［ＤＭＡメインコントローラ］
ＤＭＡメインコントローラは、他の４つのブロックの起動と停止の制御をする。チェーンテーブル方式のＤＭＡでは、フェッチチェインテーブル、ジェネレートアドレス、ＤＭＡリクエストの順に、ブロックを１クロックずつずらして起動する。ピッチ付きのＤＭＡでは、カルキュレートピッチアドレス、ジェネレートアドレス、ＤＭＡリクエストの順に、ブロックを１クロックずつずらして起動する。その他の場合には、ジェネレートアドレスとＤＭＡリクエストを１クロックずらして起動する。
【０３５７】
また、ＤＭＡメインコントローラはＤＭＡの終了を判定する。フェッチチェインテーブルがアイドル状態（チェーンテーブルをすべて読み終わったか、あるいは起動されていない）かつ、カルキュレートピッチアドレスがアイドル状態（全ライン終わったか、あるいは起動されていない）でのジェネレートアドレスのＮｅｘｔＡｄｄｒｅＲｅｑ信号のアサート（レングスカウンタがゼロになる）、あるいはバスエラー、ｓｔｏｐＤＭＡ信号のアサート（レジスタによるＤＭＡ強制終了）を検出すると、ＤＭＡメインコントローラが各ブロックに、ｓｔｏｐＤＭＡＲｅｑ信号をアサートする。すべてのブロックがアイドル状態になった時点で、ＤＭＡの終了と判定する（ｅｎｄＤＭＡをアサートする）。
【０３５８】
［フェッチチェインテーブル］
フェッチチェインテーブルは、メモリ上のテーブルをフェッチするブロックで、チェーンテーブルを使わない場合は起動されない。チェーンテーブルを指すメモリアドレスのためのチェインテーブルポインタアドレスカウンタ、チェーンテーブルの残りのエントリ数を示すチェインテーブルエントリカウンタ、チェーンテーブルからフェッチしたアドレスとレングスを記憶するネクストアドレスレジスタ、ネクストレンクスレジスタ、およびこれらを制御するフェッチチェインテーブルコントローラから成る。
【０３５９】
ＤＭＡメインコントローラから起動されると、レジスタの内容がチェインテーブルポインタアドレスとチェインテーブルエントリカウンタにロードされる。ｃｈａｉｎＲｅｑ信号により、ＢＢｕｓコントローラにアドレスｃｈａｉｎＡｄｄｒｅｓｓ［３１：２］のフェッチを要求する。ＢＢｕｓコントローラからのｃｈａｉｎＤｏｎｅ信号（正常終了）で、読み出した内容をネクストアドレスレジスタにラッチし、チェインテーブルポインタアドレスカウンタをインクリメントする。ＢＢｕｓコントローラから、ＣｈａｉｎＲｔｒｙ信号（リトライ）が返ってくれば、再び、同じ要求をＢＢｕｓコントローラに対して発行する。
【０３６０】
ネクストアドレスレジスタのラッチ後に、ＢＢｕｓコントローラにアドレスｃｈａｉｎ  Ａｄｄｒｅｓｓ［３１：２］のフェッチを要求する。ＣｈａｉｎＤｏｎｅ信号で、読み出した内容をネクストレンクスレジスタにラッチし、チェインテーブルポインタアドレスカウンタをインクリメントし、チェインテーブルエントリカウンタをデクリメントする。同時に、ｎｅｘｔＡｄｄｒＶａｌｉｄ信号をアサートし、チェーンテーブルからアドレスとレングスを読み出したことを、ジェネレートアドレスブロックに伝える。
【０３６１】
もし、ネクストレンクスレジスタのラッチ時のデータがゼロである場合には、ネクストアドレスレジスタの内容がチェインテーブルポインタアドレスカウンタにロードされる。
【０３６２】
ｎｅｘｔＡｄｄｒＶａｌｉｄ信号のアサート中に、ジェネレートアドレスブロックからＮｅｘｔＡｄｄｒＲｅｑ信号がアサートされるとジェネレートアドレスブロックが、チェーンテーブルからのアドレス、レングスを受け取ったと判断し、ｎｅｘｔＡｄｄｒＶａｌｉｄ信号をネゲートする。
【０３６３】
次に、チェインテーブルエントリカウンタをチェックし、ゼロでなければ、再度チェーンテーブルのフェッチを続け、ゼロであればアイドル状態へ戻る。
【０３６４】
ｃｈａｉｎＢＥｒｒ信号（バスエラー）を受け取ると、直ちにアイドル状態へ戻る。 ＤＭＡメインコントローラからｓｔｏｐＤＭＡＲｅｑを受け取った場合、ＢＢｕｓコントローラに要求を出していれば、その終了を待って、そうでなければ直ちにアイドル状態へ戻る。
【０３６５】
チェーンテーブルを使わないモードの時には、起動されないので、アイドル状態を保ち、ｎｅｘｔＡｄｄｒＶａｌｉｄ信号はネゲートされたままである。
【０３６６】
［ジェネレートアドレス］
ジェネレートアドレスブロックは、メモリに対する転送アドレスを格納するトランスファメモリアドレスカウンタと、転送すべき転送長を格納するトランスファレンクスカウンタと、転送したバイト数を記憶するトランスファカウンタと、これら３つのカウンタを制御するジェネレートアドレスコントローラと、転送アドレスと転送長からＧＢｕｓ／ＢＢｕｓに対して要求するモードを判定するＣｈｅｃｋＧＢｕｓＲｅｑ及びＣｈｅｃｋＢＢｕｓＲｅｑブロック（ＣｈｅｃｋＧ／ＢＢｕｓＲｅｑと総称する）を有する。
【０３６７】
（チェーンテーブルを使う場合）
ＤＭＡメインコントローラから起動されると、トランスファカウンタをクリアし、フェッチチェインテーブルからのｎｅｘｔＶａｌｉｄＡｄｄｒＣＴ信号待ちに入る。ｎｅｘｔＶａｌｉｄＡｄｄｒＣＴ信号がアサートされると、チェーンテーブルのアドレスとレングスが、それぞれトランスファメモリアドレスカウンタとトランスファレンクスカウンタにロードされる。
【０３６８】
両カウンタの内容で、ＣｈｅｃｋＧ／ＢＢｕｓＲｅｑは転送できるモードを判定する。
【０３６９】
ＣｈｅｃｋＧ／ＢＢｕｓＲｅｑからＤＭＡリクエストブロックにＧ／ＢＢｕｓの転送モードを伝え（転送不可の時にはｇ／ｂ  Ｖａｌｉｄ信号がネゲートされている）、ＤＭＡリクエストブロックは、ＧＢｕｓ優先で各バスコントローラに転送要求を発行する。
【０３７０】
ＧＢｕｓでの転送では、ｇＭＤｏｎｅ信号（ＧＢｕｓ転送終了信号）とその時の転送モードにより、一度にトランスファメモリアドレスカウンタ、トランスファカウンタのインクリメントとトランスファレンクスカウンタのデクリメントを行う。ＢＢｕｓでの転送では、ＦＩＦＯのアクセス信号により、トランスファメモリアドレスカウンタのインクリメントとトランスファレンクスカウンタのデクリメントを行う。
【０３７１】
トランスファレンクスカウンタがゼロになった時、フェッチチェインテーブルからのｎｅｘｔＶａｌｉｄＡｄｄｒＣＴ信号がネゲートされていれば、アサートを待って、次のチェーンテーブルの内容をトランスファメモリアドレスカウンタとトランスファレンクスカウンタにロードし、そうでなければ、直ちにロードする。そして、次の転送に入る。
【０３７２】
チェーンテーブルの最後の部分の転送が終わってトランスファレンクスカウンタがゼロになった時には、フェッチチェインテーブルはアイドル状態で、ｎｅｘｔＶａｌｉｄＡｄｄｒＣＴ信号はネゲートされている。ＤＭＡメインコントローラはＤＭＡの終了を検出するので、ジェネレートアドレスに対してｓｔｏｐＤＭＡＲｅｑ信号をアサートする。これによりジェネレートアドレスはアイドル状態となる。
【０３７３】
（ピッチ付きのＤＭＡを使う場合）
ＤＭＡメインコントローラから起動されると、トランスファカウンタをクリアし、カルキュレートピッチアドレスからのｎｅｘｔＶａｌｉｄＡｄｄｒＰＡ信号待ちに入る。ｎｅｘｔＶａｌｉｄＡｄｄｒＰＡ信号がアサートされると、スタートアドレスとピッチから計算されたアドレスとレングスが、それぞれトランスファメモリアドレスカウンタとトランスファレンクスカウンタにロードされる。
【０３７４】
チェーンテーブルを使う時と同様に、トランスファメモリアドレスカウンタ、トランスファカウンタのインクリメントとトランスファレンクスカウンタのデクリメントが行われる。
【０３７５】
トランスファレンクスカウンタがゼロになった時、カルキュレートピッチアドレスからのｎｅｘｔＶａｌｉｄＡｄｄｒＰＡ信号がネゲートされていれば、アサートを待って、次のチェーンテーブルの内容をトランスファメモリアドレスカウンタとトランスファレンクスカウンタにロードし、そうでなければ直ちにロードする。そして次の転送に入る。
【０３７６】
最後のラインの転送が終わってトランスファレンクスカウンタがゼロになった時には、カルキュレートピッチアドレスはアイドル状態で、ｎｅｘｔＶａｌｉｄＡｄｄｒＰＡ信号はネゲートされている。ＤＭＡメインコントローラはＤＭＡの終了を検出するので、ジェネレートアドレスに対してｓｔｏｐＤＭＡＲｅｑ信号をアサートする。これによりジェネレートアドレスはアイドル状態となる。
【０３７７】
（対Ｉ／ＯＤＭＡの場合）
ＤＭＡメインコントローラから起動されると、トランスファカウンタがクリアされ、データ長を格納したＧＢＩＤＭＡ転送長レジスタの内容がトランスファレンクスカウンタにロードされる。ＣｈｅｃｋＧＢｕｓＲｅｑ／ＣｈｅｃｋＢＢｕｓＲｅｑ各ブロックは、対Ｉ／ＯのＤＭＡアドレスを格納したＧＢＩＤＭＡＧＢｕｓＩ／Ｏアドレスレジスタ／ＧＢＩＤＭＡＢＢｕｓＩ／Ｏアドレスレジスタの内容をそれぞれ用いる。
【０３７８】
上と同様に、トランスファカウンタのインクリメントとトランスファレンクスカウンタのデクリメントが行われる。
【０３７９】
トランスファレンクスカウンタがゼロになった時、フェッチチェインテーブルとカルキュレートピッチアドレスは起動されていないので、アイドル状態で、ｎｅｘｔＶａｌｉｄＡｄｄｒ信号はネゲートされている。ＤＭＡメインコントローラはＤＭＡの終了を検出するので、ジェネレートアドレスに対してｓｔｏｐＤＭＡＲｅｑ信号をアサートする。これによりジェネレートアドレスはアイドル状態となる。
【０３８０】
（リバースモード）
対Ｉ／ＯＤＭＡ以外はリバースモードをサポートする。チェーンテーブルＤＭＡの１ブロック、ピッチ付きのＤＭＡの１ラインを、アドレスの大きい方から小さい方へアクセスする。ブロックあるいはライン単位の逆方向の指示は、チェーンテーブルＤＭＡではチェーンテーブルを逆になるように作る。ピッチ付きのＤＭＡの場合は、ピッチの値を負の値（２の補数）を設定する。
【０３８１】
リバースモードでは、トランスファメモリアドレスカウンタに値をロードする際に、転送レングスを用いて、最後尾のアドレスを計算してロードする。トランスファメモリアドレスカウンタのインクリメントの代わりにデクリメントする。
【０３８２】
ＣｈｅｃｋＢＢｕｓＲｅｑブロックではシングル転送のみを要求する。ＣｈｅｃｋＧＢｕｓＲｅｑブロックでは４ビートバースト転送のみを要求する。Ｆｉｆｏユニットで、３２ビット単位で逆順にして、機能ブロックに送られる（現状では、チャネル１のみ対応する）。
【０３８３】
（ＧＢｕｓ要求のチェック）
ＣｈｅｃｋＧＢｕｓＲｅｑブロックではＧＢｕｓ要求のチェックが行われる。信号ｕｓｅＧＢｕｓがアクティブでなければ常に信号ｇＶａｌｉｄはネゲートされている。
【０３８４】
トランスファメモリアドレスのビット６以下がすべてゼロで、かつトランスファレンクスが１２８以上の時、信号ｇＶａｌｉｄがアサート、ｇ４Ｎｏｔ１６Ｒｅｑ＝’０’となり、トランスファメモリアドレスのビット４以下がすべてゼロで、かつトランスファレンクスが３２以上の時、信号ｇＶａｌｉｄがアサート、ｇ４Ｎｏｔ１６Ｒｅｑ＝’１’となる。それ以外では、信号ｇＶａｌｉｄはネゲートされる。
【０３８５】
データバス６４ビットのＧＢｕｓでは、４ビートバースト転送（３２バイト）と１６ビートバースト転送（１２８バイト）のみをサポートする。信号ｇＶａｌｉｄがアサートされるのは、これらのバースト転送が可能なときだけである。信号ｇ４Ｎｏｔ１６Ｒｅｑは、４ビートバースト転送と１６ビートバースト転送を識別するためのものである。
【０３８６】
（ＢＢｕｓ要求のチェック）
ＣｈｅｃｋＢＢｕｓＲｅｑブロックではＢＢｕｓ要求のチェックが行われる。信号ｕｓｅＢＢｕｓがアクティブでなければ常に信号ｂＶａｌｉｄはネゲートされている。
【０３８７】
トランスファメモリアドレスのビット４以下がすべてゼロで、かつトランスファレンクスが２９以上の時、信号ｂＶａｌｉｄがアサート、ｂＢｕｒｓｔＲｅｑ＝’１’、ｂ４Ｎｏｔ８Ｒｅｑ＝’０’となり、トランスファメモリアドレスのビット３以下がすべてゼロで、かつトランスファレンクスが１３以上の時、ｂＶａｌｉｄがアサート、信号ｂＢｕｒｓｔＲｅｑ＝’１’、ｂ４Ｎｏｔ８Ｒｅｑ＝’１’となる。それ以外では、ｂＶａｌｉｄがアサート、ｂＢｕｒｓｔＲｅｑ＝’０’となる。
【０３８８】
データバス３２ビットのＢＢｕｓでは、シングル転送（ｂＢｙｔｅＥｎを制御して１〜４バイト）、４ビートバースト転送（最終ワード転送時のｂＢｙｔｅＥｎを制御して１３〜１６バイト）をサポートする。信号ｂＶａｌｉｄがアサートされるのは、これらの転送が可能なときである。ｂＢｕｒｓｔＲｅｑとｂ４Ｎｏｔ８Ｒｅｑは、これらの転送を識別するための信号である。ただし、信号ｕｓｅＢＢｕｓがアクティブであれば、常にシングル転送は可能である。
【０３８９】
（ＤＭＡリクエスト）
ＤＭＡメインコントローラから起動されると、ジェネレートアドレスブロックからのＧＢｕｓ／ＢＢｕｓに対する要求を、信号ｇＶａｌｉｄと信号ｂＶａｌｉｄとを基にチェックする。Ｇ／ＢＢｕｓの両方の要求がある場合には、常にＧＢｕｓが優先となる。これはｍＢＢｕｓに比べ、ＧＢｕｓのほうが使用効率が良い（転送速度が早い）ためである。ＢＢｕｓのみが要求されるのは、信号ｕｓｅＧＢｕｓがアクティブでないか、トランスファメモリアドレスのバウンダリが半端か、あるいはトランスファレングスが短いために、ＧＢｕｓが使用不可能なときである。逆に言えば、このようなときには、ＧＢｕｓを使用せず、ＢＢｕｓを用いる。このＧＢｕｓ／ＢＢｕｓの要求に従い、ＧＢｕｓコントローラかＢＢｕｓコントローラに転送要求を発行し、応答を待つ。応答は、ｇ／ｂＭＤｏｎｅ、ｇ／ｂＭＲｔｒｙあるいは、ｇ／ｂＭＢＥｒｒのいずれかの信号である。
【０３９０】
ｇ／ｂＭＤｏｎｅの場合は転送の正常終了であり、次のジェネレートアドレスからのＧＢｕｓ／ＢＢｕｓに対する要求をチェックする。
【０３９１】
ｇ／ｂＭＲｔｒｙの場合は同じバスコントローラに再度転送要求を発行する。
【０３９２】
ｇ／ｂＭＢＥｒｒの場合には直ちにアイドル状態に戻る。
【０３９３】
最後の転送が終了した時には、ＤＭＡリクエストブロックは、ジェネレートアドレスからのＧＢｕｓ／ＢＢｕｓに対して要求待ち状態となる。ＤＭＡメインコントローラがＤＭＡ終了を検出して、ＤＭＡリクエストに対してｓｔｏｐＤＭＡＲｅｑが発行されるので、それにより、ＤＭＡＲｅｑｕｅｓｔはアイドル状態に戻る。
【０３９４】
また、チェーンテーブルフェッチ時のバスエラーやレジスタによるＤＭＡ強制終了の場合も、ＤＭＡメインコントローラから、ｓｔｏｐＤＭＡＲｅｑが発行されるが、バスコントローラに転送要求をしている時は、転送終了を待って、要求していない時は直ちにアイドル状態に戻る。
【０３９５】
（レジスタユニット）
内部レジスタユニット内には、各チャネルに対応するレジスタユニットが存在する。各ユニットは、デコードするアドレスが異なる以外は同じである。レジスタユニットは図９７に示すように、レジスタユニット０とレジスタユニット１とを有する。
【０３９６】
各レジスタユニットは、レジスタＩ／Ｆ、アクションコントローラ、割り込みコントローラとパワーステータスの各ブロックから構成される、ＧＢＩの各ブロックに設定地値を供給するほか、割り込みコントローラによって割り込みを制御し、パワーステータスにより省電力可能なブロックを制御している。
【０３９７】
［パワーステータス］
ＧＢＩにおいて省電力モード可能なユニットは、ＤＭＡコントローラとＦＩＦＯユニットである。省電力モードはｆｉｆｏＩｎＳｌｅｅｐ信号、ｄｍａＩｎＳｌｅｅｐ信号により、各ブロックのクロックをマスクすることで実現する。リセット時は、ともに省電力モードに入る。ＤＭＡコントローラは、マスタモードで起動をかけると自動的に起動し、ＧＢＩＦＩＦＯスリープレジスタのライトでスリープに入る。
【０３９８】
パワーステータスブロックから出力されるパワーマネージメントステータス信号（ｐｍＳｔａｔｅ［１：０］）は、各チャネルで、
0003976927.tif 000014
となる。
【０３９９】
ＤｏＥｎｇｉｎｅにおいては、スキャナコントローラ（Ｓｃｃ）やプリンタコントローラ（Ｐｒｃ）が接続されるＧＢＩは、１のチャネルしかないので上のようになるが、２チャネル含む場合は各チャネルの値を合計し、次のように４段階に縮退させる。
【０４００】
pmState[1:0]  00    level0
（両チャネルのＦＩＦＯ、ＤＭＡがともに停止）
01    level1
（１チャネルのＦＩＦＯのみ動作）
10    level2
（両チャネルのＦＩＦＯが動作、ＤＭＡは両方停止）
11    level3
（両チャネルのＦＩＦＯが動作、ＤＭＡは１つは動作）
となる。
【０４０１】
パワーマネージメントステータス信号（ｐｍＳｔａｔｅ［１：０］）は、ＩＦＢｕｓを介して機能ブロックへ送られる。機能ブロックでは、この信号と機能ブロック自身の動作状態を基に、パワーマネージメントユニットへのパワーマネージメントステータス信号を生成する。
【０４０２】
（ＧＢＩの動作モード）
以上、ＧＢＩを構成する各部について説明した。ここで、ＧＢＩの動作についてまとめておく。ＧＢＩの動作モードには、大きく分けて以下のものがある。
【０４０３】
１．スレーブモード
２．マスタモード
マスタモードにおけるＤＭＡの方式は、
Ａ．対メモリ
Ｂ．対Ｉ／Ｏ（アドレス固定）
があり、対メモリＤＭＡでは、
ａ．連続物理アドレス
ｂ．不連続物理アドレス（転送先メモリがメモリ管理のページ単位で分割されていることを想定）
のメモリに対して転送を行う。また、対メモリＤＭＡでは、逆方向モードもサポートする（チャネル１のみ）。
【０４０４】
連続物理アドレスに対するＤＭＡは、先頭アドレス、一行の長さ、次の行までのピッチ、及び行数を指定する、いわゆる２次元ＤＭＡである。１次元の場合は行数を１とすることで実現する。
【０４０５】
不連続物理に対するＤＭＡは、分割された各メモリブロックの先頭アドレスと長さをメモリ上に配置し、それを参照しながら、転送先のアドレスを計算し、ＤＭＡを行う。この先頭アドレスと長さの組をチェーンテーブルと呼ぶことにする。チェーンテーブルの一例を図９８に示す。不連続物理アドレスに対するＤＭＡでは、チェーンテーブルを配置したメモリアドレスとアドレス・長さの組の数を指定する。もちろん、チェーンテーブル自体は連続アドレスに配置しなければならないが、もし、全チェーンテーブルが連続領域に置けない場合には、先頭のアドレスの代わりに次のチェーンテーブルのアドレスを、長さに０を設定することで、チェーンテーブルをつなぐことができる。
【０４０６】
逆方向モードは、チェーンテーブルＤＭＡの１ブロック、２次元ＤＭＡの１ラインをアドレスの大きい方から、小さい方へアクセスする。ブロックあるいはライン単位の逆方向の指示は、チェーンテーブルＤＭＡでは、チェーンテーブルを逆になるように作る。ピッチ付きのＤＭＡの場合は、ピッチの値を負の値（２の補数）を設定する。
【０４０７】
（割り込み制御）
次に割り込みの制御について説明する。ＤＢＩからの割り込みは、以下の条件で発生する。
【０４０８】
［マスタモード］
１．ＤＭＡ正常終了
２．ＧＢｕｓでのＤＭＡ転送中のバスエラーの検出
３．ＢＢｕｓでのＤＭＡ転送中のバスエラーの検出
４．チェーンＤＭＡモードでのチェーンテーブルリード中のバスエラーの検出
ＧＢＩ停止レジスタによる強制終了の場合、ＤＭＡコントローラが各バスのコントローラに要求中の転送が正常に終了した時点で、正常終了となる。もし、要求中の転送がバスエラーとなった場合には、バスエラーによる異常終了となる。
【０４０９】
チャネル０では、機能ブロックがＧＢＩ内のＦＩＦＯに全データを書き込んだ時点で終了する（割り込みを発生する）が、ＦＩＦＯにデータが残っている。ＧＢＩはＦＩＦＯのデータを転送した時に、ＤＭＡ終了となるので、これをもって転送終了と判断する。
【０４１０】
チャネル１では、ＧＢＩはＧＢＩ内のＦＩＦＯに全データを書き込んだ時点で終了する（割り込みを発生する）が、ＦＩＦＯにデータが残っている。機能ブロックはＦＩＦＯのデータを転送した時に、終了となるので、これをもって転送終了と判断する。
【０４１１】
［スレーブモード］
５．ＦＩＦＯイリーガルアクセス
ＧＢＩに按続された機能ブロックとマスタとのデータの転送は、ＧＢＩのＦＩＦＯを介して行われる。
【０４１２】
ＧＢｕｓ／ＢＢｕｓの両方使用する場合（ＤｏＥｎｇｉｎｅでは、ＧＢｕｓ／ＢＢｕｓの両方使用可能なマスタはＧＢＩのみ）には、両方のバスからの同時アクセスに対して、どちらのバスが最初にＦＩＦＯをアクセスするかを知る方法がない。マスタはＧＢｕｓ／ＢＢｕｓに対して、排他的に転送要求を行う必要がある（ＧＢＩのマスタモードでは排他的に転送要求している）。もし、ＧＢｕｓ／ＢＢｕｓの両方が同時にＦＩＦＯにアクセスした場合には、ＦＩＦＯイリーガルアクセスとなる。
【０４１３】
上記の１から５のいずれかが起こり、かつ対応する割り込み許可ビットが、”１”にセットされている場合に割り込みが発生する。
【０４１４】
（コアインターフェース）
図９９に、ＧＢＩと、ＢＢｕｓ／ＧＢｕｓ／機能ブロックとのインターフェースをまとめたコアインターフェースの図を示す。ＧＢＩは、ＢＢｕｓスレーブ動作でバスエラーを発行しないので、ｂＥｒｒｏｒ（Ｆｕｎｃ）Ｏｕｔ＿Ｌはない。また、ＧＢＩはＢＢｕｓスレーブ動作でｂＩｎｓｔＮｏｔＤａｔａ信号をチェックしないので、（ｆｕｎｃ）ｂＩｎｓｔＮｏｔＤａｔａ＿ｉｎはなく、（ｆｕｎｃ）ｂＩｎｓｔＮｏｔＤａｔａ＿ｏｕｔは、常に”０”をドライブする。
【０４１５】
また、ＧＢＩはＧＢｕｓスレーブ動作でバスエラーを発行しないので、（ｆｕｎｃ）ｇＥｒｒ＿Ｌ＿ｏｕｔはない。
【０４１６】
なお、図９９におけるＧＢＩの信号名中のＦｕｎｃ（ｆｕｎｃ）には、接続される機能ブロック、すなわちｓｃｃ（スキャナコントローラ）あるいはｐｒｃ（プリンタコントローラ）の名前を入れる。
【０４１７】
また、ＤｏＥｎｇｉｎｅでは、機能ブロックとして、スキャナコントローラのＳｃｃ（ｓｃｃ）と、プリンタコントローラのＰｒｃ（ｐｒｃ）がある。いずれの場合もデータの流れが双方向でないので、不要なＦＩＦＯ、ＤＭＡコントローラ、レジスタを削除した形でインプリメントする。
【０４１８】
（プリンタコントローラコアインターフェース）
図８６は、プリンタコントローラ４３０３における、上述した各ブロックを含むコア部分と、外部バスやスキャナとの間で入出力される信号をまとめた図である。このように、プリンタコントローラ４３０３は、システムバスブリッジ４０２との間をＧバスにより接続され、ＩＯデバイスやパワーマネジメントデバイス及びシステムバスブリッジとの間をＢバスにより接続され、プリンタコントローラとの間をＣＰバスで接続され、Gバス／BバスI/Fユニットとの間をＩ／Ｆバスにより接続されている。
【０４１９】
２．１０．電力管理ユニット
図８７は、電力管理ユニット４０９のブロック図である。
【０４２０】
ＤｏＥｎｇｉｎｅはＣＰＵを内蔵した大規模なＡＳＩＣである。このため、内部のロジックが全部同時に動作してしまうと、大量の熱を発生し、チップ自体が破壊されてしまう恐れがある。これを防ぐために、ＤｏＥｎｇｉｎｅは、ブロック毎の電力の管理、すなわちパワーマネジメントを行ない、更にチップ全体の消費電力量の監視を行なう。
【０４２１】
パワーマネージメントは、それぞれのブロックが各自個別に行なう。各ブロックの消費電力量の情報は、パワーマネージメントレベルとして、電力管理ユニット（ＰＭＵ）４０９に集められる。ＰＭＵ４０９では、各ブロックの消費電力量を合計し、その値が限界消費電力を超えないように、ＤｏＥｎｇｉｎｅの各ブロックの消費電力量を一括して監視する。
【０４２２】
（動作）
電力管理ブロックの動作は次の通りである。
・各ブロックは、４段階のパワーマネジメントレベルを持つ。
・ＰＭＵは、それぞれのレベルにおける消費電力の値をレジスタとして持つ。このレベル構成及び消費電力の値は、ＰＭ構成レジスタ５４０１に保持される。
・ＰＭＵは、各ブロックからパワーマネジメントレベルを２ビットのステータス信号として受け取り（後述）、レジスタ５４０１に設定された値と照合させて各ブロックの消費電力を知る。
・ＰＭＵは各ブロックの消費電力を加算器５４０３で加算し、ＤｏＥｎｇｉｎｅ全体の消費電力量をリアルタイムに計算する。
・算出された消費電力量は、構成レジスタ５４０１に設定された消費電力のリミット値（ＰＭリミット）と比較器５４０４で比較され、これを超えた場合には割込発生器５４０５から割り込み信号を発行する。
・このリミット値は２段階設定することができる。１段階目は、本当の限界から少し余裕を持たせた値を設定しておく。この値を超えると、通常の割込み信号が発行される。ソフトウェアはこれを受けて、新たにブロックを起動するような転送は始めないようにする。ただ、２段階目のリミット値に達しない範囲内では、ソフトウェアの管理の元で、新たなブロックを起動することができる。２段階目のリミット値は、デバイスが破壊される恐れのある値を設定しておく。万が一、この値を超えてしまった時には、ＮＭＩ（割込マスクが設定できない割り込み）を発行して安全のためにシステムを停止させる。
・割込み信号は、ＰＭＵの状態レジスタ５４０２をリードすることで解除される。この状態レジスタ５４０２をリードした時点からタイマカウントを始め、タイマがエクスパイアするまで消費電力量が戻らなければ、再び割込み信号を発行する。このタイマの値の設定はＰＭＵの構成レジスタ５４０１に設定される。
【０４２３】
（各ブロックのパワーマネージメント）
各ブロックのパワーマネージメント制御は、ブロック毎に自由に構成してよい。構成例の例を示す。
【０４２４】
（構成例１）
この例では、内部ロジックへのクロックをオン／オフすることにより、パワーマネジメントを行なっているので、消費電力のレベルは２段階しか持っていない。このレベルをステータス信号として電力管理ユニット４０９に送る。図８８にバスエージェントのブロック図を示す。
・バスエージェント５５０１は、各ユニット毎の内部ロジック５５０２、アドレスをデコードするデコーダ５５０３、クロックコントロール部５５０４、クロックゲート５５０５を含む。
・デコーダ５５０３とクロックコントロール部５５０４は常に動作しており、パワーマネージメントコントロールとして、バスのアクティビティーの監視、内部ロジックへのクロックのゲーティングを行なっている。
【０４２５】
（クロックコントロール）
・バスエージェントは、バスのアクティビティーを検出し、クロックのオン／オフを自動で行なう。
・バスエージェントには、Sleep, Wake Up, Waitの３つのステートがある。
・Sleepはバスエージェントにアクティビティーがなく、クロックゲートクロックを停止させている状態である。
・Sleepの状態でも、デコーダ部５５０３、クロックコントロール部５５０４は動作しており、バスをモニタリングして、要求を待っている。
・デコーダ５５０３が自分のアドレスを検出すると、クロックゲート５５０５を開き、内部ロジックのクロックを動作させ、バスの要求に応える。ステートはWake Upに移行する。また、この状態を電力管理ユニット４０９に通知する。・データ転送が終了すると、Waitステートに移行し、次の要求を待つ。この時クロックは動作したままである。要求があれば、Wake Upステートに戻り、転送を行なう。また、要求を待っている間はタイマによりカウントを行ない、要求がないままカウンタがタイムアップした場合は、Sleepステートへ移り、クロックを停止させる。この状態も電力管理ユニット４０９に通知される。
【０４２６】
以上のようにして、消費電力が所定値を越えないように管理している。
【０４２７】
（コピー動作）
上述の構成により、スキャナから読み込んだ画像データをそのままプリンタへ転送して、プリンタで画像形成する動作をコピー動作を行うことができる。本実施形態のＤｏ  Ｅｎｇｉｎｅを用いたスキャナ／プリンタシステムでは、以下に示す３種類のコピーの方式がそのシステム構成に応じて選択される。
【０４２８】
（方式１）
第１の方式は、スキャナによる画像入力の垂直・水平タイミングと、プリンタによる画像出力の水平・垂直タイミングがそれぞれ一致していて、ビデオデータの転送速度も一致している組み合わせのシステムにおける方式である。
【０４２９】
垂直同期信号（VSYNC）はプリンタから出力されて、プリンタコントローラ(PRC)に入力される。このVSYNC信号は、プリンタコントローラ(PRC)からＣＰバスを介してスキャナコントローラ(SCC)に入力される。そして、スキャナコントローラ(SCC)からスキャナに対して出力される。これにより、プリンタとスキャナの垂直同期がとられる。水平同期についても、垂直同期信号VSYNCと同様に、水平同期信号（HSYNC）がプリンタから出力され、プリンタコントローラ，ＣＰ−バス，スキャナコントローラを介してスキャナに入力される。これによりスキャナとプリンタとの水平同期がとられる。このように、垂直方向及び水平方向の同期がとられてスキャナとプリンタが動作する。ビデオデータは同期用のビデオクロックとともにスキャナから出力される。出力されたビデオクロックとビデオデータはスキャナコントローラ(SCC)に入力され、ＣＰバスを介して、プリンタコントローラ(PRC)に入力される。そして、プリンタコントローラ(PRC)からプリンタに出力される。プリンタではビデオクロックに同期してビデオデータを受け取り、画像出力をおこなう。
【０４３０】
このコピー動作は、図８９に示す構成により行われる。このコピー動作ではＧバスおよびＢバスを使用せずにコピー動作がおこなわれる。
【０４３１】
このコピー動作中、画像データはＣＰバスを介してスキャナからプリンタへ直接転送されるが、同時にスキャナコントローラ(SCC)からＧバスのDMA転送によってSDRAMへ書き込むことが可能である。コピー動作と同時にSDRAMに書き込まれた画像データは、必要に応じて画像データとして格納すること等が可能となる。また、SDRAM上の画像データをプリンタへ出力することにより、スキャナで読み取った画像データを複数部の出力することが、スキャナの動作なしに可能となる。
【０４３２】
（方式２）
第２の方式は、スキャナによる画像入力の水平タイミングと、プリンタによる画像出力の水平タイミングとが一致しており、垂直タイミングとビデオデータの転送速度がそれぞれ一致していない組み合わせのシステムにおける方式である。
【０４３３】
この場合のコピー動作を図９０で説明する。スキャナが画像を読み取り始めると、垂直同期信号（VSYNC）、水平同期信号（HSYNC）、ビデオクロックという３つのタイミング信号がスキャナコントローラ(SCC)に入力される。ビデオクロックに同期してビデオデータもスキャナコントローラ(SCC)に入力される。上記タイミング信号に同期して、スキャナコントローラ(SCC)はビデオデータを内部のＦＩＦＯ（FIFO_SCC）に取り込む。FIFO_SCCに画像データが入り始めると同時に、FIFO_SCCから、スキャナのＧバス／ＢバスI/Fユニット４３０１Ａ（GBI_SCC）のＦＩＦＯ（FIFO_GBI_SCC）にデータ転送が開始される。スキャナからの画像データは、FIFO_SCCを介して順次FIFO_GBI_SCCに転送される。FIFO_GBI_SCCにデータが入り始めると、プリンタのＧバス／ＢバスI/Fユニット４３０１Ｂ（GBI_PRC）がマスターで、スキャナのＧバス／ＢバスI/Fユニット４３０１Ａ（GBI_SCC）がスレーブとなるDMA転送が開始される。この時のバスは、Ｇバスが空いていればそちらを利用するが、空いていなければＢバスであっても良い。
【０４３４】
このDMA転送により、FIFO_SCCの画像データはGBI_PRC内のＦＩＦＯ（FIFO_GBI_PRC）へ転送される。FIFO_GBI_PRCの画像データは、順次プリンタコントローラ(PRC)のＦＩＦＯ（FIFO_PRC）へ転送される。FIFO_PRCに画像データが入り始めると、プリンタコントローラ(PRC)はプリンタに垂直同期信号（VSYNC）を入力する。プリンタからは、VSYNCのタイミングにより、水平同期信号（HSYNC）とビデオクロックを出力しはじめる。プリンタコントローラ(PRC)は水平同期信号HSYNCで水平同期をとり、ビデオクロックに同期して、ビデオデータをFIFO_PRCから出力する。そのビデオデータをプリンタが画像出力する。
【０４３５】
このコピー動作の場合、画像データは、スキャナ, スキャナコントローラのＦＩＦＯ（FIFO_SCC）, Ｇバス／ＢバスI/FユニットのＦＩＦＯ（FIFO_GBI_SCC）,Ｇバス／ＢバスI/FユニットのＦＩＦＯ（FIFO_GBI_PRC）,プリンタコントローラのＦＩＦＯ（FIFO_PRC）, プリンタの順で転送されて、画像コピー動作がなされる。水平同期の間隔はスキャナとプリンタとで同一であるので、画像データの転送速度の違いは各FIFOにより緩衝される。
【０４３６】
（方式３）
第３の方式は、スキャナとプリンタの垂直同期タイミング、水平同期タイミング、ビデオデータの転送速度がそれぞれすべて異なる組み合わせのシステムにおける方式である。
【０４３７】
この場合のコピー動作を図９１により説明する。スキャナで画像の読み取りが開始すると、スキャナは垂直同期信号（VSYNC）、水平同期信号（HSYNC）、ビデオクロックをスキャナコントローラ(SCC)に出力する。これらのタイミング信号に同期して画像データが出力される。スキャナコントローラ(SCC)は上記タイミング信号に同期して画像データを取り込む。取り込まれた画像データはGBI_SCCにより、DMA転送でメモリコントローラ（MC）４０３へ転送される。MC４０３では、DMA転送された画像データをSDRAMに書き込む。SDRAMに書き込まれた画像データの量が、スキャナとプリンタの画像データ転送速度の差を緩衝できる量に達すると、プリンタへの画像データ転送が開始される。この画像データ量の判定は、スキャナからのデータ転送時間による判定、SDRAMに書き込まれるアドレスによる判定、GBI_SCCにおけるDMA転送量の判定等、種々の方式がある。
【０４３８】
プリンタへの画像データ転送はプリンタコントローラ(PRC)により行われる。プリンタコントローラ(PRC)は、GBI_PRCのDMA転送により、SDRAMに書き込まれた画像データを順次内部のFIFOへ入力する。同時にプリンタへ垂直同期信号（VSYNC）を出力する。その後、プリンタからは水平同期信号（HSYNC）とビデオクロックを入力する。このHSYNCとビデオクロックと同期して、プリンタコントローラ(PRC)は内部のFIFOから画像データをプリンタへと出力する。上記画像データの流れにより、スキャナで読み取られた画像データをプリンタから出力するコピー動作がおこなわれる。この場合の画像データの流れは、スキャナ，スキャナコントローラ, スキャナのＧバス／ＢバスI/Fユニット（GBI_SCC）,メモリコントローラ（MC）,SDRAM,メモリコントローラ（MC）,プリンタのＧバス／ＢバスI/Fユニット（GBI_PRC）,プリンタコントローラ(RRC),プリンタの順となる。このように、一旦メモリに格納し、それをスキャナとプリンタとの間の緩衝メモリとして、スキャナからプリンタへと画像データを転送し、コピーを行う。
【０４３９】
本システムは上記３方式のコピー動作機能を有する。（方式１）、（方式２）、（方式３）の順でコピー動作時に動作する内部ブロックが多くなる。内部ブロックの使用率が増加すると、システム全体のパフォーマンスが効率を低下させる要因となりうる。本システムは接続されるデバイス（プリンタ・スキャナ）に応じて、システム全体が最も効率的なコピー動作方式を選択することが可能である。
【０４４０】
コピー方式を選択する方法としては、例えば次のようなものがある。
▲１▼ＵＡＲＴ等を介して指定するコピー方式そのものを入力させ、指定された方式でコピー動作を行う。
▲２▼プリンタとスキャナのデータ転送速度や水平・垂直同期周波数等、必要なパラメタをＵＡＲＴ等から入力させ、それらの値に応じて上記３通りの方式からＣＰＵ４０１がひとつを選択し、その方式でコピー動作を行わせる。
▲３▼プリンタコントローラがプリンタのデータ転送速度や水平・垂直同期周波数等、必要なパラメタを読取り、スキャナコントローラがスキャナからデータ転送速度や水平・垂直同期周波数等、必要なパラメタを読取り、それらをＣＰＵ４０１により比較判定してコピー動作の方式を決定する。
【０４４１】
上記▲１▼〜▲３▼の方法で決定された、あるいは選択されたコピー方式はＣＰＵからプリンタコントローラ及びスキャナコントローラに知らされ、その方式でプリンタコントローラ及びスキャナコントローラ等によりコピーを行わせる。
【０４４２】
次に、上記▲３▼の方式でコピー方式を決定する手順を説明する。
【０４４３】
図１００は、ＣＰＵ４０１による、３通りのコピー方式からシステムで使用するコピー方式を選択する手順のフローチャートである。この動作はシステムの電源立ち上げ時、ステップＳ１から開始される。
【０４４４】
ステップＳ２では、プリンタの種別の判定が行われる。ＣＰＵ４０１はプリンタコントローラ４３０３を介して、プリンタビデオＩ／Ｆに含まれるコマンド／ステータスラインを通じて、プリンタから種別を示すＩＤを取得する。このコマンド／ステータスラインは、プリンタコントローラとプリンタとが１対１にコマンド／ステータスのやりとりができるシリアル通信ラインである。
【０４４５】
ステップＳ３では、同様にＣＰＵがスキャナコントローラ４３０２を介して、スキャナビデオＩ／Ｆに含まれるコマンド／ステータスラインを通じ、スキャナから種別を示すＩＤを取得する。
【０４４６】
ステップＳ４では、ステップＳ２とＳ３で判定された、スキャナとプリンタの組み合わせに適したコピー経路の判定が行われる。スキャナとプリンタの組み合わせに適したコピー経路の判定は、あらかじめテーブルの形式で、例えば、フラッシュＲＯＭ等のＣＰＵが参照可能なメモリに準備されている。各コピー経路に適したスキャナとプリンタの組み合わせは次のようなものがある。  （方式１）スキャナとプリンタの水平、垂直タイミングが同期していて、ビデオデータの転送速度も同期している組み合わせ
（方式２）スキャナとプリンタの水平同期タイミングの速度が同一で、垂直タイミングとビデオデータの転送速度は同期していない組み合わせ
（方式３）スキャナとプリンタの垂直同期タイミング、水平同期タイミング、ビデオデータの転送速度がそれぞれ異なる組み合わせ
ＣＰＵは、あらかじめ用意されたテーブル参照において、上記３方式から適切なコピー方式を選択する。
【０４４７】
ステップＳ５では、ステップＳ４で選択されたコピー方式に応じたモード設定がスキャナコントローラ４３０２に対してなされる。このモード設定は、ＣＰＵがＢＢｕｓを介して行う。
【０４４８】
図１０１は、スキャナコントローラ４３０２内部のデータバスの切り換え回路を示す図である。なお、データバスセレクタは、図４４のスキャナデバイスＩ／Ｆ４４０１に含まれる。また、データバスの切り替えの説明に不用なスキャナビデオクロックユニット等は省略した。
【０４４９】
レジスタ１には、データバスのモードが設定される。ＣＰＵは、図１００のステップＳ４において選択したコピー方式に応じたモードをレジスタ１に設定する。セレクト制御信号４は、モード設定レジスタ1に設定されたモードに応じてデータパスを選択するための信号である。スキャナビデオバス２は、スキャナからのビデオデータのバスである。バス５は、スキャナからのビデオデータをFIFO＿SCC６に転送するバスである。ＣＰビデオバス７は、（方式１）のコピー動作を行う場合に使用されるバスである。スキャンビデオバスからのビデオデータは（方式１）の場合はＣＰビデオバス７に出力するようにデータパスがセレクトされる。（方式２）、（方式３）の場合にはバス５にビデオデータが出力されて、ＦＩＦＯ＿ＳＣＣ４４０７に転送される。
【０４５０】
図１００で、次にステップＳ６に移行する。ステップＳ６では、GBI_sccの動作モード設定を行う。このモード設定はＣＰＵがステップＳ４で選択したコピー方式に基づいて行う。（方式１）では、GBI_sccは非動作指定される。（方式２）では、ＤＭＡ転送のマスター指定がなされ、ＤＭＡの転送先にはGBI_prcが設定される。（方式３）ではＤＭＡ転送のマスター指定がなされ、ＤＭＡの転送先にはＳＤＲＡＭが設定される。
【０４５１】
次にステップＳ７では、GBI_prcの動作モード設定を行う。このモード設定はＣＰＵがステップＳ４で選択したコピー方式に基づいて行う。（方式１）では、GBI_prcは非動作指定がなされる。（方式２）ではＤＭＡ転送のスレーブ指定がなされる。（方式３）では、ＤＭＡ転送のマスター指定がなされ、ＤＭＡ転送の読み出しもとはＳＤＲＡＭが設定される。
【０４５２】
次にステップＳ８では、プリンタコントローラのモード設定がなされる。このモード設定はステップＳ４で選択されたコピー方式に基づいてＣＰＵが行う。
【０４５３】
図１０２は、プリンタコントローラ４３０３内部のデータバスの切り換え回路を示す図である。レジスタ１１には、データバスのモードが設定される。ＣＰＵは、図１００のステップＳ４において選択したコピー方式に応じたモードをレジスタ１１に設定する。セレクト制御信号１４は、モード設定レジスタ１１に設定されたモードに応じてデータバスのセレクトを行う信号である。バス１５は、FIFO＿PRC１６から出力されるデータのバスである。バス１２は、プリンタへのビデオデータバスである。ＣＰビデオバス１７は、（方式１）のコピー動作を行う場合に使用する。プリンタへのビデオデータは（方式１）の場合はＣＰビデオバスのデータがセレクトされ、出力される。（方式２）、（方式３）の場合にはバス１５からのデータがプリンタビデオバス１２に出力される。
【０４５４】
ステップＳ９で、電源立ち上げ時のコピー方式選択のフローが終了する。以上のようにして、ＣＰＵはスキャナ及びプリンタの種別に応じたコピー方式を決定することができる。
【０４５５】
なお、上述の手順はスキャナ及びプリンタの垂直同期タイミング、水平同期タイミング、ビデオデータの転送速度に基づいて、コピー動作の方式を決定する手順であるが、単なるコピーでなく、画像の加工が加わる場合にはこの限りではない。すなわち、図１００のステップ２の前に、画像データを加工するか否かを判定し、画像データを加工する場合には、スキャナ及びプリンタの仕様に関わりなく、方式３を選択し、ステップＳ５〜Ｓ８における設定では、データの径路が方式３になるよう各ブロックの設定を行う。こうすることで、画像データを加工する場合には読み込んだ画像データはいったんメモリに格納されるため、そこで画像データに対して必要な加工を施すことができる。
【０４５６】
また、方式２あるいは方式３ではバスを使用する。この際、ＧバスあるいはＢバスのいずれを使用するかは、各バスの使用状況により決定される。すなわち、Ｇバス／Ｂバスともにアイドル状態であれば、バス幅の広いＧバスを使用する。いずれかが使用中であれば、未使用の方を使用する。
【０４５７】
以上説明したように、ＤｏＥｎｇｉｎｅにおいては、スキャナは、スキャナコントローラ４３０２及びＧＢＩ＿ＳＣＣ４３０１Ａを介してバス（Ｇバス及びＢバス）に接続されている。スキャナコントローラ４３０２及びＧＢＩ＿ＳＣＣ４３０１Ａは、それぞれＦＩＦＯを介して互いに画像データを転送するように接続されている。このように、それぞれがＦＩＦＯを有しているために、ＧＢＩは、６４ビット幅で動作クロックが１００ＭＨｚという非常に高速なＧバスに接続されているにも関わらず、比較的低速なスキャナから読み込まれた画像データを効率的に転送することができる。これは、プリンタコントローラに関しても同様である。
【０４５８】
さらに、スキャナとプリンタそれぞれの同期信号の一致・不一致に応じて、コピー時のデータ経路を選択することで、スキャナ及びプリンタの仕様がどのようなものであろうとも、可能な限り速いデータ転送を用いてコピーを行うことができる。
【０４５９】
すなわち、上述のスキャナコントローラ及びプリンタコントローラ及びそれぞれのＧＢＩを用いてスキャナ及びプリンタをＤｏＥｎｇｉｎｅのバスに接続することで、スキャナ及びプリンタの仕様からのＤｏＥｎｇｉｎｅの独立性をより高めることが可能となった。
［その他の構成例］
図９及び図１０で示したキャッシュの動作手順は、図１０３及び図１０４のようなものであってもよい。
【０４６０】
図１０３においては、ＭＣバスよりデータ転送が開始されると、その最初にＭＣバスで示されるｍＴＴｙｐｅ［６０：０］によってその転送をキャッシュオンで行うかオフで行うか判断される。ここでは、転送がバースト転送の時、そのバースト転送データ量がキャッシュの１ラインのデータ量より大か小かによって判断する。なお、キャッシュの１ラインは２５６ビット＝４バースト分である。
【０４６１】
図１０３において、メモリコントローラは転送の開始でｍＴＴｙｐｅ［３：０］をチェックし、ｍＴＴｙｐｅが示すバースト長が１／２／４であれば、キャッシュオンで動作し、６／８／１６／２×１６／３×１６／４×１６の場合はキャッシュオフで動作する。キャッシュオンあるいはオフ後の動作は、図９及び図１０と同様である。
【０４６２】
また、図１０５及び図１０６のように、デバイスによってキャッシュのオンオフを切り替えることもできる。図１０５において、メモリコントローラは転送の開始でｍＴＴｙｐｅ［６：４］をチェックすることにより転送要求デバイスを識別し、そのデバイスの転送要求をキャッシュオンで動作するか、オフで動作するかを判断するために、あらかじめ設定されている構成レジスタの値を参照し、キャッシュオンで動作するか、オフで動作するか決定する。キャッシュオンあるいはオフ後の動作は、図９及び図１０と同様である。構成レジスタの設定は、ハードウエア的に決定（変更不可）していも良いし、ソフトウエアで書換え可能にしてもよい。
【０４６３】
【発明の効果】
以上説明したように、本発明では、高速な画像データの転送と画像データのバウンダリに合わせた画像データの転送とを両立することができる。このため、転送した量のデータを、転送したいメモリアドレスに、高速に転送することが可能となった。また、２次元ＤＭＡに関しても高速な画像データの転送と画像データのバウンダリに合わせた画像データの転送とが両立され、高速な２次元ＤＭＡによるデータ転送が可能となった。
【図面の簡単な説明】
【図１】ＤｏＥｎｇｉｎｅを用いた装置あるいはシステムの構成例の図である。
【図２】ＤｏＥｎｇｉｎｅを用いた装置あるいはシステムの構成例の図である。
【図３】ＤｏＥｎｇｉｎｅを用いた装置あるいはシステムの構成例の図である。
【図４】ＤｏＥｎｇｉｎｅのブロック図である
【図５】キャッシュメモリコントローラの３つのステートを示す図である。
【図６】インタラプトコントローラ４１０のブロック図である。
【図７】メモリコントローラ４０３のブロック図である。
【図８】キャッシュコントローラ７０６を中心とする詳細なブロック図である。
【図９】ＭＣバスよりメモリリード／ライト転送が要求された場合のキャッシュの動作を示すフローチャートである。
【図１０】ＭＣバスよりメモリリード／ライト転送が要求された場合のキャッシュの動作を示すフローチャートである。
【図１１】ＲＯＭ／ＲＡＭコントローラ７０７の構成を示す図である。
【図１２】ＣＰＵからのバースト読み出しのタイミングを示すタイミング図である。
【図１３】ＣＰＵからのバースト書き込みのタイミングを示すタイミング図である。
【図１４】Ｇバスデバイスからのバースト読み出しのタイミングを示すタイミング図である。
【図１５】Ｇバスデバイスからのバースト書き込みのタイミングを示すタイミング図である。
【図１６】メモリフロントキャッシュにヒットした場合のシングル読み出しのタイミングを示すタイミング図である。
【図１７】メモリフロントキャッシュにヒットしなかった場合のシングル読み出しのタイミングを示すタイミング図である。
【図１８】メモリフロントキャッシュにヒットした場合のシングル書き込みのタイミングを示すタイミング図である。
【図１９】メモリフロントキャッシュにヒットしなかった場合のシングル書き込みのタイミングを示すタイミング図である。
【図２０】システムバスブリッジ（ＳＢＢ）４０２のブロック図である。
【図２１】Ｂバスインターフェースのブロック図である。
【図２２】Ｇバスインターフェース２００６のブロック図である。
【図２３】仮想メモリマップ、物理メモリマップ、Ｇバスのアドレス空間でのメモリマップ、Ｂバスのアドレス空間でのメモリマップの図である。
【図２４】レジスタ等を含む図２３における斜線部の５１２メガバイトを示すマップの図である。
【図２５】アドレススイッチ２００３のブロック図である。
【図２６】データスイッチ２００４のブロック図である。
【図２７】Ｇバスからの書き込み／読み出しサイクルのタイミング図である。
【図２８】Ｇバスのバースト停止サイクルのタイミング図である。
【図２９】Ｇバスのトランザクション停止サイクルのタイミング図である。
【図３０】Ｇバスのトランザクション停止サイクルのタイミング図である。
【図３１】Ｇバスのトランザクション停止サイクルのタイミング図である。
【図３２】Ｇバスのトランザクション停止サイクルのタイミング図である。
【図３３】ＰＣＩバスインターフェース４１６のブロック図である。
【図３４】Ｇバスアービタ（ＧＢＡ）４０６のブロック図である。
【図３５】ＤｏＥｎｇｉｎｅ４００内におけるＧバス４０４を中心とする、Ｇバス上のバスマスタによるDMAに係るブロック図である。
【図３６】連続してバスを使用する回数が、バスマスタ１〜４のすべてについて１に設定されている場合の公平アービトレーションモード（フェアモード）の例を示す図である。
【図３７】連続してバスを使用する回数が、バスマスタ１についてのみ２であり、他のバスマスタは１に設定されている場合の公平アービトレーションモードの例を示す図である。
【図３８】連続してバスを使用する回数がそれぞれ１ずつであり、バスマスタ１が優先バスマスタと設定されている場合の優先アービトレーションモードの例を示す図である。
【図３９】バスマスタ１からのバス要求により、バスマスタ４のバス要求が許可されているにもかかわらず中断された例を示す図である。
【図４０】Ｂバスアービタ４０７のブロック図である。
【図４１】同期ユニット４００１のブロック図である。
【図４２】同期ユニット内の一つコンペアユニットの図である。
【図４３】スキャナ／プリンタコントローラのブロック図である。
【図４４】スキャナコントローラ４３０２のブロック図である。
【図４５】スキャナデバイスI/F４４０１のブロック図である。
【図４６】スキャナビデオクロックユニット４４０２のブロック図である。
【図４７】スキャナビデオデータマスク４６０１のブロック図である。
【図４８】スキャナビデオデータマスク４６０２のブロック図である。
【図４９】スキャナビデオデータ幅コンバータ４６０３のブロック図である。
【図５０】ＲＧＢ各８ビットのカラー画像データ（２４ビット格納モード）のメモリ上でのならびを示す図である。
【図５１】ＲＧＢ各８ビットのカラー画像データ（３２ビット格納モード）のメモリ上でのならびを示す図である。
【図５２】８ビットの白黒画像データのメモリ上でのならびを示す図である。
【図５３】２値の白黒画像データのメモリ上でのならびを示す図である。
【図５４】ＢＷ８パッキングユニット４９０１により、多値８ビットの白黒画像データを６４ビット幅に変換する際のタイミング図である。
【図５５】シフトレジスタ４９０２により２値白黒画像データを６４ビット幅に変換する際の画像データ入力のタイミング図である。
【図５６】ＲＧＢパッキングユニット４９０３により、ＲＧＢ各８ビット（全２４ビット）の画像データを６４ビット幅に変換する際のタイミング図である。
【図５７】ＲＧＢパッキングユニット４９０３のブロック図である。
【図５８】スキャナ画像データ転送FIFOコントローラ４４０３のブロック図である。
【図５９】スキャナコントローラコントロールレジスタ４４０４のブロック図である。
【図６０】  IRQコントローラ４４０６のブロック図である。
【図６１】メモリフィルモードコントローラ４４０５のブロック図である。
【図６２】スキャナコントローラ４３０２からデータを読み出してDMA転送する際のタイミング図である。
【図６３】スキャナコントローラ４３０２の内部レジスタに対して読み出しあるいは書き込みを行うタイミング図である。
【図６４】信号sccDmaPmStateの値及びクロックの状態と信号sccPmStateの値との関係を示す図である。
【図６５】スキャナコントローラ４３０２における、各ブロックを含むコア部分と外部バスやスキャナとの間で入出力される信号をまとめた図である。
【図６６】プリンタコントローラ４３０３のブロック図である。
【図６７】プリンタデバイスI/F６６０１のブロック図である。
【図６８】プリンタビデオクロックユニット６６０２のブロック図である。
【図６９】プリンタビデオデータマスク６８０１のブロック図である。
【図７０】プリンタビデオ同期コントロールユニット６８０２のブロック図である。
【図７１】ビデオデータ幅コンバータ６８０３のブロック図である。
【図７２】ＲＧＢ各８ビットのカラー画像データ（２４ビット格納モード）のメモリ上でのならびを示す図である。
【図７３】ＲＧＢ各８ビットのカラー画像データ（３２ビット格納モード）のメモリ上でのならびを示す図である。
【図７４】８ビットの白黒画像データのメモリ上でのならびを示す図である。
【図７５】２値の白黒画像データのメモリ上でのならびを示す図である。
【図７６】  RGBoutユニット７１０１のブロック図である。
【図７７】プリンタ画像データ転送FIFOコントローラ６６０３のブロック図である。
【図７８】プリンタコントローラコントロールレジスタ６６０４のブロック図である。
【図７９】ＩＲＱコントローラ６６０５のブロック図である。
【図８０】ＩＲＱコントローラ６６０５のブロック図である。
【図８１】プリンタコマンド／ステータスコントロールユニット６６０６のブロック図である。
【図８２】オプションコントローラコントロールユニット６６０７のブロック図である。
【図８３】プリンタコントローラ４３０３へデータをDMA転送する際のタイミング図である。
【図８４】プリンタコントローラ４３０３の内部レジスタに対して読み出しあるいは書き込みを行うタイミング図である。
【図８５】信号pscDmaPmStateの値及びクロックの状態と信号prcPmStateの値との関係を示す図である。
【図８６】プリンタコントローラ４３０３における、各ブロックを含むコア部分と外部バスやスキャナとの間で入出力される信号をまとめた図である。
【図８７】電力管理ユニット４０９のブロック図である。
【図８８】バスエージェントのブロック図である。
【図８９】スキャナコントローラからプリンタコントローラへと直接画像データを転送してコピーする画像のコピー方式で使用されるブロックを示す図である。
【図９０】スキャナコントローラからプリンタコントローラへと、ＦＩＦＯを介して画像データを転送してコピーする画像のコピー方式で使用されるブロックを示す図である。
【図９１】スキャナコントローラからプリンタコントローラへと、メモリを介して画像データを転送してコピーする画像のコピー方式で使用されるブロックを示す図である。
【図９２】ＧＢＩのブロック図である。
【図９３】ＦＩＦＯユニットのブロック図である。
【図９４】ＧＢｕｓコントローラのブロック図である。
【図９５】ＢＢｕｓコントローラのブロック図である。
【図９６】ＤＭＡコントローラのブロック図である。
【図９７】レジスタユニットのブロック図である。
【図９８】チェインテーブルの構成例を示す図である。
【図９９】ＧＢＩのコアインターフェースを示す図である。
【図１００】コピー方式を選択する手順のフローチャートである。
【図１０１】スキャナコントローラ４３０２内部のデータバスの切り換え回路を示す図である。
【図１０２】プリンタコントローラ４３０３内部のデータバスの切り換え回路を示す図である。
【図１０３】ＭＣバスよりメモリリード／ライト転送が要求された場合のキャッシュの動作の他の例を示すフローチャートである。
【図１０４】ＭＣバスよりメモリリード／ライト転送が要求された場合のキャッシュの動作の他の例を示すフローチャートである。
【図１０５】ＭＣバスよりメモリリード／ライト転送が要求された場合のキャッシュの動作の他の例を示すフローチャートである。
【図１０６】ＭＣバスよりメモリリード／ライト転送が要求された場合のキャッシュの動作の他の例を示すフローチャートである。
【図１０７】ＰＣＩのコンフィグレーションを判定する機構の一例を示す図である。
【符号の説明】
４０１  ＣＰＵ
４０２  バスブリッジ
４０３  メモリ
４０４  Ｇバス
４０５  Ｂバス
４０６  Ｇバスアービタ
４０７  Ｂバスアービタ
４３０１Ａ  Ｇバス／Ｂバスインターフェース（スキャナ）
４３０１Ｂ  Ｇバス／Ｂバスインターフェース（プリンタ）
４３０２  スキャナコントローラ
４３０３  プリンタコントローラ
【図１】
0003976927.tif 000015
【図２】
0003976927.tif 000016
【図３】
0003976927.tif 000017
【図４】
0003976927.tif 000018
【図５】
0003976927.tif 000019
【図６】
0003976927.tif 000020
【図７】
0003976927.tif 000021
【図８】
0003976927.tif 000022
【図９】
0003976927.tif 000023
【図１０】
0003976927.tif 000024
【図１１】
0003976927.tif 000025
【図１２】
0003976927.tif 000026
【図１３】
0003976927.tif 000027
【図１４】
0003976927.tif 000028
【図１５】
0003976927.tif 000029
【図１６】
0003976927.tif 000030
【図１７】
0003976927.tif 000031
【図１８】
0003976927.tif 000032
【図１９】
0003976927.tif 000033
【図２０】
0003976927.tif 000034
【図２１】
0003976927.tif 000035
【図２２】
0003976927.tif 000036
【図２３】
0003976927.tif 000037
【図２４】
0003976927.tif 000038
【図２５】
0003976927.tif 000039
【図２６】
0003976927.tif 000040
【図２７】
0003976927.tif 000041
【図２８】
0003976927.tif 000042
【図２９】
0003976927.tif 000043
【図３０】
0003976927.tif 000044
【図３１】
0003976927.tif 000045
【図３２】
0003976927.tif 000046
【図３３】
0003976927.tif 000047
【図３４】
0003976927.tif 000048
【図３５】
0003976927.tif 000049
【図３６】
0003976927.tif 000050
【図３７】
0003976927.tif 000051
【図３８】
0003976927.tif 000052
【図３９】
0003976927.tif 000053
【図４０】
0003976927.tif 000054
【図４１】
0003976927.tif 000055
【図４２】
0003976927.tif 000056
【図４３】
0003976927.tif 000057
【図４４】
0003976927.tif 000058
【図４５】
0003976927.tif 000059
【図４６】
0003976927.tif 000060
【図４７】
0003976927.tif 000061
【図４８】
0003976927.tif 000062
【図４９】
0003976927.tif 000063
【図５０】
0003976927.tif 000064
【図５１】
0003976927.tif 000065
【図５２】
0003976927.tif 000066
【図５３】
0003976927.tif 000067
【図５４】
0003976927.tif 000068
【図５５】
0003976927.tif 000069
【図５６】
0003976927.tif 000070
【図５７】
0003976927.tif 000071
【図５８】
0003976927.tif 000072
【図５９】
0003976927.tif 000073
【図６０】
0003976927.tif 000074
【図６１】
0003976927.tif 000075
【図６２】
0003976927.tif 000076
【図６３】
0003976927.tif 000077
【図６４】
0003976927.tif 000078
【図６５】
0003976927.tif 000079
【図６６】
0003976927.tif 000080
【図６７】
0003976927.tif 000081
【図６８】
0003976927.tif 000082
【図６９】
0003976927.tif 000083
【図７０】
0003976927.tif 000084
【図７１】
0003976927.tif 000085
【図７２】
0003976927.tif 000086
【図７３】
0003976927.tif 000087
【図７４】
0003976927.tif 000088
【図７５】
0003976927.tif 000089
【図７６】
0003976927.tif 000090
【図７７】
0003976927.tif 000091
【図７８】
0003976927.tif 000092
【図７９】
0003976927.tif 000093
【図８０】
0003976927.tif 000094
【図８１】
0003976927.tif 000095
【図８２】
0003976927.tif 000096
【図８３】
0003976927.tif 000097
【図８４】
0003976927.tif 000098
【図８５】
0003976927.tif 000099
【図８６】
0003976927.tif 000100
【図８７】
0003976927.tif 000101
【図８８】
0003976927.tif 000102
【図８９】
0003976927.tif 000103
【図９０】
0003976927.tif 000104
【図９１】
0003976927.tif 000105
【図９２】
0003976927.tif 000106
【図９３】
0003976927.tif 000107
【図９４】
0003976927.tif 000108
【図９５】
0003976927.tif 000109
【図９６】
0003976927.tif 000110
【図９７】
0003976927.tif 000111
【図９８】
0003976927.tif 000112
【図９９】
0003976927.tif 000113
【図１００】
0003976927.tif 000114
【図１０１】
0003976927.tif 000115
【図１０２】
0003976927.tif 000116
【図１０３】
0003976927.tif 000117
【図１０４】
0003976927.tif 000118
【図１０５】
0003976927.tif 000119
【図１０６】
0003976927.tif 000120
【図１０７】
0003976927.tif 000121