(57)【特許請求の範囲】
【請求項１】
複数のＣＰＵからデータの読出しを要求され、先に格納したデータを先に読み出す１個のＦＩＦＯ回路と、
前記ＣＰＵからの読出要求により前記ＦＩＦＯ回路から読み出されるデータが記憶される記憶装置と、
前記複数のＣＰＵのうちどのＣＰＵが、前記ＦＩＦＯ回路に格納されているデータの読出し数が最も多い先行ＣＰＵであるかを判定する判定手段と、
前記判定手段により判定された前記先行ＣＰＵからの前記ＦＩＦＯ回路に対する読出要求に対し、前記ＦＩＦＯ回路に格納されているデータを前記先行ＣＰＵに送出するとともに前記記憶装置に書き込み、前記先行ＣＰＵ以外の他の前記ＣＰＵからの前記ＦＩＦＯ回路に対する読出要求に対し、前記記憶装置に記憶されているデータを送出するデータ処理手段と、
を備えることを特徴とするＦＩＦＯデータ読出装置。
【請求項２】
前記記憶装置は前記ＣＰＵ毎に設けられ、
前記データ処理手段は、前記先行ＣＰＵに送出する前記ＦＩＦＯ回路のデータを前記先行ＣＰＵ以外の他の前記ＣＰＵに対応する前記記憶装置にそれぞれ書き込み、前記先行ＣＰＵ以外の他の前記ＣＰＵが前記ＦＩＦＯ回路に対して読み出しを要求する場合、前記ＦＩＦＯ回路に対して読み出しを要求する他の前記ＣＰＵに対応する前記記憶装置からデータを読み出して、前記ＦＩＦＯ回路に対して読み出しを要求する他の前記ＣＰＵに送出する、
ことを特徴とする請求項１に記載のＦＩＦＯデータ読出装置。
【請求項３】
前記複数のＣＰＵは２個であり、前記記憶装置は２個の前記ＣＰＵに共通して１個設けられ、
前記データ処理手段は、前記記憶装置からデータを読み出すときには読出アドレスが示す前記記憶装置のアドレス位置からデータを読出すとともに、読み出すデータ数に応じて前記読出アドレスを更新し、前記ＦＩＦＯ回路から読み出したデータを前記記憶装置に書き込むときには書込アドレスが示す前記記憶装置のアドレス位置に前記ＦＩＦＯ回路のデータを書き込むとともに、書き込むデータ数に応じて前記書込アドレスを更新する、
ことを特徴とする請求項１に記載のＦＩＦＯデータ読出装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、先に格納したデータを先に読み出す１個のＦＩＦＯ回路に対する複数のＣＰＵの読出要求を処理するＦＩＦＯデータ読出装置に関する。
【背景技術】
【０００２】
複数のＣＰＵが共通メモリにアクセスする場合に、ＣＰＵ間でアクセス権の調停をするのではなく、共有メモリ側にアクセス権の調停機能を持たせたものが知られている（例えば、特許文献１参照。）。
【０００３】
しかしながら、共有メモリに対しては、各ＣＰＵがアドレスを指定してデータを読み出すことはできるが、先に格納したデータを先に読み出す共通の１個のＦＩＦＯ(First In First Out)回路を設け、複数のＣＰＵが互いに他のＣＰＵの読出要求に関わらず独立して共通のＦＩＦＯ回路からデータを読み出す場合、先に他のＣＰＵがデータを読み出すと、ＦＩＦＯ回路において読出ポインタが更新されるので、それ以外のＣＰＵは同じデータを読み出すことができない。
【０００４】
この問題を解決するためには、１個のＣＰＵがＦＩＦＯ回路に読出しを要求している場合は、他のＣＰＵからＦＩＦＯ回路への読出しの要求を禁止し、ＣＰＵがＦＩＦＯ回路から読み出したデータを他のＣＰＵにも送出した後に、他のＣＰＵに対してＦＩＦＯ回路への読出しの要求を許可するという処理が考えられる。
【０００５】
しかしながら、ＦＩＦＯ回路からデータを読出すためにＣＰＵがこのような読出処理を実行すると、ＦＩＦＯ回路から読み出したデータを処理するＣＰＵの本来の処理が妨げられる。
【０００６】
これに対し、複数のＣＰＵのそれぞれにＦＩＦＯ回路を設け、各ＣＰＵが対応するＦＩＦＯ回路からデータを取り出す構成が知られている（例えば、特許文献２参照。）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平２−２８１３５６号公報
【特許文献２】特開平７−２６２２２７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、複数のＣＰＵのそれぞれにＦＩＦＯ回路を設けると、ハードウェア量が増加するという問題がある。
本発明は、上記問題を解決するためになされたものであり、１個のＦＩＦＯ回路に格納されているデータを複数のＣＰＵが互いに独立して読出せるＦＩＦＯデータ読出装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
請求項１から３に記載の発明によると、複数のＣＰＵからデータの読出しを要求され、先に格納したデータを先に読み出す１個のＦＩＦＯ回路と、ＣＰＵからの読出要求によりＦＩＦＯ回路から読み出されるデータが記憶される記憶装置と、複数のＣＰＵのうちどのＣＰＵが、ＦＩＦＯ回路に格納されているデータの読出し数が最も多い先行ＣＰＵであるかを判定する判定手段と、先行ＣＰＵからのＦＩＦＯ回路に対する読出要求に対し、ＦＩＦＯ回路に格納されているデータを先行ＣＰＵに送出するとともに記憶装置に書き込み、先行ＣＰＵ以外の他のＣＰＵからのＦＩＦＯ回路に対する読出要求に対し、記憶装置に記憶されているデータを送出するデータ処理手段と、を備える。
【００１０】
これにより、先行ＣＰＵからの読出要求に対してデータ処理手段がＦＩＦＯ回路にアクセスしてデータを読み出すことによりＦＩＦＯ回路においてデータの読出位置が更新されても、先行ＣＰＵ以外の他のＣＰＵからＦＩＦＯ回路に対する読出しが要求されると、データ処理手段は記憶装置に記憶されているデータを先行ＣＰＵ以外の他のＣＰＵに送出できる。
【００１１】
その結果、先行ＣＰＵ以外のＣＰＵも、ＦＩＦＯ回路に格納されているデータのコピーを、あたかも実際にＦＩＦＯ回路にアクセスして取得したデータとして記憶装置から読み出すことができる。
【００１２】
このように、複数のＣＰＵはＦＩＦＯ回路に対して読み出しを要求するだけであり、ＦＩＦＯ回路に格納されているデータの各ＣＰＵへの送出はデータ処理手段が実行する。したがって、複数のＣＰＵの間でＦＩＦＯ回路からの読み出しを調停することなく、他のＣＰＵを意識しないでＦＩＦＯ回路に対する読出しを要求し、ＦＩＦＯ回路に格納されているデータを独立して読み出すことができる。
【００１３】
請求項２に記載の発明によると、記憶装置はＣＰＵ毎に設けられ、データ処理手段は、先行ＣＰＵに送出するＦＩＦＯ回路のデータを先行ＣＰＵ以外の他のＣＰＵに対応する記憶装置にそれぞれ書き込み、先行ＣＰＵ以外の他のＣＰＵがＦＩＦＯ回路に対して読み出しを要求する場合、ＦＩＦＯ回路に対して読み出しを要求する他のＣＰＵに対応する記憶装置からデータを読み出して、ＦＩＦＯ回路に対して読み出しを要求する他のＣＰＵに送出する。
【００１４】
つまり、自ＣＰＵが先行ＣＰＵではなく、他のＣＰＵが先行ＣＰＵのときにＦＩＦＯ回路から読み出されたデータは自ＣＰＵの対応する記憶装置に記憶されている。これにより、自ＣＰＵが先行ＣＰＵでないときに、自ＣＰＵに対応する記憶装置からＦＩＦＯ回路に格納されていたデータを読み出すことができる。
【００１５】
請求項３に記載の発明によると、複数のＣＰＵは２個であり、記憶装置は２個のＣＰＵに共通して１個設けられ、データ処理手段は、記憶装置からデータを読み出すときには読出アドレスが示す記憶装置のアドレス位置からデータを読出すとともに、読み出すデータ数に応じて読出アドレスを更新し、ＦＩＦＯ回路から読み出したデータを記憶装置に書き込むときには書込アドレスが示す記憶装置のアドレス位置にＦＩＦＯ回路のデータを書き込むとともに、書き込みデータ数に応じて書込アドレスを更新する。
【００１６】
ＣＰＵが２個の場合に、先行ＣＰＵがＦＩＦＯ回路から読み出すデータを共通の記憶装置に書き込んでいくことにより、先行ＣＰＵではない方のＣＰＵが読み出すべきＦＩＦＯ回路のデータは記憶装置に記憶される。
【００１７】
そして、先行ＣＰＵではない方のＣＰＵに送出する記憶装置のデータは、先行ＣＰＵがＦＩＦＯ回路から読み出したデータであり、先行ＣＰＵは記憶装置から読み出す必要がない。したがって、共通の記憶装置から読み出すデータ数に応じて読出アドレスが更新されても、先行ＣＰＵではないＣＰＵに、記憶装置に記憶されているデータを読み飛ばすことなく送出できる。
【００１８】
したがって、２個のＣＰＵに対して共通の１個の記憶装置を設けた構成において、２個のＣＰＵから１個のＦＩＦＯ回路に対する読出しが要求されても、ＦＩＦＯ回路に格納されているデータをＦＩＦＯ回路または記憶装置から各ＣＰＵに送出できる。
【図面の簡単な説明】
【００１９】
【図１】第１実施形態のＦＩＦＯデータ読出装置を示すブロック図。
【図２】（Ａ）はＦＩＦＯ回路の読出ポインタを示す説明図、（Ｂ）はＦＩＦＯ読出回路とＦＩＦＯ回路との間の信号を示すタイムチャート。
【図３】ＣＰＵがＦＩＦＯ回路からデータを読出すための状態遷移図。
【図４】ＣＰＵがＦＩＦＯ回路からデータを読出すためのＣＰＵとＦＩＦＯ読出回路との間の信号を示すタイムチャート。
【図５】＃１ＣＰＵに対するＦＩＦＯ読出回路の読出処理を示す状態遷移図。
【図６】＃１ＣＰＵに対するＦＩＦＯ読出回路の読出処理を示す状態遷移図。
【図７】＃２ＣＰＵに対するＦＩＦＯ読出回路の読出処理を示す状態遷移図。
【図８】＃２ＣＰＵに対するＦＩＦＯ読出回路の読出処理を示す状態遷移図。
【図９】第２実施形態のＦＩＦＯデータ読出装置を示すブロック図。
【図１０】＃１ＣＰＵに対するＦＩＦＯ読出回路の読出処理を示す状態遷移図。
【図１１】＃２ＣＰＵに対するＦＩＦＯ読出回路の読出処理を示す状態遷移図。
【発明を実施するための形態】
【００２０】
以下、本発明の実施の形態を図に基づいて説明する。
［第１実施形態］
図１に本実施形態のＦＩＦＯデータ読出装置１０を示す。
【００２１】
（ＦＩＦＯデータ読出装置１０）
ＦＩＦＯデータ読出装置１０は、ＦＩＦＯ回路１２と、ＦＩＦＯ読出回路２０と、＃１ＤＰＲＡＭ(Dual Port RAM)３０と、＃２ＤＰＲＡＭ３２とから構成されており、＃１ＣＰＵ２および＃２ＣＰＵ４からＦＩＦＯ回路１２に対するデータの読出要求を処理する装置である。
【００２２】
＃１ＣＰＵ２および＃２ＣＰＵ４（以下、単に＃１ＣＰＵ２をＣＰＵ２、＃２ＣＰＵ４をＣＰＵ４とも言う。）は、マスター・スレーブの関係にはなく、互いに独立してＦＩＦＯ回路１２に対して読出しを要求する。つまり、ＣＰＵ２およびＣＰＵ４は、互いに他のＣＰＵがＦＩＦＯ回路１２からデータを読出しているか否かに関係なく、あたかも１対１でＦＩＦＯ回路１２に接続している構成であるとして、ＦＩＦＯ回路１２に対して独立して読出しを要求する。
【００２３】
ＣＰＵ２およびＣＰＵ４によるＦＩＦＯ回路１２に対する読出要求は、実際にはＦＩＦＯ読出回路２０により処理される。ＦＩＦＯ読出回路２０については後述する。
ＦＩＦＯ回路１２は、先に格納したデータを先に読み出す公知の回路である。ＦＩＦＯ回路１２には、例えば、スキャン周期毎にレーダでスキャンしたスキャンデータが格納される。ＦＩＦＯ回路１２に格納されているスキャンデータに基づき、例えば、ＣＰＵ２は反射物体の形状を検出し、ＣＰＵ４は反射物体の追跡を行うといった異なる処理を並行して実行する。
【００２４】
ＦＩＦＯ回路１２のデータ格納部はＲＡＭ等で構成されている。第１実施形態は、ＦＩＦＯ回路１２に対する読出しを処理するものであるから、ＦＩＦＯ回路１２に対するデータ書き込み信号は図１では省略している。ただし、ＦＩＦＯ回路１２の構成を説明するために、ＦＩＦＯ回路１２に対する書込処理について説明する。
【００２５】
図２に示すように、ＦＩＦＯ回路１２には、書き込み順にしたがい、ｄａｔａ１、ｄａｔａ２・・・ｄａｔａＮの順番で順次データが書き込まれる。ＦＩＦＯ回路１２からは、図２（Ａ）の矢印で示す読出ポインタが示す位置のデータが読み出される。１番最初に書き込まれたｄａｔａ１が読み出されると、読出ポインタは次にｄａｔａ２を示す。このように、ｄａｔａ１、ｄａｔａ２・・・ｄａｔａＮの順番で、ＦＩＦＯ回路１２から順次データが読み出される。尚、読出ポインタはＦＩＦＯ回路１２の内部のポインタであるから、ＦＩＦＯ回路１２の外部からは操作できない。
【００２６】
次に、ＦＩＦＯ回路１２からの読出処理について説明する。
図２の（Ｂ）に示すように、ＦＩＦＯ読出回路２０がＦＩＦＯ回路１２のデータを読み出す場合、読出しクロックに同期して読出要求信号を出力する。読出要求が有効（ハイ＝’１’）の場合、ＦＩＦＯ回路１２は、読出しクロック１周期に対してＦＩＦＯ回路１２に格納している１個分のデータを出力する。図２の（Ｂ）では、１個の読出しを行った後、２クロックおいて２個の読出要求信号を連続してＦＩＦＯ回路１２に出力している。読出要求信号が有効と判断されると、ＦＩＦＯ回路１２は、読出しクロックに同期して読出しデータを出力する。
【００２７】
ＦＩＦＯ回路１２に書き込まれたデータが全て読み出されると、ＦＩＦＯ回路１２はｅｍｐｔｙ信号をハイ＝’１’にして出力する。これにより、ＦＩＦＯ回路１２は、格納データが空になって読出すデータがなくなったことを外部に示す。ｅｍｐｔｙ信号が有効（’１’）の状態でＦＩＦＯ回路１２にデータが書込まれると、ｅｍｐｔｙ信号は無効（ロー＝’０’）になり、ＦＩＦＯ回路１２は読出し可能な状態になったことを外部に示す。
【００２８】
ＦＩＦＯ読出回路２０は、例えばＦＰＧＡ(Field Programmable Gate Array)、ＡＳＩＣ(Application Specific Integrated Circuit)等のハードウェアで構成されている。ＦＩＦＯ読出回路２０は、ＣＰＵ２、４からのＦＩＦＯ回路１２に対する読出要求に対し、ＦＩＦＯ回路１２または＃１ＤＰＲＡＭ３０または＃２ＤＰＲＡＭ３２（以下、単に＃１ＤＰＲＡＭ３０をＤＰＲＡＭ３０、＃２ＤＰＲＡＭ３２をＤＰＲＡＭ３２とも言う。）からデータを読出し、各ＣＰＵに送出する。
【００２９】
ＣＰＵ２、４とＦＩＦＯ読出回路２０との間の６個のインタフェース（ＩＦ）信号と、ＩＦ信号がポート信号またはバス信号のいずれであるかと、ＩＦ信号の出力元とを以下に示す。以下の６個のＩＦ信号は、ＣＰＵの個数分設けられている。各信号の詳細については後述する。
（１）読出開始信号：ポート信号、ＣＰＵ
（２）連続読出個数信号（個数表現に必要なビット数）：ポート信号、ＣＰＵ
（３）読出許可信号：ポート信号、ＦＩＦＯ読出回路
（４）読出ストローブ信号：バス信号、ＣＰＵ
（５）読出ＷＡＩＴ信号：バス信号、ＦＩＦＯ読出回路
（６）ＦＩＦＯデータ信号（データ幅に応じたビット数）：バス信号、ＦＩＦＯ読出回路
（ＣＰＵによる読出処理）
図３および図４に基づいて、ＣＰＵ２またはＣＰＵ４がＦＩＦＯ回路１２に対して読出しを要求する場合の状態遷移について説明する。図３において「Ｓ」はステップを表している。
【００３０】
ＣＰＵ２、４がＦＩＦＯ回路１２に対して読出しを要求する場合、まずＣＰＵ２、４は、ＦＩＦＯ回路１２から１回の読出要求で連続してデータを読み出す連続読出個数を出力し（Ｓ４００）、次に読出開始信号を’１’にする（Ｓ４０２）。
【００３１】
読出開始信号を’１’にすることにより、ＣＰＵ２、４はＦＩＦＯ読出回路２０にＦＩＦＯ回路１２に対する読出しの開始を通知する。ＦＩＦＯ読出回路２０は、読出開始信号が’１’になることにより、ＣＰＵ２、４からＦＩＦＯ回路１２への読出しを要求されたと判断する。そして、ＦＩＦＯ読出回路２０が読出許可信号を’１’にすることにより、ＣＰＵ２、４は、ＦＩＦＯ回路１２に対する読出要求が受け付けられた判断する。
【００３２】
ＣＰＵ２、４は、ＦＩＦＯ読出回路２０から出力される読出許可信号が’１’になると（Ｓ４０４：Ｙｅｓ）、読出開始信号を’０’にし（Ｓ４０６）、読出ストローブ信号を’１’にする（Ｓ４０８）。読出ストローブ信号を’１’にすることにより、ＣＰＵ２、４は、ＦＩＦＯ読出回路２０にデータの読出しを要求する。ＦＩＦＯ読出回路２０は、読出ストローブ信号が’１’になると、読出しＷＡＩＴ信号を’１’にし、ＦＩＦＯ回路１２またはＤＰＲＡＭから１個のデータを読出す。
【００３３】
ＦＩＦＯ読出回路２０がＦＩＦＯ回路１２またはＤＰＲＡＭから１個のデータを読出し、読出しＷＡＩＴ信号が’０’になると（Ｓ４１０：Ｙｅｓ）、ＣＰＵ２、４は、ＦＩＦＯデータ信号のデータを読出し（Ｓ４１２）、読出ストローブ信号を’０’にする（Ｓ４１４）。
【００３４】
尚、読出しＷＡＩＴ信号は、ＣＰＵ２、４がバス信号として通常備えている信号であり、新に設けた信号ではない。また、ＣＰＵ２、４によるＳ４０８〜Ｓ４１４の処理は、バス信号に関する処理であり、例えばＣ言語のプログラム上で、＊ａ＋＋＝＊ｂ＋＋を実行する場合に、ｂのポインタ値、つまりｂが示すアドレス位置のデータを読み出すときに、ＣＰＵ２、４のハードウェアが実行する処理である。
【００３５】
一方、ＣＰＵ２、４によるＳ４００〜Ｓ４０６、およびＳ４１６〜Ｓ４２０の処理は、ＣＰＵ２、４のポート信号に関する処理であり、ＣＰＵ２、４のプログラムが実行する処理である。
【００３６】
読出ストローブ信号が’１’のときに読出しＷＡＩＴ信号が’１’から’０’になると（Ｓ４１０：Ｙｅｓ）、ＦＩＦＯ読出回路２０がＦＩＦＯ回路１２またはＤＰＲＡＭから読み出したデータがＦＩＦＯデータ信号に出力されていることを表している。これにより、ＣＰＵ２、４とＦＩＦＯ読出回路２０との間でクロックが異なっていても、ＣＰＵ２、４は、ＦＩＦＯ回路１２またはＤＰＲＡＭのデータを正しく読み出すことができる。
【００３７】
次にＣＰＵ２、４は、データの読出回数カウンタをカウントアップし（Ｓ４１６）、データの読出回数が連続読出個数に達していない場合（Ｓ４１８：Ｎｏ）、Ｓ４０８に処理を移行する。
【００３８】
データの読出回数が連続読出個数に達すると（Ｓ４１８：Ｙｅｓ）、ＣＰＵ２、４は読出回数カウンタをクリアし（Ｓ４２０）、読出処理を終了する。
上記説明では、読出ストローブ信号および読出ＷＡＩＴ信号をハイで有効としたが、ローで有効としてもよい。また、ＦＩＦＯデータ信号は双方向のバス信号であるから、連続読出個数信号をＦＩＦＯデータ信号としてＣＰＵ２、４から出力してもよい。
【００３９】
ＣＰＵ２、４は、上記Ｓ４００〜Ｓ４２０の処理を実行することにより、互いに他のＣＰＵを意識することなく、ＦＩＦＯ回路１２に対する読出しを独立して実行できる。
（ＦＩＦＯ読出回路２０による＃１ＣＰＵ用読出処理）
図５および図６に基づいて、ＦＩＦＯ回路１２に対する読出を＃１ＣＰＵから要求された場合のＦＩＦＯ読出回路２０における処理の状態遷移について説明する。図５および図６において「Ｓ」はステップを表している。尚、図５および図６、さらに後述する図７、図８、図１０および図１１の状態遷移は、ＦＩＦＯ回路１２に対する読出しクロックに同期して行われる。
【００４０】
また、図５および図６において使用する変数の意味は以下の通りである。
（１）＃１ＣＰＵポインタ：＃１ＣＰＵがＦＩＦＯ回路１２または＃１ＤＰＲＡＭからデータを読み出した現在までの総回数（総個数と同義である。）。
（２）＃２ＤＰＲＡＭポインタ：＃１ＣＰＵがＦＩＦＯ回路１２から読み出したデータを＃２ＤＰＲＡＭに書き込むアドレス。
（３）＃１ＤＰＲＡＭアドレス：＃２ＣＰＵがＦＩＦＯ回路１２から読み出したデータを記憶している＃１ＤＰＲＡＭから、＃１ＣＰＵがデータを読み出すアドレス。
（４）＃１ＣＰＵ読出回数：＃１ＣＰＵが連続してＦＩＦＯ回路１２または＃１ＤＰＲＡＭからデータを読み出す回数カウンタ。
【００４１】
まず、ＦＩＦＯ読出回路２０は、電源オン後のリセット処理が終了すると（Ｓ４３０：Ｙｅｓ）、＃１ＣＰＵポインタ、＃２ＤＰＲＡＭポインタ、＃１ＤＰＲＡＭアドレス、＃１ＣＰＵ読出回数をクリアする（Ｓ４３２）。
【００４２】
そして、ＦＩＦＯ読出回路２０は、＃１ＣＰＵの読出開始信号が’１’になると（Ｓ４３４：Ｙｅｓ）、＃１ＣＰＵが出力する＃１ＣＰＵ連続読出個数信号を読込む（Ｓ４３６）。ＦＩＦＯ回路１２に格納されているデータが空でなければ、つまりｅｍｐｔｙ信号＝’０’であれば（Ｓ４３８：Ｎｏ）、ＦＩＦＯ読出回路２０は、＃１ＣＰＵに対する読出許可信号を’１’に設定し（Ｓ４４０）、＃１ＣＰＵ読出回数をカウントアップするＳ４４２）。
【００４３】
次に、Ｓ４４４においてＦＩＦＯ読出回路２０は、＃１ＣＰＵポインタ≧＃２ＣＰＵポインタであれば（Ｓ４４４：Ｙｅｓ）、Ｓ４４６に処理を移行し、＃１ＣＰＵポインタ＜＃２ＣＰＵポインタであれば（Ｓ４４４：Ｎｏ）、Ｓ４６４に処理を移行する。
【００４４】
＃１ＣＰＵポインタ≧＃２ＣＰＵポインタの場合（Ｓ４４４：Ｙｅｓ）、＃１ＣＰＵによる総読出回数は＃２ＣＰＵによる総読出回数以上であるから、ＦＩＦＯ読出回路２０は、＃１ＣＰＵは＃２ＣＰＵよりも先行してＦＩＦＯ回路１２に対して読出しを要求していると判断する。
【００４５】
つまり、＃１ＣＰＵポインタ≧＃２ＣＰＵポインタの場合、＃１ＣＰＵによるＦＩＦＯ回路１２に対する読出要求に対し、ＦＩＦＯ読出回路２０はＦＩＦＯ回路１２からデータを読み出し＃１ＣＰＵに送出すると判断する。第１実施形態では、＃１ＣＰＵポインタ＝＃２ＣＰＵポインタである場合、＃２ＣＰＵよりも＃１ＣＰＵを優先してＦＩＦＯ回路１２からデータを読出すものとしている。
【００４６】
そして、ＦＩＦＯ回路１２に格納されているデータが空ではなく（Ｓ４４６：Ｎｏ）、＃１ＣＰＵ読出ストローブ信号＝’１’の場合（Ｓ４４８：Ｙｅｓ）、読出ＷＡＩＴ信号を’１’に設定し（Ｓ４５０）、ＦＩＦＯ回路１２に１クロック分の読出要求信号を出力する（Ｓ４５２）。Ｓ４４６でＦＩＦＯ回路１２に格納されているデータが空の場合（Ｓ４４６：Ｎｏ）、ＦＩＦＯ回路１２からのデータの読出し途中でデータが空になったことを表すので、ＦＩＦＯ読出回路２０は、ＦＩＦＯ回路１２に新にデータが格納されるまで待機する。
【００４７】
ＦＩＦＯ読出回路２０は、ＦＩＦＯ回路１２が出力する１個分のデータをラッチし、＃１ＣＰＵに出力する（Ｓ４５４）。次に、＃２ＤＰＲＡＭの＃２ＤＰＲＡＭポインタが示す位置にＦＩＦＯ回路１２が出力する１個分のデータを書き込む（Ｓ４５６）。
【００４８】
ＦＩＦＯ回路１２からデータを読み出すと、ＦＩＦＯ回路１２の内部で読出ポインタが次のデータ位置を示すので、＃１ＣＰＵがＦＩＦＯ回路１２からデータを読み出すと、他方の＃２ＣＰＵは既に読み出されたデータをＦＩＦＯ回路１２から読み出すことはできない。そこで、＃１ＣＰＵがＦＩＦＯ回路１２からデータを読み出すと、Ｓ４５６において、＃２ＤＰＲＡＭにそのデータを書き込んでコピーしておき、後で＃２ＣＰＵが読み出せるようにしておく。
【００４９】
＃２ＤＰＲＡＭにＦＩＦＯデータを書き込むと、ＦＩＦＯ読出回路２０は、読出ＷＡＩＴ信号を’０’に設定し（Ｓ４５８）、＃１ＣＰＵポインタをカウントアップし（Ｓ４６０）、＃２ＤＰＲＡＭポインタをカウントアップし（Ｓ４６２）、Ｓ４７６に処理を移行する。
【００５０】
Ｓ４５８においてＦＩＦＯ読出回路２０が読出ＷＡＩＴ信号を’０’に設定すると、＃１ＣＰＵは、図３のＳ４１２において、ＦＩＦＯデータ信号のデータを読み出す。
前述したＳ４４４の判定において、＃１ＣＰＵポインタ＜＃２ＣＰＵポインタの場合（Ｓ４４４：Ｎｏ）、＃１ＣＰＵによる総読出回数は＃２ＣＰＵによる総読出個数より小さいので、ＦＩＦＯ読出回路２０は、＃１ＣＰＵは＃２ＣＰＵよりも遅れてＦＩＦＯ回路１２に対して読出しを要求していると判断する。
【００５１】
つまり、＃１ＣＰＵポインタ＜＃２ＣＰＵポインタの場合、ＦＩＦＯ読出回路２０は、＃１ＣＰＵによるＦＩＦＯ回路１２に対する読出要求に対応するデータを、すでにＦＩＦＯ回路１２から読み出して＃２ＣＰＵに送出したと判断する。＃２ＣＰＵがＦＩＦＯ回路１２から読み出したデータは＃１ＤＰＲＡＭに書き込まれている。
【００５２】
そして、ＦＩＦＯ読出回路２０は、＃１ＣＰＵ読出ストローブ信号＝’１’であれば（Ｓ４６４：Ｙｅｓ）、読出ＷＡＩＴ信号を’１’に設定し（Ｓ４６６：Ｙｅｓ）、＃１ＤＰＲＡＭの＃１ＤＰＲＡＭアドレス位置から１個分のデータを読出してラッチし、＃１ＣＰＵに出力する（Ｓ４６８）。
【００５３】
次に、ＦＩＦＯ読出回路２０は、読出ＷＡＩＴ信号を’０’に設定し（Ｓ４７０）、＃１ＣＰＵポインタをカウントアップし（Ｓ４７２）、＃１ＤＰＲＡＭアドレスをカウントアップし（Ｓ４７４）、Ｓ４７６に処理を移行する。
【００５４】
Ｓ４７６において、＃１ＣＰＵ読出回数＜＃１ＣＰＵ連続読出個数であれば（Ｓ４７６：Ｎｏ）、＃１ＣＰＵ連続読出個数分のデータを＃１ＣＰＵがまだ読み出していないと判断し、ＦＩＦＯ読出回路２０はＳ４４４に処理を移行する。
【００５５】
＃１ＣＰＵ読出回数≧＃１ＣＰＵ連続読出個数であれば（Ｓ４７６：Ｙｅｓ）、ＦＩＦＯ読出回路２０は、＃１ＣＰＵ連続読出個数分のデータを＃１ＣＰＵは読み出したと判断し、＃１ＣＰＵ読出回数をクリアする（Ｓ４７８）。
【００５６】
次に、ＦＩＦＯ回路１２に格納されているデータが空ではない場合（Ｓ４８０：Ｎｏ）、ＦＩＦＯ読出回路２０は、＃１ＣＰＵからの読出要求に備え、Ｓ４３４に処理を移行する。
【００５７】
＃１ＣＰＵが＃１ＣＰＵ連続読出個数分のデータを読み出したときにＦＩＦＯ回路１２に格納されているデータが空であり（Ｓ４８０：Ｙｅｓ）、＃１ＣＰＵポインタ≧＃２ＣＰＵポインタであれば（Ｓ４８２：Ｙｅｓ）、ＦＩＦＯ読出回路２０は、＃１ＣＰＵポインタ＝＃２ＣＰＵポインタになるまで待機する（Ｓ４８４：Ｎｏ）。
【００５８】
これは、Ｓ４８２において＃１ＣＰＵポインタ＞＃２ＣＰＵポインタであれば、＃２ＤＰＲＡＭに＃２ＣＰＵの未読データが残っているので、＃２ＣＰＵが＃２ＤＰＲＡＭに記憶されているデータを全て読出すまで待機するためである。
【００５９】
＃１ＣＰＵポインタ＝＃２ＣＰＵポインタであれば（Ｓ４８４：Ｙｅｓ）、ＦＩＦＯ回路１２のデータが空になった状態で＃１ＣＰＵと＃２ＣＰＵとの読出回数が一致するので、ＦＩＦＯ読出回路２０は、Ｓ４３２に処理を移行し初期状態に戻る。
【００６０】
Ｓ４８２において＃１ＣＰＵポインタ＜＃２ＣＰＵポインタであれば（Ｓ４８２：Ｎｏ）、ＦＩＦＯ回路１２のデータが空になった状態で＃１ＤＰＲＡＭに＃１ＣＰＵが未読のデータが残されていると考えられる。そこで、ＦＩＦＯ読出回路２０は、図６のＳ４８６において、＃１ＣＰＵの読出開始信号が’１’になると（Ｓ４８６：Ｙｅｓ）、＃１ＣＰＵが出力する＃１ＣＰＵ連続読出個数信号を読込む（Ｓ４８８）。そして、ＦＩＦＯ読出回路２０は、＃１ＣＰＵに対する読出許可信号を’１’に設定し（Ｓ４９０）、図５のＳ４４２に処理を移行する。これにより、＃１ＣＰＵポインタ＝＃２ＣＰＵポインタになるまで（Ｓ４８４：Ｙｅｓ）、＃１ＤＰＲＡＭに記憶されている未読のデータを＃１ＣＰＵは読出す。
【００６１】
（ＦＩＦＯ読出回路２０による＃２ＣＰＵ用読出処理）
図７および図８に基づいて、ＦＩＦＯ回路１２に対する読出しを＃２ＣＰＵから要求された場合のＦＩＦＯ読出回路２０における処理の状態遷移について説明する。図７および図８において「Ｓ」はステップを表している。図７および図８において使用する変数の意味は以下の通りである。
（１）＃２ＣＰＵポインタ：＃２ＣＰＵがＦＩＦＯ回路１２または＃２ＤＰＲＡＭからデータを読み出した現在までの総回数（総個数と同義である。）。
（２）＃１ＤＰＲＡＭポインタ：＃２ＣＰＵがＦＩＦＯ回路１２から読み出したデータを＃１ＤＰＲＡＭに書き込むアドレス。
（３）＃２ＤＰＲＡＭアドレス：＃１ＣＰＵがＦＩＦＯ回路１２から読み出したデータを記憶している＃２ＤＰＲＡＭから、＃２ＣＰＵがデータを読み出すアドレス。
（４）＃２ＣＰＵ読出回数：＃２ＣＰＵが連続してＦＩＦＯ回路１２または＃２ＤＰＲＡＭからデータを読み出す回数カウンタ。
【００６２】
図５および図６における＃１ＣＰＵ用読出処理と、図７および図８における＃２ＣＰＵ用読出処理とは、ＣＰＵ名と上記変数名とが異なるだけで、殆ど同じである。以下に、異なる処理について説明する。
【００６３】
Ｓ５０４において、ＦＩＦＯ読出回路２０は、＃１ＣＰＵポインタ＜＃２ＣＰＵポインタの場合（Ｓ５０４：Ｙｅｓ）、＃２ＣＰＵによる総読出回数は＃１ＣＰＵによる総読出回数より大きいので、ＦＩＦＯ読出回路２０は、＃２ＣＰＵは＃１ＣＰＵよりも先行してＦＩＦＯ回路１２に対して読出しを要求していると判断する。
【００６４】
つまり、＃１ＣＰＵポインタ＜＃２ＣＰＵポインタの場合、＃２ＣＰＵによるＦＩＦＯ回路１２に対する読出要求に対し、ＦＩＦＯ読出回路２０はＦＩＦＯ回路１２からデータを読み出し＃２ＣＰＵに送出すると判断する。
【００６５】
＃１ＣＰＵ用読出処理で説明したように、第１実施形態では、＃１ＣＰＵによる総読出回数と＃２ＣＰＵによる総読出個数とが等しい場合、＃２ＣＰＵよりも＃１ＣＰＵを優先してＦＩＦＯ回路１２からデータを読出すので、＃１ＣＰＵポインタ＜＃２ＣＰＵポインタのときだけ、ＦＩＦＯ読出回路２０はＦＩＦＯ回路１２から読み出したデータを＃２ＣＰＵに送出する。
【００６６】
また、Ｓ５２６の次にＳ５２８の処理が追加されている点が、図５の＃１ＣＰＵ用読出処理と異なっている。Ｓ５０４において＃１ＣＰＵポインタ≧＃２ＣＰＵポインタであるときに（Ｓ５０４：Ｎｏ）、＃１ＣＰＵポインタ＝＃２ＣＰＵポインタの場合には、＃１ＣＰＵと＃２ＣＰＵとで総読出回数が同じであるから、＃１ＣＰＵは＃２ＣＰＵに先行してＦＩＦＯ回路１２からデータを読み出していない。つまり、＃２ＤＰＲＡＭには＃２ＣＰＵが読み出せるデータがまだ書き込まれていないことを表している。
【００６７】
そこで、Ｓ５２８において、ＦＩＦＯ読出回路２０は、＃１ＣＰＵポインタ＝＃２ＣＰＵポインタの場合は待機し（Ｓ５２８：Ｎｏ）、＃１ＣＰＵが＃２ＣＰＵに先行してＦＩＦＯ回路１２からデータを読み出し、＃２ＤＰＲＡＭに＃２ＣＰＵが読み出せるデータが書き込まれることにより＃１ＣＰＵポインタ＞＃２ＣＰＵポインタになると（Ｓ５２８：Ｙｅｓ）、Ｓ５３０からの処理を実行し、＃２ＤＰＲＡＭに記憶されているデータを＃２ＣＰＵに送出する。
【００６８】
以上説明した第１実施形態では、＃１ＣＰＵと＃２ＣＰＵとのＦＩＦＯ回路１２に対する読出要求をＦＩＦＯ読出回路２０が処理することにより、＃１ＣＰＵと＃２ＣＰＵとは、互いに他のＣＰＵがＦＩＦＯ回路１２に対して読出しを要求しているか否かに関わらず、１個のＦＩＦＯ回路１２に対して独立して読出しを要求できる。
【００６９】
また、２個のＣＰＵが１個のＦＩＦＯ回路１２のデータを読み出すので、ＣＰＵ毎にＤＰＲＡＭを設置はするものの、ＣＰＵ毎にＦＩＦＯ回路１２を設置する構成に比べ、ハードウェア量を低減できる。
【００７０】
また、ＦＩＦＯ回路１２に対してＣＰＵ２、４からの読出要求が同時に発生しても、その読出要求は、ＦＩＦＯ読出回路２０によりＦＩＦＯ回路１２またはＤＰＲＡＭのいずれかに振り分けられる。したがって、ＣＰＵ２、４からの読出要求に対して、ＦＩＦＯ回路１２またはＤＰＲＡＭに同時に読出しは要求されない。
【００７１】
第１実施形態では、２個のＣＰＵが１個のＦＩＦＯ回路１２のデータを読み出す例について説明した。ＣＰＵが３個以上の場合には、ＣＰＵが２個の場合と同様に、ＣＰＵ毎にＤＰＲＡＭを設け、１個のＦＩＦＯ回路１２に対する読出回数が先行している先行ＣＰＵを判定し、先行ＣＰＵがＦＩＦＯ回路から読み出すデータを、先行ＣＰＵ以外の他のＣＰＵ用のＤＰＲＡＭにそれぞれ書き込む構成にすればよい。
【００７２】
これにより、３個以上の複数のＣＰＵに１個のＦＩＦＯ回路を設置する構成においても、他のＣＰＵによるＦＩＦＯ回路に対する読出要求に関わらず、各ＣＰＵは独立してＦＩＦＯ回路に格納されているデータを読み出すことができる。
【００７３】
第１実施形態では、ＦＩＦＯデータ読出装置１０が本発明のＦＩＦＯデータ読出装置に相当し、＃１ＤＰＲＡＭ３０および＃２ＤＰＲＡＭ３２が本発明の記憶装置に相当し、ＦＩＦＯ読出回路２０が本発明の判定手段およびデータ処理手段として機能する。
【００７４】
また、Ｓ４４４、Ｓ４８２、Ｓ５０４およびＳ５４４の処理は、本発明の判定手段が実行する機能に相当し、Ｓ４５４、Ｓ４５６、Ｓ４６８、Ｓ５１４、Ｓ５１６、およびＳ５３０の処理は本発明のデータ処理手段が実行する機能に相当する。
【００７５】
［第２実施形態］
図９に本実施形態のＦＩＦＯデータ読出装置４０を示す。第２実施形態では、＃１ＣＰＵおよび＃２ＣＰＵがＦＩＦＯ回路１２から読み出したデータを書き込むＤＰＲＡＭ４２は１個だけである。
【００７６】
第２実施形態では、２個のＣＰＵがＦＩＦＯ回路１２から読み出したデータを１個のＤＰＲＡＭ４２に書き込む場合、図１０のＳ６２６および図１１のＳ７２６に示すように、書き込み用の＃１ＤＰＲＡＭポインタと＃２ＤＰＲＡＭポインタとを加算したポインタ値で書き込みを行う。また、２個のＣＰＵが１個のＤＰＲＡＭ４２から読出しを行う場合、図１０のＳ６３８および図１１のＳ７４０に示すように、読出し用の＃１ＤＰＲＡＭアドレスと＃２ＤＰＲＡＭアドレスとを加算したアドレス値で読み出しを行う。その他の読出し処理については、実質的に第１実施形態と同様である。また、図１０のＳ６５２の判定結果がＮｏの場合の処理は図６と実質的に同じであり、図１１のＳ７５４の判定結果がＮｏの場合の処理は図８と実質的に同じであるから図示を省略する。
【００７７】
ＣＰＵが２個の場合に、１個のＤＰＲＡＭ４２において、先行ＣＰＵがＦＩＦＯ回路１２から読み出すデータを、２個のＣＰＵ用にそれぞれ設けた書込用のポインタを加算したアドレス位置に書き込んでいくことにより、先行ＣＰＵではない方のＣＰＵが読み出すべきＦＩＦＯ回路１２のデータはＤＰＲＡＭ４２に記憶される。
【００７８】
そして、先行ＣＰＵではない方のＣＰＵに送出するＤＰＲＡＭ４２のデータは、先行ＣＰＵがＦＩＦＯ回路１２から読み出したデータであり、先行ＣＰＵはＤＰＲＡＭ４２から読み出す必要がない。したがって、共通のＤＰＲＡＭ４２から読み出すデータ数に応じて、２個のＣＰＵ用にそれぞれ設けた読出用のアドレスを加算した読出アドレスが更新されても、先行ＣＰＵではないＣＰＵに、ＤＰＲＡＭ４２に記憶されているデータを読み飛ばすことなく送出できる。
【００７９】
第２実施形態では、２個のＣＰＵがＦＩＦＯ回路１２から読み出したデータを書き込むＤＰＲＡＭ４２を１個だけ設置しているので、第１実施形態よりもハードウェア量を低減できる。
【００８０】
第２実施形態では、ＦＩＦＯデータ読出装置４０が本発明のＦＩＦＯデータ読出装置に相当し、ＤＰＲＡＭ４２が本発明の記憶装置に相当し、ＦＩＦＯ読出回路５０が本発明の判定手段およびデータ処理手段として機能する。
【００８１】
また、Ｓ６１４、Ｓ６５２、Ｓ７１４およびＳ７５４の処理は、本発明の判定手段が実行する機能に相当し、Ｓ６２４、Ｓ６２６、Ｓ６３８、Ｓ７２４、Ｓ７２６およびＳ７４０の処理は本発明のデータ処理手段が実行する機能に相当する。
【００８２】
［他の実施形態］
上記実施形態では、レーダによるスキャンデータを格納する１個のＦＩＦＯ回路１２から複数のＣＰＵがデータを読み出す構成について説明したが、ＦＩＦＯ回路が格納するデータはレーダによるスキャンデータに限るものではなく、通信等により順次送信されるデータであればどのようなデータであってもよい。
【００８３】
また、ＦＩＦＯ回路が格納しているデータをコピーする記憶装置はＤＰＲＡＭに限るものではなく、どのような記憶装置を用いてもよい。
また、上記第２実施形態では、１個のＤＰＲＡＭ４２に対し、２個のＣＰＵのそれぞれに読出用アドレスと書込用ポインタと設けた。これに対し、２個のＣＰＵに共通の１個の書込用ポインタと読出用アドレスとを設け、書き込むデータ数および読み出すデータ数に応じて共通の書込用ポインタと読出用アドレスとを更新しても、１個のＤＰＲＡＭ４２に対し、第２実施形態と実質的に同一の書き込み処理および読出し処理を実行できる。
【００８４】
このように、本発明は、上記実施形態に限定されるものではなく、その要旨を逸脱しない範囲で種々の実施形態に適用可能である。
【符号の説明】
【００８５】
２、４：ＣＰＵ、１０、４０：ＦＩＦＯデータ読出装置、１２：ＦＩＦＯ回路、２０、５０：ＦＩＦＯ読出回路（判定手段、データ処理手段）、３０、３２、４２：ＤＰＲＡＭ（記憶装置）
【図１】
0005381919.tif 000002
【図２】
0005381919.tif 000003
【図３】
0005381919.tif 000004
【図４】
0005381919.tif 000005
【図５】
0005381919.tif 000006
【図６】
0005381919.tif 000007
【図７】
0005381919.tif 000008
【図８】
0005381919.tif 000009
【図９】
0005381919.tif 000010
【図１０】
0005381919.tif 000011
【図１１】
0005381919.tif 000012