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