説明

データ受信装置、データ送信装置、制御方法

【課題】 データ受信装置がデータ送信装置から受信するデータと、データ受信装置がデータ送信装置へ出力するクロックとの間で1サイクル以上の遅延がある場合、データ受信装置がデータ送信装置から供給されるデータを取りこぼしてしまう可能性がある。
【解決手段】 データ送信装置へコマンドを送信する際に、コマンドの送信終了タイミングと、送信装置からの前記コマンドに対応するデータの受信開始タイミングとの間のサイクル数をカウントする。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データ受信装置とデータ送信装置との間のデータ転送のキャリブレーションに関する。
【背景技術】
【0002】
特許文献1に開示されているように、データを受信する装置(データ受信装置)からデータを供給する装置(データ送信装置)へ動作クロックを供給する技術がある。このような技術では、データ受信装置から供給されるクロックに同期してデータ送信装置がデータを出力するように設定しておき、データ受信装置がデータ送信装置の出力したデータを取り込むように構成することが一般的である。
【0003】
この方法を用いると、データ受信装置は、データ送信装置へのクロックの供給を一時的に停止する(クロックゲーティングに相当する)ことで、データ送信装置からデータ受信装置へのデータの供給を一時的に停止する事ができる。例えば、データ受信装置内の受信バッファの許容容量までデータが蓄積された場合、データ受信装置はクロックの供給を停止し、それに伴ってデータ送信装置によるデータの供給を停止できるので、バッファの容量が小さくても簡単な構成によってバッファのオーバーフローを抑制できる。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開昭59−173839
【発明の概要】
【発明が解決しようとする課題】
【0005】
データ受信装置からデータ送信装置へ動作クロックを供給する技術では、クロックの高周波数化に伴いデータ受信装置とデータ送信装置間の配線遅延などの影響が大きくなる。そして、データ受信装置がデータ送信装置から受信するデータと、データ受信装置がデータ送信装置へ出力するクロックとの間で1サイクル以上の遅延がある場合、データ受信装置がデータ送信装置から供給されるデータを取りこぼしてしまう可能性がある。これは、データ受信装置でデータ送信装置へのクロックを停止する制御系と、データ受信装置からデータ送信装置へクロックを供給しデータ送信装置がクロックに同期してデータを出力するデータ転送系との間でズレが生じているためである。
【課題を解決するための手段】
【0006】
上記課題を解決するために本発明に係るデータ受信装置は、データ送信装置と通信可能に接続されるデータ受信装置であって、前記データ送信装置にクロックを供給する供給手段と、前記データ送信装置が前記クロックと同期させて出力するデータを受信する受信手段と、前記データ送信装置にコマンドを送信する送信手段と、前記コマンドの送信終了タイミングと、前記送信装置からの前記コマンドに対応するデータの受信開始タイミングとの間のサイクル数をカウントする計数手段と、を有することを特徴とする。
【0007】
また、上記課題を解決するために本発明に係るデータ送信装置は、データ受信装置と通信可能に接続されるデータ送信装置であって、所定のデータを保持している記憶手段と、前記データ受信装置からデータ受信に関するキャリブレーションコマンドを受信した場合、前記所定のデータを前記データ受信装置から供給されるクロックに同期して所定のサイクル数で前記データ受信装置へ出力する出力手段とを有することを特徴とする。
【発明の効果】
【0008】
データ送信装置とデータ受信装置の間の配線遅延の影響が大きくなっても、データ受信装置側でのデータのとりこぼしを抑制できる。
【図面の簡単な説明】
【0009】
【図1】本発明の一実施形態におけるデータ受信装置の構成図である。
【図2】スキュー制御部の構成図とタイミングチャートである。
【図3】サイクル制御部の構成図とタイミングチャートである。
【図4】キャリブレーション処理のフローチャートと出力クロック制御部の構成図である。
【図5】遅延サイクル数を計測するタイミングチャートである。
【図6】遅延サイクル数計数回路の構成図である。
【図7】本発明の一実施形態におけるデータ送信装置の構成図である。
【図8】データ送信装置とデータ受信装置を有するシステム構成の概略図である。
【図9】コマンドやデータのフォーマットを示すタイミングチャートである。
【図10】正しいサイクル設定を用いた場合のタイミングチャートである。
【図11】異なったサイクル設定を用いた場合のタイミングチャートである。
【発明を実施するための形態】
【0010】
図面を参照して本発明の一実施形態を以下に説明する。
【0011】
図8はデータを供給する装置として機能するデータ送信装置107(以降、外部デバイス107と称す)と、データ送信装置107からデータを受信する装置として機能するデータ受信装置(以降、ASIC100と称す)とが接続されている状態を示すブロック図である。外部デバイス107と通信を行う機能を有するLSIであるASIC100は、CPU101、DRAMコントローラ104、DMAコントローラ102、外部デバイスコントローラ103(以降、デバイス制御部103と略す)とCLOCKジェネレータ105を有する。(ASICはApplication Specific Integrated Circuitの略称で、DMAはDirect Memory Accessの略称。)
【0012】
また、発振手段としてのCLOCKジェネレータ105はCPU101、DMAコントローラ102、デバイス制御部103及びDRAMコントローラ104の用いるクロック(cpu_clock113、dmac_clock114、host_clock115、dram_clock116)を生成して供給する。
【0013】
CPU101はCPU I/F110を介して、デバイス制御部103とDMAコントローラ102とDRAMコントローラ104へレジスタアクセスを行う。DMAコントローラ102はCPU I/F110を介して、DRAMコントローラ104との間でデータ転送を行う。DRAMコントローラ104はDRAM I/F117を介してDRAM106との間でデータ転送を行う。デバイス制御部103はDMA I/F111を介して、DMAコントローラ102との間でデータ転送を行う。また、デバイス制御部103は外部デバイスI/F112を介して、外部デバイス107との間でデータ転送を行う。
【0014】
図1は本発明に係る一実施形態のデバイス制御部103の構成を示す。なお、デバイス制御部103と通信可能に接続されている外部デバイス107についての詳細は後述するので、図1では略記している。デバイス制御部103はCLOCKジェネレータ105からホストクロック115(図中、host_clock)を受け取る。ホストクロック115はデバイス制御部103内の各構成に接続されており、デバイス制御部103の各構成は、このホストクロック115に同期して動作する。
【0015】
CPU I/F制御部201は、CPU101からのデータやコマンド、レジスタアクセスを受付ける一方で、CPU101へコマンドやデータを送信する。DMA I/F制御部111は、外部デバイス107へ送信するデータをDMAコントローラ102から受付け、一方で外部デバイス107から受信するデータをDMAコントローラ102へ送信する。
【0016】
デバイス制御部103は、コマンドパラレルシリアル変換部125、受信コマンドシリアルパラレル変換部126を介して外部デバイス107とコマンドをやりとりする。まず、CPU I/F制御部201はCPU I/F110を介してCPU101から受け取ったパラレル形式の送信コマンド223(s_cmd)を送信コマンドパラレルシリアル変換部125(以降、送信コマンドPS変換部)に送信する。送信コマンドPS変換部125は、受け取ったパラレル形式の送信コマンド223をシリアル形式の送信コマンド224(s_cmd_data)に変換して、外部デバイス107に送信する。
【0017】
外部デバイス107は受け取ったシリアル形式の送信コマンド224のデコードを行い、送信コマンドを検知する。さらに、外部デバイス107は送信コマンドの検知結果を示す検知情報をシリアル形式の受信コマンド226(r_cmd_data)として、デバイス制御部103に送信する。
【0018】
受信コマンドSP変換部126は外部デバイス107の出力するシリアル形式の受信コマンド226を受信し、パラレル形式の受信コマンド225(r_cmd)に変換してCPU I/F制御部201、CPU I/F110を介してCPU101へ送信する。
【0019】
また、デバイス制御部103は、送信バッファ207、送信データパラレルシリアル変換部208、スキュー制御部211、受信データシリアルパラレル変換部210、受信バッファ209を介して外部デバイス107とデータをやりとりする。また、出力クロック244をデアサートして外部デバイス107から供給されるデータを停止させるために、出力クロック制御部213と出力クロックゲーティング部214を有している。出力クロック制御部213はデバイス制御部103の送信バッファ207/受信バッファ209の状態やシリアル通信状態(rcv_status239、snd_status240)からクロックゲーティング信号を出力する。出力クロックゲーティング214は、このクロックゲーティング信号を受けて、ホストクロック115(host_clk)をゲーティングするための、クロックゲーティングセルが実装されている。
【0020】
また、デバイス制御部103はスキュー調整(補正)とサイクル調整(補正)から成るキャリブレーション(詳細は後述)工程のための回路を有している。デバイス制御部103はスキュー調整(補正)をするために、スキュー制御部211とスキュー設定レジスタ212とを有する。ここで、スキュー調整(補正)とは、受信データシリアルパラレル変換部210(以降、受信データSP変換部)のデータ取り込みタイミング(ラッチタイミング)を(ホストクロック115に対して)1サイクル以内の遅延によって調整(補正)することを示す。
【0021】
スキュー設定レジスタ212はCPU I/F制御部201からスキュー設定値227(skew_reg)を受け取り保持する。スキュー制御部211は、スキュー設定レジスタ212からスキュー選択値238(skew_sel)を受け取り、設定値に応じて外部デバイス107から受け取ったシリアル形式の受信データ236(d2h_data、以降、単に受信データ236と略する場合もある)を遅延させる。
【0022】
デバイス制御部103はサイクル調整(補正)をするために、遅延サイクル数計数回路610およびサイクル制御部603を有する。ここで、サイクル調整(補正)とは、受信データSP変換部210の制御信号である受信イネーブル信号250(rcv_en)を(ホストクロック115に対して)サイクル単位で遅延させて受信データSP変換部210のデータ取り込み停止タイミング、データ取り込み再開タイミングを調整(補正)することを示す。
【0023】
遅延サイクル数計数回路610はデバイス制御部103が外部デバイス107から受信する受信データ236がデバイス制御部103の出力する出力クロック244に対して何サイクル遅延しているかを計測する回路である。サイクル制御部603は遅延サイクル数計数回路610が計測したサイクル選択値249に対応するサイクル数だけ、出力クロックイネーブル信号243(dev_clk_en)を遅延させ、受信イネーブル信号250(rcv_en)を生成し、受信データSP変換部210へデータ取り込みタイミングを指示する。
【0024】
次に、図7に本実施形態の外部デバイス107の構成を示す。本実施形態では外部デバイス107としてFlashメモリデバイスを用いている。なお、デバイス制御部103については図1に示したとおりであり、その詳細な構成は省略している。なお、キャリブレーションパターン領域335はレジスタ等のIO領域を有し、固定サイクルでデータをデバイス制御部103にデータ出力可能である。例えば、データ受信装置とデータ送信装置間で配線遅延が生じない場合デバイス制御部103がコマンドを出力してからキャリブレーションパターン領域335からデータを受信するまでに固定サイクルのアクセスタイム(レイテンシ)を要する。Flashメモリ領域334は予め定められた期間内でデータ出力可能である。(予め定められた期間については、規格などで定められている期間である。例えば、min=2 cycle, max=1秒のように期間が定められた場合、デバイス制御部103はコマンドを出力してからこの期間にデータが来るものとして待ち受ける。)
【0025】
外部デバイス107はデバイス制御部103から出力されたクロック信号245(dev_clk’)を受け取る。クロック信号245は外部デバイス107内の各構成に接続されており、外部デバイス107の各構成はこのクロック信号245に同期して動作する。
【0026】
外部デバイス107はデバイス制御部103より受信したシリアル形式のコマンド324(s_cmd_data’)を受信コマンドシリアルパラレル変換部325(以下、単に受信コマンドSP変換部325と称す)でパラレル化し、コマンド制御部301に送る。コマンド制御部301でこのパラレル化されたコマンドをデコードし、そのデコード結果をシリアル形式のコマンド326(r_cmd_data’)として、送信コマンドパラレルシリアル変換部327(以降、送信コマンドPS変換部327と称す)でシリアル化しデバイス制御部103に送信する。
【0027】
コマンド制御部301はデバイス制御部103から送られたコマンドをデコードし解釈した命令がデータ転送命令を含む場合には、このデータ転送命令に基づいて送信データ制御部304もしくは受信データ制御部305にデータ転送を指示する。
【0028】
まず、コマンド制御部301が、デバイス制御部103から外部デバイス107へのデータ転送を示すコマンド(データライト)を受信した場合について説明する。デバイス制御部103からのシリアルデータ331(h2d_data’)は受信データシリアルパラレル変換部308(以降、受信データSP変換部308と称す)においてパラレル化される。そして、その後コマンド制御部301の指示に基づいて受信データ制御部305でパラレスデータに格納アドレス等の情報を付加した上でFlashメモリ領域334へ送る。
【0029】
次に、コマンド制御部301が、外部デバイス107からデバイス制御部103へのデータ転送(通常のFlashメモリリード)を要求するコマンド(データリード)を受信した場合について説明する。送信データ制御部304は不図示の経路でFlashメモリ領域334に対してアドレスを送り、データを取り出し送信データパラレスシリアル変換部310(以降、送信データPS変換部310と称す)でシリアル化した上で、受信データ237(d2h_data’)をデバイス制御部103へ転送する。この際に、送信データ選択部333はコマンド制御部301からの選択信号336(calib_sel)に基づいて、Flashメモリ領域334からのデータを送信データ制御部304に送るように動作する。
【0030】
次に、コマンド制御部301が、外部デバイス107からデバイス制御部103へのキャリブレーションに関するデータ転送を指示するコマンドを受信した場合について説明する。まず、コマンド制御部301が選択信号336によって、送信データ選択部333がキャリブレーションパターン領域335からのデータを送信データ制御部304に送るように動作するように制御する。そして、送信データ制御部304はキャリブレーションパターン領域335からキャリブレーションパターンを読み出し、通常のデータと同様に送信データPS変換部310によってシリアル化し、デバイス制御部103へ転送する。
【0031】
〔デバイス制御部103におけるキャリブレーション処理〕
デバイス制御部103から外部デバイス107へクロックを供給し、そのクロックに同期して外部デバイス107からデバイス制御部103へデータが転送されるパスは往復のパスとなる。
【0032】
そのため、クロック周波数が高くなると配線遅延などの影響が大きくなる。例えば、クロック1倍で配線遅延が1/2サイクル相当の遅延で無視できる程度だったとしても、クロックが2倍になれば配線遅延の実質的な時間は変わらないが、1サイクル相当の遅延が生じることになる。そして、外部デバイス107とデバイス制御部103との間を往復するパスにおいては時間制約がより厳しくなる。
このようにクロックの周波数が高くなった場合でも対応できる、デバイス制御部103によるキャリブレーションについて、図4のフローチャートを用いて説明する。
【0033】
図4のキャリブレーションフローは、1サイクル以内の遅延調整を意味するスキュー調整(補正)とサイクル単位の遅延調整を意味するサイクル調整(補正)から構成される。
【0034】
ここで、スキュー調整とはホストクロック115と受信データ236の位相のズレ(位相ズレ)を修正するように調整するものである。一方で、サイクル調整とはホストクロック115と受信データ236の周期単位のズレを修正するように調整するものである。以降の説明では周期ズレ(データ取り込みタイミングのズレやデータ取り込み再開タイミングのズレに相当する)を単に遅延サイクル数(又はサイクル遅延量)と呼称する。
【0035】
まず、図4のステップS1202でデバイス制御部103はCPU101からキャリブレーション開始を指示されると、キャリブレーションパターンを出力させるための送信コマンドを外部デバイス107に送信する。外部デバイス107はデバイス制御部103からのコマンドに応じてキャリブレーションパターン領域335に保持している予め決められたキャリブレーションパターンをデバイス制御部103へ出力する。デバイス制御部103はキャリブレーションパターンを受信し、受信したキャリブレーションパターンはDMAコントローラ102、DRAMコントローラ104を経由して、DRAM106に書き込まれる。
【0036】
一連のキャリブレーションパターンがDRAMに106に書き込まれた後に、CPU101はステップS1023において、予め期待値としてDRAM等に記憶しているキャリブレーションパターン(の一部)と、実際に受信されたキャリブレーションパターン(の一部)とを比較する(S1203)。両者が一致しているとCPU101が判定した場合には、スキュー設定が正しいと考えられるために、スキュー調整シーケンスを完了させる。一方、両者が一致しない場合には、スキュー設定が誤っていると考えられる。そこで、CPU101はステップS1204において、異なるスキュー設定値227をデバイス制御部103に設定し、再度スキュー調整シーケンス(S1202、S1203)を行う。以上の処理をキャリブレーションパターンが期待値と一致するまで繰り返す。
【0037】
スキュー調整シーケンスで正しいスキュー設定がなされ、キャリブレーションパターンが期待値と一致すると次はサイクル調整シーケンスに移る。ステップS1205で遅延サイクル数計数回路610から遅延サイクル情報249(cycle_sel)が出力される。(なお、サイクル制御部603では遅延サイクル情報249はそのままセレクタ702にサイクル選択値249として入力されるが同じ信号である。)
【0038】
この遅延サイクル情報249が実際にデバイス制御部103と外部デバイス107間に生じている遅延サイクル数を意味する。S1206でこの遅延サイクル情報249をもとに、出力クロック制御213において出力クロックイネーブル信号243に対して適切な遅延サイクルの設定を行ってキャリブレーションが終了する。
【0039】
〔外部デバイス107におけるキャリブレーション処理〕
外部デバイス107はデバイス制御部103からキャリブレーションを指示するコマンド(キャリブレーションパターンを転送するように指示する命令と同等)を受信すると、受信データ237としてデバイス制御部103へキャリブレーションパターンを送信する。
【0040】
通常、外部デバイス107がFlashメモリのような記憶媒体である場合、Flashメモリ領域334からの読み出しは固定サイクルではなくアクセスタイムは期間(最小許容時間又はサイクル〜最大許容時間又はサイクル)で規定されている。そして、外部デバイス107は規定された期間であれば任意のタイミングでスタートビット(およびエンドビット)付きのデータを出力できる。デバイス制御部103は規定された期間、スタートビットを待ち受けるように制御される。一方で、本実施形態のキャリブレーションパターン領域335は、外部デバイス107がキャリブレーションを指示するデバイス制御部103からのコマンドを受信してから予め決められた固定サイクルでキャリブレーションパターンを出力するようにする。
【0041】
そのため、仮にキャリブレーションコマンドを受けても外部デバイス107の状態により固定サイクルでキャリブレーションパターンを返答することができない場合のため、エラーレスポンスをコマンド326として返せるように構成しておくとよい。また、固定サイクルでキャリブレーションパターンを返答することができない場合は、キャリブレーションパターンを出力せずにエラー終了するようにしてもよい。
【0042】
また、デバイス制御部103で時間範囲に関する設定をレジスタ(不図示)などに保持してスタートビットを待ち受けてもよいし、外部デバイス107に時間範囲に関する設定を保持するレジスタを配置し、外部デバイス107からデバイス制御部103に通知してもよい。
【0043】
〔コマンド・データフォーマット〕
デバイス制御部103と外部デバイス107は、図9に示すフォーマットでシリアル形式のコマンド、又は、シリアル形式のデータを互いにやりとりする。なお、以下の説明ではデバイス制御部103内部又は外部デバイス107内部で用いられるパラレル形式のコマンド、パラレル形式のデータも同様のフォーマットであるとして説明する。
【0044】
まず、シリアル形式の送信コマンド224とシリアル形式の受信コマンド226の送受信時に扱う信号について、図9に基づいて説明する。送信コマンド224は1ビットのスタートビットとNビットの送信コマンドとMビットのCRC(巡回冗長検査信号)と1ビットのエンドビットを有している。なお、送信コマンド224と受信コマンド226とで、コマンド長やCRCの長さが異なっていてもよい。
【0045】
次に、デバイス制御部103および外部デバイス107において図9に示すフォーマットの信号を出力する構成で行う処理について説明する。
【0046】
送信コマンドPS変換部125、326は、パラレル形式の送信コマンドの受信を検知すると、まず、1ビットのスタートビットを出力し、続いてNビットのパラレル形式の送信コマンドをシリアル形式の送信コマンドに変換して出力する。送信コマンドPS変換部125、326は、シリアル形式の送信コマンドの送信と共にCRCの演算を行う。そして、シリアル形式の送信コマンドを出力した後に、演算により取得したMビットのCRCを出力し、最後に1ビットのエンドビットの送信を行い、コマンド送信を完了する。
【0047】
受信コマンドSP変換部126、325は1ビットのスタートビットを検出し、コマンドの受信を開始する。続いて、Nビットのシリアル形式の受信コマンドを受信し、パラレル形式の受信コマンドに変換する。受信コマンドSP変換部126、325はシリアル形式の受信コマンドの受信と共にCRCの演算を行う。そして、シリアル形式の受信コマンドを受信した後に、演算によりしたCRCと送付されたMビットのCRCとの比較(巡回冗長検査)を行い、CRCエラーを検出する。最後に、1ビットのエンドビットの受信を行い、コマンド受信を完了する。
【0048】
送信データPS変換部208、310は、パラレル形式の送信データを受け取ると、シリアル形式の送信データに変換して送信する。受信データのフォーマットは図9に示すとおりである。ただし、受信データの長さやCRCの長さは、送信コマンドと異なっていても構わない。
【0049】
受信データSP変換部210、308は、1ビットのスタートビットを検出するとデータの受信を開始する。処理そのものは受信コマンドSP変換部126、325と同様でありコマンドの代わりにデータを扱うだけなので詳細は省略する。
【0050】
〔デバイス制御部103におけるデータ受信処理〕
デバイス制御部103はデータ受信を開始する際に、まず前述したコマンド送受信処理によって、データの出力を指示する送信コマンドを外部デバイス107に送信する。これにより外部デバイス107からデータが送られる。
【0051】
デバイス制御部103による外部デバイス107からのデータの受信は以下のように行う。まず、外部デバイス107から送信されたシリアル形式の受信データ236(d2h_data)をスキュー制御部211が受信する。
【0052】
スキュー制御部211は、シリアル形式の受信データ236と、デバイス制御部103のクロック115(host_clk)との間のスキュー調整を行う。スキュー調整後の受信データ235は受信データSP変換部210に入力される。
【0053】
受信データSP変換部210は、出力クロック制御部213の出力する出力クロックイネーブル信号243を、後述するサイクル制御部603によって遅延させた受信イネーブル信号250を受け取り可能な構成になっている。そして、受信イネーブル信号250がアサートされていれば、受信データSP変換部210は入力されたスキュー調整後の受信データ235を受信し、パラレル形式の受信データ234(r_data_buf)へ変換する。
【0054】
受信データSP変換部210は、不図示のK段(Kは2のk乗とする)のシフトレジスタ(直列入力並列出力型フリップフロップ)を有しておりシリアル形式で受信するデータをkbitのパラレル形式のデータとして送出する構成になっている。従って、受信データSP変換部210は受信イネーブル信号がアサートされ続けていれば、Kサイクルに1回、パラレル形式のデータを送出する。
【0055】
保持手段としての受信バッファ209は受信バッファフル信号241によって、自身が現在保持しているデータ以上のデータの保持を許容できないことを通知可能に構成されている。そこで、受信イネーブル信号250がアサートされ且つ受信バッファ209の受信バッファフル信号241(r_buff_full)がデアサートされていれば、受信データSP変換部210は受信バッファ209にパラレル形式の受信データ234を送信する。一方で、受信イネーブル信号250がアサートされていなければ、受信データSP変換部210はスキュー調整後の受信データ235の受信を停止する。
【0056】
受信データSP変換部210は外部デバイス107データの受信を開始すると、受信ステータス信号239(rcv_status)をアサートする。受信データSP変換部210は最終データを外部デバイス107から受信するまで受信ステータス信号239をアサートし続け、スキュー調整後の受信データ235のエンドビットを検出したらデアサートする。受信データSP変換部210が受信バッファ209にパラレル形式の受信データ234を送信すると、受信バッファ209は受信バッファエンプティ−信号233(r_buff_emp)をデアサートする。
【0057】
受信バッファ209は受信データSP変換部210からパラレル形式に変換された受信データ234(r_data_buff)を受信し保持する。ここで、受信バッファ209がフルになった場合、受信バッファ209は出力クロック制御部213及び受信データSP変換部210へ受信バッファフル信号241をアサートする。一方で、受信バッファ209がエンプティ−になった場合には、受信バッファ209はDMA I/F制御部206に受信バッファエンプティ−信号233をアサートする。
【0058】
DMA I/F制御部206は受信バッファ209の受信バッファエンプティ−信号233のデアサートを受けて、受信バッファ209に外部デバイス107からの受信データが残っていることを検出する。そして、受信バッファ209が保持しているパラレル形式の受信データ232(r_data_dma)を受信バッファ209から受信し、DMA I/F111へ送信する。ただし、受信バッファ209がエンプティ−になった場合には、データの受信を停止させる。データの受信を停止させないと、受信バッファ209のバッファアンダーランが発生することがある。従って、受信バッファ209の受信バッファエンプティ−信号233がアサートされている場合には、DMA I/F制御部206はパラレル形式の受信データ232の受信を停止し、DMA I/F111へのデータの送信を停止する。
【0059】
受信バッファ209の受信バッファエンプティ−信号233がデアサートされたら、DMA I/F制御部206はパラレル形式の受信データ232の受信を再開し、DMA I/F111への受信データの送信を再開する。
【0060】
一方で、受信バッファ209がフルになる場合には、受信バッファ209のバッファオーバーランが発生するので、データの受信を中断する。受信データSP変換部210がデータ受信中であり、且つ、受信バッファ209がフルの場合、受信データSP変換部210によるデータの受信を中断させるために、出力クロック制御部213は出力クロックイネーブル信号243をデアサート(中断処理)する。
【0061】
受信データSP変換部210が、データ受信中であることは、受信ステータス信号239のアサートによって検出される。受信データSP変換部210は最初の受信データを受信すると受信ステータス信号239をアサートし、最終データを受信するまでアサートし続け、最終データを受信するとデアサートする。そのため、受信データ待ちの状態(スタートビット検出待ちの状態)では、出力クロックイネーブル信号243はデアサートしない。
【0062】
データ受信の中断中に受信バッファ209がフルでなくなった場合、受信データSP変換部210によるデータの受信を再開させるために、出力クロック制御部213は出力クロックイネーブル信号243をアサート(復帰処理)する。なお、サイクル制御部603は、受信データSP変換部210によるデータ受信の中断および復帰をサイクル単位で遅延させる動作を行っている。
【0063】
〔外部デバイス107におけるデータ送信処理〕
外部デバイス107は出力クロック245(dev_clk’)の供給が止められると再開されるまで、受信データ237(d2h_data’)の送信を一時的に停止する。詳細には、送信の停止中は送信データPS変換部310とスキュー制御部211との間の信号線は停止開始時点の信号レベルを維持されたままになる。
【0064】
〔スキュー補正に関する構成〕
次に、スキュー補正をするためのデバイス制御部103の構成の詳細を説明する。
【0065】
図2(a)はスキュー制御部211のブロック図である。スキュー制御部211にはCLOCKジェネレータ105(図8)からホストクロック115を受け取る。ホストクロック115は入出力が直列に接続されているN1個の遅延素子216(第1遅延手段)によって遅延させられる。各遅延素子216の出力は遅延選択部217に入力され、スキュー選択値238(skew_sel)の値に基づいて出力に用いる遅延素子216が選択される。
【0066】
選択された遅延付きクロック信号246(clk_with_skew)はフリップフロップ218へクロックとして入力される。一方、外部デバイス107から送信されるシリアル形式の受信データ236(d2h_data)はフリップフロップ218が受信し、フリップフロップ218によって遅延付きクロック信号246(clk_with_skew)に同期させられる。同期させたシリアル形式の受信データは、スキュー調整後のシリアル形式の受信データ235(d2h_data_1d)として、スキュー制御部211が受信データSP変換部210に出力する。
【0067】
なお、スキュー制御部211のN1個の遅延素子は、好ましくは(ホストクロック115の)1クロックをN1等分した遅延、もしくはそれより少し小さい遅延を生じさせる。
【0068】
図2(b)はスキュー設定値を0,1,2とした場合に、スキュー制御部211が扱う信号のタイミングチャートを示す。図2(b)の各信号を図1および図2(a)の符号と対応させると、上から順にhost_clk115、dh2_data236、clk_with_skew246(skew_sel238=0,1,2)、d2h_data_1d235(skew_sel238=0,1,2)となる。
【0069】
図2(b)のタイミングチャートでは、スキュー選択値238(skew_sel)が0と1の時には、 clk_with_skew246の立ち上がりでd2h_data236が不定である。従って、フリップフロップ218に取り込まれるデータd2h_data_1d235も不定になってしまい、正しいデータの受信が出来てない。一方、スキュー選択値238が2の時には、clk_with_skew246の立ち上がりでd2h_data236が正しいデータを出力している為、フリップフロップ218に取り込まれるデータd2h_data_1d235も正しいデータが取り込まれる。スキュー選択値238の調整は、上述したキャリブレーションのスキュー調整シーケンスによって行われる。
【0070】
〔遅延サイクル数計測に関する構成〕
次に、上述したサイクル遅延数を計測するデバイス制御部103の構成について説明する。
【0071】
図6は遅延サイクル数計数回路610の概略構成を示す。図6に示すように遅延サイクル数計数回路610はカウンタ制御部613とカウンタ614と減算器615とを有する。入力される情報としてシリアル形式の送信コマンド224の送信終了タイミングを示す情報(エンドビット検出信号、s_cmd_ebit611)とシリアル形式の受信データ235の受信開始タイミングを示す情報(スタートビット検出信号、r_data_sbit612)がある。
【0072】
エンドビット検出信号611は送信コマンドPS変換部125が送信コマンド223のエンドビットを検出した際にアサートする信号である。スタートビット検出信号612は受信データSP変換部210が受信データ235のスタートビットを検出した際にアサートする信号である。
【0073】
これらからカウンタ制御613はカウンタ614に対してカウントアップ信号617(count_up)を出力する。具体的には、カウンタ制御部613は、エンドビット検出信号611がアサートされてからスタートビット検出信号612がアサートされるまで、カウンタ614にカウントアップをさせるように制御する。
【0074】
つまり、カウンタ614はキャリブレーションを指示するコマンド送信コマンドPS変換部125を通過した時点を起点として、デバイス制御部103から外部デバイス107に伝達され、外部デバイス107が応答してキャリブレーションパターンを返したデータをデバイス制御部103が取り込むまでの計測サイクル数616(acc_count)をカウントする。計測サイクル数616は減算器615で、予め決められたキャリブレーションパターンの受信アクセスサイクル数(図5に示す例では受信アクセスサイクル数は9とする)で減算することによって遅延サイクル数を計算する。
【0075】
詳細には、計測サイクル数616が9であれば9−9でサイクル遅延が発生しておらず、計測サイクル数616が10であれば10−9で1サイクルのサイクル遅延が発生していることを意味する。
【0076】
図5では3つの遅延サイクル数が異なる3つのケースについて、遅延サイクル数計測に関する信号(受信データ235、計測サイクル数616、カウントアップ信号617、サイクル選択値249)のタイミングチャートを示している。なお、出力クロック244と送信コマンド224は遅延サイクル数が異なっていても変わらないので其々1つだけ示している。
【0077】
図5の”delay case 1”では、スキュー調整後の受信データ235と受信データSP変換部210の動作クロック(図1には明確に図示していないがホストクロック115に相当する)との間の遅延がホストクロック115の1サイクル以内で遅延が収まっている(つまり遅延サイクル数が0)。同様に、”delay case 2”は遅延サイクルが1サイクルの場合であり、”delay case 3”は遅延サイクルが2サイクルの場合である。
【0078】
計測サイクル数616は、キャリブレーションを指示する送信コマンド224のエンドビットを起点として外部デバイス107からのキャリブレーションパターンである受信データ235のスタートビットを受信するまで、カウントアップしている。従って、キャリブレーションパターンのスタートビットを受信した後に、減算器615が出力するサイクル選択値249はサイクル遅延に対応する値となる。なお、このサイクル選択値249はスキュー調整シーケンスを終えた場合にのみ有効な情報として使用される。
【0079】
〔サイクル補正に関する構成〕
次に、上述の構成によって決定されたサイクル選択値249に基づいてサイクル遅延を補正するためのデバイス制御部103の構成の詳細を説明する。
【0080】
図3(a)はサイクル制御部603の概略構成を示す。サイクル制御部603は入出力が直列に接続されているN2個のフリップフロップ701(第2遅延手段)を有し、フリップフロップ701は出力クロックイネーブル信号243に1クロックの遅延を生じさせるように配置されている。サイクル制御部603のセレクタ702は、入力された出力クロックイネーブル信号243をサイクル選択値249の示すサイクル数だけフリップフロップ701によって遅延させるように構成されている。また、サイクル制御部603により遅延させた出力クロックイネーブル信号243は、受信イネーブル信号250として、受信データSP変換部210に入力される。
【0081】
図3(b)はサイクル制御部603が扱う各種信号の波形を示す。図3(b)の各信号を図1の符号と対応させて説明すると、上から順にhost_clk115、dev_clk_en243、rce_en250となる。サイクル制御部603は、入力される出力クロックイネーブル信号243をサイクル選択値249(cycle_sel=0,1,2,3)の値に応じて遅延させ、受信イネーブル信号250として出力する。サイクル選択値249の示す値を2とすると、サイクル制御部603はセレクタ702によって2つのフリップフロップ701を通過した出力を選択することで、出力クロックイネーブル信号243を2サイクル遅延させて、受信イネーブル信号250として出力する。図3の構成ではN2個のフリップフロップ701があるので、1サイクルの整数倍(最大でN2サイクル)だけ出力クロックイネーブル信号243を遅延させることができる。
【0082】
受信データSP変換部210は、受信イネーブル信号250がデアサートされたらデータ取り込みを停止し、受信イネーブル信号250が再びアサートされたらデータ取り込みを再開する。
【0083】
出力クロック制御部213では、受信バッファフル信号241と受信ステータス信号239からクロック制御をおこなう。具体的にはデータを受信している最中にバッファフル信号241がアサートされると出力クロック244を止めるために出力クロックイネーブル信号243を制御する。
【0084】
〔サイクル調整処理〕
図10は、図1の構成で正しいサイクル設定を用いて動作させた場合のデータ受信中にデバイス制御部103と外部デバイス107の扱う信号のタイミングチャートを示す。この図に示す例では遅延サイクルが1サイクルで、正しいサイクル選択値249が設定されている時の波形を示している。なお本実施形態では、受信データ236に発生する遅延が1サイクルである場合、キャリブレーションシーケンスが正常に終了した場合のサイクル選択値249の示す設定は1になる。サイクル選択値249の示す設定が1である為、受信イネーブル信号250は、出力クロックイネーブル信号243に対して、サイクル制御部603によって1サイクルだけ遅延させられる。
【0085】
図10の例では、シリアル形式の受信データ236について“D0”の受信を開始した時点で、出力クロックイネーブル信号243をデアサートして、出力クロック244をゲーティングしている。出力クロック244をゲーティングしているが、外部デバイス107からシリアル形式の受信データ237について“D1”と“D2”が送信される。出力クロックイネーブル信号243のデアサート開始から1サイクル後に、受信イネーブル信号250もデアサートされる。受信データSP変換部210は、受信イネーブル信号250のデアサートを受けて、すぐにシリアル形式の受信データの受信を停止する。
【0086】
そのため、スキュー調整後の受信データ235の“D1”を受信したまま、データの受信を停止する。パラレル形式の受信データ234の1ビット目データを見ると“D1”が受信できており、受信データSP変換部210のデータ取り込み停止タイミングを調節できていることが分かる。
【0087】
また、出力クロックイネーブル信号243はデアサートされた1サイクル後に再びアサートされ、これを受けて出力クロック244のゲーティングが解除されている。ここで、出力クロック244のゲーティングが解除されていても、前述の受信データ236に1サイクル以上の遅延があるため、外部デバイス107からシリアル形式の受信データ236の“D2”が送信され続ける。
【0088】
サイクル選択値249の示す遅延量(1サイクル)によって、出力クロックイネーブル信号243のアサートの1サイクル後に、受信イネーブル信号250もアサートされる。受信データSP変換部210は、受信イネーブル信号250のアサートを受けて、すぐにシリアル形式の受信データの受信を再開する。そのため、シリアル形式の受信データ236の“D2”を正しく受信できる。パラレル形式の受信データ234の1ビット目を見ると“D2”が正しく受信出来ており受信データSP変換部210のデータ取り込み再開タイミングを調節できていることが分かる。
【0089】
〔サイクル調整をしていない状態で生じるデータの取りこぼしについて〕
サイクル遅延が生じている場合に、サイクル調整をせずデータが取りこぼされてしまっている状態のタイミングチャートを図11に示す。図11のタイミングチャートは、受信データ236が出力クロック244に対して1サイクル遅延している場合に、サイクル調整をせずにデバイス制御部103が外部デバイス107からデータを受信させた状態の各種信号の波形を示している。各信号は図10と同様であるためその説明を省略する。図10と比較すると図11ではrcv_en250を図示していないが、サイクル調整を行わない状態では、rcv_en250はdev_clk_en243とほぼ同一である。
【0090】
遅延されていないdev_clk_enをrcv_en250として使用することで、受信データSP変換部210はシリアル形式の受信データ“D2”を2回受信してしまう。さらに、パラレル形式の受信データ234を見るとD2を2回受信してしまう。
【0091】
以上、本実施形態では、データ受信装置とデータ送信装置との間に1サイクル以上の遅延が生じても遅延サイクル数を簡易な構成で取得できる。従って、受信データ236に1サイクル以上の遅延があっても正しく検出又は補正ができる。
【0092】
また、本実施形態によると、デバイス制御部103と外部デバイス107との間で生ずる遅延の量だけ、受信データSP変換部210のデータ取り込み停止タイミング、データ取り込み再開タイミングを遅延できる。これにより、データの取りこぼしが発生することを抑制する。
【0093】
また、上述の実施形態ではスキュー制御部211とサイクル制御部603を別々に構成しているが、スキュー調整とサイクル調整を単一の構成として組み合わせてもよいし、受信データSP変換部210に組み合わせてもよい。さらに、スキュー調整とサイクル調整では実際にはズレを補正したクロックを入力することで調整しているが、データを供給する系にスキュー調整やサイクル調整用の遅延構成(遅延素子、フリップフロップ)を直接配置し、セレクタ等で遅延量を選択してもよい。
【0094】
上述の実施形態では詳細は述べていないが、前述の外部デバイス107とデバイス制御部103間の配線遅延について、外部デバイス107が外部デバイス107IF112に着脱できる構成である場合に遅延量のバラツキが大きくなると考えられる。実際には配線の長さや材質、温度上昇以外にも、接触不良など種々の要因による遅延を含むことが考えられる。
【0095】
また、上述の実施形態では受信データ236のデータ部分(図9のD0、D1…)について比較しているが、算出手段としての受信データSP変換部210の算出したCRC部分(図9のCRC0、CRC1…)を比較に用いるようにしてもよい。その場合は、予め記憶しているキャリブレーションパターンについて、スキュー設定とサイクル設定が正常な場合に受け取るCRCを予め演算して記憶しておく必要がある。
【0096】
なお、図1ではデバイス制御部103と外部デバイス107の間では1bit幅のバスを用いて通信している様に説明しているが、4bit幅のバスや8bit幅のバス等でもよく、本発明はバス幅には限定されず適用できる。しかし、例えば4bit幅(8bit)のバスを用いる場合などは、スキュー制御部211にフリップフロップ218と遅延選択部217を4つ配置し1bit幅ずつスキュー調整をできるようにしておいてもよい。この場合、受信データSP変換部210では4bitを合流させればよく、受信データSP変換部210もしくは受信バッファ209などに4bitのデータの並び順を変えて、外部デバイス107が出力しようとした外部デバイス107データと一致させる構成を設ければよい。
【0097】
また、上述の実施形態ではホストクロック115の動作周波数が単一の例しか説明していないが、外部デバイス107を識別して動作周波数を切り替えるようにしてもよい。例えば、CLOCKジェネレータ105からデバイス制御部103の間に、ホストクロックを分周させる分周回路や逓倍回路等を設けてデバイス制御部103に入力するホストクロックの周波数を替えてもよい。この場合CLOCKジェネレータ105に加えて分周回路や逓倍回路も発振手段の一部とする。
【0098】
この時、前述のキャリブレーションが不調な場合に外部デバイス107に入力されるホストクロック115をより低い周波数に減少させて外部デバイス107との通信を安定させればよい。キャリブレーションが不調な場合とは、例えば前述のキャリブレーションが単位時間辺りに所定回数以上発生してしまう場合やキャリブレーションに要する時間が所定時間以上(例えば、総当りに要する回数以上になる場合)を要してしまう場合などが挙げられる。また、外部デバイス107IF112の物理的なコネクタ形状を規格に定められた特定種類の外部デバイス107と嵌合するように設計する場合、分周回路や逓倍回路で切り替える周波数として特定種の規格で定められている周波数を用いても良い。これにより、同系統の外部デバイス107であってバージョンによって動作周波数が異なる場合において、デバイス制御部103の後方互換性を維持できる。
【0099】
一方で、通信速度に重点を置く場合は、キャリブレーションが好調であれば逓倍回路によってホストクロックを増幅させるようにしてもよい。キャリブレーションが好調な場合とは、単位時間辺りに発生するキャリブレーションが所定回数を下回る場合や、キャリブレーションに要する時間が所定回数を下回る場合などである。こうすることで、同系統の外部デバイス107であってバージョンによって動作周波数が異なる場合であっても、デバイス制御部103の前方互換性を維持できる。
【0100】
また、上述の実施形態における送信バッファ207や受信バッファ209はFIFO構造にしてもよい。その場合、バッファフル信号やバッファエンプティ信号はFIFOの空き容量を示す情報(残量情報)に基づいて作成したり、残量情報をそのまま代用したりしてもよい。この場合、受信バッファ209のFIFOが格納できるデータのサイズがキャリブレーションパターンのデータのサイズ以上である場合は、キャリブレーションパターンを一旦FIFOに書き込んだ後に、CPU101が比較にそのまま用いるようにしてもよい。しかし、受信バッファのFIFOが格納できるデータサイズがキャリブレーションパターンより小さい場合は、キャリブレーションパターンのFIFO容量以下のデータサイズずつ逐次的(所定サイクル毎)に比較することが好ましい。又は、キャリブレーション中に受信バッファ209のFIFOに取り込まずに逐次的に比較する構成に分岐させるようにしてもよい。(比較手段としてCPU101とは別構成を有し、期待値も同じデータサイズずつ読み出すレジスタと構成する、所定サイクル分のデータの比較器を構成すればよい。)また、上述の実施形態ではデバイス制御部103と外部デバイス107間の通信に1bitバスを用いている構成を用いて説明したが、4bitバスや8biバスなどの複数bitバスであっても本発明は適用できる。
【0101】
また、上述の実施形態における出力クロックイネーブル信号243などの制御信号は、イネーブル信号をデアサートするタイミングにディスエーブル信号をアサートするように構成しても構わない。
【0102】
上述の実施形態では外部デバイスがフラッシュメモリを例として挙げているが、フラッシュメモリ以外の記憶装置であっても本発明を適用することができる。また、外部デバイス107が記憶装置以外に無線LAN機能やブルートゥース機能を内蔵するような外部デバイスでも本発明を適用することができる。ASIC100がプリンタやデジタルカメラ等の情報処理装置に設けられた場合、外部デバイス107はプリンタやデジタルカメラ等に設けられたスロットに接続して用いられる。この時、スロットに挿して情報処理装置のIO機能を拡張させるような外部デバイス107に対しても本発明を適用することができる。より一般的には、外部デバイスにクロックを供給しクロックに同期してデータを出力させるデバイスに適用することができる。

