(57)【要約】【課題】  本発明では、複数のモジュールをリング状に接続したシステムにおいて、リングに接続されている任意のスレーブモジュール間での通信を実現することを目的としている。【解決手段】  本発明では、スレーブとなるモジュールがマスタとなるモジュールに対してコマンドトランザクションの発行をリングのトランザクションにより要求する手段を持ち、マスタとなるモジュールはその要求に従ってコマンドトランザクションを発行する手段と、リターントランザクションによって得られたコマンドトランザクションに対する応答をスレーブモジュールに対してリングのトランザクションにより通知する手段とを持つ。【選択図】  図４
2006109055.tif 000002
【特許請求の範囲】
【請求項１】
LSI内の複数のモジュールをリング状に接続し、そのリングのマスタとなるモジュールが１つ存在し、リングで接続されるすべてのモジュールは次に接続されるモジュールへトランザクションを発行するマスタインターフェースと前に接続されているモジュールからトランザクションを受け取るスレーブインターフェースを持ち、マスタモジュールはリングに接続された他のモジュールに対してアクセスを行なうためにマスタインターフェースからコマンドトランザクションを発行する手段を持ち、スレーブとなる他のモジュールは、スレーブインターフェースから受け取ったコマンドトランザクションに従って処理を行なうシステムにおいて、前記スレーブとなるモジュールが前記マスタとなるモジュールに対してコマンドトランザクションの発行を要求する手段を持ち、前記マスタはその要求に従ってコマンドトランザクションを発行する手段を持つことを特徴とする通信方法および装置。
【請求項２】
請求項１に記載のマスタモジュールがスレーブモジュールからコマンドトランザクションの発行を要求され、コマンドトランザクションを発行した後、リターントランザクションによって得られたコマンドトランザクションに対する応答を前記スレーブモジュールに通知する手段を持つことを特徴とする通信方法および装置。
【請求項３】
請求項１あるいは請求項２に記載のスレーブとなるモジュールがマスタとなるモジュールに対してコマンドトランザクションの発行を要求する手段と、マスタとなるモジュールがコマンドトランザクションに対する応答をスレーブとなるモジュールに通知する手段が使用する通信経路が、コマンドトランザクションが使用する通信経路と同一であることを特徴とする請求項１あるいは請求項２に記載の通信方法および通信装置。
【請求項４】
請求項３に記載のマスタモジュールが、スレーブとなるモジュールからのコマンドトランザクションの発行の要求を保持するためのバッファを持ち、複数のスレーブモジュールからの要求を一旦保持し、順次処理していくことを特徴とする請求項３に記載の通信方法および通信装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は情報処理装置のLSI内部の各モジュール間の通信に関し、より詳細には、各モジュールをリング上に接続しての通信に関するものである。
【背景技術】
【０００２】
従来、複数のモジュール間をリング状に接続して通信を行う技術があった(たとえば、特許文献１参照)。このような方法では、モジュールに対して送られてきた命令をそのモジュールが解析を行ない、自分に対する命令であると判断した場合はその命令を行ない、その命令を次のモジュールに転送する。また、自分に対する命令でないと判断した場合はその命令を行わずに次のモジュールに転送する。ここで、自分に対する命令である場合には、その命令を次のモジュールに対して転送しないものや、命令を加工して転送するといった技術もある。
【０００３】
しかし、このような方法では命令を受け取ってから命令の判断を行ない、次のモジュールに転送するまでにはある程度の処理時間が必要で、数サイクルから数十サイクル要する場合が多い。
【０００４】
このようにリング状に接続されたシステムでは、モジュールの数が増えるとその分だけ命令の転送時間がかかり、その時間は各モジュールで要する処理時間に大きく影響される。
【特許文献１】特開平６−７７９７３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、先行技術では、コマンドを発行できるモジュールはマスタモジュールはひとつだけしか存在できず、スレーブモジュールはコマンドを発行することはできないので、スレーブモジュール間の通信はできなかった。従って本発明の目的は、スレーブモジュール間での通信を実現することにある。
【課題を解決するための手段】
【０００６】
本出願に係る発明は、LSI内の複数のモジュールをリング状に接続し、そのリングのマスタとなるモジュールが１つ存在し、リングで接続されるすべてのモジュールは次に接続されるモジュールへトランザクションを発行するマスタインターフェースと前に接続されているモジュールからトランザクションを受け取るスレーブインターフェースを持ち、マスタモジュールはリングに接続された他のモジュールに対してアクセスを行なうためにマスタインターフェースからコマンドトランザクションを発行する手段を持ち、スレーブとなる他のモジュールは、スレーブインターフェースから受け取ったコマンドトランザクションに従って処理を行なうシステムにおいて、前記スレーブとなるモジュールが前記マスタとなるモジュールに対してコマンドトランザクションの発行を要求する手段を持ち、前記マスタはその要求に従ってコマンドトランザクションを発行する手段と、マスタモジュールがスレーブモジュールからコマンドトランザクションの発行を要求をされ、コマンドトランザクションを発行した後、リターントランザクションによって得られたコマンドトランザクションに対する応答を前記スレーブモジュールに通知する手段とを持ち、スレーブとなるモジュールがマスタとなるモジュールに対してコマンドトランザクションの発行を要求する手段と、マスタとなるモジュールがコマンドトランザクションに対する応答をスレーブとなるモジュールに通知する手段が使用する通信経路が、コマンドトランザクションが使用する通信経路と同一であることと、マスタモジュールが、スレーブとなるモジュールからのコマンドトランザクションの発行の要求を保持するためのバッファを持ち、複数のスレーブモジュールからの要求を一旦保持し、順次処理していくことを特徴としている。
【発明の効果】
【０００７】
以上説明したように、マスタモジュールがひとつしか存在しないリングを持つシステムにおいては、コマンドの発行はマスタモジュールしかできないため、スレーブモジュール間での通信はできない。このため、割り込みなどを使って、ソフトウェアによる通信を行なう必要がある。本発明によれば、マスタモジュールがひとつしか存在しないリングを持つシステムにおいて、リングに接続されている任意のスレーブモジュール間での通信を実現することが可能になる。これにより、ソフトウェアの通信によるオーバーヘッドがなくなり、より高速な通信が可能になる。
【発明を実施するための最良の形態】
【０００８】
＜実施形態１＞
上記した本発明の実施の形態について更に詳細に説明すべく、本発明の第１の実施例について、図面を参照して詳細に説明する。
【０００９】
図２には図１のシステムからアクセスリング１１１の部分を抽出した図を示す。まず、以下にこの図を用いて、アクセスリングに注目して、その通信方法を詳細に説明する。
【００１０】
４００は図１のシステムブリッジ１０１のリングアクセスのインターフェース部分と等価であり、本構成でのアクセスリング１１１のマスタとなるマスタモジュールである。４０１〜４０３は図１のモジュール０、２、メモリコントローラ１０５などのリングアクセスインターフェース部分と等価であり、アクセスリング１１１のスレーブとなるスレーブモジュールである。
【００１１】
各モジュールはモジュール間で通信するためのマスタインターフェースとスレーブインターフェースを持っている。
【００１２】
マスタモジュール４００のマスタインターフェースとスレーブモジュール０  ４０１のスレーブインターフェースは通信経路０で接続されている。また、スレーブモジュール０  ４０１のマスタインターフェースとスレーブモジュール１  ４０２のスレーブインターフェースは通信経路１で接続されており、スレーブモジュール１  ４０２のマスタインターフェースとスレーブモジュール２  ４０３のスレーブインターフェースは通信経路２、スレーブモジュール２  ４０３のマスタインターフェースとマスタモジュール４００のスレーブインターフェースは通信経路３でそれぞれ接続されている。
【００１３】
このように構成されるリングでは、コマンド/リターントランザクションが転送される方向は決まっており、マスタモジュール４００→スレーブモジュール０  ４０１→スレーブモジュール１  ４０２→スレーブモジュール２  ４０３→マスタモジュール４００という方向にのみ転送が可能である。
【００１４】
各通信経路は以下に示す信号によって構成されている。
Tsp                      Transaction Start        Master I/F > Slave I/F
Rsp                      Return Start             Master I/F > Slave I/F
Tbsyp                      Transaction Busy      Master I/F > Slave I/F
uaddr_midp[5:0]                  Upper Address / Master ID  Master I/F > Slave I/F
laddr_datap[15:0]          Lower Address / Data  Master I/F > Slave I/F
rd_not_wr                  Read(H)/Write(L)      Master I/F > Slave I/F
errorp                     Error                 Master I/F > Slave I/F
sreqtrp                      Slave Request Transaction    Master I/F > Slave I/F
srdyp                      Slave Ready           Slave I/F > Master I/F
以下に各信号について説明する。
Tsp                       トランザクション Start        Master I/F > Slave I/F
マスタインターフェースは通信相手のスレーブインターフェースからのsrdypがアサートされているのを確認して1サイクル間アサートを行ない、コマンドトランザクションをスタートする。
【００１５】
マスタは次のトランザクションをtbsypがHighの状態を検出後、開始することができる。すなわち、トランザクション間は少なくとも必ず1サイクル存在することになる。
Rsp                    Return Start                Master I/F > Slave I/F
スレーブモジュールからのリターントランザクションを開始する信号。スレーブモジュールはライトが終了するか、リードデータの準備ができたら本信号をアサートし、リターントランザクションを開始する。アサートの条件はtspと同じ。
Tbsyp                Transaction Busy              Master I/F > Slave I/F
コマンド/リターントランザクションが行われている間アサートされる。トランザクションは３サイクルを要するので、常に３サイクル間アサートされる。本信号がディアサートされている時は通信経路はアイドル状態にある。
uaddr_midp[5:0]            Upper Address / Master ID      Master I/F > Slave I/F
Upper AddressとMaster ID（MID）のマルチプレックス信号。
【００１６】
1beat目にUpper Address、2beat目にMaster IDが入る。3beat目はDon't Care。
【００１７】
1beat目のUpper Addressの際はAddress[23:18]が入る。
【００１８】
2beat目のMaster IDの際はuaddr_midp[3:0]にMID[3:0]が入る。上位2bitはDon't Care。
【００１９】
MIDはシーケンスにはまったく影響がない。各スレーブモジュールは単にマスタインターフェースから受け取ったMIDを次へフォワードするだけである。
【００２０】
laddr_datap[15:0]      Lower Address / Data    Master I/F > Slave I/F
Lower AddressとDataのマルチプレックス信号。
【００２１】
1beat目にLower Address、2beat目にDataのMSB側の16bit、3beat目にDataのLSB側の16bitが入る。
【００２２】
1beat目のLower Addressの際はAddress[17:2]が入る。
【００２３】
2beat目のDataの際はData[31:16]が入る。
【００２４】
3beat目のDataの際はData[15:0]が入る。
rd_not_wr                  Read(H)/Write(L)        Master I/F > Slave I/F
転送のリード / ライトを示す。
【００２５】
tbsypがアサートされている間アサートされる。その期間は変更してはならない。
High：リード
Low：ライト
Errorp                    Error                    Master I/F > Slave I/F
エラーをマスタモジュールに通知する。エラーが発生した場合、スレーブモジュールはリターントランザクション時にtbsypがアサートされている間本信号をアサートする。
Sreqtrp                        Slave Request Transaction  Master I/F > Slave I/F
スレーブリクエストコマンド、スレーブリクエストリターンの転送の時にアサートされる。
tbsypがアサートされている間アサートされる。その期間は変更してはならない。
Srdyp                    Slave Ready                Slave I/F > Master I/F
トランザクションを受け取る側のスレーブインターフェースがトランザクションを送る側のマスタインターフェースからのトランザクションを受け取る準備ができていることを示す。本信号がアサートされていれば、マスタインターフェースはいつでもトランザクションを始めることができ、スレーブインターフェースは必ずそのトランザクションを受け取らなければならない。
【００２６】
srdypはトランザクションを受け取ると、一旦ディアサートされる。スレーブモジュールはコマンド トランザクションをデコードし、自分の範囲のアドレスにヒットした場合には、srdypをそのままディアサートし続け、次のトランザクションの受信を防がなければならない。
【００２７】
ヒットしなかった場合で、受け取ったトランザクションを次のモジュールへフォワードできた場合にはsrdypをアサートし、次のトランザクションを受け取る準備をする。
【００２８】
デコードはコマンドトランザクション中に終えるのが望ましい。ヒットした場合はリターントランザクションを発行後、srdypを再びアサートする。
【００２９】
以上の信号は通信経路０〜３で共通であり、それぞれの通信経路での信号名は、信号名の最後に０〜３の番号が追加され、以下のようになる。
【００３０】
通信経路０の信号
tsp0, rsp0, tbsyp0, uaddr_midp0[5:0], laddr_datap0[15:0], rd_not_wr0, errorp0, sreqtrp0, srdyp0
通信経路１の信号
tsp1, rsp1, tbsyp1, uaddr_midp1[5:0], laddr_datap1[15:0], rd_not_wr1, errorp1, sreqtrp1, srdyp1
通信経路２の信号
tsp2, rsp2, tbsyp2, uaddr_midp2[5:0], laddr_datap2[15:0], rd_not_wr2, errorp2, sreqtrp2, srdyp2
通信経路３の信号
tsp3, rsp3, tbsyp3, uaddr_midp3[5:0], laddr_datap3[15:0], rd_not_wr3, errorp3, sreqtrp3, srdyp3
ライト及びリードのコマンドトランザクションはマスタモジュールが発行し、各スレーブモジュールはそれを次のスレーブモジュールにフォワードしていく。スレーブモジュールは受け取ったコマンドトランザクションは自分に対するアクセスであるないに関わらず次のスレーブモジュールにフォワードするので、コマンドトランザクションは最終的にマスタモジュールに戻ってくる。
【００３１】
スレーブモジュールはコマンドトランザクションをフォワードするのと同時にアドレスをデコードし、自分のアドレスにヒットしていればそれ以降のコマンドトランザクションの受信を行わず、自分が管理するレジスタに対してライトあるいはリード作業を行う。
【００３２】
それが終了すると、スレーブモジュールはリターントランザクションを発行する。
【００３３】
このリターントランザクションもそれ以降の各スレーブモジュールによりフォワードされ、最終的にマスタモジュールに到達する。
【００３４】
リターントランザクションを発行したスレーブモジュールは一時ストップしていたコマンドトランザクションの受信を再開する。
【００３５】
マスタモジュールはコマンドトランザクションを発行すると、必ずそのコマンドトランザクションと、そのコマンドトランザクションに対するリターントランザクションを受け取ることを期待している。
【００３６】
複数のコマンドトランザクションを発行した時にも、マスタモジュールは必ずコマンドトランザクションとリターントランザクションを交互に受け取るはずである。
【００３７】
コマンドトランザクションのアドレスにエラーがあり、どのスレーブモジュールも反応しなかったときには、マスタモジュールにリターントランザクションが戻ってこない。これにより、マスタモジュールはコマンドトランザクションにエラーがあったことを知ることができる。
【００３８】
コマンドトランザクションは最初マスタモジュールが発行する。スレーブモジュールはそれを受け取り即座に後のスレーブモジュールにフォワードする。コマンドトランザクションの発行はtbsyp = 0、srdyp = 1の時にのみ可能である。
【００３９】
コマンドトランザクションは最終的にマスタモジュールに到達する。
スレーブモジュールはコマンドトランザクションをフォワードするのと同時にアドレスをデコードする。
【００４０】
ライト時にはライトデータがデータ信号に送られる。リード時には送られない。
【００４１】
ライト/リードに関わらず、トランザクションは3beatで行われる。1beat目はアドレスの転送、2beat目はマスタIDとデータの転送、3beat目はデータの転送である。リード時にはデータ部分はDon't Careである。
【００４２】
スレーブモジュールはコマンドトランザクションを受け取り、自分のアドレスにヒットしていればそれ以降のコマンドトランザクションの受信を一時ストップし、自分が管理するレジスタに対してライトあるいはリード作業を行なう。
【００４３】
それが終了すると、スレーブモジュールはリターントランザクションを発行する。これはライト時にもリード時にも必ず発行される。
【００４４】
リターントランザクションはそれ以降の各スレーブモジュールにより無条件にフォワードされ、最終的にマスタモジュールに到達する。リターントランザクションのアドレスでコードは行われない。
【００４５】
マスタモジュールはこのリターントランザクションを受信することによってコマンドが正常に終了したと判断する。
【００４６】
リード時のリターントランザクションにはリードデータが送られる。ライト時にはデータは送られない。
【００４７】
マスタモジュールがエラーを検知しかつ直ちに処理できない場合、 errorpをtbsypと同じタイミングでアサートしたコマンドトランザクションを発行する。errorpがアサートされているコマンドトランザクションに対してはスレーブモジュールは反応してはならない。エラーはコマンドトランザクションが再びマスタモジュールに戻ってきたタイミングで処理される。
【００４８】
スレーブモジュールがエラーを検知した場合、リターントランザクション発行時にerrorpをtbsypと同じタイミングでアサートする。
【００４９】
アドレスエラーが発生した場合は、コマンドトランザクションに対してどのスレーブモジュールも反応しないことになる。よってリターントランザクションは発生しない。
【００５０】
これはマスタモジュールが検知をする必要がある。マスタモジュールはトランザクションの受信において、コマンドトランザクションを続けて受信した場合にエラーと判断できる。
【００５１】
また、コマンドトランザクションを受信してからタイムアウトカウンタによりカウントを行ない、ある一定時間の間にリターントランザクションを受信しなかった場合にも同様にエラーと判断することができる。
【００５２】
次にトランザクションのシーケンスについて詳しく説明する。図5にはコマンドトランザクションのシーケンスを示す。サイクル１で通信経路がアイドル状態（tbsyp=Low）でスレーブインターフェースがレディ状態（srdyp=High）なので、マスタインターフェースはサイクル２でtspをHighにアサートしてコマンドトランザクションを開始することができる。このコマンドはライトであるのでrd_not_wrをLowにアサートする。スレーブインターフェースはtspのアサートによりコマンドトランザクションの開始を検出し、サイクル３でsrdypをLowにディアサートする。srdypのディアサートのタイミングは、続けてコマンドトランザクションが発行されるのを防ぐためなので、トランザクションが終了するまでであればいつでもかまわない。
【００５３】
uaddr_midp[5:0]、laddr_datap[15:0]には1ビート目から3ビート目までそれぞれ決められたアドレス、マスタID、ライトデータが乗せられている。サイクル４でコマンドトランザクションは終了し、サイクル５でtbsypがLowにディアサートされ、通信経路はアイドル状態に戻っている。
【００５４】
サイクル９ではsrdypがHighにアサートされ、スレーブインターフェースが再度レディ状態に戻っている。これを検出してマスタインターフェースはサイクル１０でtspをHighにアサートし、リードコマンドトランザクションを開始している。ここではリードなので、rd_not_wrはHighにアサートされている。また、laddr_datap[15:0]の2ビート目と3ビート目にはデータが乗せられていない。
【００５５】
図６はマスタモジュール４００から発行されたライトコマンドトランザクションを、通信経路０から受けたスレーブモジュール０  ４０１が、ライトコマンドトランザクションを通信経路１にフォワードし、リターントランザクションを通信経路１に発行する際のシーケンスを示している。
【００５６】
前述した通信経路０でのライトコマンドトランザクションのシーケンスは前述したとおりである。スレーブモジュール０は通信経路０から送られてくるトランザクションを通信経路１へフォワードする。通信経路１のsrdyp1がHighにアサートされている場合、トランザクションは１サイクルのディレイで通信経路１へフォワードされる。一般的には、コマンドトランザクションのフォワードはアドレスのデコードが終了して、自分に対するアクセスではないことが確定した段階で次の経路にコマンドトランザクションをフォワードするため、アドレスデコードが終了するのを待つ必要があるので、１サイクルのディレイでフォワードすることは困難であった。本発明では、アドレスのデコードの結果によらずに必ずコマンドトランザクションをフォワードするプロトコルにしているため、デコードの終了を待つ必要がなく、フォワードのディレイを１サイクルに抑えることができる。これにより、リング接続の最大の欠点であるレイテンシの悪化を最小限に抑えることができる。
【００５７】
スレーブモジュール０  ４０１は、srdyp0をディアサートして次のトランザクションの受信を防いでいる間に、アドレスのデコードを行い、自分に対するアクセスでなければ、srdyp0をアサートして次のトランザクションを受け付ければよい。
【００５８】
スレーブモジュール１  ４０２がトランザクションを受信することができない場合は通信経路１のsrdyp1がLowにディアサートされている。この場合はスレーブモジュール０  ４０１は受信したトランザクションをフォワードすることができないため、内部のバッファにトランザクションを格納し、srdyp1がアサートされた時点であらためてフォワードすることになる。
【００５９】
図６の場合は1サイクルのディレイでコマンドトランザクションがフォワードされている。また、デコードの結果、自分に対するアクセスであったので、srdyp0をディアサートしたまま、リターントランザクションを通信経路１に発行している。
【００６０】
サイクル９で通信経路１がアイドル状態でスレーブモジュール１  ４０２がレディ状態なので、スレーブモジュール０  ４０１はサイクル１０でrspをHighにアサートし、リターントランザクションを開始する。シーケンスはコマンドトランザクションと同じで、tspをアサートするところをrspをアサートするというところが異なる。また、ライトコマンドに対するリターントランザクションではデータを乗せる部分はDon't Careでよい。
【００６１】
このようにして発行されたリターントランザクションはコマンドトランザクションと同様に通信経路を次々にフォワードされてゆき、最終的にマスタモジュールへ戻る。各スレーブモジュールはリターントランザクションを受信した場合はアドレスのデコードを行なわず、ヒットしなかったコマンドトランザクションと同様に次の通信経路にフォワードされる。
【００６２】
以上のようにマスタモジュール４００から発行されたコマンドトランザクションは、ターゲットとなるスレーブモジュールでリターントランザクションが発行され、マスタモジュール４００に戻ってくる時には必ずコマンドトランザクションの後にリターントランザクションも続けて送られてくる。
【００６３】
マスタモジュール４００はコマンドトランザクションを発行した後、そのコマンドトランザクションとリターントランザクションが戻ってくる前に、次のコマンドトランザクションを発行することが可能である。これにより、リング内にパイプライン的にトランザクションを発行することが可能になる。
【００６４】
図７はマスタモジュール４００から発行されたリードコマンドトランザクションを、通信経路０から受けたスレーブモジュール１が、リードコマンドトランザクションを通信経路１にフォワードし、リターントランザクションを通信経路１に発行する際のシーケンスを示している。
【００６５】
シーケンス的にはライトコマンドトランザクションとほとんど同じである。rd_not_wrが反転することと、リードコマンドトランザクションのデータ部がDon't Careとなり、リターントランザクションのデータ部にはリードデータが乗せられるということが異なるだけである。
【００６６】
以上、アクセスリングに注目して、一般的な通信方法を詳細に説明した。以下にスレーブモジュール間の通信方法を詳細に説明する。
【００６７】
スレーブモジュール間の通信というのはスレーブモジュールが他のスレーブモジュールに対してライトあるいはリードを行なうということである。しかし、本システムでは、コマンドトランザクションはマスタモジュールしか発行できない。そこで、本発明ではスレーブリクエストコマンドとスレーブリクエストリターンというトランザクションを定義した。
【００６８】
スレーブリクエストコマンドトランザクションはsreqtrp信号によって通常のコマンドトランザクションと区別される。また、スレーブリクエストリターントランザクションもsreqtrp信号によって通常のリターントランザクションと区別される。ここで、スレーブリクエストコマンドとスレーブリクエストリターンでは、uaddr_midp[5:0]にMaster IDが入るべきサイクルではSlave IDが代わりに入ることになる。Slave IDは各スレーブモジュール毎に一意に決められている。その他のシーケンス、および信号の意味に関しては、スレーブリクエストコマンドトランザクションはコマンドトランザクションと、また、スレーブリクエストリターントランザクションはリターントランザクションと同じである。
【００６９】
スレーブリクエストコマンドトランザクションはスレーブモジュールから発行され、マスタモジュールに対してコマンドトランザクションの発行を要求するものである。スレーブリクエストコマンドトランザクションを受けたマスタモジュールはスレーブリクエストコマンドの内容をコピーしてコマンドを作成し、コマンドトランザクションを発行する。マスタモジュールは発行したコマンドトランザクションに対するコマンドリターントランザクションを受けると、今度はコマンドリターンの内容をコピーしてスレーブリクエストリターンを作成し、スレーブリクエストリターントランザクションを発行する。最初にスレーブリクエストコマンドトランザクションを発行したスレーブモジュールはスレーブリクエストリターントランザクションをモニタし、自分のスレーブIDのスレーブリクエストリターントランザクションを受け取った時、スレーブリクエストコマンドが終了したことを知ることができる。リード時にはこのスレーブリクエストリターントランザクションにリードデータが入っているので、リードデータを受け取ることができる。
【００７０】
スレーブリクエストコマンドトランザクションやスレーブリクエストリターントランザクションを受け取ったスレーブモジュールはそれをフォワードするだけで、それに対して新たなリターントランザクションなどを発生することはしない。
【００７１】
図３には図２においてマスタモジュール４００を詳細に説明した図を示す。
【００７２】
図３において、４１０はCPUなどと通信を行なうバスインターフェース、４１１はバスインターフェース４１０からの要求を受けてリングに対してトランザクションを発行するリングマスタインターフェース、４１２はリングからのトランザクションを受け取り、バスインターフェース４１０に通知するリングスレーブインターフェースである。
【００７３】
４１３は受け取ったスレーブリクエストコマンド、スレーブリクエストリターンを処理するスレーブリクエストコントローラ、４１４はスレーブリクエストコマンドを一時保存しておくスレーブリクエストバッファである。このスレーブリクエストバッファ４１４には最低リング内に接続されているスレーブモジュールと同じ数のスレーブリクエストコマンドを保持できなければならない。
【００７４】
図４はスレーブモジュールを詳細に説明した図である。図４において、４２１は通信経路１との通信を制御するスレーブシーケンサ、４２２は通信経路２との通信を制御するマスタシーケンサ、４２３は通信経路１からのトランザクションを一時保持することのできるバッファ、４２４は通信経路１からのトランザクションのデコードを行なうデコーダ、４２５はスレーブモジュールのメインロジック、４２６はメインロジック４２５のレジスタへのアクセスを制御するレジスタアクセスコントローラ、４２７はメインロジック４２５からの要求により、スレーブリクエストの発行を制御するスレーブリクエストコントローラである。
【００７５】
スレーブモジュール１ ４０２からスレーブモジュール２ ４０３の内部レジスタへのリードアクセスを考える。
【００７６】
メインロジック４２５からスレーブリクエストコントローラ４２７にリード要求が出される。スレーブリクエストコントローラ４２７はスレーブシーケンサ４２１を介して通信経路１からのトランザクションを一時遮断し、マスタシーケンサ４２２を介して通信経路２に対してスレーブリクエストコマンドを発行する。スレーブリクエストコマンドのアドレスはスレーブモジュール２ ４０３の内部レジスタのアドレス、マスタIDにはスレーブモジュール１ ４０２のスレーブID＝１が入る。この時、スレーブモジュール１ ４０２がレジスタアクセスされている最中であった場合は、それが終了するまで待つ。スレーブリクエストコマンドの発行が完了すると、通信経路１からのトランザクションを遮断していたのをやめ、トランザクションを受け取る準備をする。スレーブモジュール１ ４０２はスレーブリクエストコマンドをひとつ発行すると、それに対するスレーブリクエストリターンを受け取るまで、次のスレーブリクエストコマンドを発行することはできない。
【００７７】
通信経路２に発行されたスレーブリクエストコマンドは、まずスレーブモジュール２ ４０３へ送られるが、スレーブモジュール２ ４０３は単に通信経路３にフォワードを行なうだけである。スレーブリクエストコマンドは最終的にマスタモジュール４００に到達する。
【００７８】
リングスレーブインターフェース４１２はスレーブリクエストコマンドを受け取るとスレーブリクエストコントローラ４１３に通知する。スレーブリクエストコントローラ４１３はスレーブリクエストバッファ４１４にスレーブリクエストコマンドを格納する。スレーブリクエストコントローラ４１３は同時にリングマスタインターフェース４１１にスレーブリクエストコマンドの内容と同じコマンドトランザクションの発行を要求する。リングマスタインターフェース４１１はそれを受けて通信経路０にコマンドトランザクションを発行する。マスタモジュール４００は、ひとつのスレーブリクエストコマンド受け付けた後、それに対するスレーブリクエストリターンを発行し、最終的にそれが戻ってきてスレーブリクエストが完了するまでの間に、別のスレーブリクエストコマンドを受け取った場合、すぐにはスレーブリクエストコマンドを発行せず、スレーブリクエストバッファ４１４に格納する。ひとつのスレーブモジュールはひとつずつしかスレーブリクエストを発行できないので、スレーブリクエストバッファ４１４には最大でスレーブリクエストを発行できるスレーブモジュールの数のスレーブリクエストが保存される可能性がある。
【００７９】
コマンドトランザクションはリング内を次々にフォワードされながらマスタモジュール４００に戻ってくる。スレーブモジュール２ ４０３はコマンドトランザクションに対して、内部レジスタのリードデータを用意し、リターントランザクションを通信経路３に発行する。リターントランザクションを受け取ったマスタモジュール４００のリングスレーブインターフェース４１２はスレーブリクエストコントローラ４１３に通知し、スレーブリクエストコントローラ４１３はリングマスタインターフェース４１１にリターントランザクションと同じ内容のスレーブリクエストリターンの発行を要求する。リングマスタインターフェース４１１はそれを受けて通信経路０にスレーブリクエストリターンを発行する。
【００８０】
スレーブリクエストリターンはリング内を次々にフォワードされながらマスタモジュール４００に戻ってくる。スレーブモジュール１ ４０２はスレーブリクエストリターンをモニタし、自分のスレーブIDのスレーブリクエストリターンを受け取った時、スレーブリクエストコマンドが終了したことを知り、そのスレーブリクエストリターンのデータ部からリードデータを得る。
【００８１】
最終的にスレーブリクエストリターンを受け取ったマスタモジュール４００のリングスレーブインターフェース４１２は、スレーブリクエストコントローラ４１３に通知し、スレーブリクエストコントローラ４１３はスレーブリクエストバッファ４１４に格納していたスレーブリクエストコマンドを削除する。スレーブリクエストコントローラ４１３はスレーブリクエストバッファ４１４に別のスレーブリクエストが格納されている場合は、コマンドリングマスタインターフェース４１１に格納されているスレーブリクエストコマンドの内容と同じコマンドトランザクションの発行を要求する。以下、スレーブリクエストバッファ４１４にスレーブリクエストコマンドがなくなるまで同様の処理を順次行なう。以上説明した処理はライトコマンドにおいても同様である。
【００８２】
マスタモジュール４００は受け取ったスレーブリクエストコマンドにエラーがあった場合はコマンドトランザクションを発行せずにerrorpをアサートしながらスレーブリクエストリターンを発行する。スレーブモジュールはerrorpがアサートされていることで自分が発行したスレーブリクエストコマンドにエラーがあったことを知ることができる。また、コマンドトランザクションが発行され、それに対してターゲットとなるスレーブモジュールからerrorpがアサートされたリターントランザクションが発行された場合にもマスタモジュール４００はerrorpをアサートしながらスレーブリクエストリターンを発行する。
【００８３】
本発明が特定の実施例に関して図示されかつ説明されたが、さらに他の修正および改善が可能であろう。例えば、ここに述べた通信経路の信号は、他の名称を持つが同じ基本的な機能を果すものとすることができる。各信号のビット幅、および他の値は設計に応じて変えることができる。任意の数のスレーブモジュールをリングに接続することができる。また、エラーの発生がない設計を行なえば、エラー信号を省くことができる。
【００８４】
各モジュールを接続するデータ転送用のシステムバスは１つのバスで各モジュールを接続している必要はなく、間にバスブリッジを介して階層化されていてもよく、また、個別のバスで分離されて接続されていてもよい。さらには、接続の形態として、マルチプレックスバス、スター接続、などどのような形状で接続されていてもかまわない。
【００８５】
さらに、本実施例では信号線数の削減のためにアドレス、データがマルチプレックスされているが、マルチプレックスの段数は任意の段数にしてもよい。たとえば、信号線を１本にし、シリアル通信のようにアドレス、データを送ることもできる。逆に、すべての信号線を用意すればマルチプレックスを行なう必要はなくなる。この場合、トランザクションは１サイクルで終了することになり、高速化が実現できる。
【００８６】
したがって、本発明は示された特定の形式に限定されるものではなく、かつ添付の特許請求の範囲において本発明の精神および範囲から離れることのない全ての修正をカバーすることを考えていることが理解されるべきである。
【図面の簡単な説明】
【００８７】
【図１】本発明の実施の形態の構成を示すブロック図。
【図２】図１のシステムからアクセスリングの部分を抽出した図。
【図３】本発明の実施例のマスタモジュールを詳細に説明した図。
【図４】本発明の実施例のスレーブモジュールを詳細に説明した図。
【図５】コマンドトランザクションのシーケンス。
【図６】マスタモジュールから発行されたライトコマンドトランザクションを、通信経路０から受けたスレーブモジュール１が、ライトコマンドトランザクションを通信経路１にフォワードし、リターントランザクションを通信経路１に発行する際のシーケンス。
【図７】マスタモジュールから発行されたリードコマンドトランザクションを、通信経路０から受けたスレーブモジュール１が、リードコマンドトランザクションを通信経路１にフォワードし、リターントランザクションを通信経路１に発行する際のシーケンス。
【符号の説明】
【００８８】
１００  CPU
１０１  システムバスブリッジ
１０２  アクセスされる対象であるスレーブモジュール０
１０３  アクセスされる対象であるスレーブモジュール１
１０４  アクセスされる対象であるスレーブモジュール２
１０５  メモリコントローラ
１０６  システムメモリ
１１０  LSI内の各モジュールを接続するシステムバス
１１１  各モジュールをリング状に接続するアクセスリング
１２０  リングブリッジ
４００  第2の実施例でのアクセスリングのマスタとなるマスタモジュール
４０１  アクセスリングのスレーブとなるスレーブモジュール０
４０２  アクセスリングのスレーブとなるスレーブモジュール１
４０３  アクセスリングのスレーブとなるスレーブモジュール２
４１０  CPUなどと通信を行なうバスインターフェース
４１１  リングマスタインターフェース
４１２  リングスレーブインターフェース
４１３  スレーブリクエストコントローラ
４１４  スレーブリクエストコマンドバッファ
４２１  スレーブシーケンサ
４２２  マスタシーケンサ
４２３  バッファ
４２４  デコーダ
４２５  メインロジック
４２６  レジスタアクセスコントローラ
４２７  スレーブリクエストコントローラ
【図１】
2006109055.tif 000003
【図２】
2006109055.tif 000004
【図３】
2006109055.tif 000005
【図４】
2006109055.tif 000006
【図５】
2006109055.tif 000007
【図６】
2006109055.tif 000008
【図７】
2006109055.tif 000009