(57)【特許請求の範囲】
【請求項１】
外部デバイスに対してクロックを供給する供給手段と、
前記供給手段に対して前記クロックの供給を停止させる制御信号を送信する制御手段と、
前記外部デバイスが前記クロックと同期させて出力するデータを受信し、前記制御信号に応じて前記データの取り込みを停止する受信手段と、
前記受信手段の受信するデータの位相ズレを補正する第１遅延手段と
前記制御信号の周期単位のズレを補正する第２遅延手段と、
を有することを特徴とする情報処理装置。
【請求項２】
前記クロックを発振する発振手段を更に有し、
前記第１遅延手段は、前記受信手段の受信するデータを前記発振手段の発振するクロックの１サイクルより小さい量だけ遅延させて位相ズレを補正し、
前記第２遅延手段は、前記制御信号を前記発振手段の発振するクロックの１サイクルの整数倍だけ遅延させて前記受信手段に入力させることで、前記受信手段における周期単位のデータ取り込みタイミングのズレを補正することを有することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記受信手段に受信させるキャリブレーションパターンを送信するように前記外部デバイスに対して指示する指示手段と、
前記クロックをどのタイミングで停止させるかを示すゲーティング情報に基づいて前記供給手段による前記クロックの供給を停止させる第一クロック制御モードと、前記クロックの供給を停止させない第二クロック制御モードとを選択的に機能させる選択手段と
を有し、
前記選択手段は、前記キャリブレーションパターンの位相ズレを調節する場合に前記第二クロック制御モードを機能させ、前記キャリブレーションパターンのサイクル遅延を調節する場合に前記第一クロック制御モードを機能させることを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
受信するキャリブレーションパターンの期待値を保持する記憶手段と、
前記選択手段によって前記制御手段を機能させた状態で前記受信手段の受信したキャリブレーションパターンと前記記憶手段の保持する期待値とを比較して一致するかを判定するする判定手段と
を更に有することを特徴とする請求項３に記載の情報処理装置。
【請求項５】
前記判定手段は前記受信手段の受信したキャリブレーションパターンと前記期待値とが一致することを判定し、前記受信手段によるデータの取り込みタイミングの調整が完了したことを判断することを特徴する請求項４に記載の情報処理装置。
【請求項６】
前記キャリブレーションパターンは複数の値によって構成され、当該複数の値のうち連続する所定数の値の夫々が直前の値と異なっていることを特徴とする請求項３乃至５のいずれか１項に記載の情報処理装置。
【請求項７】
前記所定数は前記情報処理装置と前記外部デバイスとの間で発生し得る遅延量に対応するサイクル数以上であることを特徴とする請求項６に記載の情報処理装置。
【請求項８】
前記受信手段の受信したデータを保持し、自身がデータの保持をできない場合に通知する保持手段を更に有し、
前記選択手段は、前記キャリブレーションパターンに基づくデータの取り込みタイミングの調節が完了した場合に、前記保持手段からの通知を受けて前記供給手段による前記クロックの供給を停止させる第三クロック制御モードを機能させることを特徴とする請求項３乃至７のいずれか１項に記載の情報処理装置。
【請求項９】
前記保持手段はＦＩＦＯ構造であり、前記通知がＦＩＦＯの残量情報を示す信号に基づいていることを特徴とする請求項８に記載の情報処理装置。
【請求項１０】
前記外部デバイスとの通信の種別を判断する識別手段を更に有し、前記外部デバイスが所定の種別でないと判断できる場合に、前記選択手段は前記受信手段のデータ取り込みタイミングを調節する際に前記第三クロック制御モードを機能させることを特徴とする請求項８又は９に記載の情報処理装置。
【請求項１１】
前記第２遅延手段は入出力が直列に接続されている複数のフリップフロップを有し、前記制御信号を周期単位で遅延させる場合に前記複数のフリップフロップのうちの１つの出力を選択的に出力することを特徴とする請求項１乃至１０のいずれか１項に記載の情報処理装置。
【請求項１２】
前記ゲーティング情報は、周期的なタイミングで前記供給手段がクロックを停止することを示す情報を有することを特徴とする請求項３乃至１１のいずれか１項に記載の情報処理装置。
【請求項１３】
前記ゲーティング情報は、前記制御手段によって前記クロックの停止し始めるタイミング、前記クロックの停止を解除させるタイミング、クロックを停止させる周期の少なくとも何れか１つを示すことを特徴とする請求項３乃至１２のいずれか１項に記載の情報処理装置。
【請求項１４】
前記外部デバイスとの通信の種別を判断する識別手段を更に有し、前記外部デバイスが所定の種別であると判断できる場合に、前記選択手段は前記受信手段のデータ取り込みタイミングを調節する際に前記第一クロック制御モードを機能させることを特徴とする請求項３乃至１３のいずれか１項に記載の情報処理装置。
【請求項１５】
前記制御手段が、少なくとも前記受信手段の受信しているキャリブレーションパターンの値が変動するタイミングの１つで前記クロックを停止し始めることを特徴とする請求項１乃至１４のいずれか１項に記載の情報処理装置。
【請求項１６】
前記制御手段が、少なくとも前記受信手段の受信しているキャリブレーションパターンの値が変動するタイミングの１つで前記クロックの停止を解除することを特徴とする請求項請求項１乃至１５のいずれか１項に記載の情報処理装置。
【請求項１７】
外部デバイスに対してクロックを供給し、前記外部デバイスが当該クロックに同期させて出力するデータを受信する外部デバイスコントローラを有する情報処理装置であって、
前記外部デバイスコントローラの受信するデータの位相ズレを補正する第１遅延手段と
前記外部デバイスコントローラの前記データの取り込みを停止させる制御信号を補正する第２遅延手段と、
を有することを特徴とする情報処理装置。
【請求項１８】
外部デバイスに対してクロックを供給する供給工程と、
前記供給工程における前記クロックの供給を停止させる制御信号を送信する制御工程と、
前記外部デバイスが前記クロックと同期させて出力するデータを受信し、前記制御信号に応じて前記データの取り込みを停止する受信工程と、
前記受信工程で受信するデータの位相ズレを補正する第１遅延工程と
前記制御信号の周期単位のズレを補正する第２遅延工程と、
を有することを特徴とする情報処理方法。
【請求項１９】
外部デバイスに対してクロックを供給し、前記外部デバイスが当該クロックに同期させて出力するデータを受信する外部デバイスコントローラを有する情報処理装置における情報処理方法であって、
前記外部デバイスコントローラの受信するデータの位相ズレを調節する第１遅延工程と、
前記第１遅延工程の後に、前記外部デバイスコントローラの前記データの取り込みを停止させる制御のズレを調節する第２遅延工程と、
を有することを特徴とする情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、外部デバイスコントローラなどの情報処理装置が外部デバイスにクロックを供給し、外部デバイスがこのクロックに同期して出力する外部デバイスデータを取り込む情報処理装置又は情報処理方法に関する。
【背景技術】
【０００２】
特許文献１に開示されているように、外部デバイスコントローラを有する情報処理装置について、外部デバイスが情報処理装置に通信可能に接続されている場合に、情報処理装置の外部デバイスコントローラから外部デバイスへ動作クロックを供給する技術がある。ここでは、外部デバイスコントローラの供給したクロックに同期して外部デバイスがデータを出力するように設定しておき、外部デバイスコントローラが外部デバイスの出力したデータを取り込むように構成することが一般的である。【０００３】
この方法を用いると、外部デバイスコントローラは、外部デバイスへのクロックの供給を一時的に停止する（クロックゲーティングに相当する）ことで、外部デバイスから外部デバイスコントローラへのデータの供給を一時的に停止する事ができる。例えば、外部デバイスコントローラ内の受信バッファの許容容量までデータが蓄積された場合、外部デバイスコントローラはクロックの供給を停止し、データの供給を停止できるので、バッファの容量が小さくても好適にバッファのオーバーフローを抑制できる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開昭５９−１７３８３９
【発明の概要】
【発明が解決しようとする課題】
【０００５】
外部デバイスコントローラの外部デバイスから受信するデータが、外部デバイスコントローラの出力クロックに対して１サイクル以上遅延する場合、外部デバイスへのクロックを停止するための制御信号を外部デバイスコントローラ内で外部デバイスからのデータの受信を停止させる制御にそのまま用いているので、データの取りこぼしが発生してしまう。【０００６】
また、外部デバイスコントローラのデータの取り込み停止（又は停止解除）させるタイミングを調節しようとすると、調節する処理に要する時間が長くなる。
【課題を解決するための手段】
【０００７】
以上の課題を解決するために本発明に係る情報処理装置は、
外部デバイスに対してクロックを供給する供給手段と、
前記供給手段に対して前記クロックの供給を停止させる制御信号を送信する制御手段と、
前記外部デバイスが前記クロックと同期させて出力するデータを受信し、前記制御信号に応じて前記データの取り込みを停止する受信手段と、
前記受信手段の受信するデータの位相ズレを補正する第１遅延手段と
前記制御信号の周期単位のズレを補正する第２遅延手段と、
を有することを特徴とする。【０００８】
また、以上の課題を解決するために本発明に係る情報処理方法は、
外部デバイスに対してクロックを供給し、前記外部デバイスが当該クロックに同期させて出力するデータを受信する外部デバイスコントローラを有する情報処理装置における情報処理方法であって、
前記外部デバイスコントローラの受信するデータの位相ズレを調節する第１遅延工程と、
前記第１遅延工程の後に、前記外部デバイスコントローラの前記データの取り込みを停止させる制御のズレを調節する第２遅延工程と、
を有することを特徴とする。
【発明の効果】
【０００９】
本発明によれば、外部デバイスから情報処理装置の受信するデータが、情報処理装置のクロックに対して１サイクル以上遅延していても、情報処理装置側でのデータのとりこぼしを抑制する。【００１０】
また本発明によれば、外部デバイスコントローラのデータの取り込み停止（又は停止解除）させるタイミングを調節しようとする場合に、調節する処理に要する時間の増加を抑制する。
【図面の簡単な説明】
【００１１】
【図１】本発明の一実施例における外部デバイスコントローラの構成図である。
【図２】参考例のスキュー制御部の構成図とタイミングチャートを示す。
【図３】サイクル制御部の構成図とタイミングチャートである。
【図４】キャリブレーション処理のフローチャートと出力クロック制御部の構成図である。
【図５】キャリブレーションパターン受信中にゲーティングパターンに基づいて出力クロックをゲーティングしているタイミングチャートである。
【図６】サイクル指標と受信されるキャリブレーションパターンの相関を示すタイミングチャートである。
【図７】サイクル指標と受信されるキャリブレーションパターンの相関を示すタイミングチャートである。
【図８】ゲーティングサイクル数と受信されるキャリブレーションパターンの相関を示すタイミングチャートである。
【図９】ゲーティングサイクル数と受信されるキャリブレーションパターンの相関を示すタイミングチャートである。
【図１０】ゲーティングサイクル数と受信されるキャリブレーションパターンの相関を示すタイミングチャートである。
【図１１】ゲーティング間のサイクル数と受信されるキャリブレーションパターンの相関を示すタイミングチャートである。
【図１２】ゲーティング間のサイクル数と受信されるキャリブレーションパターンの相関を示すタイミングチャートである。
【図１３】ゲーティング間のサイクル数と受信されるキャリブレーションパターンの相関を示すタイミングチャートである。
【図１４】ゲーティング間のサイクル数と受信されるキャリブレーションパターンの相関を示すタイミングチャートである。
【図１５】ゲーティング開始位置・ゲーティング終了位置と受信されるキャリブレーションパターンの相関を示すタイミングチャートである。
【図１６】ゲーティング開始位置・ゲーティング終了位置と受信されるキャリブレーションパターンの相関を示すタイミングチャートである。
【図１７】ゲーティング開始位置・ゲーティング終了位置と受信されるキャリブレーションパターンの相関を示すタイミングチャートである。
【図１８】正しいサイクル設定を用いた場合の外部デバイスコントローラと外部デバイスの扱う信号のタイミングチャートである。
【図１９】外部デバイスコントローラを有するシステム構成の概略図である。
【図２０】実際に受信されるキャリブレーションパターンと実際のサイクル数との差の関係の例を示す。
【図２１】参考例の外部デバイスコントローラの構成とコマンドやデータのフォーマットを示すタイミングチャートを示す。
【図２２】参考例のキャリブレーション処理のフローチャートである。
【図２３】参考例のキャリブレーション処理のタイミングチャートである。
【図２４】参考例の外部デバイスコントローラが扱う信号のタイミングチャートである。
【発明を実施するための形態】
【００１２】
図面を参照して本発明の実施例を以下に説明する。まず、外部デバイスコントローラが外部デバイスから受信するデータについて、外部デバイスコントローラの出力クロックに対して１サイクル以上遅延する際の課題解決のための実施例を以下に説明する。
【００１３】
図１９は外部デバイス１０７と通信を行う情報処理装置とを備えたシステムのブロック図である。外部デバイス１０７と通信を行う機能を有するＬＳＩであるＡＳＩＣ１００は、ＣＰＵ１０１、ＤＲＡＭコントローラ１０４、ＤＭＡコントローラ１０２、外部デバイスコントローラ１０３とＣＬＯＣＫジェネレータ１０５を有する。（ＡＳＩＣはＡｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔの略称で、ＤＭＡはＤｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓの略称。）また、発振手段としてのＣＬＯＣＫジェネレータ１０５はＣＰＵ１０１、ＤＭＡコントローラ１０２、外部デバイスコントローラ１０３及びＤＲＡＭコントローラ１０４の用いるクロック（ｃｐｕ＿ｃｌｏｃｋ１１３、ｄｍａｃ＿ｃｌｏｃｋ１１４、ｈｏｓｔ＿ｃｌｏｃｋ１１５、ｄｒａｍ＿ｃｌｏｃｋ１１６）を生成して供給する。ＣＰＵ１０１はＣＰＵ  Ｉ／Ｆ１１０を介して、外部デバイスコントローラ１０３とＤＭＡコントローラ１０２とＤＲＡＭコントローラ１０４へレジスタアクセスを行う。ＤＭＡコントローラ１０２はＣＰＵ  Ｉ／Ｆ１１０を介して、ＤＲＡＭコントローラ１０４との間でデータ転送を行う。ＤＲＡＭコントローラ１０４はＤＲＡＭ  Ｉ／Ｆ１１７を介してＤＲＡＭ１０６との間でデータ転送を行う。外部デバイスコントローラ１０３はＤＭＡ  Ｉ／Ｆ１１１を介して、ＤＭＡコントローラ１０２との間でデータ転送を行う。また、外部デバイスコントローラ１０３は外部デバイスＩ／Ｆ１１２を介して、外部デバイス１０７との間でデータ転送を行う。
【００１４】
次に、外部デバイスコントローラについて説明する。図１は本発明に係る一実施例における外部デバイスコントローラ１０３の構成を示す。
【００１５】
外部デバイスコントローラ１０３はＣＬＯＣＫジェネレータ１０５からホストクロック１１５（図中、ｈｏｓｔ＿ｃｌｏｃｋ）を受け取る。ホストクロック１１５は外部デバイスコントローラ１０３内の各ブロックに接続されており、外部デバイスコントローラ１０３の各ブロックは、このホストクロック１１５に同期して動作する。
【００１６】
ＣＰＵ  Ｉ／Ｆ制御部２０１は、ＣＰＵ１０１からのカードへ送信するデータやコマンド、レジスタアクセスを受付ける一方で、ＣＰＵ１０１へカードから受信したコマンドやデータを送信する。ＤＭＡ  Ｉ／Ｆ制御部２０４は、外部デバイス１０７へ送信するデータをＤＭＡコントローラ１０２から受付け、一方で外部デバイス１０７から受信するデータをＤＭＡコントローラ１０２へ送信する。
【００１７】
外部デバイスコントローラ１０３は、送信コマンドパラレルシリアル変換部１２５、受信コマンドシリアルパラレル変換部１２６を介して外部デバイス１０７とコマンドをやりとりする。まず、ＣＰＵ  Ｉ／Ｆ制御部２０１はＣＰＵ  Ｉ／Ｆ１１０を介してＣＰＵ１０１から受け取ったパラレル形式の送信コマンド２２３（ｓ＿ｃｍｄ）を送信コマンドパラレルシリアル変換部１２５（以降、送信コマンドＰＳ変換部）に送信する。送信コマンドＰＳ変換部１２５は、受け取ったパラレル形式の送信コマンド２２３をシリアル形式の送信コマンド２２４（ｓ＿ｃｍｄ＿ｄａｔａ）に変換して、外部デバイス１０７に送信する。
【００１８】
外部デバイス１０７は受け取ったシリアル形式の送信コマンド２２４のデコードを行い、送信コマンドを検知する。さらに、外部デバイス１０７は送信コマンドの検知結果を示す検知情報をシリアル形式の受信コマンド２２６（ｒ＿ｃｍｄ＿ｄａｔａ）として、外部デバイスコントローラ１０３に送信する。
【００１９】
受信コマンドシリアルパラレル変換部１２６（以降、受信コマンドＳＰ変換部）は外部デバイス１０７の出力するシリアル形式の受信コマンド２２６を受信し、パラレル形式の受信コマンド２２５（ｒ＿ｃｍｄ＿ｒｅｇ）に変換してＣＰＵ  Ｉ／Ｆ制御部２０１、ＣＰＵ  Ｉ／Ｆ１１０を介してＣＰＵ１０１へ送信する。
【００２０】
また、外部デバイスコントローラ１０３は、送信バッファ２０７、送信データパラレルシリアル変換部２０８、スキュー制御部２１１、受信データシリアルパラレル変換部２１０、受信バッファ２０９を介して外部デバイス１０７とデータをやりとりする。また、出力クロック２４４をデアサート（ｄｅ−ａｓｓｅｒｔ）して外部デバイス１０７からのデータを停止させるために、出力クロック制御部２１３と出力クロックゲーティング部２１４を有している。さらに外部デバイスコントローラ１０３は有効なサイクル調整を行うために、ゲーティングモード設定レジスタ６０５とゲーティングパターン設定レジスタ６０６を有している。
【００２１】
また、外部デバイスコントローラ１０３はスキュー調整（補正）をするために、スキュー制御部２１１とスキュー設定レジスタ２１２とを有する。ここで、スキュー調整（補正）とは、受信データシリアルパラレル変換部２１０（以降、受信データＳＰ変換部）に入力されるデータ又は外部デバイスコントローラ１０３（スキュー制御部２１１）のデータ取り込みタイミング（ラッチタイミング）を（ホストクロック１１５に対して）１サイクル以内の遅延によって調整（補正）することを示す。
【００２２】
また、外部デバイスコントローラ１０３はサイクル調整（補正）をするために、サイクル設定レジスタ６０１、サイクル演算部６０２、サイクル制御部６０３および期待値設定レジスタ６０４を有する。ここで、サイクル調整（補正）とは、受信データＳＰ変換部２１０の制御信号である受信イネーブル信号２５０（ｒｃｖ＿ｅｎ）を（ホストクロック１１５に対して）サイクル単位で遅延させて受信データＳＰ変換部２１０のデータ取り込み停止タイミング、データ取り込み再開タイミングを調整（補正）することを示す。
【００２３】
スキュー設定レジスタ２１２はＣＰＵ  Ｉ／Ｆ制御部２０１からスキュー設定値２２７（ｓｋｅｗ＿ｒｅｇ）を受け取り保持する。スキュー制御部２１１は、スキュー設定レジスタ２１２からスキュー選択値２３８（ｓｋｅｗ＿ｓｅｌ）を受け取り、設定値に応じて外部デバイス１０７から受け取ったシリアル形式の受信データ２３６（ｄ２ｈ＿ｄａｔａ、以降、単に受信データ２３６と略する場合もある）を遅延させる。
【００２４】
サイクル設定レジスタ６０１はＣＰＵ  Ｉ／Ｆ制御部２０１からサイクル設定値２５６（ｃｙｃｌｅ＿ｒｅｇ）を受け取り保持する。期待値設定レジスタ６０４はＣＰＵ  Ｉ／Ｆ制御部２０１から期待値設定値２５３（ｅｘｐ＿ｒｅｇ）を受け取り保持する。期待値設定値２５３の例を図２０に示す。実際のサイクル数との差が０の場合に受信されるパターンは真値（外部デバイス１０７の出力したパターン）と一致するが、外部デバイスコントローラ１０３の受信するパターンはキャリブレーションを行った際のサイクル設定値と正しいサイクル設定値との差（後述するサイクル遅延量に相当する）に応じて変化する。サイクル演算部６０２はサイクル設定レジスタ６０１からサイクル設定値２５５（ｃｙｃｌｅ＿ｖａｌ）と、期待値設定レジスタ６０４から期待値２５４（ｅｘｐ＿ｐａｔｔｅｒｎ）を受け取り、望ましいサイクル設定値を演算する。具体的には、受信したキャリブレーションパターンと期待値とを比較して一致するかを判定する。一致した場合の期待値に対応したサイクル設定値と、正しいサイクル設定値の差を求める。その後、求めた差を、キャリブレーションを行った際のサイクル設定値に加算することで、正しいサイクル設定値を演算する。サイクル制御部６０３は、サイクル演算部６０２から正しいサイクル選択値２４９（ｃｙｃｌｅ＿ｓｅｌ）を受け取る。さらに、サイクル制御部６０３は出力クロック制御部２１３から出力クロックイネーブル信号２４３（クロック制御信号）を受け取る。
【００２５】
〔データ受信処理〕
次に、外部デバイスコントローラ１０３が外部デバイス１０７からデータ（外部デバイスデータ）を受信する処理について説明する。
【００２６】
外部デバイスコントローラ１０３はデータ受信を開始する際に、まず前述したコマンド送受信処理によって、外部デバイス１０７からのデータ受信を指示するコマンドを外部デバイスコントローラ１０３は外部デバイス１０７に送信する。さらに、外部デバイス１０７はこの送信コマンドに対する返答を受信コマンドとして外部デバイスコントローラ１０３に送信し、さらにデータを送信する。
【００２７】
データの受信は以下のように行う。まず、外部デバイス１０７から送信されたシリアル形式の受信データ２３６（ｄ２ｈ＿ｄａｔａ）をスキュー制御部２１１が受信する。
【００２８】
スキュー制御部２１１は、シリアル形式の受信データ２３６と、外部デバイスコントローラのクロック１１５（ｈｏｓｔ＿ｃｌｋ）との間のスキュー調整を行う（詳細は後述する）。スキュー調整後受信データ２３５は受信データＳＰ変換部２１０に入力される。
【００２９】
受信データＳＰ変換部２１０は、出力クロック制御部２１３の出力する出力クロックイネーブル信号２４３を、後述するサイクル制御部６０３によって遅延させた受信イネーブル信号２５０（詳細は後述する）を受け取り可能な構成になっている。そして、受信イネーブル信号２５０がアサート（ａｓｓｅｒｔ）されていれば、受信データＳＰ変換部２１０は入力されたスキュー調整後受信データ２３５を受信し、パラレル形式の受信データ２３４（ｒ＿ｄａｔａ＿ｂｕｆ）へ変換する。
【００３０】
受信データＳＰ変換部２１０は、不図示のＫ段のシフトレジスタ（直列入力並列出力型フリップフロップ）を有しておりシリアル形式で受信するデータをＫｂｉｔのパラレル形式のデータとして送出する構成になっている。従って、受信データＳＰ変換部２１０は受信イネーブル信号がアサートされ続けていれば、Ｋサイクルに１回パラレル形式のデータを送出する。ここで、受信データＳＰ変換部２１０が外部デバイス１０７からのデータ（外部デバイスデータ）を取り込むタイミングとは、（外部デバイス１０７側からみて）１段目（０ｂｉｔ）のフリップフロップのラッチタイミングに相当するといえる。
【００３１】
保持手段としての受信バッファ２０９は受信バッファフル信号２４１によって、自身が現在保持しているデータ以上のデータを保持できないことを通知可能に構成されている。そこで、受信イネーブル信号２５０がアサートされ且つ受信バッファ２０９の受信バッファフル信号２４１（ｒ＿ｂｕｆｆ＿ｆｕｌｌ）がデアサートされていれば、受信データＳＰ変換部２１０は受信バッファ２０９にパラレル形式の受信データ２３４を送信する。一方で、受信イネーブル信号２５０がアサートされていなければ、受信データＳＰ変換部２１０はスキュー調整後受信データ２３５の受信を停止する。
【００３２】
受信データＳＰ変換部２１０はデータの受信を開始すると、受信ステータス信号２３９（ｒｃｖ＿ｓｔａｔｕｓ）をアサートする。受信データＳＰ変換部２１０は最終データを外部デバイス１０７から受信するまで受信ステータス信号２３９をアサートし続け、スキュー調整後受信データ２３５のエンドビットを検出したらデアサートする。受信データＳＰ変換部２１０が受信バッファ２０９にパラレル形式の受信データ２３４を送信すると、受信バッファ２０９は受信バッファエンプティ−信号２３３（ｒ＿ｂｕｆｆ＿ｅｍｐ）をデアサートする。
【００３３】
受信バッファ２０９は受信データＳＰ変換部２１０からパラレル形式に変換された受信データ２３４（ｒ＿ｄａｔａ＿ｂｕｆｆ）を受信し保持する。ここで、受信バッファ２０９がフルになった場合、受信バッファ２０９は出力クロック制御部２１３及び受信データＳＰ変換部２１０へ受信バッファフル信号２４１をアサートする。一方で、受信バッファ２０９がエンプティ−になった場合には、受信バッファ２０９はＤＭＡ  Ｉ／Ｆ制御部２０４に受信バッファエンプティ−信号２３３をアサートする。
【００３４】
ＤＭＡ  Ｉ／Ｆ制御部２０４は受信バッファ２０９の受信バッファエンプティ−信号２３３のデアサートを受けて、受信バッファ２０９に外部デバイス１０７からの受信データが残っていることを検出する。そして、受信バッファ２０９が保持しているパラレル形式の受信データ２３２（ｒ＿ｄａｔａ＿ｄｍａ）を受信バッファ２０９から受信し、ＤＭＡ  Ｉ／Ｆ１１１へ送信する。ただし、受信バッファ２０９がエンプティ−になった場合には、データの受信を停止させる。データの受信を停止させないと、受信バッファ２０９のバッファアンダーランが発生することがある。従って、受信バッファ２０９の受信バッファエンプティ−信号２３３がアサートされている場合には、ＤＭＡ  Ｉ／Ｆ制御部２０４はパラレル形式の受信データ２３２の受信を停止し、ＤＭＡ  Ｉ／Ｆ１１１へのデータの鉦送信を停止する。
【００３５】
受信バッファ２０９の受信バッファエンプティ−信号２３３がデアサートされたら、ＤＭＡ  Ｉ／Ｆ制御部２０４はパラレル形式の受信データ２３２の受信を再開し、ＤＭＡ  Ｉ／Ｆ１１１への受信データの送信を再開する。
【００３６】
一方で、受信バッファ２０９がフルの状態で新たな受信バッファへの書込みが発生する場合には、受信バッファ２０９のバッファオーバーランが発生するので、データの受信を停止する。受信データＳＰ変換部２１０がデータ受信中であり、且つ、受信バッファ２０９がフルの場合に、出力クロック制御部２１３は出力クロックイネーブル信号２４３をデアサートする。
【００３７】
受信データＳＰ変換部２１０が、データ受信中であることは、受信ステータス信号２３９のアサートによって検出される。受信データＳＰ変換部２１０は最初の受信データを受信すると受信ステータス信号２３９をアサートし、最終データを受信するまでアサートし続け、最終データを受信するとデアサートする。そのため、受信データ待ちの状態（スタートビット検出待ちの状態）では、出力クロックイネーブル信号２４３はデアサートしない。
【００３８】
外部デバイス１０７は出力クロック２４４（ｄｅｖ＿ｃｌｋ）のデアサートを受けて、受信データ２３７（ｄ２ｈ＿ｄａｔａ’）の送信を停止する。データ受信は、受信バッファ２０９の受信バッファフル信号２４１（ｒ＿ｂｕｆｆ＿ｆｕｌｌ）がデアサートされるまで停止し続ける。受信バッファ２０９の受信バッファフル信号２４１（ｒ＿ｂｕｆｆ＿ｆｕｌｌ）がデアサートされると、受信データＳＰ変換部２１０はデータの受信を再開する。そして、出力クロックゲーティング部２１４は出力クロック２４４のゲーティングを解除し、外部デバイス１０７は受信データ２３７の送信を再開する。
【００３９】
〔スキュー補正構成〕
次に、スキュー補正をするための構成の詳細を説明する。
【００４０】
図２（ａ）はスキュー制御部２１１のブロック図である。スキュー制御部２１１はＣＬＯＣＫジェネレータ１０５（図１９）からホストクロック１１５（ｈｏｓｔ＿ｃｌｋ）を受け取る。ホストクロック１１５は入出力が直列に接続されているＮ１個の遅延素子２１６（第１遅延手段）によって遅延させられる。各遅延素子２１６の出力は遅延選択部２１７に入力され、スキュー選択値２３８（ｓｋｅｗ＿ｓｅｌ）の値に基づいて出力に用いる遅延素子２１６が選択される。
【００４１】
選択された遅延付きクロック信号２４６（ｃｌｋ＿ｗｉｔｈ＿ｓｋｅｗ）はフリップフロップ２１８へクロックとして入力される。一方、外部デバイスから送信されるシリアル形式の受信データ２３６（ｄ２ｈ＿ｄａｔａ）はフリップフロップ２１８が受信し、フリップフロップ２１８によって遅延付きクロック信号２４６（ｃｌｋ＿ｗｉｔｈ＿ｓｋｅｗ）に同期させられる。同期させたシリアル形式の受信データは、スキュー調整後のシリアル形式の受信データ２３５（ｄ２ｈ＿ｄａｔａ＿１ｄ、以降スキュー調整後受信データ２３５と称す）として、スキュー制御部２１１が受信データＳＰ変換部２１０に出力する。
【００４２】
なお、スキュー制御部２１１のＮ１個の遅延素子は、好ましくは（ホストクロック１１５の）１クロックをＮ１等分した遅延、もしくはそれより少し小さい遅延を生じさせる。
【００４３】
図２（ｂ）はスキュー設定値を０，１，２とした場合に、スキュー制御部２１１が扱う信号のタイミングチャートを示す。図２（ｂ）の各信号を図１および図２（ａ）の符号と対応させると、上から順にｈｏｓｔ＿ｃｌｋ１１５、ｄｈ２＿ｄａｔａ２３６、ｃｌｋ＿ｗｉｔｈ＿ｓｋｅｗ２４６（ｓｋｅｗ＿ｓｅｌ２３８＝０，１，２）、ｄ２ｈ＿ｄａｔａ＿１ｄ２３５（ｓｋｅｗ＿ｓｅｌ２３８＝０，１，２）となる。
【００４４】
図２（ｂ）のタイミングチャートでは、スキュー選択値２３８（ｓｋｅｗ＿ｓｅｌ）が０と１の時には、  ｃｌｋ＿ｗｉｔｈ＿ｓｋｅｗ２４６の立ち上がりでｄ２ｈ＿ｄａｔａ２３６が不定である。従って、フリップフロップ２１８に取り込まれるデータｄ２ｈ＿ｄａｔａ＿１ｄ２３５も不定になってしまい、データの取り込みが正常に出来てない。一方、スキュー選択値２３８が２の時には、ｃｌｋ＿ｗｉｔｈ＿ｓｋｅｗ２４６の立ち上がりでｄ２ｈ＿ｄａｔａ２３６が安定したデータを出力している為、フリップフロップ２１８に取り込まれるデータｄ２ｈ＿ｄａｔａ＿１ｄ２３５も正常である。スキュー選択値２３８の調整は、後述するキャリブレーションシーケンスによって行われる。
【００４５】
〔サイクル補正構成〕
次に、サイクル遅延を補正するための構成の詳細を説明する。
【００４６】
図３（ａ）はサイクル制御部６０３の概略構成を示す。サイクル制御部６０３は入出力が直列に接続されているＮ２個のフリップフロップ７０１（第２遅延手段）を有し、フリップフロップ７０１は出力クロックイネーブル信号２４３を夫々１クロックの遅延を生じさせる。サイクル制御部６０３は、入力された出力クロックイネーブル信号２４３をサイクル設定値２５６の示すサイクル数だけフリップフロップ７０１によって遅延させる。遅延させた出力クロックイネーブル信号２４３は、受信イネーブル信号２５０として、受信データＳＰ変換部２１０に入力されるようにしている。
【００４７】
図３（ｂ）はサイクル制御部６０３が扱う各種信号の波形を示す。図３（ｂ）の各信号を図１の符号と対応させて説明すると、上から順にｈｏｓｔ＿ｃｌｋ１１５、ｄｅｖ＿ｃｌｋ＿ｅｎ２４３、ｒｃｖ＿ｅｎ２５０となる。サイクル制御部６０３は、入力される出力クロックイネーブル信号２４３をサイクル選択値２４９（ｃｙｃｌｅ＿ｓｅｌ＝０，１，２，３）の値に応じて遅延させ、受信イネーブル信号２５０として出力する。サイクル選択値２４９の示す値を２とすると、サイクル制御部６０３はセレクタ７０２によって２つのフリップフロップ７０１を通過した出力を選択することで、出力クロックイネーブル信号２４３を２サイクル遅延させて、受信イネーブル信号２５０として出力する。図３の構成ではＮ２個のフリップフロップ７０１があるので、１サイクルの整数倍（最大でＮ２サイクル）だけ出力クロックイネーブル信号２４３を遅延させることができる。
【００４８】
本実施例で受信データＳＰ変換部２１０は、受信イネーブル信号２５０のデアサートによってデータ取り込み停止タイミングを判断し、受信イネーブル信号２５０を再びアサートした際にデータ取り込み再開タイミングを判断する。
【００４９】
ゲーティングモード設定レジスタ６０５はＣＰＵ  Ｉ／Ｆ制御部２０１から、ゲーティングモードレジスタ設定値（２４７  ｇａｔｅ＿ｒｅｇ）を受け取り、保持する。また、ゲーティングモード設定レジスタ６０５は、受け取ったゲーティングモードレジスタ設定値２４７をゲーティングモード設定値（２５１  ｇａｔｅ＿ｍｏｄｅ）として出力クロック制御部２１３に出力する。
【００５０】
ここで、本実施例の外部デバイスコントローラ１０３のゲーティングモードには、キャリブレーションモードと通常データ転送モードの二種類のモードがある。ゲーティングパターン設定レジスタ６０６はＣＰＵ  Ｉ／Ｆ制御部２０１からゲーティングパターンレジスタ設定値（２４８  ｐａｔｔｅｒｎ＿ｒｅｇ）を受け取り、保持する。また、受け取ったゲーティングパターンレジスタ設定値２４８をゲーティングパターン設定値（２５２  ｇａｔｅ＿ｐａｔｔｅｒｎ）として出力クロック制御部２１３に出力する。
【００５１】
ゲーティングパターンレジスタ設定値２４８は、クロックゲーティングパターンを生成するための情報（ゲーティング情報）であり、どのようにクロックゲーティングするかを示す。（詳細には図５に後述するＬ，Ｎ，Ｓ，Ｅを示す情報である。）
【００５２】
図４（ｂ）は本実施例で選択手段として機能する出力クロック制御部２１３の構成を示す。第一クロック制御部２２１（第一制御部）は、受信バッファフル信号２４１と受信ステータス信号２３９とを受信して、特許文献１や参考例（図２１参照）と同様のクロック制御を行う（第三クロック制御モード）。一方で、第二クロック制御部２２２（第二制御部）は、受信ステータス信号２３９とゲーティングパターン２５２に基づいて、後述するクロック制御を行う（第一クロック制御モード）。さらに、第三クロック制御部２２３（第三制御部）は外部デバイスコントローラのホストクロック１１５を停止させずにそのまま出力するように制御する出力クロックイネーブル信号２４３を生成するように制御する（第二クロック制御モード）。
【００５３】
まず、受信データＳＰ変換部２１０が受信データ２３６の何ビット目まで受信したか等の受信状態を示す情報を受信ステータス信号２３９に付加して出力クロック制御部２１３へ送信する。第二のクロック制御部２２２は受信ステータス信号２３９に付加されている受信情報に基づいて、受信データＳＰ変換部２１０が何ビット目まで受信したか判断する。そして、ゲーティングパターン２５２がゲーティングするように示す条件に当てはまっていなければ出力クロックイネーブル信号２４３を生成する。
【００５４】
クロック制御選択部２２０はセレクタであり、ゲーティングモード設定レジスタからのゲーティングモード２５１が示す設定値に応じて、第一のクロック制御部２２１、第二のクロック制御部２２２および第三のクロック制御部２２３から１つを選択的に機能させる。
【００５５】
〔コマンド・データフォーマット〕
ここで、外部デバイスコントローラ１０３と外部デバイス１０７との間でコマンドやデータの授受に用いる信号のフォーマットについて説明する。
【００５６】
外部デバイスコントローラ１０３と外部デバイス１０７は、図２１（ｂ）に示すフォーマットでシリアル形式のコマンド、又は、シリアル形式のデータを互いにやりとりする。なお、以下の説明ではパラレル形式のコマンド、パラレル形式のデータも同様のフォーマットであるとする。
【００５７】
まず、シリアル形式の送信コマンド２２４とシリアル形式の受信コマンド２２６の送受信時に扱う信号について、図２１（ｂ）に基づいて説明する。送信コマンド２２４は１ビットのスタートビットとＮビットの送信コマンドとＭビットのＣＲＣ（巡回冗長検査信号）と１ビットのエンドビットによって構成されている。送信コマンドＰＳ変換部１２５は、パラレル形式の送信コマンド２２３の受信を検知すると、まず、１ビットのスタートビットを送信する。続いて、Ｎビットのパラレル形式の送信コマンド２２３をシリアル形式の送信コマンド２２４に変換して送信する。送信コマンドＰＳ変換部１２５は、シリアル形式の送信コマンドの送信と共にＣＲＣの演算を行う。そして、シリアル形式の送信コマンド２２４を送信した後に、演算されたＭビットのＣＲＣを送信する。最後に１ビットのエンドビットの送信を行い、コマンド送信を完了する。
【００５８】
シリアル形式の受信コマンド２２６のフォーマットも図２１（ｂ）に示すとおりであるが、受信コマンドと送信コマンドとが一致する必要はないので、受信コマンドと送信コマンドとでコマンド長やＣＲＣの長さは異なっていても構わない。
【００５９】
受信コマンドＳＰ変換部１２６は１ビットのスタートビットを検出し、コマンドの受信を開始する。続いて、Ｎビットのシリアル形式の受信コマンドを受信し、パラレル形式の受信コマンドに変換する。受信コマンドＳＰ変換部１２６はシリアル形式の受信コマンドの受信と共にＣＲＣの演算を行う。そして、シリアル形式の受信コマンドを受信した後に、演算したＣＲＣと送付されるＭビットのＣＲＣとの比較（巡回冗長検査）を行い、ＣＲＣエラーを検出する。最後に、１ビットのエンドビットの受信を行い、コマンド受信を完了する。
【００６０】
送信データＰＳ変換部２０８は、送信バッファ２０７からパラレル形式の送信データ２３０（ｓ＿ｄａｔａ＿ｂｕｆ）を受け取ると、送信コマンドＰＳ変換部１２５と同様にパラレル形式の送信データをシリアル形式の送信データ２３１に変換して外部デバイス１０７へ送信する。ただし、送信データの長さやＣＲＣの長さは、送信コマンドと異なっていても構わない。
【００６１】
受信データのフォーマットは図２１（ｂ）に示すとおりである。ただし、受信データの長さやＣＲＣの長さは、送信コマンドと異なっていても構わない。
【００６２】
受信データＳＰ変換部２１０は、１ビットのスタートビットを検出するとデータの受信を開始する。そして、受信コマンドＳＰ変換部１２６と同様に処理してシリアル形式のスキュー調整後受信データ２３５をパラレル形式の受信データ２３４に変換し受信バッファ２０９へ送信する。送信データＰＳ変換部２０８と受信データＳＰ変換部２１０のＣＲＣの演算処理、比較処理は送信コマンドＰＳ変換部と受信コマンドＳＰ変換部の処理と同様であるので省略する。
【００６３】
〔キャリブレーション〕
次に、外部デバイスコントローラ１０３が正しくデータを取り込めるように、各種パラメータ（スキュー設定値、サイクル設定値）を調節するキャリブレーション処理について説明する。
【００６４】
まず、図２１に示す構成を有する参考例の外部デバイスコントローラ１０３におけるキャリブレーションフローを、図２２を用いて説明する。
【００６５】
まず、ステップＳ１０１で外部デバイスコントローラ１０３はＣＰＵ１０１からキャリブレーション開始を指示されると、外部デバイス１０７にキャリブレーションパターンを出力させるための送信コマンドを外部デバイス１０７に送信する。次に、外部デバイス１０７はキャリブレーション用の送信コマンドに対する受信コマンドを外部デバイスコントローラ１０３に送信する。さらに、外部デバイス１０７は予め決められたキャリブレーションパターンをシリアル形式の受信データ２３７の代わりに外部デバイスコントローラ１０３に送信する。外部デバイスコントローラ１０３は、前述したデータ受信フローに従って、キャリブレーションパターンの受信を行う。受信されたキャリブレーションパターンは、ＤＭＡコントローラ１０２、ＤＲＡＭコントローラ１０４を経由して、ＤＲＡＭ１０６に書き込まれる。
【００６６】
全てのキャリブレーションパターンがＤＲＡＭに１０６に書き込まれた後に、ＣＰＵ１０１はステップＳ１０２において、予め期待値としてＤＲＡＭ等に記憶しているキャリブレーションパターンと、実際に受信されたキャリブレーションパターンとを比較する。両者は一致しているとＣＰＵ１０１が判定した場合には、スキュー設定が正しいと考えられるために、キャリブレーションシーケンスを完了させる。一方、両者が一致しない場合には、スキュー設定が誤っていると考えられる。そこで、ＣＰＵ１０１はステップＳ１０３において、異なるスキュー設定値２２７を外部デバイスコントローラ１０３に設定し、再度キャリブレーションシーケンス（Ｓ１０１、Ｓ１０２）を行う。以上の処理をキャリブレーションが成功するまで繰り返し行う。
【００６７】
なおここでは、キャリブレーションパターンは外部デバイス１０７側に予め記憶されており、外部デバイス１０７はキャリブレ−ションを開始するコマンドを受信すると記憶しているキャリブレーションパターンを送信するものとする。
【００６８】
ここで、スキュー調整が完了した際にステップＳ１０１で扱う信号の波形について説明する。図２３は参考例における、受信データ２３６に１サイクル以上の遅延がある場合の、キャリブレーションシーケンス中の波形を示す。（ここで、受信データ２３６に１サイクル以上の遅延がある場合とは、外部デバイスコントローラ１０３と外部デバイス１０７との間で１／２サイクル以上の配線遅延が生じている場合に相当する。）図２３の各信号を図２１および図２の符号と対応させて説明すると、上から順にｄｅｖ＿ｃｌｋ２４４、ｄｅｖ＿ｃｌｋ＿ｅｎ２４３、ｄ２ｈ＿ｄａｔａ２３６、ｃｌｋ＿ｗｉｔｈ＿ｓｋｅｗ２４６、ｄ２ｈ＿ｄａｔａ＿１ｄ２３５、ｈｏｓｔ＿ｃｌｋ１１５、ｒ＿ｄａｔａ＿ｂｕｆｆ２３４、ｄｅｖ＿ｃｌｋ’２４５、ｄ２ｈ＿ｄａｔａ’２３７となる。なお、取り込みクロックと取り込んだデータのタイミングに差があるが、これは実際の回路でクロックのエッジを基準にして取り込む場合に、データがフリップフロップに取り込まれるまでの遅延を示しており、本発明の課題と直接関係が無い箇所で生ずる遅延であり、その遅延量も小さい。従って、受信データが１サイクル以上遅延する際に、この遅延は無視（除外）してもよい。また、図２３についてキャリブレーションの後半の波形は一部省略している。
【００６９】
図２３の例では、外部デバイス１０７に入力されるクロック２４５（ｄｅｖ＿ｃｌｋ’）が外部デバイスコントローラ１０３の出力する出力クロック２４４（ｄｅｖ＿ｃｌｋ）に対し１／２サイクルだけ遅延している。また、外部デバイスコントローラの受信する受信データ２３６（ｄ２ｈ＿ｄａｔａ）が、外部デバイスの送信する受信データ２３７（ｄ２ｈ＿ｄａｔａ’）に対して、１／２サイクルだけ遅延している。
【００７０】
これらの遅延は、外部デバイス１０７と外部デバイスコントローラ１０３間の基板上の往復遅延と外部デバイス１０７内での出力遅延や外部デバイスコントローラ１０３内の遅延などの影響によるものと考えられる。その結果、図２３の例では、外部デバイスコントローラ１０３の出力クロック２４４に対して、外部デバイス１０７が応答出力するデータを外部デバイスコントローラ１０３が取り込む受信データ２３６に１サイクルの遅延がついていることになる。
【００７１】
キャリブレーションパターンは通常、受信バッファ２０９のサイズよりも十分小さい。そのため、参考例における外部デバイスコントローラ１０３はキャリブレーション中に出力クロックが停止しない。（そもそも、キャリブレーションパターンが受信バッファ２０９のサイズよりも大きかったとしても、出力クロックが停止するかどうかは、ＤＭＡコントローラ１０２の転送レートなどに依存する。従って、キャリブレーション中に出力クロック２４４が停止する状況は発生し難い。）
【００７２】
図２３を参照すると、ｒ＿ｄａｔａ＿ｂｕｆｆ（０）２３４と入力されたシリアル形式の受信データｄ２ｈ＿ｄａｔａ２３６との内容が一致しているので、キャリブレーション処理は完了してしまう。しかし、図２４に示すように実際にデータを受信する際にはデータの取りこぼしなどが発生する。
【００７３】
図２４のタイミングチャートは、受信データ２３６に図２３と同様に１サイクルの遅延がある場合に、実際に外部デバイスコントローラ１０３が外部デバイス１０７からデータを受信している際の信号の波形を示している。各信号における図２１や図２との対応関係は図２３と同様なので説明を省略する。
【００７４】
図２４では、シリアル形式の受信データ２３６の“Ｄ０”を受信した時点で、受信バッファ２０９が受信バッファフル信号２４１（図２４では不図示）をアサートされる状況が発生している。そして、受信バッファフル信号２４１のアサートに伴って、出力クロック制御部２１３は出力クロックイネーブル信号２４３（ｄｅｖ＿ｃｌｋ＿ｅｎ）をデアサートする。出力クロックゲーティング部２１４は出力クロックイネーブル信号２４３のデアサートを受けて、出力クロック２４４をゲーティングする。出力クロックゲーティング部２１４によって出力クロック２４４をゲーティングしているにも係らず、外部デバイス１０７からシリアル形式の受信データ“Ｄ１”と“Ｄ２”が送信されてしまっている。
【００７５】
元々、受信バッファ２０９に入るデータ（受信バッファフル信号２４１を発行する時の基準となる）が外部デバイス１０７から外部デバイスコントローラ１０３に入る時点で１／２サイクル遅延している。そして、受信バッファフル信号２４１がアサートされた後に、出力クロック２４４がゲーティングされるまでの遅延に加えて、出力クロック２４４がゲーティングされたことを外部デバイス１０７が認識できるまでの１／２サイクルの遅延がある。結果的に、外部デバイスコントローラ１０３はデータ送信の停止を要求していることを外部デバイス１０７が認識するには、これらの遅延の総和だけ遅れるため、“Ｄ１”、“Ｄ２”が送信されてしまう。
【００７６】
受信データＳＰ変換部２１０は、出力クロックイネーブル信号２４３のデアサートを受けて、すぐにシリアル形式の受信データ２３６の受信を停止する。これによって、受信データＳＰ変換部２１０はシリアル形式の受信データ“Ｄ１”を受信できなくなってしまう。（図に示すように、受信データＳＰ変換部２１０が受信し、受信バッファ２０９に送信するパラレル形式の受信データ２３４には“Ｄ１”が含まれていない。）
【００７７】
また、受信バッファ２０９が受信バッファフル信号２４１をデアサートされてから、出力クロックイネーブル信号２４３がアサートされ、出力クロック２４４のゲーティングが解除される。出力クロック２４４は立ち下がりを基準にゲーティングしたので、解除されてから１／２経ってから立ち上がる。しかし、出力クロック２４４のゲーティングが解除されているにも係らず、外部デバイス１０７と外部デバイスコントローラ間の遅延によって外部デバイス１０７からシリアル形式の受信データ“Ｄ２”が送信され続けてしまう。
【００７８】
一方で、受信データＳＰ変換部２１０は、出力クロックイネーブル信号２４３のアサートを受けて、すぐにシリアル形式の受信データの受信を再開する。そのため、受信データＳＰ変換部２１０はシリアル形式の受信データ“Ｄ２”を２回受信してしまう。パラレル形式の受信データ２３４を見るとＤ２が２回受信されてしまっていることが分かる。
【００７９】
このように、外部デバイスコントローラ１０３と外部デバイス１０７との間で往復して１サイクル以上の遅延がある場合には、参考例の構成ではキャリブレーションが完了しても（図２３）、実際のデータ受信は失敗してしまうことがある（図２４）。
【００８０】
以上のことから、参考例の外部デバイスコントローラ１０３では、キャリブレーションシーケンスで受信データ２３６に発生する１サイクル以上の遅延の有無が検出できない場合があるということが分かる。
【００８１】
なお、図２４は説明の為に受信バッファフル信号２４１がアサートされてデアサートされるまでの期間が極端に短く受信バッファが極端に小さい前提になっているが、これは説明を簡単にするためである。
【００８２】
次に、本実施例のキャリブレーションフローを図４（ａ）を用いて説明する。本実施例のキャリブレーションフローでは、まず、第三クロック制御部２２３を機能させながらスキュー調整を行い、次に第二クロック制御部２２２を機能させながらサイクル調整を行う。なお、キャリブレーションパターンが、受信バッファのサイズよりも十分に小さく、キャリブレーションパターン受信中に必ずクロックゲーティングが発生しないことが分かっていれば、第三クロック制御手段の代わりに第一クロック制御手段を用いてもよい。
【００８３】
ここで、スキュー調整とは図２に示す構成によってホストクロック１１５と受信データ２３６の位相のズレ（位相ズレ）を修正するように調整するものである。一方で、サイクル調整とは図３に示す構成によってホストクロック１１５と受信データ２３６の周期単位のズレを修正するように調整するものである。以降の説明では周期ズレ（データ取り込みタイミングのズレやデータ取り込み再開タイミングのズレに相当する）を単に遅延サイクル数（サイクル遅延量）とする。
【００８４】
まず、スキュー調整フローについて説明する。ステップＳ１２０１において、ＣＰＵ１０１は外部デバイスコントローラ１０３に対して、クロックゲーティングモードを、クロックを停止させないキャリブレーションモード（第三クロック制御部を使うモード）に設定する。ＣＰＵ１０１は、ステップＳ１２０２において、外部デバイスコントローラ１０３に対し、キャリブレーションパターンの取得を指示する。外部デバイスコントローラ１０３による、キャリブレーションパターンの取得処理は、参考例と同様である。キャリブレーションパターンの取得が完了すると、ＣＰＵ１０１はステップＳ１２０３において、受信する予定のキャリブレーションパターンとしてＲＯＭやＲＡＭから読み出したものと、実際に受信したキャリブレーションパターンとの比較を行う。比較結果が一致している場合には、スキュー設定が正しいと考えられるために、スキュー調整フローを完了する。
【００８５】
一方、比較結果が一致しない場合には、スキュー設定が誤っていると考えられる。その場合、ＣＰＵ１０１はステップＳ１２０４においてスキュー設定レジスタ２１２の値を変更し、スキュー設定を変更してステップＳ１２０２へ遷移する。スキュー設定を変更し、ステップＳ１２０３でパターンが一致するまでステップＳ１２０２、Ｓ１２０３の処理を繰り返し行う。
【００８６】
続いて、サイクル調整フローについて説明する。ステップＳ１２０５において、ＣＰＵ１０１は外部デバイスコントローラ１０３のクロックゲーティングモードを、受信ステータス信号２３９の示す値とゲーティングパターン２５２とに基づいてクロックを停止させるキャリブレーションモード（第二クロック制御手段を機能させるモード）に設定する。さらに、ＣＰＵ１０１は外部デバイスコントローラ１０３に対して、ゲーティングパターンレジスタ設定値２４８を設定する。ＣＰＵ１０１は、ステップＳ１２０６において、外部デバイスコントローラ１０３に対し、キャリブレーションパターンの取得を指示する。外部デバイスコントローラ１０３による、キャリブレーションパターンの取得処理の概略は、参考例と同様である。
【００８７】
ただし、実施例１の出力クロック制御部２１３は、ゲーティングパターン２５２に応じて、出力クロックイネーブル信号２４３を発行する。そして、出力クロックゲーティング部２１４はキャリブレーションパターンの受信中に、出力クロックイネーブル信号２４３に応じて出力クロック２４４をゲーティングする。ステップＳ１２０６においてサイクル演算部６０２がキャリブレーションパターンの取得を完了するとステップＳ１２０７に遷移する。そして、サイクル演算部６０２はステップＳ１２０７において、受信する予定のキャリブレーションパターンとしてＣＰＵ１０１がＤＲＡＭ１０６などから読み出して期待値設定レジスタ６０４に格納させている期待値と、実際に受信したキャリブレーションパターンとの比較を行う。実際に受信するキャリブレーションパターンは、ゲーティングパターンやキャリブレーションパターン（期待値）、現在のサイクル設定値と実際の遅延サイクルとの差、によって異なる。（詳細については後述する。）
【００８８】
図２０に、キャリブレーションパターンとして“０１０１０１０１”を用いた一例を示す。詳細は後述するが、現在のサイクル設定値と実際の遅延サイクル数が合致している場合は、外部デバイスコントローラ１０３はキャリブレーションパターンを“０１０１０１０１”のように受信できる。しかし、現在のキャリブレーションパターンに対して、実際の遅延サイクル数が１サイクル多い場合にキャリブレーションパターンとして、“０１０１１１０１”のように受信する。その場合、サイクル演算部６０２が前述の処理によって受信したキャリブレーションパターンと、受信する予定のキャリブレーションパターン（期待値）とを比較して、遅延の有無を検出する。遅延がある場合には、受信されるパターン（図２０参照）に基づいて実際のサイクル数との差を検知する。サイクル演算部６０２（又はＣＰＵ１０１）はＳ１２０８において、検知された実際の遅延サイクルを、サイクル設定値として設定し、サイクル調整フローを完了する。なお、キャリブレーションシーケンスを終了した場合、出力クロック制御部２１３が第三クロック制御モードに切り替えてデータの送受信に備える。
【００８９】
上述したように、キャリブレーションパターンのサイズを受信バッファ２０９のサイズよりも小さくすると、キャリブレーションシーケンス中に受信バッファ２０９がフルになることはない。しかし、本実施例１の外部デバイスコントローラ１０３は受信バッファフル信号２４１のアサートによらず、出力クロック２４４をゲーティングパターンに基づいてゲーティングする。サイクル設定又はスキュー設定が誤っていれば、そのとおりに誤ったキャリブレーションパターンが（キャリブレーションが成功していないことがわかるように）取得される。図４（ａ）に示すフローを用いてキャリブレーションを完了した後、第一クロック制御部２２１を用いるモードに切り替えるため、ＣＰＵ１０１はゲーティングモード設定レジスタ６０５にクロック制御選択部へ“０”を格納させる設定をし、データの送受信に備える。
【００９０】
以上の処理によって、本実施例の外部デバイスコントローラ１０３は、受信データ２３６に１クロックサイクル以上の遅延が生じても、その遅延の有無を検出できるので、取りこぼしなくデータの送受信をするための各種パラメータ（スキュー設定、サイクル設定）を設定することができる。
【００９１】
また、図４（ａ）に示すように、クロックゲーティングを行わずにスキュー調整でサイクル内の遅延の調整を行った後に、ゲーティングパターンに基づいてクロックゲーティングを行いながらサイクル間の遅延の調整を行うことで効率的にキャリブレーションできる。このようにスキュー調整とサイクル調整を分離しないと、期待値と受信データ２３６が一致するまで総当りでキャリブレーションパターンの受信及び比較（最大でＮ１×Ｎ２回）を行わなければならず、キャリブレーション処理にかなりの時間を要する。
【００９２】
また、キャリブレーションパターンが受信バッファ２０９のサイズよりも十分に小さければ、図４（ａ）のステップＳ１２０１〜Ｓ１２０４で第三クロック制御部２２３を用いずに第一クロック制御部２２１によってスキュー調整をしてもよい。（キャリブレーションパターンの受信中に第一クロック制御部２２１を用いても必ずクロックゲーティングが発生しないためである。）この場合でも、ステップＳ１２０５〜Ｓ１２０８の処理によって、図２１（ａ）に示した参考例と比べるとキャリブレーションが成功し易くなる（回数を減らせる）。
【００９３】
〔キャリブレーションパターンとゲーティングパターンについて〕
ここで、キャリブレーションパターンとゲーティングパターンの相関について説明する。キャリブレーション処理が完了した際には、サイクル設定値２５６の示すサイクル数が、実際に遅延しているサイクル数と一致するものとする。図２４の例では、サイクル遅延が１サイクルである為に、設定すべき正しいサイクル設定値２５６の示す値は“１”となる。（図２４に示す波形は、サイクル設定値２５６がサイクル未調節の場合に相当する。）
【００９４】
出力クロック２４４のゲーティングパターンとキャリブレーションパターン設定を適切にするとそれだけキャリブレーション処理の精度が上がる。例えば、図２４の例では、受信データ“Ｄ１”を受信出来ず、その代わりに受信データ“Ｄ２”が２回受信されてしまっている。このようにデータの置き換えが発生してしまうため、好ましくないキャリブレーションパターン（後述の観点を考慮していないパターン）を用いて受信データ２３６との比較をすると、キャリブレーションパターンの受信及び比較を行う回数が増えたり処理の精度が低下したりする可能性が高くなる。例えば、スキュー調整とサイクル調整について、期待値と受信データ２３６が一致するまで総当りで比較（最大でＮ１＋Ｎ２回となる）を行う必要がある。
【００９５】
以下、４つの観点で、出力クロック２４４のゲーティングパターンとキャリブレーションパターンの相関について説明する。これらの観点を考慮しているキャリブレーションパターンを用いることでキャリブレーション処理の比較を短縮することができる（最大でＮ１＋１回となる）。
【００９６】
ゲーティングパターンは、キャリブレーションパターンと下記の４つの観点とに基づいて設定する。ゲーティングパターンをキャリブレーションに用いることで、受信データＳＰ変換部２１０のデータ取り込み制御を停止させる制御信号（出力クロックイネーブル信号２４３）がサイクル遅延量だけ遅延できていない場合に、実際に外部デバイスコントローラ１０３の受信するデータ（受信データ２３４）に重複や取りこぼしを発生させることができる。図２０は好ましいゲーティングパターン（例として“０１０１０１０１”）を設定した状況で、サイクル遅延量と受信データＳＰ変換部２１０が受信することになるパターン（受信データ２３４）との相関を示している。
【００９７】
（１）実際のディレイ量とサイクル設定値との差分（以降、ディレイ指標Ｍ）と受信されるキャリブレーションパターンとの相関
ディレイ指標Ｍ＝（実際のディレイ量）−（サイクル設定値）とし、ディレイ指標Ｍと受信されるキャリブレーションパターンとの相関について説明する。ここで、実際のディレイ量とは、サイクル設定値が“０”の場合（スキュー調節後でサイクル未調節に相当）に、受信データ２３６が出力クロック２４４に対して遅延しているサイクル数である。
【００９８】
図６、図７は、受信イネーブル信号２５０の変化タイミングを、ディレイがない時のタイミングに固定し、実際のディレイ量を変化させた場合のパラレル形式の受信データ２３４の波形を示す。図６、図７の信号を上から順に図１の符号と対応させると、ｄｅｖ＿ｃｌｋ２４４、ｄｅｖ＿ｃｌｋ＿ｅｎ２４３、ｄｈ２＿ｄａｔａ２３６、ｈｏｓｔ＿ｃｌｋ１１５、ｒｃｖ＿ｅｎ２５０、ｒ＿ｄａｔａ＿ｂｕｆｆ２３４である。また、図６、図７はディレイ指標Ｍが０，１，２，３となる場合の４セットを示している。
【００９９】
図６、図７では、Ｄ３を受信した時点で、出力クロックイネーブル信号２４３のゲーティングを行い、出力クロック２４４をデアサートにしている。図６、図７に示すように、受信するキャリブレーションパターン（ｄｈ２＿ｄａｔａ２３６に相当する）は、ディレイ指標Ｍによって異なる。ディレイ指標が、Ｍ＞１の場合には、ゲーティングを開始した時点で受信したデータ（図６、図７の例ではＤ３）を基準として、１サイクル後のデータからＭサイクル後のデータまでがＭ＋１サイクル後のデータに置き換わる。一方Ｍ＝０の時は、実際のディレイ量とサイクル設定値があっているため、正しいパターンが受信されている。
【０１００】
（２）ゲーティング量（Ｎ）と受信されるパターンとの相関
出力クロック２４４をゲーティングし続けるサイクル数をゲーティング量Ｎとして、（スキュー調節後でサイクル調節が誤っている場合に）Ｎと受信されるキャリブレーションパターンの相関について説明する（Ｎの定義は図５参照）。
【０１０１】
図８、図９、図１０はＮが夫々３，２，１である時の、キャリブレーション中の波形を示す。図８、図９、図１０のｒ＿ｄａｔａ＿ｂｕｆｆ２３４の夫々の波形を参照するとＮの値にかかわらず、Ｍサイクル分のデータが置き換わっていることが分かる。ただし、どのデータに置き換わるかはＮの値によって異なっている。例えば、Ｎ＝３の場合は、Ｄ１〜Ｄ３がＤ４に置き換わり、Ｎ＝２の場合はＤ１がＤ３に、Ｄ２とＤ３がＤ４に置き換わる。また、Ｎ＝１の場合は、Ｄ１がＤ２に、Ｄ２がＤ３に、Ｄ３がＤ４に夫々置き換わる。
【０１０２】
（３）ゲーティング間のサイクル（Ｌ）と受信されるパターンとの相関
ゲーティングを複数回行う場合、前のゲーティングタイミングから、次のゲーティングタイミングまでのサイクルをＬとし、（スキュー調節後でサイクル調節が誤っている場合に）Ｌと受信されるキャリブレーションパターンとの相関について説明する。（Ｌの定義は図５参照）。図１１、図１２、図１３、図１４にＬが１〜４の時の、キャリブレーション中の波形を示す。Ｌ＞＝Ｍならば、複数回のゲーティングは、独立したゲーティングとして扱える。すなわち、Ｍサイクル分のデータの置き換えが、ゲーティングの回数分だけ発生する。そうでない場合には、複数回のゲーティングは、互いに相関を持ち、Ｍ＊（ゲーティングの回数）−（Ｍ−Ｌ）個のデータが連続して置き換わる。
【０１０３】
（４）ゲーティング開始位置（Ｓ）及びゲーティング終了位置（Ｅ）と受信されるパターンとの相関
ゲーティング開始位置をＳ、ゲーティング終了位置をＥとし、（スキュー調節後でサイクル調節が誤っている場合に）Ｓ、Ｅと受信されるキャリブレーションパターンとの相関について説明する（Ｓ，Ｅの定義は図５参照）。
【０１０４】
図１５、図１６、図１７にＳとスタートビットの位置関係、及びＥとエンドビットの位置関係を変えた場合のキャリブレーション中の波形を示す。図１５は、ゲーティング開始位置Ｓがスタートビット検出後であり且つゲーティング終了位置Ｅがエンドビット検出前である場合の波形を示す。図１６は、ゲーティング開始位置Ｓがスタートビット検出前であり且つゲーティング終了位置Ｅがエンドビット検出後である場合の波形を示す。図１７はゲーティング開始位置Ｓがスタートビット検出後でありゲーティング終了位置Ｅがエンドビット検出後である場合の波形を示す。
【０１０５】
図１６のように、ホストクロック１１５の１サイクルと同期するように周期的にクロックゲーティングを行う場合は、Ｌ＞Ｍを満たさず、且つＳがスタートビットよりも前の位置で且つＥがエンドビットよりも後の位置であると、キャリブレーションに適さない。サイクル調整が誤っているにも関わらず正しくデータが受信できてしまうためである。
【０１０６】
一方、Ｓがスタートビット後、又は、Ｅがエンドビット後であれば、サイクル調整が誤っている状況で正しくデータが受信できていないので、このゲーティングパターンはキャリブレーションに適していることが分かる。従って、Ｓ又はＥのどちらか１つのだけをキャリブレーションパターン受信中に配置するか、ゲーティング間のサイクルＬを考慮する必要がある。
【０１０７】
また、図１５、図１６、図１７には直接示していないが、受信データＳＰ変換部２１０が受信するキャリブレーションパターンの値が変動するタイミング（後述する所定数の異なる値が入力されている間）で、ゲーティング開始位置Ｓもしくはゲーティング終了位置Ｅがくるようにゲーティングパターンを設定しなければならない。すなわち、キャリブレーションパターンの値が変動するタイミングの１つで出力クロック２４４を停止し始める又は停止を解除するようにゲーティングパターンを設定する。例えば、値が変動するタイミングとは“０１”（又は“１０”）の場合であって、ゲーティング開始位置Ｓは“０１”の“１”（又は“１０”の“０”）、ゲーティング終了位置Ｅは“０１”の“０”（又は“１０”の“１”）にくるようにゲーティングパターンを設定する。
【０１０８】
以上説明したように、キャリブレーションパターンとゲーティングパターンには（１）〜（４）に示す相関がある。図６、図７の例では、キャリブレーションパターンの“Ｄ３”を受信した次のサイクルでゲーティングを行っている。この例の場合では、サイクル設定値と実際のディレイとの関係から、“Ｄ４〜Ｄ６”が“Ｄ５〜Ｄ７”に置き換わる可能性がある。そのため、仮にキャリブレーションパターンの“Ｄ４〜Ｄ７”が全て同じ値であった場合、置き換わる前の値と置き換わる後の値が同じ値である為に、ディレイ（サイクル遅延）の検出には好ましくない。図６、図７の例では、（１）〜（４）の相関を考慮して、キャリブレーションパターンの“Ｄ４〜Ｄ７”を以下のパターンにすることが好ましい。
“Ｄ４〜Ｄ７＝０１０１”
これは、（１）〜（４）の相関に基づいて設定している、もちろん“１”と“０”は逆であっても、その場合に対応する期待値を設定しておけばよい。
【０１０９】
さらに、このキャリブレーションパターン（期待値）を用いた場合の、実際のサイクル数との差と受信されるパターン（受信データ２３６）との関係を図２０に示す。受信されるパターンと図２０に示す遅延量との関係を示す情報に基づいて実際のサイクル数との差が判定可能である。なお、Ｍに応じて１：１で異なるキャリブレーションパターンが受信されるようなパターンを設定する必要がある。従って、（１）〜（４）の相関に沿ったゲーティングパターンを用いる場合、キャリブレーションパターン中の連続する値（ビット、”１”や”０”など）について、先に外部デバイスコントローラ１０３へ入力される値と異なる値が所定数だけ連続する場合、所定数サイクルまでの遅延を検出できる。すなわち、検知され得る遅延サイクル数以上、直前に（受信データＳＰ変換部２１０へ）入力される値と異なる値が連続することが好ましい。上述の“Ｄ４〜Ｄ７＝０１０１”の場合“１０１”の部分で、直前に入力される値と異なる値が連続していることを保証できる。
【０１１０】
なお、この関係を示す遅延情報（図２０のようなルックアップテーブルや単なる数列など）は予め試験をしてＣＰＵ１０１が参照可能なＤＲＡＭ１０６やその他の記憶装置に記憶しておき、サイクル遅延量を判定する際にＣＰＵ１０１が参照すればよい。
【０１１１】
次に、図１の構成に正しいパラメータ（スキュー設定値、サイクル設定値）を用いて動作させた場合の、データ受信中に外部デバイスコントローラ１０３と外部デバイス１０７の扱う信号の様子を図１８に示す。図１８の例も図２４の例と同様に、サイクル遅延が１サイクルであるが、キャリブレーションを完了し、１サイクルに対応するサイクル選択値２４９（サイクル設定値２５６）が設定されている時の波形を示している。（なお、受信データ２３６に発生する遅延が１サイクルである場合の、正しいサイクル選択値２４９（サイクル設定値２５６）の示す設定は１になる。サイクル選択値２４９の示す設定が１である為、受信イネーブル信号２５０は、出力クロックイネーブル信号２４３に対して、サイクル制御部６０３によって１サイクル遅延する。）
【０１１２】
図１８の例では、シリアル形式の受信データ２３６について“Ｄ０”の受信を開始した時点で、出力クロックイネーブル信号２４３をデアサートして、出力クロック２４４をゲーティングしている。出力クロック２４４をゲーティングしているが、外部デバイス１０７からシリアル形式の受信データ２３７について“Ｄ１”と“Ｄ２”が送信される。出力クロックイネーブル信号２４３のデアサート開始から１サイクル後に、受信イネーブル信号２５０もデアサートされる。受信データＳＰ変換部２１０は、受信イネーブル信号２５０のデアサートを受けて、すぐにシリアル形式の受信データの受信を停止する。
【０１１３】
そのため、スキュー調整後受信データ２３５の“Ｄ１”を受信したまま、データの受信を停止する。パラレル形式の受信データ２３４の１ビット目データを見ると“Ｄ１”が受信できており、受信データＳＰ変換部２１０のデータ取り込み停止タイミングがサイクル遅延に対応するように調節できていることが分かる。
【０１１４】
また、出力クロックイネーブル信号２４３はデアサートされた１サイクル後に再びアサートされ、これを受けて出力クロック２４４のゲーティングが解除されている。ここで、出力クロック２４４のゲーティングが解除されていても、前述の受信データ２３６に１サイクル以上の遅延があるため、外部デバイス１０７からシリアル形式の受信データ２３６の“Ｄ２”が送信され続ける。
【０１１５】
サイクル設定値２５６の示す遅延量（１サイクル）によって、出力クロックイネーブル信号２４３のアサートの１サイクル後に、受信イネーブル信号２５０もアサートされる。受信データＳＰ変換部２１０は、受信イネーブル信号２５０のアサートを受けて、すぐにシリアル形式の受信データの受信を再開する。そのため、シリアル形式の受信データ２３６の“Ｄ２”を正しく受信できる。パラレル形式の受信データ２３４の１ビット目を見ると“Ｄ２”が正しく受信出来ており受信データＳＰ変換部２１０のデータ取り込み再開タイミングがサイクル遅延に対応するように調節できていることが分かる。
【０１１６】
以上、本実施例では、設定が正しくないままキャリブレーションが完了してしまうことを抑制できる。従って、受信データ２３６に１サイクル以上の遅延があっても正しく検出ができる。
【０１１７】
また、本実施例のサイクル制御部６０３によると、正しいサイクル設定値２５６が設定されていれば、外部デバイスコントローラ１０３と外部デバイス１０７との間で生ずるサイクル遅延の量に対応するように、受信データＳＰ変換部２１０のデータ取り込み停止タイミングとデータ取り込み再開タイミングとを遅延させられる。これにより、図２４に示したようなデータの取りこぼしが発生することを抑制する。
【０１１８】
また、上述の実施例ではスキュー制御部２１１とサイクル制御部６０３を別々に構成しているが、スキュー調整とサイクル調整を単一の構成として組み合わせてもよいし、受信データＳＰ変換部２１０に組み合わせてもよい。さらに、スキュー調整ではズレを補正したクロックを入力することで調整しているが、データを供給する系にスキュー調整やサイクル調整用の遅延構成（遅延素子、フリップフロップ）を直接配置し、セレクタ等で遅延量を選択してもよい。
【０１１９】
また、上述の実施例ではキャリブレーション処理を実行する機会については言及していないが、公知の外部デバイスコントローラと同様の機会でキャリブレーションをすれば本発明の効果は得られる。例えば、ＡＳＩＣ１００の起動時や、外部デバイスコントローラ１０３の初期化時、所定時間毎（例えば、２０８ＭＨｚ時に１０ｍｓｅｃ毎）もしくは所定サイクル数毎、また外部デバイス１０７との接続をＡＳＩＣ１００が検出した時に実施をすればよい。
【０１２０】
なお、前述の実施例において、サイクル演算部６０２、サイクル設定レジスタ６０１、期待値設定レジスタ６０４、はハードウェアとして説明しているが、ＣＰＵ１０１で代用してソフトウェアで実現してもよい。その場合、ＣＰＵ１０１がサイクル演算部６０２としての機能を実現するためのプログラムをＤＲＡＭ１０６等から読み出して実行し、各種レジスタに相当する記憶領域はＣＰＵ１０１のキャッシュ（もしくはＤＲＡＭ１０６）上に確保して、前述する各種レジスタの格納する値を記憶領域に記憶する。
【０１２１】
前述の外部デバイス１０７と外部デバイスコントローラ１０３間の配線遅延について、外部デバイス１０７が外部デバイスＩＦ１１２に着脱できる構成である場合に遅延量のバラツキが大きくなると考えられる。実際には配線の長さや材質、温度上昇以外にも、接触不良など種々の要因による遅延を含むことが考えられる。
【０１２２】
上述の実施例ではホストクロック１１５がどの程度の周波数であるかは例示していないが、動作周波数が高くなればなるほど、図２１（ａ）に示す構成で受信データ２３６に発生する１サイクル以上の遅延検出が困難になり、キャリブレーション不良も生じ易い。外部デバイスコントローラ１０３と外部デバイス１０７との間でより高速にデータをやりとりするにはホストクロック１１５の周波数を高めることが考えられるため、本発明は高速で信頼性の高いデータ通信の実現にも寄与するといえる。
【０１２３】
また、上述の実施例でサイクル演算部６０２がキャリブレーションパターン（受信データ２３４）と期待値とを比較してサイクル調整を行っているが、スキュー調整と同様にＣＰＵ１０１が期待値を読出し、比較処理をするようにしてもよい。
【０１２４】
また、上述の実施例では受信データ２３６のデータ部分（図２１ｂのＤ０、Ｄ１…）について比較しているが、算出手段としての受信データＳＰ変換部２１０の算出したＣＲＣ部分（図２１ｂのＣＲＣ０、ＣＲＣ１…）を比較に用いるようにしてもよい。その場合は、予め記憶しているキャリブレーションパターンについて、スキュー設定とサイクル設定が正常な場合に受け取るＣＲＣを予め演算して記憶しておく必要がある。
【０１２５】
なお、図１では外部デバイスコントローラ１０３と外部デバイス１０７の間では１ｂｉｔ幅のバスを用いて通信している様に説明しているが、４ｂｉｔ幅のバスや８ｂｉｔ幅のバス等でもよく、本発明はバス幅には限定されず適用できる。しかし、例えば４ｂｉｔ幅（８ｂｉｔ）のバスを用いる場合などは、スキュー制御部２１１にフリップフロップ２１８と遅延選択部２１７を４つ配置し１ｂｉｔ幅ずつスキュー調整をできるようにしておいてもよい。この場合、受信データＳＰ変換部２１０では４ｂｉｔを合流させればよく、受信データＳＰ変換部２１０もしくは受信バッファ２０９などに４ｂｉｔのデータの並び順を変えて、外部デバイス１０７が出力しようとしたデータと一致させる構成が必要になる。
【０１２６】
また、上述の実施例ではホストクロック１１５の動作周波数が単一の例しか説明していないが、外部デバイス１０７を識別して動作周波数を切り替えるようにしてもよい。例えば、ＣＬＯＣＫジェネレータ１０５から外部デバイスコントローラ１０３の間に、ホストクロックを分周させる分周回路や逓倍回路等を設けて外部デバイスコントローラ１０３に入力するホストクロックの周波数を替えてもよい。この場合ＣＬＯＣＫジェネレータ１０５に加えて分周回路や逓倍回路も発振手段の一部とする。
【０１２７】
この時、前述のキャリブレーションが不調な場合に外部デバイス１０７に入力されるホストクロック１１５をより低い周波数に減少させて外部デバイスとの通信を安定させるようにしてもよい。キャリブレーションが不調な場合とは、例えば前述のキャリブレーションが単位時間当たりに所定回数以上発生してしまう場合やキャリブレーションに要する時間が所定時間以上（例えば、総当りに要する回数以上になる場合）を要してしまう場合などが挙げられる。また、外部デバイスＩＦ１１２の物理的なコネクタ形状を規格に定められた特定種類の外部デバイス１０７と嵌合するように設計する場合、分周回路や逓倍回路で切り替える周波数として特定種の規格で定められている周波数を用いても良い。（例えば、２０８ＭＨｚで不調であれば、１００ＭＨｚに切り替える等）これにより、同系統の外部デバイスであってバージョンによって動作周波数が異なる場合において、外部デバイスコントローラ１０３の後方互換性を維持できる。
【０１３０】
また、上述の実施例における送信バッファ２０７や受信バッファ２０９はＦＩＦＯ構造にしてもよい。その場合、バッファフル信号やバッファエンプティー信号はＦＩＦＯの空き容量を示す情報（残量情報）に基づいて作成したり、残量情報をそのまま代用したりしてもよい。この場合、受信バッファ２０９のＦＩＦＯが格納できるデータのサイズがキャリブレーションパターンのデータのサイズ以上である場合は、キャリブレーションパターンを一旦ＦＩＦＯに書き込んだ後に、ＣＰＵ１０１が比較にそのまま用いるようにしてもよい。しかし、受信バッファのＦＩＦＯが格納できるデータサイズがキャリブレーションパターンより小さい場合は、キャリブレーションパターンのＦＩＦＯ容量以下のデータサイズずつ逐次的（所定サイクル毎）に比較することが好ましい。又は、キャリブレーション中に受信バッファ２０９のＦＩＦＯに取り込まずに逐次的に比較する構成に分岐させるようにしてもよい。（比較手段としてＣＰＵ１０１とは別構成を有し、期待値も同じデータサイズずつ読み出すレジスタと構成する、所定サイクル分のデータの比較器を構成すればよい。）そうしないと、スキュー調整で第三クロック制御手段２２３によりクロックを止めない様にしている場合に、受信バッファ２０９がオーバーフローしてしまう可能性があるためである。
【０１３１】
また、上述の実施例における出力クロックイネーブル信号２４３などの制御信号は、イネーブル信号をデアサートするタイミングにディスエーブル信号をアサートするように構成しても構わない。
【０１３２】
なお、上述の実施例では外部デバイスコントローラ１０３を有する情報処理装置として本発明を説明したが、上述の外部デバイス１０７の構成を情報処理装置内部として有する場合にも適用できるので、デバイスコントローラに適用できるともいえる。また、本発明を適用する情報処理装置としては、画像処理装置や計算処理装置など種々の装置が挙げられる。
【０１３３】
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施例の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【図１】
0005501378.tif 000002
【図２】
0005501378.tif 000003
【図３】
0005501378.tif 000004
【図４】
0005501378.tif 000005
【図５】
0005501378.tif 000006
【図６】
0005501378.tif 000007
【図７】
0005501378.tif 000008
【図８】
0005501378.tif 000009
【図９】
0005501378.tif 000010
【図１０】
0005501378.tif 000011
【図１１】
0005501378.tif 000012
【図１２】
0005501378.tif 000013
【図１３】
0005501378.tif 000014
【図１４】
0005501378.tif 000015
【図１５】
0005501378.tif 000016
【図１６】
0005501378.tif 000017
【図１７】
0005501378.tif 000018
【図１８】
0005501378.tif 000019
【図１９】
0005501378.tif 000020
【図２０】
0005501378.tif 000021
【図２１】
0005501378.tif 000022
【図２２】
0005501378.tif 000023
【図２３】
0005501378.tif 000024
【図２４】
0005501378.tif 000025