【特許請求の範囲】
【請求項1】
データ送信装置と通信可能に接続されるデータ受信装置であって、
前記データ送信装置にクロックを供給する供給手段と、
前記データ送信装置が前記クロックと同期させて出力するデータを受信する受信手段と、
前記データ送信装置にコマンドを送信する送信手段と、
前記コマンドの送信終了タイミングと、前記送信装置からの前記コマンドに対応するデータの受信開始タイミングとの間のサイクル数をカウントする計数手段と、
を有することを特徴とするデータ受信装置。
【請求項2】
前記供給手段による前記クロックの供給の停止に応じて前記受信手段によるデータの受信を中断させる制御手段を更に有することを特徴とする請求項1に記載のデータ受信装置。
【請求項3】
前記制御手段は前記供給手段による前記クロックの供給の再開に応じて前記受信手段によるデータの受信を再開させることを特徴とする請求項2に記載のデータ受信装置。
【請求項4】
前記計数手段により計数されたサイクル数に基づいて、前記制御手段による前記受信手段の制御のタイミングを遅延させる遅延手段を更に有することを特徴とする請求項2又は3に記載のデータ受信装置。
【請求項5】
前記計数手段により計数されたサイクルずれ量を計算する計算手段を更に有し、
前記遅延手段は計算手段で計算されたサイクルずれ量に基づいて前記制御手段による前記受信手段の制御を遅延させることを特徴とする請求項4に記載のデータ受信装置。
【請求項6】
前記受信手段の受信するデータの位相ズレを補正するスキュー調整手段を更に有することを特徴とする請求項5に記載のデータ受信装置。
【請求項7】
前記クロックを供給する供給手段を有し、
前記スキュー調整手段は、前記受信手段の受信するデータを前記供給手段から出力されるクロックの1サイクルより小さい量だけ遅延させて位相ズレを補正し、前記遅延手段は、前記制御手段による前記受信手段の制御を前記供給手段から出力されるクロックの1サイクルの整数倍だけ遅延させることで、前記受信手段における周期単位のデータ取り込みタイミングのズレを補正することを有することを特徴とする請求項6に記載のデータ受信装置。
【請求項8】
データ受信装置と通信可能に接続されるデータ送信装置であって、
所定のデータを保持している記憶手段と、
前記データ受信装置からデータ受信に関するキャリブレーションコマンドを受信した場合、前記記憶手段の保持している所定のデータを、前記データ受信装置から供給されるクロックに同期して所定のサイクル数で前記データ受信装置へ出力する出力手段とを有することを特徴とするデータ送信装置。
【請求項9】
前記出力手段によるデータ出力が前記所定のサイクル数でできない場合、前記データ受信装置にエラーを返す通知手段を更に有することを特徴とする請求項8に記載のデータ送信装置。
【請求項10】
前記出力手段によるデータ出力が前記所定のサイクル数でできない場合は、前記記憶手段からデータを出力しないことを特徴とする請求項8に記載のデータ送信装置。
【請求項11】
前記所定のサイクル数を示す情報を前記データ受信装置へ送信ことを特徴とする請求項8乃至10のいずれか1項に記載のデータ送信装置。
【請求項12】
データ送信装置と通信可能に接続されるデータ受信装置であって、
前記データ送信装置にクロックを供給する供給手段と、
前記データ送信装置が前記クロックと同期させて出力するデータを受信する受信手段と、
前記データ送信装置と前記データ受信装置との間で生じる遅延に応じて、前記受信手段による前記データの受信の中断および復帰を遅延させる遅延手段とを有することを特徴とするデータ受信装置。
【請求項13】
データ送信装置と通信可能に接続されるデータ受信装置の制御方法であって、
前記データ送信装置にクロックを供給する供給工程と、
前記データ送信装置が前記クロックと同期させて出力するデータを受信する受信工程と、
前記データ送信装置にコマンドを送信する送信工程と、
前記コマンドの送信終了タイミングと、前記送信装置からの前記コマンドに対応するデータの受信開始タイミングとの間のサイクル数をカウントする計数工程と、
を有することを特徴とする制御方法。
【請求項14】
データ受信装置と通信可能に接続されるデータ送信装置の制御方法であって、
前記データ受信装置からデータ受信に関するキャリブレーションコマンドを受信した場合、所定のデータを保持している記憶手段のデータを前記データ受信装置から供給されるクロックに同期して所定のサイクル数で前記データ受信装置へ出力することを特徴とするデータ送信装置。
【請求項15】
データ送信装置と通信可能に接続されるデータ受信装置の制御方法であって、
前記データ送信装置にクロックを供給する供給工程と、
前記データ送信装置が前記クロックと同期させて出力するデータを受信する受信工程と、
前記データ送信装置と前記データ受信装置との間で生じる遅延に応じて、前記受信工程における前記データの受信の中断および復帰を遅延させる遅延工程とを有することを特徴とする制御方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate