従来、異なるクロック周波数で動作する回路(機能ブロック)同士の通信方法には、主に同期方式及び非同期方式の2種類がある。
初めに、従来の同期方式について説明する。従来の同期方式は、通信する2つの回路の各クロックの周波数比が1対整数(例えば、1:2、1:3、・・・等)や、整数対1(例えば、2:1、3:1、・・・等)であり、かつ2つのクロックの位相が等しいことが適用の条件となる。すなわち、従来の同期方式に基づく同期通信は、クロック同士が同期している回路間でのみ行うことが出来る通信方法である。
図10は、クロックAで動作する回路Aと、クロックBで動作する回路Bが、同期方式を用いて通信する半導体装置の例を示す図である。この例では、回路Aから回路Bの方向でデータを通信する。
クロックAの周波数は、クロックBの整数倍(1、2、3、・・・倍など)である。クロックAとクロックBの分配遅延は、クロックツリー合成などにより、同等になるように設計される。また、クロックAとクロックB間は、隣接する通信タイミングでセットアップタイム制約やホールドタイム制約を満足するようにタイミング設計される。例えば、ホールドタイム制約を満足するために、フリップフロップ間の遅延が小さい箇所には、遅延を付加するためのバッファ回路が挿入される。以下ではこれらバッファ回路をホールドタイム補償バッファと表記する。
信号ReqAおよびReqBは通信要求信号である。回路Aから回路Bへの通信要求がある場合に、回路AはクロックAのタイミングで信号ReqAに通信要求を出力する。ホールドタイム補償バッファ105Aは、信号ReqAにホールドタイム制約を満足するための遅延を付加し、信号ReqBとして出力する。回路BはクロックBのタイミングで信号ReqBを入力する。
信号AckAおよびAckBは通信応答信号である。回路Bが受信可能な状態にあるか、回路Aからの通信データを正常に受理した場合に、回路BはクロックBのタイミングで信号AckBに通信応答を出力する。ホールドタイム補償バッファ105Bは、信号AckBにホールドタイム制約を満足するための遅延を付加し、信号AckAとして出力する。回路AはクロックAのタイミングで信号AckAを入力する。
信号DataAおよびDataBは、回路Aから回路Bへの通信データを送る通信データ信号である。回路AはクロックAのタイミングで信号DataAを出力する。ホールドタイム補償バッファ105Cは、信号DataAにホールドタイム制約を満足するための遅延を付加し、信号DataBとして出力する。回路BはクロックBのタイミングで信号DataBを入力する。
カウンタ回路100は、クロックAとクロックBの周波数の比を示す周波数比情報101を参照して、回路Aが通信するタイミングを示す通信タイミング信号102を生成する。回路Aは、通信タイミング信号102を入力して、通信速度を回路Bの受信速度に合わせることで、同期的な通信を実現する。
図11は、クロックAの周波数がクロックBの周波数の3倍であり、回路Aから回路Bへデータを送信する場合の動作を示すタイミング図である。クロックA、通信タイミング信号102、通信要求信号ReqAおよびReqB、通信データDataAおよびDataB、クロックB、通信応答信号AckAおよびAckBを図示している。また、クロックAおよびクロックBの立ち上がりのタイミングをそれぞれT0、T1、T2、・・・で示している。
クロックAの周波数はクロックBの周波数の3倍であるので、クロックAの3サイクルに1回、具体的には、タイミングT0、T3、T6、T9、T12において、クロックAとクロックBの位相(立ち上がりエッジ)が一致している。回路Aは、このクロックAとクロックBの位相が一致するタイミングを示す通信タイミング信号102を参照して、このクロックAとクロックBの位相が一致するタイミングのみで通信動作を行う。一方、回路BはクロックBの毎サイクルにおいて通信動作を行うので、回路Aと回路Bの通信速度が一致する。
より詳細には、クロックAとクロックBの位相が一致し、通信を行うタイミングで、通信タイミング信号102は値1となる。回路Aが内蔵するフリップフロップA1、A2、A3は、通信タイミング信号102をイネーブル入力(EN)に入力することで、通信タイミング信号102が値1となるタイミングのみで動作する。従って回路Aは、この通信を行うタイミングで通信要求信号ReqA及び通信データDataAを出力し、通信応答信号AckAを入力する。
信号ReqA、AckBおよびDataAには、それぞれホールドタイム補償バッファ105A、105B、105Cにより、ホールドタイム制約を満足するための遅延Thoが付加されている。
クロックAの周波数がクロックBの整数倍である場合、通信タイミング信号102は、カウンタ回路100により容易に生成することができる。例えば、クロックAの周波数がクロックBのN倍(Nは整数)である場合、1からNまでカウントアップするカウント回路を用いて、Nサイクルに1回、通信タイミング信号102に値1を出力すればよい。
次に、具体的な通信動作を、図11を参照して説明する。まず、タイミングT0では、回路Aは、通信要求信号ReqAに値0を出力することで、回路Bに通信要求がないことを通知する。一方回路Bは、通信応答信号AckBに値1を出力することで、通信を受信できる状態にあることを回路Aに通知する。
次に、タイミングT3において、回路Aは、通信要求信号ReqAに値1を出力することで、回路Bに通信要求があることを通知するとともに、送信するデータD0を通信データDataAに出力する。回路Bは、タイミングT0で回路Aが通信要求信号ReqAに出力した値0を信号ReqBから入力し、回路Aからの通信要求がないと判断する。回路Bは引き続き通信応答信号AckBに値1を出力する。
次に、タイミングT6において、回路Aは、タイミングT3で回路Bが通信応答信号AckBに出力した値1を信号AckAから入力し、通信要求およびそのデータD0が受理されたと判断する。その結果、通信要求信号ReqAに値0を出力し、回路Bにさらなる通信要求がないことを通知する。回路Bは、タイミングT3で回路Aが通信要求信号ReqAを通じて出力した通信要求を受理するとともに、通信データD0を受信する。その結果、通信応答信号AckBに値0を出力し、これ以上通信を受信できる状態ではないことを回路Aに通知する。
次に、タイミングT9において、回路Aは、再び通信要求信号ReqAに値1を出力することで、回路Bに通信要求があることを通知するとともに、送信するデータD1を通信データDataAに出力する。回路Bは、再び通信応答信号AckBに値1を出力することで、通信を受信できる状態にあることを回路Aに通知する。
次に、タイミングT12において、回路Aは、タイミングT9で回路Bが通信応答信号AckBに出力した値1を信号AckAから入力し、通信要求およびそのデータD1が受理されたと判断する。その結果、通信要求信号ReqAに値0を出力し、回路Bにさらなる通信要求がないことを通知する。回路Bは、タイミングT9で回路Aが通信要求信号ReqAを通じて出力した通信要求を受理するとともに、通信データD1を受信する。その結果、通信応答信号AckBに値0を出力し、これ以上通信を受信できる状態ではないことを回路Aに通知する。
以上に説明した通信が正しく動作するためには、隣接する通信タイミングでセットアップタイム制約やホールドタイム制約を満足する必要がある。具体的には、下記の4つのタイミング制約を満足するようにタイミング設計する必要がある。
クロックAからクロックBへのホールドタイム制約として、回路Aがある通信タイミングで出力した信号を、回路Bはその通信タイミングで必ず入力しない。例えば、回路AがタイミングT3で出力した信号を、回路BはタイミングT3で必ず入力しない(図11のH1)。
さらに、クロックAからクロックBへのセットアップ制約として、回路Aがある通信タイミングで出力した信号を、回路Bは次の通信タイミングで必ず入力する。例えば、回路AがタイミングT3で出力した信号を、回路BはタイミングT6で必ず入力する(図11のS1)。
さらに、クロックBからクロックAへのホールドタイム制約として、回路Bがある通信タイミングで出力した信号を、回路Aはその通信タイミングで必ず入力しない。例えば、回路BがタイミングT6で出力した信号を、回路AはタイミングT6で必ず入力しない(図11のH2)。
さらに、クロックBからクロックAへのセットアップ制約として、回路Bがある通信タイミングで出力した信号を、回路Aは次の通信タイミングで必ず入力する。例えば、回路BがタイミングT6で出力した信号を、回路AはタイミングT9で必ず入力する(図11のS2)。
以上説明したように、送信側の回路Aと受信側の回路Bが、通信要求信号と通信応答信号を互いにやりとりを行う(ハンドシェイクを行う)ことで同期的な通信を行うハンドシェイク型の同期通信方式は、オンチップ・バスなどに広く使われている。
次に、従来の非同期方式について説明する。通信する2つの回路の各クロックの周波数比が1対整数や、整数対1ではない、あるいは2つのクロックの位相が等しくない回路間で行われる通信では、非同期方式が使用されている。非同期方式を用いて通信すると、信号を出力するタイミングと信号を入力するタイミングとが非同期関係になり、信号が"0"と"1"との間をある時間揺らぐ状態になる可能性がある。この現象はmetastability(メタスタビリティ)とよばれ、回路の誤動作の原因となる。メタスタビリティによる誤動作を防止する為、非同期方式では通常、同期化回路が用いられる(例えば、特許文献1)。
特許文献1に記載の技術は、第1のクロック信号に同期して所定の動作を行う第1の回路と、第2のクロック信号に同期して所定の動作を行う第2の回路との間に同期化回路を設けている。そして、この同期化回路は第1の回路の出力データを第1のクロック信号に同期してラッチし、ラッチした信号を第2のクロック信号に同期して出力している。
また、上記以外にもメタスタビリティによる誤動作を防止する技術が提案されている(例えば、特許文献2)。特許文献2に記載の技術は、データ入力信号とクロック入力信号の変化を検知し、セットアップ若しくはホールドタイムを満足しない場合にフリップフロップのデータ入力の信号を変更しないように制御して、メタスタビリティによる誤動作を防止している。
特開2003‐273847号公報
特開平6‐45880号公報
発明の実施の形態1.
まず、図1を参照して、本発明の実施の形態1にかかる半導体装置について説明する。図1は、本実施形態におけるクロックAで動作する回路Aと、クロックBで動作する回路Bが、ハンドシェイク型の同期通信方式を用いて、回路Aから回路Bの方向でデータを通信する半導体装置の例である。図10に示した従来技術による半導体装置における、カウンタ回路100を本発明による通信タイミング制御回路50に置き換え、さらに、ホールドタイム補償バッファ105A、105B、105Cを取り除いたものに相当する。
図10に示した従来技術による半導体装置の例では、通信する2つの回路の各クロックの周波数比が、1対整数や、整数対1に限定されていたが、本実施形態では、任意の整数比、例えば、3:2、2:5など、M対N(M、Nは整数)であってもよく、その場合でも、同期的な通信を可能とする。
本実施の形態1において、クロックAの周波数はクロックBの1以上の任意の有理数倍、すなわちM/N倍(M、Nは正の整数かつM≧N)とする。この場合、クロックAとクロックBの周波数比はM:Nになる。クロックAとクロックBの分配遅延は、クロックツリー合成などにより、同等になるように設計される。また、クロックAとクロックB間は、通常の同期回路と同様に、隣接する通信タイミング間でセットアップやホールドタイム制約を満足するようにタイミング設計される。
通信タイミング制御回路50は、クロックAとクロックBの周波数の比を示す周波数比情報11、およびクロックAとクロックBの位相関係を示す位相関係信号12を参照して、回路Aが送信するタイミングを回路Bの各受信タイミングに対して一つ、かつ回路Bの各受信タイミングよりも遅いタイミングから選択し、そのタイミングを示す送信タイミング信号13を生成する。
同様に、通信タイミング制御回路50は、クロックAとクロックBの周波数の比を示す周波数比情報11、およびクロックAとクロックBの位相関係を示す位相関係信号12を参照して、回路Aが受信するタイミングを回路Bの各送信タイミングに対して一つ、かつ回路Bの各送信タイミングよりも早いタイミングから選択し、そのタイミングを示す受信タイミング信号14を生成する。
回路Aは、送信タイミング信号13を入力して、送信タイミング信号13が指示するタイミングでのみ送信を行う。また、回路Aは、受信タイミング信号14を入力して、受信タイミング信号14が指示するタイミングでのみ受信を行う。一方、回路BはクロックBの毎サイクルおいて送受信動作を行うので、回路Aと回路Bの通信速度が一致し、同期的な通信が実現される。
回路Aと回路Bは、通信手段である信号Req、Ack及びDataを通じて、回路Aから回路Bの方向でデータを送信する。信号Reqは、通信要求信号であり、回路Aから回路Bへの通信要求がある場合に、回路AがクロックAのタイミングで出力し、回路BがクロックBのタイミングで入力する。信号Ackは、通信応答信号である。回路Bが受信可能な状態にあるか、回路Aからの通信データを正常に受理した場合に、回路BがクロックBのタイミングで信号Ackを出力し、回路AがクロックAのタイミングで入力する。信号Dataは、回路Aから回路Bへの通信データを送る通信データ信号である。
図2は、図11と同様に、クロックAの周波数がクロックBの周波数の3倍であり、回路Aから回路Bへデータを送信する場合の動作を示すタイミング図である。クロックA、送信タイミング信号13、受信タイミング信号14、通信要求信号Req、通信データData、クロックB、通信応答信号Ackを図示している。
クロックAの周波数はクロックBの周波数の3倍であり、クロックAとクロックBの分配遅延は同等であるので、クロックAの3サイクルに1回、具体的には、タイミングT0、T3、T6、T9、T12において、クロックAとクロックBの位相(立ち上がりエッジ)が一致している。
送信タイミング信号13は、回路Aが送信を行うタイミングで値1、それ以外で値0となる信号である。具体的には、タイミングT1、T4、T7、T10において値1、それ以外で値0になる。これらの送信タイミングは、回路Bの各受信タイミングであるT0、T3、T6、T9のそれぞれに対応して1回、かつそれよりも1サイクル遅いタイミングから選択されている。
一方、受信タイミング信号14は、回路Aが受信を行うタイミングで値1、それ以外で値0となる信号である。具体的には、タイミングT2、T5、T8、T11において値1、それ以外で値0になる。これらの受信タイミングは、回路Bの各送信タイミングであるT3、T6、T9、T12のそれぞれに対応して1回、かつそれよりも1サイクル早いタイミングから選択されている。
すなわち、従来の同期方式では、回路Aと回路Bは、クロックの一致する同じタイミングで送信および受信を行っていたのに対して、本実施の形態1では、例えば、回路Bの送受信のタイミングである通信タイミングT3に対して、回路Aの送信タイミングは1サイクル遅いT4が、受信タイミングは1サイクル早いT2が選択されている。図2において、これら回路Aの送受信のタイミングを破線で囲んで示している。
同様に、回路Bの送受信のタイミングである通信タイミングT6に対して、回路Aの送信タイミングは1サイクル遅いT7が、受信タイミングは1サイクル早いT5が選択されている。
同様に、回路Bの送受信のタイミングである通信タイミングT9に対して、回路Aの送信タイミングは1サイクル遅いT10が、受信タイミングは1サイクル早いT8が選択されている。
回路Aが内蔵するフリップフロップA1、A3は、送信タイミング信号13をイネーブル入力(EN)に入力することで、送信タイミング信号13が値1となるタイミングのみで動作する。従って、回路Aは、この送信を行うタイミングで通信要求信号Req及び通信データDataを出力する。
回路Aが内蔵するフリップフロップA2は、受信タイミング信号14をイネーブル入力(EN)に入力することで、受信タイミング信号14が値1となるタイミングのみで動作する。従って、回路Aは、この受信を行うタイミングで通信応答信号Ackを入力する。
送信タイミング信号13により選択される回路Aの送信タイミングは、回路Bの受信タイミングに対して一つ、かつ回路Bの各受信タイミングよりも遅いタイミングから選択されるものならばいずれでもよい。例えば、回路Bの受信タイミングT3に対応するT4の代わりに、T5を選択しても良い。同様に、回路Bの受信タイミングT6に対応するT7の代わりに、T8を選択しても良い。
また、受信タイミング信号14により選択される回路Aの受信タイミングは、回路Bの各送信タイミングに対して一つ、かつ回路Bの各送信タイミングよりも早いタイミングから選択されるものならばいずれでもよい。例えば、回路Bの送信タイミングT3に対応するT2の代わりに、T1を選択しても良い。同様に、回路Bの受信タイミングT6に対応するT5の代わりに、T4を選択しても良い。
いずれにしても、通常の同期回路と同様に、クロックAとクロックB間のセットアップやホールドタイム制約を満足するようにタイミング設計を行う必要があるので、タイミング設計が容易になる送信タイミングおよび受信タイミングを選択しても良い。
次に、具体的な通信動作を、図2を参照して説明する。まず、回路Bの通信タイミングであるT3では、回路Bは、通信応答信号Ackに値1を出力することで、通信を受信できる状態にあることを回路Aに通知する。
次に、回路Aの送信タイミングにあるT4で、回路Aは、通信要求信号Reqに値1を出力することで、回路Bに通信要求があることを通知するとともに、送信するデータD0を通信データDataに出力する。
次に、回路Aの受信タイミングにあるT5で、回路Aは、タイミングT3で回路Bが通信応答信号Ackに出力した値1を入力し、通信要求およびそのデータD0が受理されたと判断する。その結果、回路Aの次の送信タイミングにあるT7で、回路Aは、通信要求信号Reqに値0を出力することで、回路Bにさらなる通信要求がないことを通知する。
次に、回路Bの通信タイミングであるT6で、回路Bは、タイミングT4で回路Aが通信要求信号Reqを通じて出力した通信要求を受理するとともに、通信データD0を受信する。その結果、これ以上通信を受信できる状態ではないことを回路Aに通知するため、通信応答信号Ackに値0を出力する。
次に、回路Aの受信タイミングにあるT8で、回路Aは、タイミングT6で回路Bが通信応答信号Ackに出力した値0を入力する。
次に、回路Bの通信タイミングであるT9で、回路Bは、再び通信を受信できる状態になり、通信応答信号Ackに値1を出力する。
次に、回路Aの送信タイミングにあるT10で、回路Aは、通信要求信号Reqに値1を出力することで、回路Bに通信要求があることを通知するとともに、送信するデータD1を通信データDataに出力する。
次に、回路Aの受信タイミングにあるT11で、回路Aは、タイミングT9で回路Bが通信応答信号Ackに出力した値1を入力し、通信要求およびそのデータD1が受理されたと判断する。
次に、回路Bの通信タイミングであるT12で、回路Bは、タイミングT10で回路Aが通信要求信号Reqを通じて出力した通信要求を受理するとともに、通信データD1を受信する。その結果、これ以上通信を受信できる状態ではないことを回路Aに通知するため、通信応答信号Ackに値0を出力する。
以上説明したように、本実施の形態1においても、ハンドシェイク型の同期通信方式を用いて、回路Aから回路Bの方向でデータを通信することができる。
以上に説明した通信が正しく動作するためには、隣接する通信タイミングでセットアップタイム制約やホールドタイム制約を満足する必要がある。具体的には、下記の4つのタイミング制約を満足するようにタイミング設計する必要がある。
クロックAからクロックBへのホールドタイム制約として、回路Aがある送信タイミングで出力した信号を、回路Bはそれより以前の通信タイミングで必ず入力しない。例えば、回路AがタイミングT4で出力した信号を、回路BはタイミングT3で必ず入力しない(図2のH1)。
さらに、クロックAからクロックBへのセットアップ制約として、回路Aがある送信タイミングで出力した信号を、回路Bは次の通信タイミングで必ず入力する。例えば、回路AがタイミングT4で出力した信号を、回路BはタイミングT6で必ず入力する(図2のS1)。
さらに、クロックBからクロックAへのホールドタイム制約として、回路Bがある通信タイミングで出力した信号を、回路Aはそれより以前の受信通信タイミングで必ず入力しない。例えば、回路BがタイミングT6で出力した信号を、回路AはタイミングT5で必ず入力しない(図2のH2)。
さらに、クロックBからクロックAへのセットアップ制約として、回路Bがある通信タイミングで出力した信号を、回路Aは次の受信タイミングで必ず入力する。例えば、回路BがタイミングT6で出力した信号を、回路AはタイミングT8で必ず入力する(図2のS2)。
次に、クロックスキューがある場合の本実施の形態1の動作について説明する。図3は、クロックスキューによりクロックAよりもクロックBの位相がTskewだけ遅れた場合の通信の動作を示すタイミングである。
図12で示した従来の同期方式の場合と異なり、本実施の形態1では、回路Aの送信タイミングは、回路Bのそれに対応する受信タイミングより1サイクル遅いタイミングから選択されているので、ホールドタイム補償バッファを挿入しなくても、クロックAからクロックBへのホールドタイム制約を満足することができる。例えば、回路AがタイミングT4で出力した信号を、回路BはタイミングT3で必ず入力しない(図3のH1)。さらに、ホールドタイム補償バッファを挿入していないので、クロックBからクロックAへのセットアップ制約を容易に満足することができる。例えば、回路BがタイミングT6で出力した信号を、回路AはタイミングT8で必ず入力する(図3のS2)。
図4は、クロックスキューによりクロックAよりもクロックBの位相がTskewだけ進んだ場合の動作タイミングである。
図13で示した従来の同期方式の場合と異なり、本実施の形態1では、回路Aの受信タイミングは、回路Bのそれに対応する送信タイミングより1サイクル早いタイミングから選択されているので、ホールドタイム補償バッファを挿入しなくても、クロックBからクロックAへのホールドタイム制約を満足することができる。例えば、回路BがタイミングT6で出力した信号を、回路AはタイミングT5で必ず入力しない(図4のH2)。さらに、ホールドタイム補償バッファを挿入していないので、クロックAからクロックBへのセットアップ制約を容易に満足することができる。例えば、回路AがタイミングT4で出力した信号を、回路BはタイミングT6で必ず入力する(図4のS1)。
以上説明したように、本実施の形態1によれば、回路Bの各通信タイミングに対して、回路Aの送信タイミングは1サイクル遅く、受信タイミングは1サイクル早いタイミングから選択されているので、ホールドタイム制約を満足するためにホールドタイム補償バッファを挿入する必要がない。
従って、ホールドタイム補償バッファの遅延ばらつきに影響されず、タイミング設計が容易になるという効果がある。さらに、ホールドタイム補償バッファの挿入により、レイアウト面積や電力が増大しないという効果がある。
より大きなクロックスキューTskewがある場合、回路Bの各通信タイミングに対して、回路Aの送信タイミングをより遅いタイミングから選択し、かつ受信タイミングをより早いタイミングから選択することで、ホールドタイム補償バッファの挿入を不要とすることができる。
あるいは、より大きなクロックスキューTskewがある場合、ホールドタイム制約を満足するのに必要な分だけホールドタイム補償バッファを挿入してもよい。この場合でも、従来の同期方式と比較して、必要なホールドタイム補償バッファの量は少なくてよいので、タイミング設計が容易になるという効果がある。さらに、レイアウト面積や電力の増加が小さいという効果がある。
次に図5を参照して、クロックAの周波数がクロックBの周波数の5/2倍である場合の、本実施の形態1の動作を説明する。
図5は、クロックAの周波数がクロックBの周波数の5/2倍であり、従ってクロックAとクロックBの周波数比が5:2である場合の、回路Aから回路Bへデータを送信する場合の動作を示すタイミング図である。クロックA、送信タイミング信号13および受信タイミング信号14、通信要求信号Req、通信データData、クロックB、通信応答信号Ackを図示している。
クロックAとクロックBの周波数はM:Nの整数比であり、クロックAとクロックBの分配遅延は同等であるので、ある一定の周期でクロックAとクロックBの立ち上がりが一致するという性質がある。すなわち、クロックAは、Mサイクル毎にクロックBに対する位相関係が一巡(立ち上がりが一致)し、クロックBはNサイクル毎にクロックAに対する位相関係が一巡(立ち上がりが一致)する。
図5では、クロックAとクロックBの周波数比は5:2であるので、クロックAは5サイクルでクロックBとの位相関係が一巡し、クロックBは2サイクルでクロックAとの位相関係が一巡する。クロックAにおいて、クロックBと立ち上がりが一致するタイミングをT0、T0'、T0''、・・・として、クロックBとの位相関係が一巡する5サイクルをそれぞれT0〜T4、T0'〜T4'、・・・で示している。同様に、クロックBにおいて、クロックAと立ち上がりが一致するタイミングをR0、R0'、R0''、・・・として、クロックAとの位相関係が一巡する2サイクルをそれぞれR0〜R1、R0'〜R1'、・・・で示している。
送信タイミング信号13は、回路Aが送信を行うタイミングで値1、それ以外で値0となる信号である。具体的には、タイミングT1、T3、T1'、T3'において値1、それ以外で値0になる。これらの送信タイミングは、回路Bの各受信タイミングであるR0、R1、R0'、R1'のそれぞれに対応して1回、かつそれよりも遅いタイミングから選択されている。
一方、受信タイミング信号14は、回路Aが受信を行うタイミングで値1、それ以外で値0となる信号である。具体的には、タイミングT2、T4、T2'、T4'において値1、それ以外で値0になる。これらの受信タイミングは、回路Bの各送信タイミングであるR0、R1、R0'、R1'のそれぞれに対応して1回、かつそれよりも早いタイミングから選択されている。
すなわち、従来の同期方式では、回路Aと回路Bは、クロックの一致する同じタイミングで送信および受信を行っていたのに対して、本実施形態では、例えば、回路Bの送受信のタイミングである通信タイミングR1に対して、回路Aの送信タイミングはそれよりも遅いT3が、受信タイミングはそれよりも早いT2が選択されている。図5において、これら回路Aの送受信のタイミングを破線で囲んで示している。
同様に、回路Bの送受信のタイミングである通信タイミングR0'に対して、回路Aの送信タイミングはそれよりも遅いT1'が、受信タイミングはそれよりも早いT4が選択されている。
同様に、回路Bの送受信のタイミングである通信タイミングR1'に対して、回路Aの送信タイミングはそれよりも遅いT3'が、受信タイミングはそれよりも早いT2'が選択されている。
次に、具体的な通信動作を、図5を参照して説明する。まず、回路Bの通信タイミングであるR0では、回路Bは、通信応答信号Ackに値1を出力することで、通信を受信できる状態にあることを回路Aに通知する。
次に、回路Aの送信タイミングにあるT1で、回路Aは、通信要求信号Reqに値1を出力することで、回路Bに通信要求があることを通知するとともに、送信するデータD0を通信データDataに出力する。
次に、回路Aの受信タイミングにあるT2で、回路Aは、タイミングR0で回路Bが通信応答信号Ackに出力した値1を入力し、通信要求およびそのデータD0が受理されたと判断する。その結果、回路Aの次の送信タイミングにあるT3で、回路Aは、通信要求信号Reqに値0を出力することで、回路Bにさらなる通信要求がないことを通知する。
次に、回路Bの通信タイミングであるR1で、回路Bは、タイミングT1で回路Aが通信要求信号Reqを通じて出力した通信要求を受理するとともに、通信データD0を受信する。その結果、これ以上通信を受信できる状態ではないことを回路Aに通知するため、通信応答信号Ackに値0を出力する。
次に、回路Aの受信タイミングにあるT4で、回路Aは、タイミングR1で回路Bが通信応答信号Ackに出力した値0を入力する。
次に、回路Bの通信タイミングであるR0'で、回路Bは、再び通信を受信できる状態になり、通信応答信号Ackに値1を出力する。
次に、回路Aの送信タイミングにあるT1'で、回路Aは、通信要求信号Reqに値1を出力することで、回路Bに通信要求があることを通知するとともに、送信するデータD1を通信データDataに出力する。
次に、回路Aの受信タイミングにあるT2'で、回路Aは、タイミングR0'で回路Bが通信応答信号Ackに出力した値1を入力し、通信要求およびそのデータD1が受理されたと判断する。その結果、回路Aの次の送信タイミングにあるT3'で、回路Aは、通信要求信号Reqに値0を出力することで、回路Bにさらなる通信要求がないことを通知する。
次に、回路Bの通信タイミングであるR1'で、回路Bは、タイミングT1'で回路Aが通信要求信号Reqを通じて出力した通信要求を受理するとともに、通信データD1を受信する。その結果、これ以上通信を受信できる状態ではないことを回路Aに通知するため、通信応答信号Ackに値0を出力する。
以上説明したように、本実施の形態1によれば、クロックAとクロックBの周波数比が任意の整数比であっても、ハンドシェイク型の同期通信方式を用いて、回路Aから回路Bの方向でデータを通信することができる。
以上に説明した通信が正しく動作するためには、図2で説明したクロックAの周波数がクロックBの周波数の3倍である場合と同様に、隣接する通信タイミングでセットアップタイム制約やホールドタイム制約を満足する必要がある。具体的には、下記の4つのタイミング制約を満足するようにタイミング設計する必要がある。
クロックAからクロックBへのホールドタイム制約として、回路Aがある送信タイミングで出力した信号を、回路Bはそれより以前の通信タイミングで必ず入力しない。例えば、回路AがタイミングT3で出力した信号を、回路BはタイミングR1で必ず入力しない(図5のH1)。
さらに、クロックAからクロックBへのセットアップ制約として、回路Aがある送信タイミングで出力した信号を、回路Bは次の通信タイミングで必ず入力する。例えば、回路AがタイミングT1で出力した信号を、回路BはタイミングR1で必ず入力する(図5のS1)。
さらに、クロックBからクロックAへのホールドタイム制約として、回路Bがある通信タイミングで出力した信号を、回路Aはそれより以前の受信通信タイミングで必ず入力しない。例えば、回路BがタイミングR1'で出力した信号を、回路AはタイミングT2'で必ず入力しない(図5のH2)。
さらに、クロックBからクロックAへのセットアップ制約として、回路Bがある通信タイミングで出力した信号を、回路Aは次の受信タイミングで必ず入力する。例えば、回路BがタイミングR1'で出力した信号を、回路AはタイミングT4'で必ず入力する(図5のS2)。
図2で説明したクロックAの周波数がクロックBの周波数の3倍である場合と同様に、回路Bの各通信タイミングに対して、回路Aの送信タイミングはそれより遅く、受信タイミングはそれより早いタイミングから選択されている。従って、ホールドタイム制約を満足するためにホールドタイム補償バッファを挿入する必要がない、あるいは挿入する量が少なくてよい。
その結果、ホールドタイム補償バッファの遅延ばらつきに影響されず、タイミング設計が容易になるという効果がある。さらに、ホールドタイム補償バッファの挿入により、レイアウト面積や電力が増加しない、あるいは増加が小さいという効果がある。
発明の実施の形態2.
次に、図6を参照して、本発明の実施の形態2にかかる半導体装置について説明する。
図6は、本実施形態におけるクロックAで動作する回路Aと、クロックBで動作する回路Bが、ハンドシェイク型の同期通信方式を用いて、回路Bから回路Aの方向でデータを通信する半導体装置の例である。図1に示した実施の形態1にかかる回路Aから回路Bの方向でデータを通信する半導体装置と同一の構成要素には同一の符号を付してあり、以下では詳細な説明は省略する。
回路Aと回路Bは、信号Req、Ack及びDataを通じて、回路Bから回路Aの方向でデータを送信する。信号Reqは、通信要求信号であり、回路Bから回路Aへの通信要求がある場合に、回路BがクロックBのタイミングで出力し、回路AがクロックAのタイミングで入力する。信号Ackは、通信応答信号である。回路Aが受信可能な状態にあるか、回路Bからの通信データを正常に受理した場合に、回路AがクロックAのタイミングで信号Ackを出力し、回路BはクロックBのタイミングで入力する。信号Dataは、回路Bから回路Aへの通信データを送る通信データ信号である。
図7は、クロックAの周波数がクロックBの周波数の3倍であり、回路Bから回路Aへデータを送信する場合の動作を示すタイミング図である。クロックA、送信タイミング信号13、受信タイミング信号14、通信応答信号Ack、クロックB、通信要求信号Req、通信データDataを図示している。
クロックAの周波数はクロックBの周波数の3倍であり、クロックAとクロックBの分配遅延は同等であるので、クロックAの3サイクルに1回、具体的には、タイミングT0、T3、T6、T9、T12において、クロックAとクロックBの位相(立ち上がりエッジ)が一致している。
送信タイミング信号13は、回路Aが送信を行うタイミングで値1、それ以外で値0となる信号である。具体的には、タイミングT1、T4、T7、T10において値1、それ以外で値0になる。これらの送信タイミングは、回路Bの各受信タイミングであるT0、T3、T6、T9のそれぞれに対応して1回、かつ1サイクル遅いタイミングから選択されている。
一方、受信タイミング信号14は、回路Aが受信を行うタイミングで値1、それ以外で値0となる信号である。具体的には、タイミングT2、T5、T8、T11において値1、それ以外で値0になる。これらの受信タイミングは、回路Bの各送信タイミングであるT3、T6、T9、T12のそれぞれに対応して1回、かつ1サイクル早いタイミングから選択されている。
すなわち、従来の同期方式では、回路Aと回路Bは、クロックの一致する同じタイミングで送信および受信を行っていたのに対して、本実施の形態2では、例えば、回路Bの送受信のタイミングである通信タイミングT3に対して、回路Aの送信タイミングは1サイクル遅いT4が、受信タイミングは1サイクル早いT2が選択されている。図7において、これら回路Aの送受信のタイミングを破線で囲んで示している。
同様に、回路Bの送受信のタイミングである通信タイミングT6に対して、回路Aの送信タイミングは1サイクル遅いT7が、受信タイミングは1サイクル早いT5が選択されている。
同様に、回路Bの送受信のタイミングである通信タイミングT9に対して、回路Aの送信タイミングは1サイクル遅いT10が、受信タイミングは1サイクル早いT8が選択されている。
回路Aが内蔵するフリップフロップA2は、送信タイミング信号13をイネーブル入力(EN)に入力することで、送信タイミング信号13が値1となるタイミングのみで動作する。従って、回路Aは、この送信を行うタイミングで通信応答信号Ackを出力する。
回路Aが内蔵するフリップフロップA1、A3は、受信タイミング信号14をイネーブル入力(EN)に入力することで、受信タイミング信号14が値1となるタイミングのみで動作する。従って、回路Aは、この受信を行うタイミングで通信要求信号Req及び通信データDataを入力する。
次に、具体的な通信動作を、図7を参照して説明する。まず、回路Bの通信タイミングにあるT0で、回路Bは、通信要求信号Reqに値1を出力することで、回路Aに通信要求があることを通知するとともに、送信するデータD0を通信データDataに出力する。
次に、回路Aの送信タイミングであるT1では、回路Aは、通信応答信号Ackに値1を出力することで、通信を受信できる状態にあることを回路Bに通知する。
次に、回路Aの受信タイミングであるT2で、回路Aは、タイミングT0で回路Bが通信要求信号Reqを通じて出力した通信要求を受理するとともに、通信データD0を受信する。その結果、回路Aの次の送信タイミングにあるT4で、これ以上通信を受信できる状態ではないことを回路Bに通知するため、通信応答信号Ackに値0を出力する。
次に、回路Bの通信タイミングにあるT3で、回路Bは、タイミングT1で回路Aが通信応答信号Ackに出力した値1を入力し、通信要求およびそのデータD0が受理されたと判断する。その結果、回路Bは、通信要求信号Reqに値0を出力することで、回路Aにさらなる通信要求がないことを通知する。
次に、回路Bの通信タイミングであるT6で、回路Bは、通信要求信号Reqに値1を出力することで、回路Aに通信要求があることを通知するとともに、送信するデータD1を通信データDataに出力する。
次に、回路Aの送信タイミングにあるT7で、回路Aは、再び通信を受信できる状態になり、通信応答信号Ackに値1を出力する。
次に、回路Aの受信タイミングにあるT8で、回路Aは、タイミングT6で回路Bが通信要求信号Reqを通じて出力した通信要求を受理するとともに、通信データD1を受信する。その結果、回路Aの次の送信タイミングにあるT10で、これ以上通信を受信できる状態ではないことを回路Bに通知するため、通信応答信号Ackに値0を出力する。
次に、回路Bの通信タイミングであるT9で、回路Bは、タイミングT7で回路Aが通信応答信号Ackに出力した値1を入力し、通信要求およびそのデータD1が受理されたと判断する。その結果、回路Bは、通信要求信号Reqに値0を出力することで、回路Aにさらなる通信要求がないことを通知する。
以上説明したように、本実施形態によれば、ハンドシェイク型の同期通信方式を用いて、回路Aから回路Bの方向と同様に、回路Bから回路Aの方向でデータを通信することができる。
以上に説明した通信が正しく動作するためには、実施の形態1と同様に、隣接する通信タイミングでセットアップタイム制約やホールドタイム制約を満足する必要がある。具体的には、下記の4つのタイミング制約を満足するようにタイミング設計する必要がある。
クロックAからクロックBへのホールドタイム制約として、回路Aがある送信タイミングで出力した信号を、回路Bはそれより以前の通信タイミングで必ず入力しない。例えば、回路AがタイミングT4で出力した信号を、回路BはタイミングT3で必ず入力しない(図7のH1)。
さらに、クロックAからクロックBへのセットアップ制約として、回路Aがある送信タイミングで出力した信号を、回路Bは次の通信タイミングで必ず入力する。例えば、回路AがタイミングT4で出力した信号を、回路BはタイミングT6で必ず入力する(図7のS1)。
さらに、クロックBからクロックAへのホールドタイム制約として、回路Bがある通信タイミングで出力した信号を、回路Aはそれより以前の受信通信タイミングで必ず入力しない。例えば、回路BがタイミングT6で出力した信号を、回路AはタイミングT5で必ず入力しない(図7のH2)。
さらに、クロックBからクロックAへのセットアップ制約として、回路Bがある通信タイミングで出力した信号を、回路Aは次の受信タイミングで必ず入力する。例えば、回路BがタイミングT6で出力した信号を、回路AはタイミングT8で必ず入力する(図7のS2)。
実施の形態1と同様に、本実施の形態2においても、回路Bの各通信タイミングに対して、回路Aの送信タイミングは1サイクル遅く、受信タイミングは1サイクル早いタイミングから選択されている。従って、ホールドタイム制約を満足するためにホールドタイム補償バッファを挿入する必要がない、あるいは挿入する量が少なくてよい。
その結果、ホールドタイム補償バッファの遅延ばらつきに影響されず、タイミング設計が容易になるという効果がある。さらに、ホールドタイム補償バッファの挿入により、レイアウト面積や電力が増加しない、あるいは増加が小さいという効果がある。
通信タイミング制御回路に関する説明.
次に、本発明の実施形態1及び2において用いられる通信タイミング制御回路50について図面を参照して説明する。
クロックの周波数比が1対整数や整数対1の場合は、通信タイミングが周期的であるため、通信タイミング信号をカウンタ回路により容易に生成することができる。一方、周波数比が任意の整数比の場合は、その周波数比に応じて通信タイミングが複雑に変わるので、本実施形態の送信タイミング信号13および受信タイミング信号14をカウンタ回路で生成することは困難である。
図8は、本発明の実施の形態における通信タイミング制御回路50の構成例である。通信タイミング制御回路50は、クロックAのタイミングで動作し、周波数比情報11、および位相関係信号12を参照して、送信タイミング信号13および受信タイミング信号14をクロックAのサイクル毎に生成する。上記周波数比情報11は、クロックAとクロックBの周波数比M:NのMの値を示す信号Mと、Nの値を示す信号Nから構成される。
通信タイミング制御回路50は、テーブル回路51、カウンタ回路52から構成される。カウンタ回路52は、クロックAのタイミングで動作し、周波数比情報11を構成する信号Mを参照して、クロックAとクロックBの位相関係が一巡するサイクル数を繰り返してカウントし、その値をカウンタ値55に出力する。
テーブル回路51は、複数のテーブルデータ56から構成され、周波数比、およびクロックAとクロックB間の相対的な位相関係ごとに、送信タイミング信号13および受信タイミング信号14の値をテーブル形式で保持する。本実施の形態では、周波数比は、信号Mおよび信号Nから構成される周波数比情報11で与えられる。クロックAとクロックB間の相対的な位相関係は、カウンタ値55で与えられる。すなわち、テーブル回路51は、入力する信号M、信号N、カウンタ値55を参照して、送信タイミング信号13および受信タイミング信号14をクロックAのサイクル毎に出力する。
次に図9を参照して、本実施の形態における通信タイミング制御回路50の動作について説明する。図9は、図5で示したクロックAとクロックBの周波数比が5:2である場合の、通信タイミング制御回路50の動作を示すタイミング図である。クロックA、位相関係信号12、カウンタ値55、テーブルデータ56が保持する値、送信タイミング信号13および受信タイミング信号14、クロックBを図示している。
位相関係信号12は、クロックAとクロックBの立ち上がりが一致するタイミング(タイミングT0、T0'、T0''、・・・)で値1、それ以外で値0になる信号であり、クロックAとクロックBの位相関係が一巡するタイミングを与える。位相関係信号12は、クロックAとクロックBを生成するクロック生成回路で容易に生成することができる。あるいは、位相比較回路によりクロックAとクロックBの位相を比較して生成しても良い。
カウンタ回路52は、位相関係信号12の値が1となるタイミングで値0となり、その後、クロックAとクロックBの位相関係が一巡する5サイクル分を繰り返してカウントする。その値をカウンタ値55として0〜4まで図示しており、タイミングT0〜T4、T0'〜T4'、・・・と対応している。すわなち、タイミングT0で値0、タイミングT1で値1、タイミングT4で値4となり、再びタイミングT0'で値0になる。すなわち、カウンタ回路52は、クロックAとクロックB間の相対的な位相関係を、カウンタ値55として出力する。
テーブルデータ56は、そのサイクルが送信タイミングである場合は値10、受信タイミングである場合は値01、いずれでもない場合は値00を保持している。テーブル回路51はその値を参照して、送信タイミング信号13および受信タイミング信号14として出力する。
具体的には、カウンタ値55が値0の場合に、テーブルデータ56が保持している値00を参照して、テーブル回路51は送信タイミング信号13に値0、受信タイミング信号14に値0を出力する。カウンタ値55が値1および値3の場合に、テーブルデータ56が保持している値10を参照して、テーブル回路51は送信タイミング信号13に値1、受信タイミング信号14に値0を出力する。カウンタ値55が値2および値4の場合に、テーブルデータ56が保持している値01を参照して、テーブル回路51は送信タイミング信号13に値0、受信タイミング信号14に値1を出力する。
図9では、クロックAとクロックBの周波数比が5:2である場合の動作例を示したが、その他の場合であっても、周波数比、およびクロックAとクロックB間の相対的な位相関係ごとに、テーブルデータ56の値を適切に設定することで、周波数比が任意の整数比であっても、送信タイミング信号13および受信タイミング信号14を適切に生成することができる。
具体的には、通信対象の回路(回路B)の各通信タイミングに対して、送信タイミング信号および受信タイミング信号を参照する回路(回路A)の送信タイミングを一つ、かつ通信対象の回路の各受信タイミングよりも遅いタイミングから選択し、受信タイミングを一つ、かつ通信対象の回路の各送信タイミングよりも早いタイミングから選択するように、テーブルデータ56の値を設定すればよい。
また、図9の例では、周波数比情報11を構成する信号M、および信号Nの値はそれぞれ一定であったが、テーブル回路51がそれらの値に対応するテーブルデータ56を保持する範囲内であれば、適宜動作中に変更することもできる。
また、本実施例では、周波数比情報11は、信号Mと信号Nから構成されるとしたが、クロックAとクロックBの周波数比を設定できるものであれば、別の形式であっても良い。