トップ :: G 物理学 :: G06 計算;計数
【発明の名称】 バスサイクル制御装置 【発明者】 【氏名】瀬沼 功一 【課題】 複雑なバスサイクル動作を容易に実行することができ、しかもバスサイクル動作がハードウェアの構成・性能に依存することがないバスサイクル制御装置を提供する。
【解決手段】 予め設定されたバスサイクルに基づいてPCIバス2上の他のデバイスに出力すべき信号のクロックフェーズ毎の出力状態をビット列で示したビット列パラメータを記憶するビット列パラメータ用メモリ14と、このビット列パラメータ用メモリ14に記憶されたビット列パラメータに基づいて他のデバイスにPCIインタフェース信号を出力するドライブ回路部4と、ドライブ回路部4から出力されたPCIインタフェース信号に応じて他のデバイスから入力されたPCIインタフェース信号およびビット列 ... もっと見る
トップ :: G 物理学 :: G06 計算;計数
【発明の名称】 バスサイクル制御装置 【発明者】 【氏名】瀬沼 功一 【課題】 複雑なバスサイクル動作を容易に実行することができ、しかもバスサイクル動作がハードウェアの構成・性能に依存することがないバスサイクル制御装置を提供する。
【解決手段】 予め設定されたバスサイクルに基づいてPCIバス2上の他のデバイスに出力すべき信号のクロックフェーズ毎の出力状態をビット列で示したビット列パラメータを記憶するビット列パラメータ用メモリ14と、このビット列パラメータ用メモリ14に記憶されたビット列パラメータに基づいて他のデバイスにPCIインタフェース信号を出力するドライブ回路部4と、ドライブ回路部4から出力されたPCIインタフェース信号に応じて他のデバイスから入力されたPCIインタフェース信号およびビット列パラメータに基づいてドライブ回路部4の信号出力を制御するコントロール回路部5とを備えた。 【特許請求の範囲】
【請求項1】予め設定されたバスサイクルに基づいて他のデバイスに出力すべき信号のクロックフェーズ毎の出力状態をビット列で示したビット列パラメータを記憶するビット列パラメータ記憶手段と、このビット列パラメータ記憶手段に記憶されたビット列パラメータに基づいて前記他のデバイスに信号を出力する信号出力手段と、この信号出力手段から出力された信号に応じて前記他のデバイスから入力される信号および前記ビット列パラメータに基づいて、前記信号出力手段による信号出力を制御する信号出力制御手段と、を備えたことを特徴とするバスサイクル制御装置。
【請求項2】予め設定されたバスサイクルに基づいて他のデバイスに出力すべき信号のうち全クロックフェーズで出力する必要がある信号のクロックフェーズ毎の出力状態をビット列で示したビット列パラメータを記憶するビット列パラメータ記憶手段と、前記他のデバイスに出力すべき信号のうち全クロックフェーズで出力する必要がない他の信号について、信号出力を行うべきクロックフェーズとその時の信号情報とを対応付けたパラメータを記憶するパラメータ記憶手段と、このパラメータ記憶手段に記憶されたパラメータおよび前記ビット列パラメータに基づいて前記他のデバイスに信号を出力する信号出力手段と、この信号出力手段から出力された信号に応じて前記他のデバイスから入力される信号および前記ビット列パラメータに基づいて、前記信号出力手段による信号出力を制御する信号出力制御手段とを備えたことを特徴とするバスサイクル制御装置。
【請求項3】前記パラメータ記憶手段に記憶される他の信号は、前記他のデバイスにアクセスするためのアドレス信号、前記他のデバイスにデータを書き込むためのライト信号および前記他のデバイスから読み込んだデータと比較するためのリード期待値信号の少なくとも一つを含むことを特徴とする請求項2記載のバスサイクル制御装置。
【請求項4】予め設定されたバスサイクルに基づいて他のデバイスに出力すべき信号のクロックフェーズ毎の出力状態をビット列で示したビット列パラメータを記憶するビット列パラメータ記憶手段と、このビット列パラメータ記憶手段に記憶されたビット列パラメータに基づいて前記他のデバイスに信号を出力することが可能であるか否かを判断する判断手段と、この判断手段により前記ビット列パラメータに基づいた信号出力が可能であると判断されたときは前記ビット列パラメータに基づいて前記他のデバイスに信号を出力し、前記ビット列パラメータに基づいた信号出力が不可能であると判断されたときは予め設定された前記バスサ イクルとは異なる別のバスサイクルに基づいて前記他のデバイスに信号を出力する信号出力手段と、この信号出力手段から出力された信号に応じて前記他のデバイスから入力される信号および前記ビット列パラメータに基づいて前記信号出力手段による信号出力を制御する信号出力制御手段とを備えたことを特徴とするバスサイクル制御装置。
【請求項5】前記信号出力手段に設定される別のバスサイクルは、バスサイクル動作が中断されてから再開するまでの期間に対応させて設定されることを特徴とする請求項4記載のバスサイクル制御装置。
【請求項6】前記信号出力手段は、前記別のバスサイクルにおいて出力すべき信号のクロックフェーズ毎の出力状態をビット列で示した予備ビット列パラメータを記憶しており、前記判断手段において前記ビット列パラメータに基づいた信号出力が不可能であると判断されたときは前記予備ビット列パラメータに基づいて前記他のデバイスに信号を出力することを特徴とする請求項4記載のバスサイクル制御装置。
【請求項7】予め設定されたバスサイクルに基づいて他のデバイスに出力すべき信号のクロックフェーズ毎の出力状態をビット列で示したビット列パラメータを記憶するビット列パラメータ記憶手段と、このビット列パラメータ記憶手段に記憶されたビット列パラメータのうち有効にすべき有効ビット列を指定する有効ビット列指定手段と、この有効ビット列指定手段により指定された有効ビット列に基づいて前記他のデバイスに信号を出力する信号出力手段と、この信号出力手段から出力された信号に応じて前記他のデバイスから入力される信号および前記有効ビット列に基づいて、前記信号出力手段による信号出力を制御する信号出力制御手段とを備えたことを特徴とするバスサイクル制御装置。
【発明の詳細な説明】 【0001】
【発明の属する技術分野】本発明は、PCIバスに接続して使用されるPCIマスタデバイスに適用されるバスサイクル制御装置に関する。
【0002】
【従来の技術】従来から、PCI(Peripheral Component Interconnect)バスは、パーソナルコンピュータなどのローカルバスとして一般的に用いられている。
【0003】PCIバスは、共通のクロックを基準として動作する同期型のバスであり、アドレス情報とデータ情報とを同一のバス信号線を用いて時分割で出力している。すなわち、一回のバスサイクルはバス信号がアドレスとしての意味を持つアドレスフェーズと、ライト(リ ード)データとしての意味を持つデータフェーズとで構成される。後者のデータフェーズでは、複数回のデータ転送を連続して行うことが可能であり、データフェースが複数回のデータ転送を持つ場合をバースト転送と呼び、一回のデータ転送である場合をシングル転送と呼んでいる。
【0004】PCIバスに接続されるデバイスとしては、イニシエータとなってPCIバスにアドレスやコマンドを送出することによりバスサイクルを開始するPCIマスタデバイス(以下、PCIマスタ)と、PCIマスタの送出したアドレスやコマンドを受け取ってバスサイクルに応答するPCIターゲットデバイス(以下、PCIターゲット)とがある。
【0005】ここで、PCIバスには複数のPCIマスタと複数のPCIターゲットとを接続することが可能であるため、通常のデータ転送は一つのPCIマスタと一つのPCIターゲット間で行われる(ただし、一部のバスコマンドでは一対多のデータ転送となる)。
【0006】この場合、PCIマスタがドライブする主なインタフェース信号としては、アドレスおよびデータを示すAD[31:00]、バスコマンドおよびバイトイネーブルを示すC/BE[3:0]#、リクエストを示すREQ#、サイクルフレームを示すFRAME#、イニシエータレディを示すIRDY#などがあり、PCIターゲットがドライブする主なインタフェース信号としては、AD[31:00]、デバイスセレクトを示すDEVSEL#、ターゲットレディを示すTRDY#、ストップを示すSTOP#などがある。また、バスアービタがドライブする主なインタフェース信号としてはグラントを示すGNT#がある。なお、信号名の後の#記号は、その信号が低電圧(Low)の時にアクティブ状態になることを示しており、#記号が付かない信号は高電圧(High)でアクティブ状態になることを示している。
【0007】以下、図12を参照してバスサイクルの例について説明する。これは、バースト転送によるライトサイクルの例である。まず、バスがアイドル状態の時(クロックフェーズ01)、バス転送を要求するPCIマスタがREQ#をアサートし(クロックフェーズ02)、これに応じてバスアービタがGNT#をアサートすることによりバスの使用許可が得られる(クロックフェーズ03)。そして、PCIマスタがFRAME#をアサートしてバスサイクルが開始される(クロックフェーズ04)。なお、バスアービタによりGNT#がアサートされていても、バスがアイドル状態でないとき、すなわち他のPCIマスタがバスサイクル実行中の時はFRAME#をアサートすることができない。
【0008】バスサイクルが開始されると、まずアドレスフェーズとしてPCIマスタはAD[31:00]でアドレスをドライブし、C/BE[3:0]#でコマン ドをドライブする(クロックフェーズ04)。さらに、データフェーズとしてIRDY#をアサートして(クロックフェーズ05)、C/BE[3:00]#によりデータを転送する。一方、PCIターゲットはPCIマスタによりドライブされたアドレスおよびコマンドをデコードし、自身が応答すべきサイクルであることを確認してDEVSEL#をアサートし(クロックフェーズ06)、データフェーズとしてTRDY#をアサートしてPCIマスタから転送されるデータを受ける。
【0009】この例では、クロックフェーズ05からクロックフェーズ12までがデータフェーズに対応しているが、実際にはIRDY#とTRDY#との両方がアサートされているクロックでデータ転送が成立する。すなわち、データ転送が成立するのはクロックフェーズ07,09および11であり、クロックフェーズ08ではPCIマスタのウェイト要求により、クロックフェーズ6,10ではPCIターゲットのウェイト要求によりデータ転送が成立しない。
【0010】この後、バースト転送の中断要求としてPCIターゲットによりSTOP#がアサートされ(クロックフェーズ11)、これに応じたPCIマスタはFRAME#をデアサートし(クロックフェーズ12)、さらにIRDY#をデアサートして(クロックフェーズ13)、バスサイクルが終了する。
【0011】この例では、PCIターゲットの要求によりデータ転送が中断されているためPCIマスタは未転送のデータを保持している。そして、残りのデータ転送を行うため再度のバス転送を要求して、同様の処理が繰り返される。この場合、PCIマスタは中断されたデータ転送の続きを示すアドレスをドライブする必要がある。すなわち、PCIマスタはアドレスカウント用のカウンタを内部に持っており、それをデータフェーズでの転送成立毎にカウントアップすることにより、データ転送が中断された後の再開に備えている。
【0012】また、STOP#アサートによりバースト転送が中断されているが、通常はSTOP#のデアサートが継続している限り、PCIマスタはバースト転送を継続できる(実際には他の条件も必要)。そして、データ転送が中断されることなく予定通りに行われた後でバスサイクルを終了させる場合も、図12中のクロックフェーズ12,13のようにFRAME#、IRDY#の順に信号をデアサートする。なお、STOP#はデアサートのままとする。
【0013】上述した例は、PCIのバス動作仕様においてディスコネクトと呼ばれている動作であり、この他にもPCIバスにはマスタアボート、ターゲットアボート、リトライと呼ばれる動作がある。つまり、バスサイクルの動作はPCIマスタの出力する信号のみでは決まらず、セントラルリソースであるREQ#/GNT#アービタや、PCIターゲットからの信号にも依存してい る。
【0014】ところで、一般的にPCIマスタとしての機能を持つデバイスとしては、PCIデバイスの動作やPCIバス転送に関わるコンピュータシステムのトラブルなどの評価・解析を目的としたもの(以下、評価・解析用デバイス)と、SCSIコントローラやカードバスコントローラなどのようにPCIバス上で通常の処理を行うためのもの(以下、通常処理用デバイス)とがある。
【0015】評価・解析用デバイスとしては、例えばPCIアドインカードなどがあり、PCIバスに接続されている他のデバイスの動作検証や不都合の起こったバス動作の再現を行うためにPCIマスタの機能を有し、希望するバスサイクル動作を発生できるようになっている。
【0016】このような評価解析用デバイスに実装されているPCIマスタは、PCIバス仕様に則ったインタフェース制御を行うPCIインタフェース部とPCIインタフェース部を制御するための制御パラメータを設定するレジスタ部とを持っている。この場合、制御パラメータとして、例えばFRAME#アサートから最初のIRDY#アサートまでのクロック数、バースト転送中のウェイト数(IRDY#デアサートからIRDY#アサートまでのクロック数)、バースト転送数、サイクルの繰り返し数、コマンドタイプの指定、バイトイネーブルの指定、アドレスの指定、データの指定、データパリティの指定、パリティエラーの指定などを予め定義しておき、これらのレジスタ設定に従ったバスサイクルをPCIインタフェース部によりPCIバス上に発生させる。
【0017】この場合、PCIインタフェース部は制御パラメータに対応するカウンタを持っており、クロック数や実行回数をアップカウントあるいはダウンカウントすることにより信号制御を行っている。
【0018】例えば、制御パラメータとして以下のような設定がなされたとする。
FRAME#アサートから最初のIRDY#アサートまでのクロック数:3バースト転送中のウェイト:2バースト転送数:2サイクルの繰り返し数:2コマンドタイプの指定:メモリライトバイトイネーブルの指定:BE[3:0]#=”0000”bアドレスの指定:AD[31:00]:””hデータの指定:AD[31:00]=”aaaaaaaa”h(データパリティ、パリティエラーの指定は省略)
この場合、PCIインタフェース部は図13に示されるようなバスサイクルを発生させる。すなわち、アドレス フェーズであるクロックフェーズ03には、AD[31:00]に””hがドライブされ、コマンドタイプがメモリライトであることからC/BE[3:0]#に”0111”bがドライブされる。
【0019】次に、FRAME#アサートから最初のIRDY#アサートまでのクロック数が3であることからクロックフェーズ03,04,05をカウントし、クロックフェーズ06で最初のIRDY#をアサートする。また、バースト転送時のウエイト設定数が2であることからクロックフェーズ07,08をカウントし、この期間のIRDY#をデアサートする。
【0020】さらに、データ設定が”aaaaaaaa”hであることによりクロックフェーズ04,05,06とクロックフェーズ07,08,09でAD[31:00]に”aaaaaaaa”hがドライブされ、バイトイネーブル設定が”0000”bであることによりクロックフェーズ04,05,06とクロックフェーズ07,08,09でC/BE[3:0]#に”0000”bがドライブされる。
【0021】そして、バースト転送数が2であることによりデータ転送成立回数が2回になったクロックフェーズ09で最初のサイクルが終了し、サイクルの繰り返し数が2であることからクロックフェーズ11でFRAME#が再びアサートされて、同様のサイクルが繰り返された後、処理が終了する。
【0022】以上のようにバスサイクル動作の基本制御は、アドレスやデータのように制御パラメータ値をそのまま、あるいはインクリメントなどの処理を行ってからPCIバスに出力する処理と、クロック数や特定の条件が成立した回数をカウントし、そのカウント値と制御パラメータ値とが一致したときに制御信号のアサート/デアサートを行う処理とからなる。ただし、実際のバスサイクル動作では制御パラメータ設定とバスサイクル動作とが一致するような理想的なPCIターゲット応答ばかりではなく、カウント値と制御パラメータ値とが一致する前や一致した後で制御信号を変化させる必要が生じたり、データ転送の中断などによって前の状態を保持していなければならないといった事態が多々生じる。
【0023】一方、通常処理用デバイスはSCSIドライブやカードバスカードを制御することが本来の機能であるが、PCIバスをインタフェースとしてデータ転送を行うためにPCIマスタとしての機能を持っている。
【0024】そして、実際には図14に示されるようにPCIバス仕様に則ったインタフェース制御を行うPCIインタフェース部61と、デバイス本来の機能に依存するデータ処理部63と、これらの間のデータ転送を効率よく行うためにリードデータバッファ66やライトデータバッファ67を備えたデータバッファ部62とを有していることが多い。
【0025】この場合、例えばPCIライトバスサイク ルに対応するデータ転送の要求が発生すると、データ処理部63はバスサイクルに使用するアドレス情報を示したアドレスデータ、同じくバスサイクルに使用するコマンドタイプ情報を示したコマンドデータ、そしてPCIインタフェース部61に通知すべきバスサイクルの開始指示やPCIインタフェース部61から通知されるバスサイクルの実行結果(マスタアボート、ターゲットアボート)などを示すコントロール信号によって、PCIインタフェース部61に対してPCIバス転送の開始を指示する。
【0026】次に、データ処理部63はライトデータバッファ67のフルフラグであるsig3−6を監視しながらライトパルスであるsig3−8を発行することにより、ライトデータバッファ67にライトデータの積み込みを行う。このとき、sig3−6によりライトデータバッファ67が満杯になれば、積み込みを保留しておく。
【0027】一方、PCIインタフェース部61はバースト転送中断後の再開およびバースト転送数を制御するために、アドレスカウンタ64にアドレスデータを取り込み、コマンドバッファ65にコマンドデータを取り込んで保持し、同時にREQ#をアサートしてバスサイクルの開始を要求する。
【0028】そして、PCIインタフェース部61はGNT#によりバスアイドルを確認した後、実際にバスサイクルを開始してFRAME#、AD[31:00]、C/BE[3:0]#などの信号を出力する。このとき、ライトデータバッファ67のエンプティプラグであるsig3−5を監視し、ライトデータバッファ67にデータが詰まれていれば、リードパルスであるsig3−7をライトデータバッファ67に向けて発行し、ライトデータバッファ67内のデータを読み出してPCIバスに出力する。同時に、IRDY#もアサートする。
【0029】また、PCIインタフェース部61はsig3−5によりライトデータバッファ67が空であることが示されれば読出しを保留し、必要であればIRDY#をデアサートしてPCIバスサイクルに(PCIマスタからの)ウェイトを挿入する。以下同様に、PCIインタフェース部61はsig3−5の監視とデータ読出しとを続けながらバースト転送を継続し、データ処理部63から転送終了指示を受けた場合、あるいはアドレスカウンタ64が最大値に達した場合にバスサイクルを終了させる。
【0030】ただし、PCIターゲットからのSTOP#アサートによって転送中断の要求を受けた場合、PCIインタフェース部61は一時バスサイクルを中断終了する。そして、その後でREQ#を再びアサートしてバスアイドルを確認し、アドレスカウンタ64およびコマンドバッファ65に保持された中断時の保留値を用いて、中断された以降のバスサイクルを再度実行する。
【0031】このように、通常処理用デバイスのPCIマスタデバイスによるバスサイクル動作はハードウェアの構成や性能、例えばデータ処理部63の処理能力、データバッファ部62のバッファ段数やビット幅、アドレスカウンタ64のビット長などによって決まってしまう。
【0032】
【発明が解決しようとする課題】上述したように、従来からPCIマスタの機能を持つデバイスとしては評価・解析用デバイスと通常処理用デバイスとがあった。しかし、評価・解析用デバイスでは一つのバスサイクル動作を設定するためにクロック数や繰り返し数などの制御パラメータを詳細に定義しなけらばならず、例えばデータ転送の成立毎に異なったウェイトを挿入するといった複雑なバスサイクルの動作制御を行おうとすると、設定すべき制御パラメータが非常に複雑になり、そのための制御回路も複雑化するという問題があった。さらに、制御パラメータがバスサイクル動作に及ぼす効果を熟知した上で設定しなければ、所望とするバスサイクル動作が得られないため、設定そのものが難しいという問題があった。
【0033】一方、通常処理用デバイスではデータ処理部の能力、データバッファ部のバッファ段数やビット数、あるいはアドレスカウンタのビット長などのハードウェアの構成や性能でバスサイクル動作が定められてしまうため、例えばPCIターゲットの能力に見合った制御を行ったり、複数のPCIマスタが競合する状況でバスの抑制制御を行うといったことができなかった。従って、複数のデバイスがPCI上に接続されていたとしても、一つのPCIマスタが必要以上にバスを占有してしまい、PCIバスを効率よく利用できないという問題があった。
【0034】本発明は、このような問題を解決するためになされたもので、複雑なバスサイクル動作を容易に実行することができ、しかもバスサイクル動作がハードウェアの構成・性能に依存することがないバスサイクル制御装置を提供することを目的とする。
【0035】
【課題を解決するための手段】上記課題を解決するため、本発明は予め設定されたバスサイクルに基づいて他のデバイスに出力すべき信号のクロックフェーズ毎の出力状態をビット列で示したビット列パラメータを記憶するビット列パラメータ記憶手段と、このビット列パラメータ記憶手段に記憶されたビット列パラメータに基づいて他のデバイスに信号を出力する信号出力手段と、この信号出力手段から出力された信号に応じて他のデバイスから入力された信号およびビット列パラメータに基づいて信号出力手段による信号出力を制御する信号出力制御手段とを備えたことを特徴とする。
【0036】この場合、ビット列パラメータの設定内容 に従ってバスサイクル動作が実行されるので、PCIマスタデバイスの展開するバスサイクル動作を意図的に制御することができ、しかもバスサイクル動作がハードウェアの構成・性能に依存することがなくなる。また、ユーザは所望とするバスサイクルに応じてクロックフェーズ毎の信号の出力状態を設定するだけでよく、これはタイミングチャートなどを見て直感的に設定できるので、複雑なバスサイクル動作でも容易に実行することが可能である。
【0037】本発明の他の態様では、予め設定されたバスサイクルに基づいて他のデバイスに出力すべき信号のうち全クロックフェーズで出力する必要がある信号のクロックフェーズ毎の出力状態をビット列で示したビット列パラメータを記憶するビット列パラメータ記憶手段と、他のデバイスに出力すべき信号のうち全クロックフェーズで出力する必要がない他の信号について、信号出力を行うべきクロックフェーズとその時の信号情報とを対応付けたパラメータを記憶するパラメータ記憶手段と、このパラメータ記憶手段に記憶されたパラメータおよびビット列パラメータに基づいて他のデバイスに信号を出力する信号出力手段と、この信号出力手段から出力された信号に応じて他のデバイスから入力された信号およびビット列パラメータに基づいて、信号出力手段による信号出力を制御する信号出力制御手段とを備えている。
【0038】この場合、他の信号としては他のデバイスにアクセスするためのアドレス信号や、他のデバイスに書き込むためのライト信号や、他のデバイスから読み込んだ信号と比較するためのリード期待値信号などが考えられる。つまり、ビット列パラメータとして用意する必要のない信号、すなわちビット列形式にすると無駄の多くなる信号を別に記憶しておくことにより、ビット列パラメータ記憶手段の記憶素子容量が少なくてすみ、バスサイクル動作の設定がより簡単になる。
【0039】本発明の別の態様では、予め設定されたバスサイクルに基づいて他のデバイスに出力すべき信号のクロックフェーズ毎の出力状態をビット列で示したビット列パラメータを記憶するビット列パラメータ記憶手段と、このビット列パラメータ記憶手段に記憶されたビット列パラメータに基づいて他のデバイスに信号を出力することが可能であるか否かを判断する判断手段と、この判断手段によりビット列パラメータに基づいた信号出力が可能であると判断されたときはビット列パラメータに基づいて他のデバイスに信号を出力し、ビット列パラメータに基づいた信号出力が不可能であると判断されたときは予め設定されたバスサイクルとは異なる別のバスサイクルに基づいて他のデバイスに信号を出力する信号出力手段と、この信号出力手段から出力された信号に応じて他のデバイスから入力された信号およびビット列パラメータに基づいて前記信号出力手段による信号出力を制 御する信号出力制御手段とを備えている。
【0040】この場合、他のバスサイクルはバスサイクル動作が中断されてから再開するまでの期間について設定されることが望ましい。さらに、信号出力手段に別のバスサイクルにおいて出力すべき信号のクロックフェーズ毎の出力状態をビット列で示した予備ビット列パラメータを記憶しておき、判断手段においてビット列パラメータに基づいた信号出力が不可能であると判断されたときは予備ビット列パラメータに基づいて他のデバイスに信号を出力することが望ましい。このようにすることで、ディスコネクトやリトライなどのバスサイクル中断が発生した場合でも、適切にバスサイクル動作を継続することが可能になる。
【0041】本発明のさらに別の態様では、予め設定されたバスサイクルに基づいて他のデバイスに出力すべき信号のクロックフェーズ毎の出力状態をビット列で示したビット列パラメータを記憶するビット列パラメータ記憶手段と、このビット列パラメータ記憶手段に記憶されたビット列パラメータのうち有効にすべき有効ビット列を指定する有効ビット列指定手段と、この有効ビット列指定手段により指定された有効ビット列に基づいて他のデバイスに信号を出力する信号出力手段と、この信号出力手段から出力された信号に応じて他のデバイスから入力された信号および有効ビット列に基づいて信号出力手段による信号出力を制御する信号出力制御手段とを備えている。
【0042】この場合、ビット列パラメータの一部のみに対応したバスサイクル動作を実行することができるので、設定可能なビット列パラメータの数が限られている場合でも、バスサイクル動作の種別を増やすことができる。
【0043】
【発明の実施の形態】(第1の実施形態)図1は、本発明の第1の実施形態に係るPCIマスタデバイスの構成を示すブロック図である。このPCIマスタデバイス1は、パラメータ格納部3に記憶された制御パラメータに基づいてPCIバス2の評価・解析を行うための評価・解析用デバイスである。
【0044】PCIマスタデバイス1は、LSIの内部に設けられているものとし、図において破線で囲まれた範囲に対応する。すなわち、PCIマスタデバイス1はドライブ回路部4、コントロール回路部5、バッファ部7、レジスタ部12およびパラメータ読出部13からなる。ここで、コントロール回路部5は付加情報検出部6を有し、バッファ部7は付加情報用バッファ8、ビット列パラメータ用バッファ9、アドレスデータ用バッファ10およびR/W(リード/ライト)データ用バッファ11に分けられる。
【0045】以下、各部の構成について詳細に説明する。パラメータ格納部3は、所望とするバスサイクル動 作を実行するための制御用パラメータを予め格納しておくためのものであり、記憶素子としてメモリを使用し、そのメモリはビット列パラメータを記憶するためのビット列パラメータ用メモリ14、アドレスデータを記憶するためのアドレスデータ用メモリ15およびライトデータあるいはリード期待値データを記憶するためのR/Wデータ用メモリ16に分けられている。
【0046】ビット列パラメータは、PCIマスタとしてクロックフェーズ毎に出力すべき信号(例えばREQ#,C/BE[3:00]#,FRAME#,IRDY#など)のバスサイクルパターンを1ビットが1クロックフェーズに対応するビット列形式で示したものである。すなわち、ビット列パラメータ用メモリ14には所望とするバスサイクル動作における各信号の状態がクロックフェーズ毎に1ビットで記録されている(Low:0,High:1)。
【0047】アドレスデータは、PCIマスタから出力すべきアドレス指定のためのデータであり、アドレスデータ用メモリ15は所望とするバスサイクル動作においてアドレスデータを出力すべきクロックフェーズ数と、実際に出力すべきアドレスデータとを対応づけて記憶している。
【0048】R/Wデータは、PCIマスタによるライト処理時にはターゲットに出力すべきライトデータとなり、リード処理時にはターゲットから送られるリードデータに対応したリード期待値データとなる。R/Wデータメモリ16は、出力すべきライトデータ(あるいは入力されるリードデータに対応したリード期待値データ)と、所望とするバスサイクル動作においてそのデータを取り扱うクロックフェーズ数とを対応づけて記憶している。
【0049】ここで、パラメータ格納部3に格納される制御パラメータ、すなわちビット列パラメータ、アドレスデータおよびR/Wデータは、バスサイクル中断が起きないことを想定したバスサイクル動作のパターン、逆に言えばサイクル中断を無視した理想的なバスサイクル動作のパターンとして設定される。これは、PCIバス仕様にはセントラルリソースやターゲットが要求するサイクル中断が定義されているが、そのサイクル中断がいつ要求されるかは実際にバスサイクルを実行してみないと分からない(バスサイクル中の信号の振る舞いでサイクル中断が定義される)からである。
【0050】また、本実施形態ではパラメータ格納部3を二つの領域に分割し、各領域に独立した制御パラメータを定義して2種類のバスサイクル動作を実行することを考える。すなわち、ビット列パラメータ用メモリ14、アドレスデータ用メモリ15およびR/Wデータ用メモリ16をそれぞれ二つの領域に分け、各々に独立してビット列パラメータ、アドレスデータおよびR/Wデータを定義しておく。なお、以下では分割された一つの 領域をセットと称し、2種類のバスサイクル動作に対応させてセット1およびセット2と記述する。
【0051】レジスタ部12は、パラメータ格納部3からビット列パラメータ、アドレスデータおよびR/Wデータを読み出すためのアドレス(先頭および後尾アドレス)、パラメータ格納部3のメモリ領域の分割状態(セット1,2)、読み出し順序などを設定するためのものであり、その設定内容に従ってパラメータ格納部3にアクセスするための情報をsig4−11としてパラメータ読出部13に出力する。
【0052】レジスタ部12には、上述したセット1およびセット2を共に有効にし、セット1に対応する制御パラメータを用いてバスサイクル動作を実行してからセット2の実行に移り、セット2に対応する制御パラメータを用いてバスサイクルを実行した後動作を停止するといった設定がなされたものとする。レジスタ部12には、ビット列パラメータ用メモリ14、アドレスデータ用メモリ15およびR/Wデータ用メモリ16のそれぞれにアクセスするための先頭および後尾アドレスがセット1,2に対応して設定される。
【0053】パラメータ読出部13は、レジスタ部12から入力されるsig4−11、コントロール回路部5から入力されるsig4−18、バッファ部7から入力されるsig4−2によって制御されるものであり、予め設定されたバスサイクル動作に従ってsig4−7によりパラメータ格納部3のビット列パラメータ用メモリ14、アドレスデータ用メモリ15およびR/Wデータ用メモリ16のそれぞれにアクセスし、ビット列パラメータ、アドレスデータおよびR/Wデータをバッファ部7のビット列パラメータ用バッファ9、アドレスデータ用バッファ10およびR/Wデータ用バッファ11に積み込む。なお、sig4−7はパラメータ格納部3からビット列パラメータ、アドレスデータおよびR/Wデータを読み出すためのアドレス信号とコントロール信号とで構成されているものとする。
【0054】ただし、パラメータ読出部13はバッファ部7のビット列パラメータ用バッファ9、アドレスデータ用バッファ10およびR/Wデータ用バッファ11の空きを示すステータス信号であるsig4−2を監視し、それに応じてビット列パラメータ、アドレスデータおよびR/Wデータをバッファ7に積み込むためのライトパルスであるsig4−1をバッファ7に出力することによりデータの積み込みを行う。
【0055】また、パラメータ読取部13はビット列パラメータの先頭を示す付加情報であるsig4−12と、同じくビット列パラメータの後尾を示す付加情報であるsig4−13とを生成して、バッファ部7の付加情報用バッファ8に与える。この場合、ビット列パラメータの先頭アドレスに対応するデータを読み出したときにsig4−12を生成し、ビット列パラメータの後尾 アドレスに対応するデータを読み出したときにsig4−13を生成するものとする。この場合、レジスタ部12によるアドレス指定を調節することにより、先頭および後尾アドレスが変更され、ビット列パラメータのうち有効とされるビット列が指定されることになる。
【0056】バッファ部7は、パラメータ読出部13からのsig4−1およびコントロール回路部5からのsig4−6によって制御されるものであり、ビット列パラメータ、アドレスデータおよびR/Wデータをビット列パラメータ用バッファ9、アドレスデータ用バッファ10およびR/Wデータ用バッファ11にバッファリングし、さらに付加情報用バッファ8にsig4−12およびsig4−13をバッファリングして、ドライブ回路部4にsig4−14〜sig4−17を出力する。また、バッファ部7は各バッファの空きを示すステータス信号としてsig4−2をパラメータ読出部13に出力し、各バッファにデータが積み込まれているかどうかを示すステータス信号としてsig4−5をコントロール回路部5に出力している。
【0057】sig4−14は、ビット列パラメータと同時に読み出される付加情報である。sig4−15は、読み出されるビット列パラメータの制御パラメータであり、PCIインタフェース信号のうち上述したREQ#、C/BE[3:0]#、FRAME#、IRDY#などに対応したパターンが順次読み出される。sig4−16は、アドレスデータの制御パラメータであり、PCIインタフェース信号のAD[31:00]へのアドレス出力に用いられる。sig4−17は、ライトデータ、またはリード期待値データの制御パラメータであり、ライト時にはPCIインタフェース信号のAD[31:00]へのライトデータ出力に用いられ、リード時にはPCIインタフェース信号のAD[31:00]から受け取るリードデータとの比較に用いられる。
【0058】なお、ビット列パラメータ、アドレスデータおよびR/Wデータのビット長と、sig4−15,sig4−16およびsig4−17のビット長は等しくなくてもよい、また、ビット列パラメータ、アドレスデータおよびR/Wデータとして一度に複数クロック分の制御パラメータを積み込めるビット長としてもよい。
【0059】ドライブ回路部4は、制御パラメータとして付加情報用バッファ8からsig4−14が入力され、ビット列パラメータ用バッファ9からsig4−15が入力され、アドレスデータ用バッファ10からsig4−16が入力され、R/Wデータ用バッファ11からR/Wデータ(ライト時はライトパラメータ、リード時にはリード期待値パラメータ)sig4−17が入力されて、これらに応じたPCIインタフェース信号をコントロール回路部5の付加情報検出部6から入力されるsig4−4に従ってPCIバス2に出力する。
【0060】また、ドライブ回路部4にはバスサイクル が中断されてから再実行を開始するまでの信号動作を制御するためのビット列パラメータ(以下、中断処理用ビット列パラメータ)が予め定義されている。これは、上述したようにビット列パラメータ用メモリ14に格納されるビット列パラメータは、サイクル中断が起きないことを想定して設定されるため、サイクル中断から再実行までのPCIインタフェース信号を与えるためのビット列パラメータが必要になるからである。
【0061】また、ドライブ回路部4は次にドライブする予定のビット列パラメータを示すsig4−3をコントロール回路部5に出力し、sig4−14としてバッファ部7から送られた付加情報を示すsig4−10を同じコントロール回路部5の付加情報検出部6に出力する。
【0062】コントロール回路部5は、PCIマスタデバイス1全体の制御を司っており、現在のPCIバスインタフェース信号と出力予定の制御パラメータとを参照することにより、ドライブ回路部4、パラメータ読出部13およびバッファ部7を制御する。具体的には、コントロール回路部5はPCIバス2を介して入力されるPCIインタフェース信号、ドライブ回路部4から入力されるsig4−3およびsig4−10、バッファ部7から入力されるsig4−5、レジスタ部12から入力されるsig4−11に基づき、sig4−4によりドライブ回路部4を制御し、sig4−6によりバッファ部7を制御し、sig4−18によりパラメータ読出部13を制御する。
【0063】付加情報検出部6は、コントロール回路部5の1ブロックとして構成されており、ドライブ回路部4から入力されるsig4−10を監視し、ビット列パラメータに同期して付加されている付加情報を検出する。
【0064】ここで、ドライブ回路部4に出力されるsig4−4は制御パラメータを用いてPCIインタフェース信号をドライブするための制御信号であり、現在ドライブしている値を続けてドライブすることを指示する信号、次のビット列パラメータをシフトしてドライブすることを指示する信号、固定値をドライブすることを指示する信号、現在のドライブ値をラッチする信号、バッファ部7から受け取ったデータおよびラッチしているデータのいずれをドライブすべきデータとして選択するかを指示する信号などで構成される。
【0065】また、バッファ部7に出力されるsig4−6はビット列パラメータ、アドレスデータおよびR/Wデータを読み出すためのリードパルスであり、パラメータ読出部13に出力されるsig4−18はセット1からセット2へ制御を進行させる指示や、セット1の繰り返しなどの指示を与えるための制御信号である。
【0066】なお、コントロール回路部5は外部から入力されるsig4−8によってPCIマスタ動作の開始 が制御され、同じく外部から入力されるsig4−9によってPCIマスタ動作の終了が制御されるようにしておく。
【0067】次に、このPCIマスタデバイスの動作について説明する。ここでは図5に示されるようなバスサイクルをセット1として発生させることを考える。すなわち、クロックフェーズ01でマスタがREQ#をアサートし、クロックフェーズ02でバスアービタがGNT#をアサートする。
【0068】続けて、クロックフェーズ03でAD[31:00]によりアドレス””hをドライブし、C/BE[3:0]#でメモリライトを示すコマンド”0111”bをドライブする。
【0069】クロックフェーズ04では、AD[31:00]によりデータ””hをドライブし、C/BE[3:0]#によりバイトイネーブル”0001”bをドライブする。
【0070】クロックフェーズ05では、AD[31:00]によりデータ””hをドライブし、C/BE[3:0]#によりバイトイネーブル”0010”bをドライブする。
【0071】クロックフェーズ06,07では、ウェイトを挿入するものとして、C/BE[3:0]#によりメモリライト・アンド・インバリディドを示すコマンド”1111”bをドライブする。
【0072】次に、クロックフェーズ08ではAD[31:00]によりアドレス”11111111”hをドライブし、C/BE[3:0]#によりメモリライト・アンド・インバリディドを示すコマンド”1111”bをドライブする。
【0073】クロックフェーズ09では、AD[31:00]によりデータ””hをドライブし、C/BE[3:0]#によりバイトイネーブル”0100”bをドライブする。
【0074】クロックフェーズ10では、AD[31:00]によりデータ””hをドライブし、C/BE[3:0]#によりバイトイネーブル”1000”bをドライブする。
【0075】クロックフェーズ11では、AD[31:00]によりデータ””hをドライブし、C/BE[3:0]#によりバイトイネーブル”0000”bをドライブした後、クロックフェーズ12,13を経てセット1が終了する。以下、同様にセット2に対応するバスサイクルも予め想定しておく。
【0076】このようなバスサイクルを発生させる場合、レジスタ部12には次のような設定がなされる。まず、セット1のための設定として、ビット列パラメータ用メモリ14の先頭アドレスを”0000”h、後尾アドレスを”000d”hと設定し、アドレスデータ用メモリ15の先頭アドレスを”0000”h、後尾アドレ スを”0001”hと設定し、R/Wデータ用メモリ16のの先頭アドレスを”0000”h、後尾アドレスを”0004”hと設定する。
【0077】次に、セット2のための設定として、ビット列パラメータ用メモリ14の先頭アドレスを”0007”h、後尾アドレスを”000d”hと設定し、アドレスデータ用メモリ15の先頭アドレスを”0001”h、後尾アドレスを”0001”hと設定し、R/Wデータ用メモリ16の先頭アドレスを”0003”h、後尾アドレスを”0004”hと設定する。
【0078】また、パラメータ格納部3にはレジスタ部12のアドレス設定に対応する制御用パラメータを予め格納しておく。この場合、ビット列パラメータ用メモリ14には、セット1,2のそれぞれに対応するビット列パラメータを記憶させる。例えば、セット1のアドレス指定に従ったビット列パラメータは図2に示されるようになる。
【0079】すなわち、ビット列パラメータ用メモリ14のアドレス”0000”h〜”000d”hはセット1を示す図5のクロックフェーズ01からクロックフェーズ13に対応しており、各アドレス”0000”h〜”000d”hにはREQ#、FRAME#、C/BE3#、C/BE2#、C/BE1#、C/BE0#、IRDY#のクロックフェーズ毎の状態が1ビットで定義されている(Low=0,High=1)。
【0080】ここで、REQ#、FRAME#、C/BE3#、C/BE2#、C/BE1#、C/BE0#、IRDY#の各ビット列パラメータは、アドレス”0000”h〜”000d”hに記憶されたデータから対応するビットのみを取り出したものとなる。例えば、IRDY#のビット列パラメータは各データの最小ビットを取り出すことで、”1111”bとして示される。
【0081】アドレスデータ用メモリ15には、セット1およびセット2のそれぞれに対応するアドレスデータを記憶しておく。図3は、セット1のアドレス指定に従ったアドレスデータを示しており、アドレス”0000”hにはクロックフェーズ03とアドレスデータ””hとが記憶され、アドレス”0001”hにはクロックフェーズ08とアドレスデータと”11111111”hが記憶されている。
【0082】R/Wデータ用メモリ16には、セット1およびセット2のそれぞれに対応するライトデータが格納される(この例ではライトサイクルを想定しているため)。図4は、セット1のアドレス指定に従ったライトデータを示しており、アドレス”0000”h〜アドレス”0004”をクロックフェーズ04,05,09,10,11に対応させて、ライトデータ””h〜ライトデータ”h”が記録されている。
【0083】次に、このようにレジスタ部12とパラメータ格納部3との設定が行われた状態で、コントロール回路部5にマスタ動作開始を示すsig4−8が入力されたとする。
【0084】この場合、コントロール回路部5はsig4−18によりパラメータ読出部13に対してセット1に対応する制御パラメータの読み出しを指示する。パラメータ読出部13は、sig4−2のバッファステータスによりバッファ部7の空きを認識すると、sig4−7によってパラメータ格納部3のビット列パラメータ用メモリ14、アドレスデータ用メモリ15およびR/Wデータ用メモリ16へのリードアクセスを行い、sig4−1のライトパルスを発行することにより読み出したビット列パラメータ、アドレスデータおよびライトデータをバッファ部7のビット列パラメータ用バッファ9、アドレスデータ用バッファ10およびR/Wデータ用バッファ11に積み込む。
【0085】このとき、パラメータ格納部3へのリードアクセスはセット1の先頭アドレスから順番に行われ、パラメータ読出部13はビット列パラメータの先頭アドレスに対応するデータをビット列パラメータ用バッファ9に積み込むときにsig4−12を付加して出力する。また、後尾アドレスに対応するデータをリードアクセスしたときセット1の終了としてリードアクセスを中止し、さらにそのデータをビット列パラメータ用バッファ9に積み込むときにsig4−13を付加して出力する。
【0086】バッファ部7は、パラメータ読出部13によるデータの積み込み、あるいは後述するコントロール回路部5によるバッファデータの読み出しに対応させて、sig4−2のステータスを更新してパラメータ読出部13に出力すると共に、sig4−5のステータスを更新してコントロール回路部5に出力する。
【0087】次に、コントロール回路部5はバッファ部7から入力されるsig4−5によりビット列パラメータ用バッファ8にデータが積まれていることを認識すると、ビット列パラメータ用バッファ9からsig4−15の読み出しを行う。また、付加情報検出部6も動作を開始し、sig4−15と同時に読み出されるsig4−14をドライブ回路部4を介してsig4−10として取り込み、ビット列パラメータの先頭アドレスに対応する付加情報(以下、先頭アドレス付加情報)の検出を始める。
【0088】この場合、コントロール回路部5は付加情報検出部6の検出結果に基づき、先頭アドレス付加情報の付けられていないビット列パラメータを読み飛ばして、ビット列パラメータ用バッファから次々とビット列パラメータを読み出す。この結果、ユーザによって指定された部分に対応するビット列パラメータのみに基づいた処理を行うことができる。
【0089】そして、付加情報検出部6において先頭アドレス付加情報の付けられているビット列パラメータが検出され、さらに対応するアドレスデータおよびライトデータがアドレスデータ用バッファ10およびR/Wデータ用バッファ11に積まれていることが確認されると、コントロール回路部5はsig4−4を出力してドライブ回路部4の制御を開始する。また、付加情報検出部6はsig4−10によりビット列パラメータの後尾アドレスに対応する付加情報(後尾アドレス付加情報)の検出を開始する。
【0090】ドライブ回路部4は、コントロール回路部5から入力されるsig4−4に基づき、sig4−15〜sig4−17の保持や選択を行いながら、PCIバス2に向けてPCIインタフェース信号を出力する。
【0091】具体的には、sig4−15に基づき、ビット列パラメータとして与えられる”0”あるいは’1”の値に対応させて、1クロック毎に対応する信号(REQ#,C/BE[3:00]#,FRAME#,IRDY#)を出力する。
【0092】また、sig4−16に基づき、バスサイクルのアドレスフェーズ毎に対応するアドレスデータを順番に出力する。さらに、sig4−17に基づきバスサイクルのデータフェーズ毎に対応するライトデータを順番に出力する。なお、リードサイクルの場合は、sig4−17に基づきバスサイクルのデータフェーズ毎にリード期待値データと実際のリードデータとを比較することになる。
【0093】この後、付加情報検出部6が後尾アドレス付加情報の付けられているビット列パラメータを検出すると、コントロール回路部5はパラメータ制御部13にsig4−18を出力し、セット2に対応する制御パラメータの読出しを指示する。この結果、セット2に対応する制御パラメータに基づいて同様の処理が行われる。
【0094】そして、付加情報検出部6においてセット2の後尾アドレス付加情報が検出されると、コントロール回路部5はシステム各部の動作を停止させて、バスサイクル動作を終了させる。
【0095】以上述べた処理において、PCIターゲットからのバスサイクル中断要求があった場合、コントロール回路部5はバッファ部7およびパラメータ読出部13の処理を一時停止させると共に、ドライブ回路部4に予め設定された中断処理用ビット列パラメータに従ったインタフェース信号を出力するように指示する。このとき、ドライブ回路部4に中断された状態のビット列パラメータを保持させておく。そして、中断処理用ビット列パラメータに基づいた処理が終了すると、コントロール回路部5はバッファ部7およびパラメータ読出部13の停止を解除して、ドライブ回路部4で保持していたビット列パラメータに基づきバスサイクルの再実行を行う。
【0096】また、コントロール回路部5はsig4− 9によって外部から動作終了指示を受けた場合、システム各部の動作を停止させる。なお、この終了指示がPCIバスサイクル展開中になされた場合は、上述した場合と同様にドライブ回路部4により中断処理用ビット列パラメータに基づいてバスサイクルを正しく終了させてからシステム各部の動作を停止させるようにする。これは、PCI仕様に違反したサイクル終了によって、バスロックなどの不都合を引き起こさないようにするための処置である。
【0097】このように、本実施形態のPCIマスタデバイスにおいては、所望とするバスサイクル動作を実現するための制御パラメータとして、所望とするバスサイクルに応じて信号のクロックフェーズ毎の出力パターンをビット列パラメータとしてビット列パラメータ用メモリ14に設定しておき、その設定内容に従ってドライブ回路部4からPCIインタフェース信号を出力している。このとき、ビット列パラメータは所望とするバスサイクル動作における各信号の状態を1クロックフェーズにつき1ビットで設定すればよいので、従来のように一つのバスサイクル動作を設定するためにクロック数や繰り返し数などの制御パラメータを詳細に定義しなければならない方法とは異なり、バスサイクル動作を任意に調節することができ、そのための制御パラメータの設定を直感的に行うことができる。この場合、従来の方法では困難であった複雑なバスサイクルでも簡単に設定することができる。
【0098】また、ビット列パラメータ用メモリ14からビット列パラメータを読み出すときの読み出し位置をレジスタ部12により任意に設定することができるので、限られたビット列パラメータでも複数種類のバスサイクル動作を実現することができる。
【0099】制御パラメータとしては、ビット列パラメータの他に所望とするバスサイクル動作におけるアドレスフェース毎のアドレスデータと、データフェーズ毎のR/Wデータとを別々に設定しているため、パラメータ格納部3用の記憶素子数を減らすことができ、しかもバスサイクル動作の設定が簡単になる。さらに、ビット列パラメータ、アドレスデータおよびR/Wデータを任意に組み合わせて使用することができるので、実行可能なバスサイクル動作の種類を増やすことができる。また、パラメータ格納部3の限られたメモリ資源を有効に活用することができる。
【0100】パラメータ格納部3からドライブ回路部4へのビット列パラメータ、アドレスデータおよびR/Wデータの受け渡しは、バッファ部7を介して行っているので、パラメータ格納部3としてDRAMなどのそれほど高速でない記憶素子を用いることができる。また、バッファ部7を介したビット列パラメータの受け渡しの際、ビット列パラメータ用メモリ14に記憶されたビット列パラメータのうち有効にする部分を付加情報により 指定することができるので、例えばビット列パラメータの特定箇所のみに対応した制御を行うなど、限られたビット列パラメータでも実現可能なバスサイクル動作の種類を増やすことができる。
【0101】さらに、ライブ回路部4にはバスサイクルが中断してから再開するまでの処理を行うための中断処理用ビット列パラメータが予め設定されているので、例えばディスコネクトやリトライといったようにビット列パラメータ用メモリ14に記憶されているビット列パラメータでは対応できないような事態が生じた場合でも、適切な処理を行うことが可能となる。
【0102】次に、ドライブ回路部4について具体的に説明する。図6は、ドライブ回路部4のうちIRDY#およびFRAME#のコントロール信号をドライブするための回路の構成を示したブロック図である。この回路は、フリップフロップ(以下、FF)21,24,26と、セレクタ22,23,25とを備えている。
【0103】FF21は、コントロール回路部5から入力されるsig6−5をイネーブル信号として、このsig6−5がイネーブル時のCLKの立ち上がりエッジに応じて、カレントドライブであるsig6−8の値をsig6−4に反映させ、それ以外の場合はsig6−4の値を保持して出力する。すなわち、sig6−4はディスコネクト終了したときのバスサイクルの再開や、リトライによるバスサイクルの出し直しを行うために現在のドライブデータを保持している。CLKは、回路動作の基準となるクロック信号を示し、PCIインタフェースのクロック信号と同周波数かつ同位相とする。sig6−8は、PCIインタフェース信号のうちIRDY#に対応している。
【0104】セレクタ22は、コントロール回路部5から入力されるsig6−11に基づきsig6−1〜sig6−4のうちのいずれか一つを選択して、sig6−6としてセレクタ23,25に出力する。sig6−1は図1においてビット列パラメータ用バッファ9からsig4−15として与えられるものである。また、sig6−2,sig6−3はそれぞれ中断処理用ビット列パラメータとして予め用意されている固定ビット列パラメータである。なお、これら中断時処理用ビット列パラメータを適当なメモリに記憶させるようにして、通常のビット列パラメータと同様に書き換え可能にしておけば、より汎用性のあるPCIマスタ動作制御が可能になる。
【0105】セレクタ23は、コントロール回路部5から入力されるsig6−12に基づき、sig6−6,sig6−9およびsig6−10のうちのいずれか一つを選択して、sig6−7としてFF24に出力する。sig6−7は次のCLKの立ち上がりでIRDY#をドライブするためのデータである。また、sig6−9,sig6−10はバスサイクル中断時にIRDY #制御に使用するためのものであり、それぞれ”1”および”0”に固定されているものとする。なお、セレクタ22,23を一つのセレクタで構成するようにしてもよい。
【0106】FF24は、CLKの立ち上がりエッジでセレクタ23から入力されたsig6−7の値をsig6−8に反映させて出力し、それ以外の場合はsig6−8の値を保持して出力する。このsig6−8は、LSIの出力バッファを介してPCIバスのインタフェース信号をドライブする。
【0107】一方、セレクタ25はコントロール回路部5から入力されるsig6−17に基づいて、sig6−13、sig6−14およびsig6−6のうちのいずれか一つを選択し、sig6−15として出力する。sig6−16は、PCIインタフェース信号におけるFRAME#に対応している。また、sig6−15は次のCLKの立ち上がりでFRAME#をドライブするためのデータである。sig6−13およびsig6−14はバスサイクル中断時にFRAME#の出力制御を行うためのものであり、それぞれ”1”および”0”に固定されている。
【0108】FF26は、CLKの立ち上がりエッジでセレクタ25から入力されたsig6−15をsig6−16に反映させて出力し、それ以外の場合はsig6−16の値を保持して出力する。
【0109】次に、このような回路において、図8に示されるようなビット列パラメータ(図ではFRAME#およびIRDY#のみが示されている)に基づいたバスサイクルを実行したときの動作について説明する。ただし、後述する図7に示される回路が並行して動作しているものとする。
【0110】まず、図9に示されるように理想的なバスサイクルが実現したことを考える。これは、1回目のデータ転送(クロックフェーズ02)と2回目のデータ転送(クロックフェーズ04)の間に1ウェイトを挿入して、計4回のバースト転送をするように設定して、PCIマスタ動作を開始したところ、TRDY#が0ウェイトで連続アサートされ、サイクルが中断することなく終了したという例である。
【0111】このとき、図6に示した回路ではビット列パラメータに対応するsig6−1のうちIRDY#に対応するデータがセレクタ22でsig6−6として選択され、sig6−6がセレクタ23で6−7として選択され、sig6−7がFF24において1CLK毎にシフトして出力される。同様に、sig6−1のうちFRAME#に対応するデータがセレクタ22でsig6−6として選択され、このsig6−6がセレクタ25で6−15として選択され、sig6−15がFF26において1CLK毎にシフトして出力される。このように、理想的なバスサイクルが実現した場合は、予め設定 されたビット列パラメータのみに基づいて処理が行われている。
【0112】次に、図10に示されるようにターゲットのディスコネクト要求などによりバスサイクル動作が変化する場合を考える。なお、以下では予め設定されたビット列パラメータをオリジナルパラメータと呼び、その他の制御パラメータと区別する。
【0113】クロックフェーズ01では、FRAME#がアサートされているので、次のクロックフェーズでのFRAME#出力としてオリジナルパラメータが選択される。すなわち、sig6−11,sig6−17を制御してsig6−1をsig6−15として出力する。
【0114】クロックフェーズ02では、STOP#=”0”となっているので、次のクロックフェーズでサイクル中断処理に移るかどうかの判定が行われる。この場合、図8に示されるように次のクロックフェーズで出力すべきIRDY#のオリジナルパラメータが”1”であるため、サイクル中断処理に移らずに、次のクロックフェーズでのFRAME#出力として引き続きオリジナルパラメータを選択することになる。従って、クロックフェーズ01と同様にsig6−11,sig6−17を制御してsig6−1をsig6−15として出力する。
【0115】クロックフェーズ03でもSTOP#=”0”となっているので、次のクロックフェーズでサイクル中断処理に移るかどうかの判定が行われる。この場合、図8に示されるように、次のクロックフェーズで予定されているIRDY#のオリジナルパラメータが”0”であり、FRAME#のオリジナルパラメータも”0”であるのため、次のクロックフェーズでサイクル中断処理に移ることになる。そのため、FRAME#出力のための制御パラメータをオリジナルパラメータから”1”固定の制御パラメータに切り替える。すなわち、sig6−17を制御してsig6−13をsig6−15として出力し、sig6−11,sig6−12を制御してsig6−1をsig6−7として出力する。また、sig6−8としてオリジナルパラメータを保持した値を出力する。
【0116】クロックフェーズ04では、STOP#=”0”,TRDY#=”1”となっているので、次のクロックフェーズでサイクル中断処理によるサイクル終了をするかどうかの判定が行われる。この場合、FRAME#=”1”,IRDY#=”0”となっているため、サイクル終了になるものとしてFRAME#出力の制御パラメータを”1”固定の制御パラメータからサイクル再実行までの制御パラメータに切り替える。同時に、FRAME#オリジナルパラメータを保持するためにsig6−5をイネーブルにする。すなわち、sig6−11を制御してsig6−2をsig6−6として出力し、sig6−12を制御してsig6−6をsi g6−7として出力する。また、sig6−17を制御してsig6−6をsig6−15として出力し、sig6−5を制御してsig6−8をFF21に取り込む。
【0117】クロックフェーズ05〜07では、サイクル再実行までのアイドルを示す制御パターンがシフト実行されることになる。この場合、実際の信号のバス出力をせずに制御パラメータのシフト動作のみが実行される。すなわち、sig6−11を制御してsig6−2をsig6−6として出力し、sig6−12を制御してsig6−6をsig6−7として出力して、sig6−17を制御してsig6−6をsig6−15として出力する。
【0118】クロックフェーズ08では、バスサイクルが再開できるか否かの判定が行われる。ここでは、次のクロックフェーズで出力する予定の再実行制御パラメータが”0”であり、バスサイクルの再開が許可されたものとする。この場合、sig6−11を制御してsig6−2をsig6−6として出力し、sig6−12を制御してsig6−6をsig6−7として出力して、sig6−17を制御してsig6−6をsig6−15として出力する。
【0119】クロックフェーズ09では、FRAME#=”0”によりサイクルの再実行が開始されるため、これに応じてFRAME#出力の制御パラメータがオリジナルパラメータに切り替えられる。この場合、クロックフェーズ04で用いられたパラメータは未だデータ転送に寄与していないので、そのパラメータを再度使用する必要がある。従って、クロックフェーズ04においてFF21で保持しておいたパラメータを選択し、それが次のクロックフェーズで出力されるように準備する。すなわち、sig6−11を制御してsig6−4をsig6−6として出力し、sig6−17を制御してsig6−6をsig6−15として出力して、sig6−12を制御してsig6−6をsig6−7として出力する。
【0120】クロックフェーズ10では、IRDY#=”0”,TRDY#=”0”となっているので、FRAME#出力の制御パラメータがオリジナルパラメータに切り換えられる。この場合、FRAME#のオリジナルパラメータのシフト動作を行うために、sig6−11を制御してsig6−1をsig6−6として出力し、sig6−17を制御してsig6−6をsig6−15として出力して、sig6−12を制御してsig6−6をsig6−7として出力する。
【0121】クロックフェーズ11では、IRDY#=”0”,TRDY#=”0”となっているので、FRAME#のオリジナルパラメータのシフト動作が行われる。すなわち、sig6−11を制御してsig6−1をsig6−6として出力し、sig6−17を制御し てsig6−6をsig6−15として出力して、sig6−12を制御してsig6−6をsig6−7として出力する。
【0122】以下、同様にクロックフェーズ12,13と処理が行われてバスサイクル動作が終了する。このように、図6に示される回路ではターゲットのディスコネクト要求などにより、バスサイクル動作が変化した場合でも適切な処理を行うことが可能である。
【0123】図7は、ドライブ回路部4のうちAD[31:00]をドライブするための回路の構成を示したブロック図である。この回路は、FF31,34、セレクタ32,33およびカウンタ35を備えている。
【0124】FF31は、ライトデータあるいはリード期待値データを保持するためものであり、コントロール回路5から与えられるsig9−5をイネーブル信号として、sig9−5がイネーブル時のCLK立ち上がりエッジで、カレントドライブであるsig9−8の値をsig9−4に反映させ、それ以外の場合はsig9−4の値を保持して出力する。sig9−8は、LSIの出力バッファを介してPCIバスのAD信号をドライブする。また、sig9−4はディスコネクトしたときのバスサイクルの再開や、リトライによるバスサイクルの出し直しを行うためにカレントのドライブデータを保持するためのものである。
【0125】セレクタ32は、コントロール回路部5から入力されるsig9−11に基づき、sig9−1、sig9−2、sig9−4およびsig9−15のうちのいずれか一つを選択してsig9−6として出力する。sig9−1は、図1中のアドレスデータ用バッファ9からsig4−16として得られるアドレス値の制御パラメータであり、sig9−2はアドレスデータ用バッファ10からsig4−16として得られるライトデータあるいはリード期待値データの制御パラメータである。また、sig9−3は予備入力として用いられるもので、汎用性を向上させるために使用する制御パラメータを追加するときに使用する。
【0126】セレクタ33は、コントロール回路部5から入力されるsig9−12に基づき、sig9−6、sig9−9、sig9−10およびsig9−8のうちののいずれか一つを選択してsig9−7として出力する。sig9−7は、次にCLKの立ち上がりエッジでAD信号をドライブするためのデータであり、sig9−9,sig9−10は、それぞれAD信号を”1”,”0”に固定するために用いられる。なお、上述したセレクタ32,33を一つのセレクタによって構成してもよい。
【0127】FF34は、CLKの立ち上がりエッジでsig9−7の値をsig9−8に反映させて出力し、それ以外の場合はsig9−8の値を保持して出力する。カウンタ35は、アドレスデータの生成に使用され るアドレス用カウンタであり、sig9−13がイネーブルであるときのCLKの立ち上がりエッジに応じて、sig9−8の値をカウンタ初期値として取り込み、sig9−15に反映させて出力する。また、sig9−14がイネーブルであるときのCLKの立ち上がりエッジに応じて、sig9−15の値をカウントアップして、その結果をsig9−15に反映させて出力する。
【0128】次に、このような回路において、図8に示されるようなビット列パラメータ(図ではFRAME#およびIRDY#のみが示されている)に基づいたバスサイクルを実行したときの動作について説明する。ただし、先に説明した図6に示される回路の処理が並行して行われているものとする。
【0129】まず、先の例と同じく図9に示される理想的なバスサイクルが実現したことを考える。この場合、クロックフェーズ01ではsig9−1,sig9−6,sig9−7,sig9−8の経路でアドレスデータが出力される。また、クロックフェーズ02ではsig9−2,sig9−6,sig9−7,sig9−8の経路でライトデータもしくはリード期待値データが出力される。以降、データ転送が成立するごとに、バッファ部からのライトデータもしくはリード期待値データの読み出しと出力制御が行われて処理が終了する。
【0130】次に、図10に示されるようにバスサイクル動作が変化する場合を考える。この場合、クロックフェーズ01ではバースト転送に備えてカレントAD信号の取り込みが行われ、データフェーズに備えて制御パラメータの切り替えが行われる。すなわち、sig9−13を制御してsig9−8をカウンタ35に取り込み、sig9−11およびsig9−12を制御してsig9−2をsig9−7として出力する。
【0131】クロックフェーズ02では、IRDY#=”0”,TRDY#=”0”となっているので、制御パラメータおよびアドレスカウンタが更新される。また、リードサイクルの場合は、受け取ったリードデータとsig9−8との比較を行う。すなわち、sig9−11およびsig9−12を制御して、sig9−2をsig9−7として出力し、sig9−14を制御してsig9−15をカウントアップする。
【0132】クロックフェーズ03では、上述したように次のクロックフェーズでサイクル中断処理に移ることが判定されており、さらにIRDY#=”1”となっているのでsig9−8が保持される。すなわち、sig9−12を制御してsig9−8をsig9−7として出力する。
【0133】クロックフェーズ04では、FRAME#=”1”,IRDY#=”0”,TRDY#=”1”となっているので制御パラメータの保持が行われる。すなわち、sig9−5を制御してsig9−8をFF31に取り込む。
【0134】クロックフェーズ05〜07は、上述したようにサイクル再実行までのアイドルを示す制御パターンをシフト実行することになるため、AD信号の出力はなされない。
【0135】そして、クロックフェーズ08ではサイクル再実行のためにアドレス出力の準備が行われる。すなわち、sig9−11を制御してsig9−15をsig9−6として出力し、sig9−12を制御してsig9−6をsig9−7として出力する。
【0136】クロックフェーズ09では、サイクルの再実行が開始されるので、サイクル中断時に未成立となっていたデータの再出力が行われる。すなわち、sig9−11を制御してsig9−4をsig9−6として出力し、sig9−12を制御してsig9−6をsig9−7として出力する。
【0137】クロックフェーズ10,11では、それぞれIRDY#=”0”,TRDY#=”0”となっているので、クロックフェーズ02と同様にデータ及びアドレスカウンタの更新が行われる。すなわち、sig9−11およびsig9−12を制御して、sig9−2をsig9−7として出力し、sig9−14を制御してsig9−15をカウントアップする。
【0138】以下、同様にクロックフェーズ12,13と処理が行われてバスサイクル動作が終了する。このように、図7に示される回路ではターゲットのディスコネクト要求などにより、バスサイクル動作が変化した場合でも適切な処理を行うことが可能である。
【0139】以上、図6を参照してFRAME#出力の例と、図7を参照してAD出力の例について説明したが、IRDY#、REQ#などの信号も同様にして制御する。ここで、図6や図7に示したように各信号に対応する制御回路を構築する場合、以下の(1)〜(4)に示されるような条件を満たすことが望ましい。
(1)LSIの出力バッファを介してPCIインタフェース信号をドライブするためのフリップフロップ(図6ではFF24,26)を持つ。
(2)現在のドライブ出力値を保持しておき、中断が起こった後でそれを再び制御パラメータとして使用するためのフリップフロップ(図6ではFF21)を持つ。
(3)複数の制御パラメータから一つを選択して、(1)のフリップフロップに出力するセレクタ(図6ではセレクタ22,23,24)を持つ。
(4)(3)のセレクタで選択されるパラメータとしては、バッファ部7から与えられる制御パラメータ(図6ではsig6−1)と、バスサイクル中断から再実行までの信号ドライブを制御するためのパラメータ(図6ではsig6−2,sig6−3)と、これらでは対応しきれない信号動作を実現するためのパラメータ(図6ではsig6−9,sig6−10,sig6−13,sig6−14)とを使用する。
【0140】(第2の実施形態)次に、図11を参照して本発明の第2の実施形態に係るPCIマスタデバイスについて説明する。なお、以下では図1と相対応する部分に同一符号を付して第1の実施形態との相違点を中心にして説明する。
【0141】本実施形態は、PCIマスタデバイス1をSCSIコントローラやカードバスコントローラなどの通常処理用デバイスに適用した例を示している。この場合、第1の実施形態のような評価・解析用デバイスとは異なり、デバイス本来の処理を行うためのデータ処理部41を有している。このデータ処理部41は、PCIマスタデバイス1にはアドレスデータおよびライトデータを与え、PCIバス2を介してPCIマスタデバイス1に送られたリードデータを受け取るものである。
【0142】従って、予め設定しておくことができるのはビット列パラメータのみであり、所望とするバスサイクル動作に応じたビット列パラメータのみがパラメータ用メモリ14に記憶される。
【0143】バッファ部7は、付加情報用バッファ8およびビット列パラメータ用バッファ8以外にリードデータ用バッファ42およびライトデータ用バッファ43を有している。なお、バッファ部7からデータ処理部41に出力されるsig10−21は、リード時にはリードデータ用バッファ42にデータが積まれていることを示すステータス信号として、ライト時にはライトデータ用バッファ43に空きがあることを示すステータス信号として用いられる。データ処理部41からバッファ部7に出力されるsig10−22は、リード時にはリードデータをリードデータ用バッファ42から読み込むためのリードパルスとして、ライト時にはライトデータをライトデータ用バッファ43に積み込むためのライトパルスとして用いられる。
【0144】また、データ処理部41から出力されるアドレスデータは第1の実施形態のようにバッファ部7に積み込まず、直接ドライブ回路部4に送るようにする。この場合、第1の実施形態と同様にコントロール回路部5によりドライブ回路部4、バッファ部7およびパラメータ読出部13を制御することによってバスサイクル動作が実行される。具体的には、パラメータ用メモリ14に記録されたビット列パラメータをバッファ部7に一時的に格納し、ビット列パラメータをドライブ回路部4で読み出して、同時に付加情報検出部6で付加情報を参照しながらそのビット列パラメータに応じたバスサイクル動作を実行していく。
【0145】ここで、ライトサイクルではデータ処理部41の処理結果として得られたライトデータをライトデータ用バッファ43を介してドライブ回路部4に送り、ドライブ処理部4でビット列パラメータおよびアドレスデータに基づいてPCIインタフェース信号を出力する。
【0146】一方、リードサイクルではデータ処理部41で指定されたアドレスから送られたリードデータをリードデータ用バッファ42を介してデータ処理部41に渡すようにする。データ処理部41では、渡されたリードデータに基づいてデバイス本来の処理を行う。
【0147】ここで、ライトサイクルにおいてデータがライトデータ用バッファ43に積まれていない場合や、リードサイクルにおいてリードデータ用バッファ42に青木がない場合などでは、バスサイクルにウェイトを挿入する必要があるが、これはビット列パラメータによるウェイト挿入制御の条件にsig10−5のバッファステータスの条件を加えることにより容易に実現される。
【0148】また、バスサイクルが中断された場合、第1の実施形態と同様にドライブ回路部4で中断時のデータを保持して、中断処理用ビット列パラメータに基づいた処理を行った後、保持しておいたデータに基づいて本来のビット列パラメータ応じたバスサイクルを再開する。このとき、ドライブ回路部4はデータ処理部41から送られたデータのうちサイクル中断時に未使用となっていたデータを保持している。
【0149】このように、通常処理用デバイスでもパラメータ用メモリ14に設定しておいたビット列パラメータの通りにバスサイクル動作を実行することが可能となる。この結果、従来のようにデータ処理部41のハードウェアの構成や性能によってバスサイクル動作が定められたり、PCIマスタデバイス1が必要以上にPCIバス2を占有するといったことがなくなり、さらに対象とするPCIターゲットの性能やPCIバス2上の他のPCIマスタデバイスとの競合を考慮したPCIマスタ制御を行うことが可能になるため、システム全体のバス使用効率を高めることができる。
【0150】このとき、第1の実施形態と同様にパラメータ用メモリ14に複数セットに対応するビット列パラメータを設定しておき、それらを切り換えてバスサイクル動作を実行するようにすれば、例えばPCIバス2のトラフィックに変化に応じた制御を行うこともできる。なお、本実施形態で示した通常処理用デバイスを例えばPCIバス2と他のデバイスとの仲介を行うブリッジデバイスに適用しても大きな効果が期待できる。
【0151】
【発明の効果】以上説明したように本発明によれば、ビット列パラメータの設定内容に従ってバスサイクル動作が実行されるので、PCIマスタデバイスの展開するバスサイクル動作を意図的に制御することができ、しかもバスサイクル動作がハードウェアの構成・性能に依存することがなくなる。また、ユーザは所望とするバスサイクルに応じてクロックフェーズ毎の信号の出力状態を設定するだけでよいので、複雑なバスサイクル動作の設定を容易に行うことができる。
【0152】アドレス信号、ライト信号あるいはリード 期待値信号のようにビット列パラメータとして用意する必要がない信号を別に記憶しておくことにより、ビット列パラメータ記憶手段の記憶素子容量が少なくてすみ、バスサイクル動作の設定がより簡単になる。
【0153】また、所望とするビット列パラメータ以外にディスコネクトやリトライなどのバスサイクル中断に対応したバスサイクル、あるいは予備ビット列パラメータなどを設定しておくことにより、ビット列パラメータでは対応できないような事態が発生しても適切にバスサイクル動作を継続することが可能になる。
【0154】さらに、ビット列パラメータを構成するビット列のうちの有効部分を指定するようにすれば、ビット列パラメータの一部のみに対応したバスサイクル動作を実行することができるので、設定可能なビット列パラメータの数が限られている場合でもバスサイクル動作の種別を増やすことができる。
【出願人】 【識別番号】
【氏名又は名称】株式会社東芝
【識別番号】
【氏名又は名称】東芝コンピュータエンジニアリング株式会社
【出願日】 平成9年(1997)12月12日 【代理人】 【弁理士】
【氏名又は名称】鈴江 武彦 (外6名)
【公開番号】 特開平11−175462 【公開日】 平成11年(1999)7月2日 【出願番号】 特願平9−343073 戻る






















