(57)【特許請求の範囲】
【請求項１】
プロセッサに代わってデバイスへＭＭＩＯ方式でのアクセスを行うデバイスアクセス装置であって、
前記プロセッサの指示に基づいて、前記デバイスへ命令セットを発行し、前記命令セットの発行が完了すると、前記プロセッサへ前記命令セットの完了を通知する制御手段と、
前記デバイスの識別情報に基づいて、アクセス先の前記デバイスのアドレスを生成するデバイスアドレス生成手段と、
前記プロセッサが前記デバイスへ発行し得る命令セットと等しい命令セットを発行する命令セット回路と、
を備え、
前記制御手段は、前記プロセッサから前記デバイスの識別情報と、前記デバイスへ発行する命令セットを指定するコマンド情報とを取得し、
前記デバイスアドレス生成手段は、取得された前記識別情報に基づいてアドレスを生成し、
前記制御手段は、前記コマンド情報に対応する命令セットを発行する前記命令セット回路を起動し、生成された前記アドレスに対して前記命令セットを実行する、
デバイスアクセス装置。
【請求項２】
前記命令セット回路は、前記命令セットの実行が完了すると、前記命令セットの実行完了を前記プロセッサに通知する、
請求項１に記載のデバイスアクセス装置。
【請求項３】
前記デバイスへのアクセスに必要なデータを格納するメモリ領域のアドレスを生成する第１メモリアドレス生成手段、
をさらに備え、
前記第１メモリアドレス生成手段は、前記プロセッサから前記データを格納した前記メモリ領域のエントリ情報を取得し、前記エントリ情報に基づいてアドレスを生成し、
前記命令セット回路は、前記メモリ領域における生成された前記アドレスから前記データを取得して、前記命令セットを実行する、
請求項１又は請求項２に記載のデバイスアクセス装置。
【請求項４】
前記命令セット回路は、前記デバイスから読み出したデータを取得し、該データをメインメモリへ格納する命令をメモリコントローラへ発行する、
請求項１から請求項３の何れか１項に記載のデバイスアクセス装置。
【請求項５】
プロセッサと、
メインメモリと、
請求項１から請求項４の何れか１項に記載のデバイスアクセス装置と、
を備える演算装置。
【請求項６】
プロセッサと、
メインメモリと、
請求項１から請求項４の何れか１項に記載のデバイスアクセス装置と、
前記デバイスアクセス装置がアクセスするデバイスと、
を備えるデバイスアクセスシステム。
【請求項７】
プロセッサに代わってデバイスへＭＭＩＯ方式でのアクセスを行うデバイスアクセス方法であって、
前記プロセッサの指示に基づいて、前記デバイスへ命令セットを発行するステップと、
前記命令セットの発行が完了すると、前記プロセッサへ前記命令セットの完了を通知するステップと、
を有し、
前記命令セットを発行するステップでは、
前記プロセッサから前記デバイスの識別情報と、前記デバイスへ発行する命令セットを指定するコマンド情報とを取得し、
取得された前記識別情報に基づいてアクセス先の前記デバイスのアドレスを生成し、
前記プロセッサが前記デバイスへ発行し得る命令セットと等しい命令セットを発行する命令セット回路の中から前記コマンド情報に対応する命令セットを発行する前記命令セット回路を起動し、生成された前記アドレスに対して前記命令セットを実行する、
デバイスアクセス方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デバイスアクセス装置、演算装置、デバイスアクセスシステム及びデバイスアクセス方法に関する。
【背景技術】
【０００２】
演算装置に対する性能要求は年々向上しており、これに伴い装置が搭載するメモリの容量は増大している。また、ＭＭＩＯ(Memory-mapped I/O)方式でアクセス（以下、ＭＭＩＯアクセスと記載する場合がある。）され、制御される各種デバイスも同様に高機能・高性能化が進み、ＭＭＩＯアクセスが必要な内部レジスタ、メモリが増加し、ＭＭＩＯアクセスに必要なアドレス空間が増大している。このため、演算装置で扱えるアドレス空間が不足する事態が発生している。
【０００３】
特許文献１には、ＭＭＩＯ方式でマッピングされるアドレス空間（以下、ＭＭＩＯ空間と記載することがある。）に限界があることを課題として、周辺デバイスが使用するメモリ空間を論理的に拡大したアドレス空間に変換し、周辺デバイスに割り当てるアドレス空間を拡大する変換装置が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１３−１１４６５０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１に記載の方法やＴＬＢ（Translation Lookaside Buffer）を用いると、アドレス変換を行うことによって、限られたアドレス空間から多くのＭＭＩＯ空間へ割り当てることができる。しかし、既存のアドレス空間で、多くのデバイスにＭＭＩＯアクセスする場合、同一のアドレスに複数のデバイスを割り当てることになる。すなわち、プロセッサからみたアクセス先のアドレスは同じで、実際にアクセスされるデバイスを切り替える方式をとる。この方式の場合、１つのデバイスにアクセスする間、他のデバイスへのアクセスが不可能となり、パフォーマンスが低下する可能性がある。
【０００６】
そこでこの発明は、上述の課題を解決するデバイスアクセス装置、演算装置、デバイスアクセスシステム及びデバイスアクセス方法を提供することを目的としている。
【課題を解決するための手段】
【０００７】
本発明の一態様によれば、プロセッサに代わってデバイスへＭＭＩＯ方式でのアクセスを行うデバイスアクセス装置であって、前記プロセッサの指示に基づいて、前記デバイスへ命令セットを発行し、前記命令セットの発行が完了すると、前記プロセッサへ前記命令セットの完了を通知する制御手段、前記デバイスの識別情報に基づいて、アクセス先の前記デバイスのアドレスを生成するデバイスアドレス生成手段と、前記プロセッサが前記デバイスへ発行し得る命令セットと等しい命令セットを発行する命令セット回路と、を備え、前記制御手段は、前記プロセッサから前記デバイスの識別情報と、前記デバイスへ発行する命令セットを指定するコマンド情報とを取得し、前記デバイスアドレス生成手段は、取得された前記識別情報に基づいてアドレスを生成し、前記制御手段は、前記コマンド情報に対応する命令セットを発行する前記命令セット回路を起動し、生成された前記アドレスに対して前記命令セットを実行するデバイスアクセス装置である。
【０００８】
本発明の一態様によれば、プロセッサと、メインメモリと、上記のデバイスアクセス装置と、を備える演算装置である。
【０００９】
本発明の一態様によれば、プロセッサと、メインメモリと、上記のデバイスアクセス装置と、前記デバイスアクセス装置がアクセスするデバイスと、を備えるデバイスアクセスシステムである。
【００１０】
本発明の一態様によれば、プロセッサに代わってデバイスへＭＭＩＯ方式でのアクセスを行うデバイスアクセス方法であって、前記プロセッサの指示に基づいて、前記デバイスへ命令セットを発行するステップと、前記命令セットの発行が完了すると、前記プロセッサへ前記命令セットの完了を通知するステップと、を有し、前記命令セットを発行するステップでは、前記プロセッサから前記デバイスの識別情報と、前記デバイスへ発行する命令セットを指定するコマンド情報とを取得し、取得された前記識別情報に基づいてアクセス先の前記デバイスのアドレスを生成し、前記プロセッサが前記デバイスへ発行し得る命令セットと等しい命令セットを発行する命令セット回路の中から前記コマンド情報に対応する命令セットを発行する前記命令セット回路を起動し、生成された前記アドレスに対して前記命令セットを実行するデバイスアクセス方法である。
【発明の効果】
【００１１】
本発明のデバイスアクセス装置によれば、プロセッサのアドレス空間における同一のアドレスに、複数のデバイスを切り替えて割り当てる必要が無い。
【図面の簡単な説明】
【００１２】
【図１】本発明の一実施形態によるデバイスアクセスシステムの概要を示す図である。
【図２】本発明の一実施形態によるデバイスアクセスシステムの構成例を示す図である。
【図３】本発明の一実施形態によるデバイスアクセスシステムの要部の構成例を示す図である。
【図４】本発明の一実施形態によるアドレス変換の一例を示す図である。
【図５】本発明の一実施形態によるメモリの区画の一例を示す図である。
【図６】本発明の一実施形態によるデバイスアクセス部の構成例を示す図である。
【図７】本発明の一実施形態によるアクセス指示データのデータ構造の一例を示す図である。
【図８】本発明の一実施形態によるデバイスアクセスの動作例を示す図である。
【図９】一般的なデバイスアクセスの動作例を示す図である。
【図１０】本発明の一実施形態によるデバイスアクセス装置の最小構成を示す図である。
【発明を実施するための形態】
【００１３】
＜実施形態＞
以下、本発明の一実施形態によるデバイスアクセスシステムについて図１〜図１０を参照して説明する。
図１は、本発明の一実施形態によるデバイスアクセスシステムの概要を示す図である。
図１に示すようにデバイスアクセスシステム１００Ａは、プロセッサ（Processor）１Ａと、デバイスアクセス部２Ａと、ＰＣＩｅＳＷ（Peripheral Component Interconnect Express Switch）３Ａと、ＰＣＩｅで接続されるデバイスであるＰＣＩｅデバイス（PCIe device）３０Ａ〜３３Ａと、を含む。本実施形態に係るデバイスアクセスシステム１００Ａは、一般的なデバイスアクセスシステムと比較して、デバイスアクセス部２Ａを備える点で異なる。一般的なデバイスアクセスシステムでは、プロセッサ１Ａが備えるプロセッサコアが、ＰＣＩｅＳＷ３Ａを経由してＰＣＩｅデバイス３０Ａ〜３３Ａにアクセスするが、デバイスアクセスシステム１００Ａでは、デバイスアクセス部２Ａが代行して、ＰＣＩｅデバイス３０Ａ〜３３Ａへのアクセスを行う。
【００１４】
デバイスアクセス部２Ａは、その内部にＰＣＩｅデバイス３０Ａ〜３３Ａへのアクセスのためのアクセス命令セットを備える。命令セットは、プロセッサ１ＡのプロセッサコアがＰＣＩｅデバイス３０Ａ〜３３Ａにアクセスする際に発行するアクセス命令群と同じものであり、デバイスアクセス部２Ａは、プロセッサ１Ａに代わって、任意の命令セットを実行することができる。プロセッサ１Ａは、デバイスアクセス部２Ａに対し、アクセス対象のデバイスの識別情報とある命令セットの実行を指示し、デバイスアクセス部２Ａは、プロセッサ１Ａから指定された命令セットを実行して、アクセス対象のデバイスに対してアクセスする。デバイスアクセス部２Ａは、必要に応じてアクセスの結果を図示しないメインメモリに格納し、割り込み等によりプロセッサ１Ａにアクセス完了を通知する。
【００１５】
（構成）
次にＦＰＧＡ（field-programmable gate array）を用いて図１のデバイスアクセス部２Ａを構成する例を用いて、本実施形態のデバイスアクセス方法についてさらに詳しく説明する。
図２は、本発明の一実施形態によるデバイスアクセスシステムの構成例を示す図である。
図２に示すように演算装置１０は、プロセッサ（Processor）１と、ＦＰＧＡ（デバイスアクセス部）２と、ＰＣＩｅＳＷ３と、ＲＡＭ（Random Access Memory）４と、を備える。また、演算装置１０は、ＰＣＩｅＳＷ３を介してＰＣＩｅデバイス（PCIe device）３０〜３３と接続されている。
ＦＰＧＡ２は、図１のデバイスアクセス部２Ａを構成する。つまり、ＦＰＧＡ２は、プロセッサ１の指示に基づいて、プロセッサ１の代わりにＭＭＩＯ方式でＰＣＩｅデバイス３１等にアクセスする機能を有している。ＦＰＧＡ２がＭＭＩＯアクセスを行うと、ＰＣＩｅＳＷ３を介してＰＣＩｅデバイス３１等にアクセスが行われる。
【００１６】
ＰＣＩｅＳＷ３は、プロセッサ１やＦＰＧＡ２とデバイス群、つまりＰＣＩｅデバイス（PCIe device）３０〜３３を接続する。ＰＣＩｅＳＷ３に接続されるＰＣＩｅデバイスは、例えば、ＮＩＣ(Network Interface Card)やＨＢＡ(host bus adapter)などである。
ＰＣＩｅＳＷ３は６４ｂｉｔのアドレス空間を扱うことができ、任意のアドレスに配下のＰＣＩｅデバイス３０〜３３を割り当て、ＭＭＩＯアクセスを行う。図２に示す構成例では、ＰＣＩｅデバイス３０〜３３はそれぞれ１ＧＢのリソース(レジスタ又は内部ＲＡＭ)を有する。例えば、ＰＣＩｅデバイス３０にアドレス0x00000010_00000000〜0x00000010_3FFFFFFFを割り当て、ＰＣＩｅデバイス３１に0x00000010_40000000〜0x00000010_7FFFFFFFを割り当て、ＰＣＩｅデバイス３２に0x00000010_80000000〜0x00000010_BFFFFFFFを割り当て、ＰＣＩｅデバイス３３に0x00000010_C0000000-0x00000010_FFFFFFFFを割り当てる。ＰＣＩｅＳＷ３に対してＭＭＩＯ方式によるアクセスが発行された場合、ＰＣＩｅＳＷ３は、発行されたアドレスに該当するＰＣＩｅデバイスへ、アクセスを振り分ける。
【００１７】
図３は、本発明の一実施形態によるデバイスアクセスシステムの要部の構成例を示す図である。
図３に示すようにプロセッサ１は、プロセッサコア（Processor Core）１１と、ＰＣＩｅコントローラ（PCIe Controller）１２，１３と、メモリコントローラ（Memory Controller）１４と、割り込みコントローラ（Programmable interrupt controller）１６と、を備える。プロセッサコア１１、ＰＣＩｅコントローラ１２、ＰＣＩｅコントローラ１３、メモリコントローラ１４、割り込みコントローラ１６は、内部バス１５で接続されている。
【００１８】
プロセッサコア１１は、３２ｂｉｔアーキテクチャのプロセッサである。プロセッサコア１１が、扱うことができるアドレス空間は、0x00000000〜0xFFFFFFFFの２３２bytes、つまり４ＧＢである。内部バス１５のアドレス幅は、４０ｂｉｔまで拡張されていて、0x00_00000000〜0xFF_FFFFFFFFの２４０bytes、つまり１０２４ＧＢまで扱うことができる。
プロセッサコア１１内部の３２ｂｉｔのアドレスから、内部バス１５で扱う４０ｂｉｔアドレスへは、プロセッサコア１１が備えるＴＬＢ（translation lookaside buffer）によって任意に変換される。これにより、図４に示すようにプロセッサコア１１が扱える３２ｂｉｔのアドレス空間を、４０ｂｉｔのアドレス空間の一部を割り当てることができる。
【００１９】
例えば、図４の例では、３２ｂｉｔアドレス空間における0x00000000〜0x7FFFFFFFの２ＧＢにＲＡＭ４を割り当て、0x80000000〜0xBFFFFFFFの１ＧＢにＰＣＩｅデバイス３０を割り当て、0xF0000000〜0xF000000FにＦＰＧＡ２（デバイスアクセス部２Ａ）を割り当てている。図４の例ように３２ｂｉｔのアドレス空間に割り当てた場合、残りのアドレス空間（図の「未使用」）は１ＧＢを切る。このため、同時に割り当てることができるＰＣＩｅデバイスは、ＰＣＩｅデバイス３０の１つのみである。一般的なデバイスアクセス制御では、ＰＣＩｅデバイス３１にアクセスする場合、0x80000000〜0xBFFFFFFFに割り当てるデバイスをＰＣＩｅデバイス３０からＰＣＩｅデバイス３１に切り替えてアクセスを行う。これに対し、本実施形態では、デバイスの切り替えを行うことなく、ＦＰＧＡ２を介して、ＰＣＩｅデバイス３１にアクセスすることが可能である。同様にＰＣＩｅデバイス３２〜３３についても、ＦＰＧＡ２を介して、アクセスすることが可能である。また、ＦＰＧＡ２を介して、ＰＣＩｅデバイス３１〜３３に並行して（同時に）アクセスすることも可能である。
【００２０】
図３に戻る。ＰＣＩｅコントローラ１２には、ＦＰＧＡ２が接続されている。ＰＣＩｅコントローラ１２は、プロセッサコア１１とＦＰＧＡ２の通信を仲介する。例えば、プロセッサコア１１がＦＰＧＡ２に割り当てられたアドレスに向けてＭＭＩＯアクセス命令を発行すると、ＰＣＩｅコントローラ１２はそのアクセス命令をＦＰＧＡ２へ伝える。これにより、プロセッサコア１１は、ＦＰＧＡ２の動作を制御することができる。また、ＦＰＧＡ２もＭＭＩＯアクセス命令を発行することができる。例えば、アクセス命令の発行先がプロセッサ１に割り当てられたアドレスだった場合、プロセッサ１内のＰＣＩｅコントローラ１２は、そのアクセス命令を内部アドレスへ変換し、内部バス１５経由でその内部アドレスが割り当てられたプロセッサ１内部のモジュールにアクセスする。これにより、ＦＰＧＡ２は、ＰＣＩｅコントローラ１２を経由して、プロセッサ１内部の割り込みコントローラ（ＰＩＣ）１６やメモリコントローラ１４を制御することができる。例えば、ＦＰＧＡ２は、ＰＣＩｅコントローラ１２を経由してメモリコントローラ１４を制御することによってＲＡＭ４にデータをＲｅａｄ、Ｗｉｔｅすることができる。
【００２１】
ＰＣＩｅコントローラ１３にはＰＣＩｅＳＷ３が接続される。例えば、プロセッサコア１１は、ＰＣＩｅデバイス３０にアクセスする場合、ＦＰＧＡ２を介さずに直接ＰＣＩｅＳＷ３を経由して、ＰＣＩｅデバイス３０にＭＭＩＯアクセスする。このアクセス方法は、デバイスへの一般的なＭＭＩＯアクセス方法である。
【００２２】
メモリコントローラ１４にはＲＡＭ４が接続される。ここで、図５を参照する。図５にＲＡＭ４におけるメモリ区画の一例を示す。図５に示すように、ＲＡＭ４は、演算装置１０が実行するプログラムを格納するプログラムコード領域、プログラムの動作に必要なデータを格納する制御データ領域、ＦＰＧＡ２とプロセッサ１の間の通信に使用するデバイスアクセス部使用領域に分割され、それぞれのアドレス・サイズはあらかじめ規定されている。デバイスアクセス部使用領域は、さらにプロセッサ１起因で発行されるアクセスで使用されるデータを格納するデバイスアクセス部使用領域１と、ＰＣＩｅデバイス起因で実行されるアクセスで使用されるデータを格納するデバイスアクセス部使用領域２に分割されている。
【００２３】
さらにデバイスアクセス部使用領域１は、ＦＰＧＡ Ｅｎｔｒｙ ０〜ＦＰＧＡ Ｅｎｔｒｙ ｎに分割され、それぞれにはエントリ毎のデータが格納される。
同様にデバイスアクセス部使用領域２は、Ｐｒｏｃｅｓｓｏｒ Ｅｎｔｒｙ ０〜Ｐｒｏｃｅｓｓｏｒ Ｅｎｔｒｙ ｎに分割され、それぞれにはエントリ毎のデータが格納される。
【００２４】
図３に戻る。割り込みコントローラ１６は、割り込みを発生させるモジュールである。割り込みコントローラ１６の所定のエリアにデータを書き込むことでプロセッサコア１１に割り込みを発生させることができる。
【００２５】
次に図６を参照して、ＦＰＧＡ２（デバイスアクセス部２Ａ）の構成について説明する。
図６は、本発明の一実施形態によるデバイスアクセス部の構成例を示す図である。
図６に示すように、ＦＰＧＡ２は、ＰＣＩｅインタフェース２０Ａ、２０Ｂと、ＰＣＩｅアクセス制御回路２１と、メモリアドレス生成回路２２と、命令セット回路２３と、デバイスアドレス生成回路２４と、を備える。
ＰＣＩｅインタフェース２０Ａは、プロセッサ１接続用のインタフェースである。ＦＰＧＡ２は、ＰＣＩｅインタフェース２０Ａを介してプロセッサ１と接続されている。
【００２６】
ＰＣＩｅインタフェース２０Ｂは、ＰＣＩｅＳＷ３接続用のインタフェースである。ＦＰＧＡ２は、ＰＣＩｅインタフェース２０Ｂを介してＰＣＩｅＳＷ３と接続されている。
【００２７】
命令セット回路２３は、ＰＣＩｅアクセスの命令セットを実行するための回路である。命令セット回路２３は、命令セット回路００〜命令セット回路ＸＸを含む。命令セット回路００〜命令セット回路ＸＸのそれぞれは、プロセッサコア１１がＰＣＩｅデバイス３１等へ発行し得る各命令セット（命令群）に対応する。
【００２８】
メモリアドレス生成回路２２は、ＲＡＭ４へアクセスするアドレスを生成する回路である。メモリアドレス生成回路２２は、ＲＡＭアドレス生成回路００〜ＲＡＭアドレス生成回路ＸＸを含む。ＲＡＭアドレス生成回路００〜ＲＡＭアドレス生成回路ＸＸのそれぞれは、図５に例示したＦＰＧＡ Ｅｎｔｒｙ ０〜ＦＰＧＡ Ｅｎｔｒｙ ｎ、Ｐｒｏｃｅｓｓｏｒ Ｅｎｔｒｙ ０〜Ｐｒｏｃｅｓｓｏｒ Ｅｎｔｒｙ ｎの何れかのアドレスを生成する。
【００２９】
デバイスアドレス生成回路２４は、ＰＣＩｅデバイス３１〜３３へアクセスするアドレスを生成する回路である。デバイスアドレス生成回路２４は、ＰＣＩｅＤｅｖアドレス生成回路００〜ＰＣＩｅＤｅｖアドレス生成回路ＸＸを含む。ＰＣＩｅＤｅｖアドレス生成回路００〜ＰＣＩｅＤｅｖアドレス生成回路ＸＸのそれぞれは、ＦＰＧＡ２（デバイスアクセス部２Ａ）に接続されるＰＣＩｅデバイス３１等の何れかのアドレスを生成する。
【００３０】
デバイスアクセス部２Ａを実現するＦＰＧＡ２は、６４ｂｉｔアーキテクチャで設計され、最大で0x00000000_00000000〜0xFFFFFFFF_FFFFFFFFの２６４ｂｙｔｅｓのアドレス空間を扱うことができる。
【００３１】
ＰＣＩｅアクセス制御回路２１は、デバイスアクセス部２Ａの動作を制御する。例えば、ＰＣＩｅアクセス制御回路２１は、ＰＣＩｅデバイス３１等へのアクセス開始を指示するためのアクセス指示データを書き込むための命令アドレスを有し、これを0x00000010_F0000000に割り当てる。プロセッサコア１１は、0xF0000000に対してアクセスを発行し、プロセッサコア１１が備えるＴＬＢによって、0x10_F0000000にアドレスが変換されてＦＰＧＡ２にアクセスする。このアドレス0x10_F0000000に対して予め定めた書式に従った４ｂｙｔｅのアクセス指示データを書き込むと、ＦＰＧＡ２は、このアクセス指示データにおいて指定された命令セットを実行する命令セット回路Ｎ（Ｎは００〜ＸＸの何れか）を動作させる。
【００３２】
ここで、図７を参照し、アクセス指示データについて説明する。
図７は、本発明の一実施形態によるアクセス指示データのデータ構造の一例を示す図である。
図示するようにアクセス指示データは４ｂｙｔｅで構成される。４ｂｙｔｅのうちの先頭から３ｂｙｔｅに値が設定され、４ｂｙｔｅ目は予備の領域である。
先頭のＢｙｔｅ０には、Ｃｏｍｍａｎｄデータが設定される。Ｃｏｍｍａｎｄデータには、どの命令セットを実行するかを指定する値が設定される。ＰＣＩｅアクセス制御回路２１は、命令セット回路００〜命令セット回路ＸＸの中から、Ｂｙｔｅ０に設定された値に対応する回路を起動する。
【００３３】
次のＢｙｔｅ１には、Ｄｅｖｉｃｅデータが設定される。Ｄｅｖｉｃｅデータにはアクセス命令の発行先を指定する。具体的には、Ｂｙｔｅ１には、ＰＣＩｅＳＷ３に接続されたＰＣＩｅデバイス３１〜３３のうち、どのデバイスかを指定するデバイス番号が設定される。図２に示すようにＰＣＩｅデバイス３０〜３３毎に、固有のアドレスが割り当てられるため、ＰＣＩｅデバイスの識別番号であるＤｅｖｉｃｅ番号が分かれば、対象のＰＣＩｅデバイスにアクセスするためのアドレスを特定することが出来る。デバイスアドレス生成回路２４は、このＤｅｖｉｃｅ番号に基づいてＭＭＩＯ方式でのアクセスに用いるアクセス先のアドレスを生成する。
【００３４】
次のＢｙｔｅ２には、ＥｎｔｒｙＮｕｍｂｅｒデータが設定される。ＥｎｔｒｙＮｕｍｂｅｒデータには、アクセスに必要なデータを格納するエリアのエントリ番号を指定する。図５を参照して説明したように、デバイスアクセス部使用領域１、２は、エントリごとに使用エリアが定められているため、エントリ番号を元に命令回路Ｎが使用するエリアのＲＡＭ４上のアドレスを特定することが出来る。メモリアドレス生成回路２２は、このエントリ番号に基づいてＲＡＭ４上のアドレスを生成する。
【００３５】
図５を参照して説明したようにＲＡＭ４のデバイスアクセス部使用領域は、ＰＣＩｅデバイスからの割り込みをトリガーにＦＰＧＡ２が実行を開始する場合に使用するデバイスアクセス部使用領域１（ＦＰＧＡ Ｅｎｔｒｙ）と、プロセッサ１の要求で実行される命令セットで使用するデバイスアクセス部使用領域２（Ｐｒｏｃｅｓｓｏｒ Ｅｎｔｒｙ）と、に分かれる。
【００３６】
プロセッサ１起因でアクセスを開始する場合、命令セットで使用するデータ(ＷｒｉｔｅデータやＲｅａｄデータとの比較値)があれば、プロセッサコア１１は、デバイスアクセス部使用領域２のＰｒｏｃｅｓｓｏｒ Ｅｎｔｒｙ ０〜Ｐｒｏｃｅｓｓｏｒ Ｅｎｔｒｙ ｎの何れかのエントリに予めデータを格納してから、そのエントリ番号（Ｐｒｏｃｅｓｓｏｒ Ｅｎｔｒｙ ０に書き込んだのであればエントリ番号は“０”）をアクセス指示データのＢｙｔｅ２に設定し、命令セットをＢｙｔｅ０に設定し、アクセス先のＤｅｖｉｃｅ番号をＢｙｔｅ１に設定してＦＰＧＡ２のアドレス（0x10_F0000000）にアクセス指示データを書き込む。
なお、アクセスに必要なデータは、ＲＡＭ４のデバイスアクセス部使用領域１に書き込んで書き込んだエントリのエントリ番号を通知するほかに、直接、ＦＰＧＡ２にＭＭＩＯアクセスにより書き込む方法でもよい。
【００３７】
プロセッサ１起因のアクセスにおいて、４ｂｙｔｅのアクセス指示データが0x10_F0000000に書き込まれると、ＰＣＩｅアクセス制御回路２１は、命令セット回路００〜命令セット回路ＸＸの中から、先頭のＢｙｔｅ０に設定されたＣｏｍｍａｎｄデータに応じた回路を起動する。また、ＰＣＩｅアクセス制御回路２１は、デバイスアドレス生成回路２４にＤｅｖｉｃｅ番号を通知する。デバイスアドレス生成回路２４は、Ｄｅｖｉｃｅ番号に基づいて、命令セット回路２３が発行するアクセスの発行先のアドレスを生成する。また、ＰＣＩｅアクセス制御回路２１は、メモリアドレス生成回路２２にエントリ番号を通知する。メモリアドレス生成回路２２は、エントリ番号に基づいて、命令セット回路２３が使用するデータが格納されたＲＡＭ４のアドレスを生成する。ＰＣＩｅアクセス制御回路２１は、生成されたアドレスに基づいて、ＰＣＩｅインタフェース２０Ａを介して、ＲＡＭ４から命令セットで使用するデータを読み出して、起動した命令セット回路００〜ＸＸの何れかへ渡す。起動された命令セット回路２３は、デバイスアドレス生成回路２４が生成したアドレスに対し、ＭＭＩＯアクセスを発行する。
【００３８】
ＰＣＩｅデバイス３１等の割り込みによるＰＣＩｅデバイス起因のアクセスの場合、ＰＣＩｅアクセス制御回路２１は、命令セット回路００〜命令セット回路ＸＸの中から、割り込みに伴って必要となる処理の命令セットを実行する命令セット回路を起動する。一般的に割り込みが発生した場合、割り込み要因を読み出し、割り込みをクリアする。ＰＣＩｅアクセス制御回路２１によって起動された命令セット回路は、読みだした割り込み要因をデバイスアクセス部使用領域１のＦＰＧＡ Ｅｎｔｒｙ ０〜ＦＰＧＡ Ｅｎｔｒｙ ｎの何れかに格納して、ＭＳＩによってプロセッサ１に通知する。
【００３９】
（動作）
図８は、本発明の一実施形態によるデバイスアクセスの動作例を示す図である。
プロセッサ１が、ＰＣＩｅデバイス３１に対し、複数の命令を含む命令セットαを発行するとする。例えば、プロセッサ１は、ＲＡＭ４のデバイスアクセス部使用領域２にＷｒｉｔｅするデータを格納し（Ｓ１）、データを格納したデバイスアクセス部使用領域２のエントリ番号、アクセス先のＰＣＩｅデバイス３１のデバイス番号、命令セットαを指定して、４ｂｙｔｅのアクセス指示データを作成する。プロセッサ１は、アクセス指示データを0x10_F0000000に書き込む。これがＦＰＧＡ２へのデバイスアクセス指示である（Ｓ２）。
【００４０】
デバイスアクセス指示を受けたＦＰＧＡ２では、ＰＣＩｅアクセス制御回路２１が、命令セットα(この例では、ＰＣＩｅデバイスに対しＲｅａｄ、Ｗｒｉｔｅ、Ｒｅａｄを実行する)に対応する命令セット回路（この例では命令セット回路００とする。命令セット回路００はアドレス生成回路２２のＲＡＭアドレス生成回路００と、アドレス生成回路２４のＰＣＩｅＤｅｖアドレス生成回路００を使用する。）を起動する。また、命令セット回路００は、エントリ番号に基づいてメモリアドレス生成回路２２（ＲＡＭアドレス生成回路００）が生成したＷｒｉｔｅするデータが格納されたアドレスからデータを取得する。また、命令セット回路００は、デバイスアドレス生成回路２４（ＰＣＩｅＤｅｖアドレス生成回路００）がＤｅｖｉｃｅ番号に基づいて生成したアクセス先のアドレスに対して、ＰＣＩｅＳＷ３を介して、ＰＣＩｅデバイス３１へのアクセスを開始する。
ここで、命令セット回路００は、アクセス先のデバイス（今回の例では、ＰＣＩｅデバイス３１）へ“Ｒｅａｄ ｒｅｑｕｅｓｔ”を発行し、アクセス先のデバイスから“Ｒｅａｄ ｒｅｐｌｙ”が返ってくると、アクセス先のデバイスへ“Ｗｒｉｔｅ ｒｅｑｕｅｓｔ”を発行し、続いて、アクセス先のデバイスへ“Ｒｅａｄ ｒｅｑｕｅｓｔ”を発行して、アクセス先のデバイスからの“Ｒｅａｄ ｒｅｐｌｙ”を受信し、さらにアクセス先のデバイスで読み取ったデータをＲＡＭ４に格納し、命令セットの実行完了をプロセッサへ通知するように構成されている。つまり、命令セット回路００は、プロセッサ１の介在を必要としない一連の処理を実行するように構成されている。命令セット回路００の起動後は、命令セット回路００が主体的にこれらの処理を行う。
命令セット回路００は、“Ｒｅａｄ ｒｅｑｕｅｓｔ”の発行（Ｓ３）、“Ｒｅａｄ ｒｅｐｌｙ”の受信（Ｓ４）、“Ｗｒｉｔｅ ｒｅｑｕｅｓｔ”の発行（Ｓ５）、“Ｒｅａｄ ｒｅｑｕｅｓｔ”の発行（Ｓ６）、“Ｒｅａｄ ｒｅｐｌｙ”の受信（Ｓ７）を順次行う。
【００４１】
次に命令セット回路００は、ＲＡＭ４へデータを格納する。また、命令セット回路００は、メモリコントローラ１４へ“Ｒｅａｄ ｄａｔａ Ｗｒｉｔｅ”を発行する（Ｓ８）。これにより、ＲＡＭ４の当該エントリにＰＣＩｅデバイス３１からＲｅａｄしたデータが格納される。
次に命令セット回路００は、ＭＳＩを使用してプロセッサ１に命令セットαの完了、データが格納されたエントリ番号を通知する（Ｓ９）。
【００４２】
比較の為、図９に一般的なデバイスアクセスの動作例を示す。
デバイスアクセス部２Ａを有しない演算装置では、命令セットαをＰＣＩｅデバイス３１へ発行する場合、プロセッサ１が、ＰＣＩｅＳＷ３を介して、ＰＣＩｅデバイス３１へ一連の命令セット（Ｓ３´〜Ｓ７´）を発行する。図９の方法の場合、Ｓ３´〜Ｓ４´の期間、Ｓ６´〜Ｓ７´の期間でプロセッサ１が待ち状態となり、処理が滞る可能性がある。
【００４３】
これに対し、本実施形態に係る演算装置１０では、図８に例示するようにＳ２〜Ｓ９の期間は、他の処理を実行することができる。
【００４４】
また、図８の例では、ＰＣＩｅデバイス３１のみにアクセスする例を挙げたが、プロセッサ１は、ＦＰＧＡ２を使用して、ＰＣＩｅデバイス３１へのアクセスと並行して、ＰＣＩｅデバイス３２、３３へのアクセスを実行することができる。この場合、プロセッサ１は、ＰＣＩｅデバイス３１へのアクセス指示データを0x10_F0000000に書き込み、続いて、ＰＣＩｅデバイス３２、３３へのアクセス指示データを0x10_F0000000に順次書き込む。ＦＰＧＡ２では、ＰＣＩｅアクセス制御回路２１が、0x10_F0000000に書き込まれたアクセス指示データを順次処理する。これにより、一般的なデバイスアクセスでは、例えば、0x10_00000000（図４）に割り当てるデバイスをＰＣＩｅデバイス３０〜３３の間で次々と切り替えてこれらのデバイスにアクセスしなければならないところ、ＦＰＧＡ２を使用することにより、デバイスの切り替えを行うことなく、ＰＣＩｅデバイス３０〜３３へ並行してアクセスを行うことができる。従って、本実施形態によれば、１つのデバイスにアクセスする間、他のデバイスへのアクセスが不可能となり、演算装置１０のパフォーマンスが低下するという問題が生じることは無い。
【００４５】
上記説明したように、本実施形態のデバイスアクセス部２Ａ（ＦＰＧＡ２）によれば、プロセッサのアドレス空間の所定のアドレスにデバイスアクセス部２Ａを割り当てる。これにより、ＰＣＩｅデバイス毎に個別に割り当てていたアドレスを削減し、限られたアドレス空間で複数のＰＣＩｅデバイスに対しＭＭＩＯアクセスすることが可能となる。例えば、図４に示す例では、一般的なデバイスアクセスでは、アドレス空間が不足し、ＰＣＩｅデバイスを１つしか割り当てることができない。その為、複数のデバイスにアクセスする場合、同じアドレスに割り当てるＰＣＩｅデバイスを切り替えて使用する排他制御が必要であった。本実施形態では、デバイスアクセス部２ＡがＰＣＩｅデバイスへのアクセスを代行するため、プロセッサ１のアドレス空間にアクセス先のＰＣＩｅデバイスを割り当てる必要がなくなる。その為、排他制御を行わずに同時に複数のＰＣＩｅデバイスへアクセスすることができ、パフォーマンスの低下を防ぐことができる。
【００４６】
さらに、図９を用いて説明したように、ＰＣＩｅデバイス３１へのＲｅａｄアクセスを行った場合には、Ｒｅｐｌｙを待つ必要があり、この間、プロセッサ１は処理を実行できず性能が低下する。これに対し、本実施形態によれば、Ｒｅｐｌｙ待ちは、デバイスアクセス部２Ａが代行するため、プロセッサ１はＰＣＩｅデバイス３１へのアクセス中にもデバイスの応答を待つ必要が無く、この間に他の処理を実行することができる。つまり、プロセッサ１からデバイスアクセス部２Ａへ命令セットをオフロードすることにより、プロセッサ１の待ち時間を削減して、プロセッサ１の性能を向上することができる。
以上により、パフォーマンス悪化を抑えつつ、デバイスへのアクセスのために必要となるアドレス空間を削減することが可能となる。
【００４７】
図１０は、本発明の一実施形態によるデバイスアクセス装置の最小構成を示す図である。
デバイスアクセス装置４０は、少なくとも制御手段４１を備えている。
デバイスアクセス装置４０は、プロセッサに代わってＭＭＩＯ方式でデバイスへのアクセスを行う。制御手段４１は、プロセッサの指示に基づいて、アクセス対象のデバイスへの命令セットを発行し、前記命令セットの発行が完了すると、プロセッサへ命令セットの発行完了を通知する。
なお、デバイスアクセス装置４０は、実施形態のＦＰＧＡ２（デバイスアクセス部２Ａ）に対応し、制御手段４１は、ＰＣＩｅアクセス制御回路２１に対応する。
【００４８】
なお、デバイスアクセス部２Ａの各手段による各処理の過程は、プログラムの形式でコンピュータ読み取り可能な記録媒体に記憶されており、このプログラムを、プロセッサ１Ａが読み出して実行することによって、上記処理が行われてもよい。ここでコンピュータ読み取り可能な記録媒体とは、磁気ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、半導体メモリ等をいう。また、このコンピュータプログラムを通信回線によってコンピュータに配信し、この配信を受けたコンピュータが当該プログラムを実行するようにしてもよい。また、上記プログラムは、前述した機能の一部を実現するためのものであってもよい。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であってもよい。
【００４９】
その他、本発明の趣旨を逸脱しない範囲で、上記した実施の形態における構成要素を周知の構成要素に置き換えることは適宜可能である。また、この発明の技術範囲は上記の実施形態に限られるものではなく、本発明の趣旨を逸脱しない範囲において種々の変更を加えることが可能である。
【符号の説明】
【００５０】
１００、１００Ａ・・・デバイスアクセスシステム
１０・・・演算装置
１、１Ａ・・・プロセッサ
１１・・・プロセッサコア
１２，１３・・・ＰＣＩｅコントローラ
１４・・・メモリコントローラ
１５・・・内部バス
１６・・・割り込みコントローラ
２・・・ＦＰＧＡ（デバイスアクセス部）
２Ａ・・・デバイスアクセス部
２０Ａ、２０Ｂ・・・ＰＣＩｅインタフェース
２１・・・ＰＣＩｅアクセス制御回路
２２・・・メモリアドレス生成回路
２３・・・命令セット回路
２４・・・デバイスアドレス生成回路
３、３Ａ・・・ＰＣＩｅＳＷ
３０、３１、３２、３３、３０Ａ、３１Ａ、３２Ａ、３３Ａ・・・ＰＣＩｅデバイス
４・・・ＲＡＭ
【要約】
【課題】プロセッサのアドレス空間に余裕が無くても複数のデバイスにアクセスすることができるデバイスアクセス装置を提供する。
【解決手段】デバイスアクセス装置は、プロセッサに代わってデバイスへＭＭＩＯ方式でのアクセスを行うデバイスアクセス装置であって、前記プロセッサの指示に基づいて、前記デバイスへの命令セットを発行し、前記命令セットの発行が完了すると、前記プロセッサへ前記命令セットの発行の完了を通知する制御手段、を備える。
【選択図】図１【図１】
0006885627.tif 000002
【図２】
0006885627.tif 000003
【図３】
0006885627.tif 000004
【図４】
0006885627.tif 000005
【図５】
0006885627.tif 000006
【図６】
0006885627.tif 000007
【図７】
0006885627.tif 000008
【図８】
0006885627.tif 000009
【図９】
0006885627.tif 000010
【図１０】
0006885627.tif 000011