(57)【要約】【課題】複数のＣＰＵを備えたシステムの処理速度を向上させる。【解決手段】組み込みシステム１０は、ＣＰＵユニット１１０及び２１０を備える。ＣＰＵユニット１１０のＩ／Ｆ制御部１２０は、プログラムコードを含むパケット４０をＣＰＵユニット２１０から受け取る。Ｉ／Ｆ制御部１２０は、ＣＰＵユニット１１０が備えるＣＰＵ１１１のメモリマップ上におけるプログラムフェッチが可能な領域の一部として機能するバッファ１２３を備える。Ｉ／Ｆ制御部１２０は、プログラムコードをバッファ１２３に格納する。Ｉ／Ｆ制御部１２０は、プログラムコードをバッファ１２３に格納している間、ＣＰＵ１１１のバッファ１２３に対するプログラムフェッチを待ち状態に設定する。Ｉ／Ｆ制御部１２０は、ＣＰＵ１１１がバッファ１２３に対してプログラムフェッチを行っている間、バッファに１２３対するプログラムコードの格納を待ち状態に設定する。【選択図】図１
2014126917.tif 000002
【特許請求の範囲】
【請求項１】
第１ＣＰＵユニットと、
第２ＣＰＵユニットと
を具備し、
前記第２ＣＰＵユニットは、第１プログラムデータパケットを前記第１ＣＰＵユニットに出力し、
前記第１プログラムデータパケットの第１データ部は、前記第１ＣＰＵユニットに実行させるべき第１プログラムコードを含み、
前記第１ＣＰＵユニットは、
第１ＣＰＵと、
前記第１プログラムデータパケットを受け取る第１インターフェース制御部と
を備え、
前記第１インターフェース制御部は、前記第１ＣＰＵのメモリマップ上におけるプログラムフェッチが可能な第１プログラム領域の一部として機能する第１プログラムバッファを備え、
前記第１インターフェース制御部は、
前記第１プログラムコードを前記第１プログラムバッファに格納し、
前記第１プログラムコードを前記第１プログラムバッファに格納している間、前記第１ＣＰＵの前記第１プログラムバッファに対するプログラムフェッチを待ち状態に設定し、
前記第１ＣＰＵが前記第１プログラムバッファに対してプログラムフェッチを行っている間、前記第１プログラムバッファに対する前記第１プログラムコードの格納を待ち状態に設定する
組み込みシステム。
【請求項２】
請求項１に記載の組み込みシステムであって、
前記第１ＣＰＵユニットは、前記第１プログラム領域の他の一部として機能する第１メモリを備え、
前記第１ＣＰＵユニットは、前記第１メモリに格納されたプログラムコードに基づいて、前記第１プログラムバッファに対するプログラムフェッチを行う
組み込みシステム。
【請求項３】
請求項１又は２に記載の組み込みシステムであって、
前記第１インターフェース制御部は、
前記第１プログラムデータパケットの第１ヘッダ部を解析し、
前記第１ヘッダ部を解析した結果に基づいて前記第１ＣＰＵに割込み信号を出力する
組み込みシステム。
【請求項４】
請求項１乃至３のいずれか１項に記載の組み込みシステムであって、
前記第１ＣＰＵユニットは、第２プログラムデータパケットを前記第２ＣＰＵユニットに出力し、
前記第２プログラムデータパケットの第２データ部は、前記第２ＣＰＵユニットに実行させるべき第２プログラムコードを含み、
前記第２ＣＰＵユニットは、
第２ＣＰＵと、
前記第２プログラムデータパケットを受け取る第２インターフェース制御部と
を備え、
前記第２インターフェース制御部は、前記第２ＣＰＵのメモリマップ上におけるプログラムフェッチが可能な第２プログラム領域の一部として機能する第２プログラムバッファを備え、
前記第２インターフェース制御部は、
前記第２プログラムコードを前記第２プログラムバッファに格納し、
前記第２プログラムコードを前記第２プログラムバッファに格納している間、前記第２ＣＰＵの前記第２プログラムバッファに対するプログラムフェッチを待ち状態に設定し、
前記第２ＣＰＵが前記第２プログラムバッファに対してプログラムフェッチを行っている間、前記第２プログラムバッファに対する前記第２プログラムコードの格納を待ち状態に設定する
組み込みシステム。
【請求項５】
第１ＣＰＵユニットが第２ＣＰＵユニットから第１プログラムデータパケットを受け取るステップと、
前記第１プログラムデータパケットの第１データ部に含まれる第１プログラムコードを前記第１ＣＰＵユニットの第１プログラムバッファに格納するステップと、
前記第１ＣＰＵユニットの第１ＣＰＵが前記第１プログラムバッファに対してプログラムフェッチを行うステップと
を具備し、
前記第１プログラムコードを前記第１プログラムバッファに格納している間、前記第１ＣＰＵの前記第１プログラムバッファに対するプログラムフェッチを待ち状態に設定するステップ、又は、前記第１ＣＰＵが前記第１プログラムバッファに対してプログラムフェッチを行っている間、前記第１プログラムバッファに対する前記第１プログラムコードの格納を待ち状態に設定するステップを更に具備する
ＣＰＵ間通信方法。
【請求項６】
請求項５に記載のＣＰＵ間通信方法であって、
前記第１ＣＰＵが前記第１ＣＰＵユニットの第１メモリに対してプログラムフェッチを行うステップを更に具備し、
前記第１ＣＰＵは、前記第１メモリに格納されたプログラムコードに基づいて、前記第１プログラムバッファに対してプログラムフェッチを行う
ＣＰＵ間通信方法。
【請求項７】
請求項５又は６に記載のＣＰＵ間通信方法であって、
前記第１プログラムデータパケットの第１ヘッダ部を解析するステップと、
前記第１ヘッダ部を解析した結果に基づいて、前記第１ＣＰＵに割込み信号を出力するステップと
を更に具備する
ＣＰＵ間通信方法。
【請求項８】
請求項５乃至７のいずれか１項に記載のＣＰＵ間通信方法であって、
前記第２ＣＰＵユニットが前記第１ＣＰＵユニットから第２プログラムデータパケットを受け取るステップと、
前記第２プログラムデータパケットの第２データ部に含まれる第２プログラムコードを前記第２ＣＰＵユニットの第２プログラムバッファに格納するステップと、
前記第２ＣＰＵユニットの第２ＣＰＵが前記第２プログラムバッファに対してプログラムフェッチを行うステップと
を具備し、
前記第２プログラムコードを前記第２プログラムバッファに格納している間、前記第２ＣＰＵの前記第２プログラムバッファに対するプログラムフェッチを待ち状態に設定するステップ、又は、前記第２ＣＰＵが前記第２プログラムバッファに対してプログラムフェッチを行っている間、前記第２プログラムバッファに対する前記第２プログラムコードの格納を待ち状態に設定するステップを更に具備する
ＣＰＵ間通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は組み込みシステム及びＣＰＵ間通信方法に関する。
【背景技術】
【０００２】
特許文献１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）間通信の同期にＣＰＵ間割込を使うと大きな遅延が発生し、複数のＣＰＵの並行実行による高速性が生かせないという課題を開示している。その理由は、ＣＰＵの演算処理と比較して割込処理は高速化できていないためである。特許文献１は、ＣＰＵ間通信による遅延時間を短縮するとともに、同期の待ち時間に応じてウェイト処理を最適に制御することができるＣＰＵ間通信システムを開示している。このＣＰＵ間通信システムは、複数のＣＰＵがメモリを介してデータ通信を行う対称型マルチＣＰＵシステムである。
【０００３】
特許文献１に開示されたＣＰＵ間通信システムは、データを送信する送信側ＣＰＵとデータを受信する受信側ＣＰＵとにより共有されるメモリを介して、送信側ＣＰＵと受信側ＣＰＵとの間でデータの通信を行う。送信側ＣＰＵは、メモリ領域判定部と、データ書き込み部と、受信側ＣＰＵ判定部と、送信側制御部とを備える。メモリ領域判定部は、メモリに空き領域があるか否かを判定する。データ書き込み部は、メモリ領域判定部によりメモリに空き領域があると判定された場合に、メモリにデータを書き込むデータ書き込み処理を実行する。受信側ＣＰＵ判定部は、メモリ領域判定部がメモリに空き領域がないと判定した場合に、受信側ＣＰＵの状態を判定する。送信側制御部は、受信側ＣＰＵ判定部により受信側ＣＰＵの状態がメモリからデータを読み出すデータ読み出し処理の実行状態であると判定された場合に、メモリに空き領域ができるまでデータ書き込み部をデータ書き込み処理の待ち状態とする。送信側制御部は、受信側ＣＰＵ判定部により受信側ＣＰＵの状態がデータ読み出し処理の実行状態でないと判定された場合に、受信側ＣＰＵにデータ読み出し処理の実行を開始させるための読み出し開始要求を受信側ＣＰＵへ送信する。
【０００４】
一方、特許文献２は、マルチディスプレイシステムの制御プログラム書き換えにおいて、複数のプログラムを短時間に一括して書き換えることが可能な制御装置を開示している。特許文献２は、実行中のプログラムを書き換えることを開示していない。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１２−００３６７３号公報
【特許文献２】特開２００１−２３６２３３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
複数のＣＰＵを備えたシステムにおいて、システム全体の処理速度を向上できる余地がある。
【０００７】
したがって、本発明は、複数のＣＰＵを備えたシステムの処理速度を向上することができる組み込みシステム及びＣＰＵ間通信方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明にかかる組み込みシステムは、第１ＣＰＵユニットと、第２ＣＰＵユニットとを具備する。前記第２ＣＰＵユニットは、第１プログラムデータパケットを前記第１ＣＰＵユニットに出力する。前記第１プログラムデータパケットの第１データ部は、前記第１ＣＰＵユニットに実行させるべき第１プログラムコードを含む。前記第１ＣＰＵユニットは、第１ＣＰＵと、前記第１プログラムデータパケットを受け取る第１インターフェース制御部とを備える。前記第１インターフェース制御部は、前記第１ＣＰＵのメモリマップ上におけるプログラムフェッチが可能な第１プログラム領域の一部として機能する第１プログラムバッファを備える。前記第１インターフェース制御部は、前記第１プログラムコードを前記第１プログラムバッファに格納する。前記第１インターフェース制御部は、前記第１プログラムコードを前記第１プログラムバッファに格納している間、前記第１ＣＰＵの前記第１プログラムバッファに対するプログラムフェッチを待ち状態に設定する。前記第１インターフェース制御部は、前記第１ＣＰＵが前記第１プログラムバッファに対してプログラムフェッチを行っている間、前記第１プログラムバッファに対する前記第１プログラムコードの格納を待ち状態に設定する。
【０００９】
本発明によるＣＰＵ間通信方法は、第１ＣＰＵユニットが第２ＣＰＵユニットから第１プログラムデータパケットを受け取るステップと、前記第１プログラムデータパケットの第１データ部に含まれる第１プログラムコードを前記第１ＣＰＵユニットの第１プログラムバッファに格納するステップと、前記第１ＣＰＵユニットの第１ＣＰＵが前記第１プログラムバッファに対してプログラムフェッチを行うステップとを具備する。ＣＰＵ間通信方法は、前記第１プログラムコードを前記第１プログラムバッファに格納している間、前記第１ＣＰＵの前記第１プログラムバッファに対するプログラムフェッチを待ち状態に設定するステップ、又は、前記第１ＣＰＵが前記第１プログラムバッファに対してプログラムフェッチを行っている間、前記第１プログラムバッファに対する前記第１プログラムコードの格納を待ち状態に設定するステップを更に具備する。
【発明の効果】
【００１０】
本発明により、複数のＣＰＵを備えたシステムの処理速度を向上することができる組み込みシステム及びＣＰＵ間通信方法を提供することができる。
【図面の簡単な説明】
【００１１】
【図１】実施の形態１にかかる組み込みシステムのブロック図である。
【図２】実施の形態１にかかるＣＰＵ間通信方法のシーケンス図である。
【図３】実施の形態１にかかるプログラムデータパケットのデータ構造図である。
【図４】実施の形態２にかかる組み込みシステムのブロック図である。
【図５】実施の形態２にかかるＣＰＵのメモリマップの概念図である。
【図６】実施の形態２にかかるＣＰＵが実行するプログラムの一例を示す。
【図７】実施の形態２にかかるＣＰＵ間通信方法のシーケンス図である。
【図８】実施の形態２にかかるＣＰＵ間通信方法の概念図である。
【図９】実施の形態３にかかるＣＰＵ間通信方法の概念図である。
【発明を実施するための形態】
【００１２】
以下、図面を参照して本発明の実施の形態について説明する。
【００１３】
（実施の形態１）
図１を参照して、実施の形態１にかかる組み込みシステム１０を説明する。組み込みシステム１０は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）ユニット１１０及び２１０を備える。ＣＰＵユニット１１０は、少なくとも一つのＣＰＵを備える。ＣＰＵユニット２１０は、少なくとも一つのＣＰＵを備える。組み込みシステム１０が処理を実行するため、ＣＰＵユニット１１０のＣＰＵとＣＰＵユニット２１０のＣＰＵとが互いに通信する。ＣＰＵユニット１１０は、ＣＰＵ１１１と、インターフェース制御部１２０とを備える。インターフェース制御部１２０は、プログラムバッファ１２３を備える。プログラムバッファ１２３は、ＣＰＵ１１１のメモリマップ上におけるプログラムフェッチが可能なプログラム領域の一部として機能する。
【００１４】
次に、実施の形態１にかかるＣＰＵ間通信方法を説明する。
【００１５】
図２を参照して、ステップＳ１００において、ＣＰＵユニット２１０は、プログラムデータパケット４０をＣＰＵユニット１１０に出力する。ＣＰＵユニット１１０のインターフェース制御部１２０は、プログラムデータパケット４０を受け取る。ここで、プログラムデータパケット４０のデータ構造を説明する。
【００１６】
図３を参照して、プログラムデータパケット４０は、ヘッダ部４１と、パラメータ部４２と、データ部４３とを含む。ヘッダ部４１は、データ部４３をプログラムバッファ１２３に格納すべきことを示す。データ部４３は、ＣＰＵ１１１に実行させるべきプログラムコードを含む。プログラムデータパケット４０を用いることで、ＣＰＵユニット２１０は、任意のデータサイズのプログラムコードをＣＰＵユニット１１０に送信することができる。
【００１７】
図２を参照して、インターフェース制御部１２０は、プログラムデータパケット４０のデータ部４３に含まれるプログラムコードをプログラムバッファ１２３に格納する（Ｓ１０４）。具体的には、インターフェース制御部１２０は、プログラムデータパケット４０のヘッダ部４１を解析し、ヘッダ部４１を解析した結果に基づいて、データ部４３に含まれるプログラムコードをプログラムバッファ１２３に格納する。ＣＰＵ１１１は、プログラムバッファ１２３に対してプログラムフェッチを行う（Ｓ１０６）。ここで、インターフェース制御部１２０のハードウェアは、プログラムコードをプログラムバッファ１２３に格納している（書き込んでいる）間、ＣＰＵ１１１のプログラムバッファ１２３に対するプログラムフェッチを待ち状態に設定する。インターフェース制御部１２０のハードウェアは、ＣＰＵ１１１がプログラムバッファ１２３に対してプログラムフェッチを行っている間、プログラムバッファ１２３に対するプログラムコードの格納（書き込み）を待ち状態に設定する。
【００１８】
ここで、一般的な割込みベクタ方式によるＣＰＵ間通信を用いて第１ＣＰＵが第２ＣＰＵにプログラムコードを実行させる場合、以下の手順が必要である。第１ＣＰＵが第２ＣＰＵに割込み信号を出力する。第２ＣＰＵが第１ＣＰＵに割込み発生要因を問い合わせる。第１ＣＰＵが第２ＣＰＵにベクタアドレスを通知する。第２ＣＰＵがベクタアドレスに基づいてプログラムフェッチを行う。
【００１９】
実施の形態１によれば、組み込みシステム１０の処理速度が向上する。その理由を以下に記載する。実施の形態１によれば、プログラムコードをデータ部４３に含むプログラムデータパケット４０をＣＰＵユニット２１０からＣＰＵユニット１１０に送り、ＣＰＵ１１１のメモリマップ上におけるプログラムフェッチが可能なプログラム領域の一部として機能するプログラムバッファ１２３にプログラムコードを格納する。そのため、ＣＰＵユニット１１０が備えるメインメモリ（不図示）への間接的なアクセスが不要であり、ＣＰＵ１１１はプログラムバッファ１２３からプログラムコードを直接取得して実行することができる。実施の形態１によれば、プログラムコードをプログラムバッファ１２３に格納している間、ＣＰＵ１１１のプログラムバッファ１２３に対するプログラムフェッチが待ち状態に設定され、ＣＰＵ１１１がプログラムバッファ１２３に対してプログラムフェッチを行っている間、プログラムバッファ１２３に対するプログラムコードの格納が待ち状態に設定される。そのため、ＣＰＵユニット２１０は、ＣＰＵ１１１が実行中のプログラムを書き換えることができる。ＣＰＵ１１１が実行中のプログラムを書き換えることにより、ＣＰＵ１１１を動的に制御することができる。実施の形態１によれば、ＣＰＵ１１１にプログラムコードを実行させるために割込み信号が必須ではない。割込み信号が使われる回数が少なければ、割込みによる遅延が発生する回数が少ない。実施の形態１によれば、プログラムデータパケット４０の受信、プログラムデータパケット４０のヘッダ部４１の解析、及びプログラムコードの格納をインターフェース制御部１２０のハードウェアにより高レスポンスで実現できる。
【００２０】
更に、実施の形態１によれば、割込み発生要因の問い合わせ及びベクタアドレスの通知が不要である。したがって、ＣＰＵユニット１１０及びＣＰＵユニット２１０の間の通信のソフトウェアによる処理が簡潔になる。更に、実施の形態１によれば、ＣＰＵ１１１に実行させるべきプログラムコード自体をＣＰＵユニット２１０からＣＰＵユニット１１０に送っている。したがって、ＣＰＵユニット２１０は、ＣＰＵユニット１１０に実行させるべきプログラムコードを自由に生成してＣＰＵユニット１１０に送信することができる。ＣＰＵユニット２１０は、ＣＰＵ１１１に実行させるべきプログラムコードをＣＰＵ１１１が参照するメモリ領域にその時点で存在するプログラムに依存せずに生成することができる。
【００２１】
（実施の形態２）
次に、実施の形態２にかかる組み込みシステム１０及びＣＰＵ間通信方法を説明する。以下、実施の形態１と共通する事項の説明を省略する。
【００２２】
図４を参照して、組み込みシステム１０は、ＣＰＵボード１００と、ＣＰＵボード２００と、ＣＰＵボード間インターフェース３００とを備える。ＣＰＵボード１００及び２００は、ＣＰＵボード間インターフェース３００を介して互いに接続される。ＣＰＵボード間インターフェース３００は、後述するインターフェース制御部１２０及び２２０の一方から他方へパケットを送るためのハードウェアである。ＣＰＵボード間インターフェース３００は、パケットのフォーマットを定義する。組み込みシステム１０は、例えば、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂａｓ）ハードディスクドライブに適用される。この場合、ＣＰＵボード２００のＣＰＵ２１１は、ハードディスクドライブを制御する。ＣＰＵボード１００のＣＰＵ１１１は、ハードディスクドライブをコンピュータに接続するインターフェースとしてのＵＳＢを制御する。
【００２３】
ＣＰＵボード１００は、ＣＰＵユニット１１０と、ＣＰＵユニット１１０を搭載する基板（不図示）とを備える。ＣＰＵユニット１１０は、ＣＰＵ１１１と、メインメモリ１１２と、システムバス１１３と、インターフェース制御部１２０とを備える。インターフェース制御部１２０は、ＣＰＵボード間インターフェース３００を制御するための機能を備える。インターフェース制御部１２０は、パケットバッファ１２１と、パケット解析部１２２と、プログラムバッファ１２３とを備える。システムバス１１３は、ＣＰＵ１１１、メインメモリ１１２、及びプログラムバッファ１２３を互いに接続する。プログラムバッファ１２３は、ＣＰＵ１１１のメモリマップ上におけるプログラムフェッチが可能なプログラム領域の一部として機能する。メインメモリ１１２は、ＣＰＵ１１１のメモリマップ上におけるプログラムフェッチが可能なプログラム領域の他の一部として機能する。
【００２４】
ＣＰＵボード２００は、ＣＰＵユニット２１０と、ＣＰＵユニット２１０を搭載する基板（不図示）とを備える。ＣＰＵユニット２１０は、ＣＰＵ２１１と、メインメモリ２１２と、システムバス２１３と、インターフェース制御部２２０とを備える。インターフェース制御部２２０は、ＣＰＵボード間インターフェース３００を制御するための機能を備える。インターフェース制御部２２０は、パケットバッファ２２１と、パケット解析部２２２と、プログラムバッファ２２３とを備える。システムバス２１３は、ＣＰＵ２１１、メインメモリ２１２、及びプログラムバッファ２２３を互いに接続する。プログラムバッファ２２３は、ＣＰＵ２１１のメモリマップ上におけるプログラムフェッチが可能なプログラム領域の一部として機能する。メインメモリ２１２は、ＣＰＵ２１１のメモリマップ上におけるプログラムフェッチが可能なプログラム領域の他の一部として機能する。
【００２５】
図５を参照して、ＣＰＵ１１１のメモリマップを説明する。ＣＰＵ１１１のメモリマップは、メインメモリ１１２内の領域としてのメインメモリ部と、インターフェース制御部１２０内の領域としてのインターフェース制御部レジスタとを含む。メインメモリ部は、プログラムコード領域を含む。プログラムコード領域にメイン関数「Ｍａｉｎ＿Ｆｕｎｃ（）」が格納されている。メイン関数「Ｍａｉｎ＿Ｆｕｎｃ（）」は、ＣＰＵ１１１が実行するメインプログラムのプログラムコードである。インターフェース制御部レジスタは、プログラムバッファ１２３内の領域としてのプログラムバッファ領域を含む。プログラムバッファ領域に関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ（）」、関数「Ｓｕｂ＿Ｆｕｎｃ＿Ｂ（）」、及び関数「Ｓｕｂ＿Ｆｕｎｃ＿Ｃ（）」が格納されている。関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ（）」、関数「Ｓｕｂ＿Ｆｕｎｃ＿Ｂ（）」、及び関数「Ｓｕｂ＿Ｆｕｎｃ＿Ｃ（）」は、バイナリコードである。
【００２６】
図６は、メイン関数「Ｍａｉｎ＿Ｆｕｎｃ（）」の一例を示している。メイン関数「Ｍａｉｎ＿Ｆｕｎｃ（）」の中で関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ（）」が呼び出される（図５における関数コール）。関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ（）」が実行された後、処理がメイン関数「Ｍａｉｎ＿Ｆｕｎｃ（）」に戻る（図５における関数リターン）。
【００２７】
ここで、メインメモリ１１２及びプログラムバッファ１２３の特徴は以下のとおりである。インターフェース制御部１２０は、ＣＰＵ１１１がメインメモリ１１２に対して行うプログラムフェッチをコントロールできない。インターフェース制御部１２０は、ＣＰＵ１１１がプログラムバッファ１２３に対して行うプログラムフェッチを止めることができる。メインメモリ１１２は、アドレスを指定した書き込みができない、又は、アドレスを指定した書き込みが困難な領域である。プログラムバッファ１２３は、アドレスを指定した書き込みができる領域である。メインメモリ１１２は、ＣＰＵ１１１及びＣＰＵ２１１の間で共有されていない。
【００２８】
ＣＰＵ１１１のメモリマップと同様に、ＣＰＵ２１１のメモリマップは、メインメモリ２１２内の領域としてのメインメモリ部と、インターフェース制御部２２０内の領域としてのインターフェース制御部レジスタとを含む。メインメモリ部は、プログラムコード領域を含む。プログラムコード領域にメイン関数が格納されている。メイン関数は、ＣＰＵ２１１が実行するメインプログラムのプログラムコードである。インターフェース制御部レジスタは、プログラムバッファ２２３内の領域としてのプログラムバッファ領域を含む。プログラムバッファ領域に関数が格納されている。関数は、バイナリコードである。メイン関数の中で関数が呼び出される。関数が実行された後、処理がメイン関数に戻る。
【００２９】
ここで、メインメモリ２１２及びプログラムバッファ２２３の特徴は以下のとおりである。インターフェース制御部２２０は、ＣＰＵ２１１がメインメモリ２１２に対して行うプログラムフェッチをコントロールできない。インターフェース制御部２２０は、ＣＰＵ２１１がプログラムバッファ２２３に対して行うプログラムフェッチを止めることができる。メインメモリ２１２は、アドレスを指定した書き込みができない、又は、アドレスを指定した書き込みが困難な領域である。プログラムバッファ２２３は、アドレスを指定した書き込みができる領域である。メインメモリ２１２は、ＣＰＵ１１１及びＣＰＵ２１１の間で共有されていない。
【００３０】
次に、実施の形態２に係るＣＰＵ間通信方法を説明する。
【００３１】
図７を参照して、ステップＳ２００において、ＣＰＵユニット２１０のＣＰＵ２１１は、ＣＰＵ１１１に実行させるべきプログラムコードとしての関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ０（）」を生成する。ＣＰＵユニット２１０のＣＰＵ２１１は、既存のプログラムコードを修正することにより関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ０（）」を生成してもよい。ＣＰＵユニット２１０は、ＣＰＵボード間インターフェース３００を介してＣＰＵユニット１１０に関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ０（）」を含むプログラムデータパケット４０を送信する。インターフェース制御部１２０のパケットバッファ１２１は、プログラムデータパケット４０を受信する。パケットバッファ１２１は、プログラムデータパケット４０をパケット解析部１２２に送る。ここで、プログラムデータパケット４０のデータ構造を説明する。
【００３２】
図３を参照して、プログラムデータパケット４０は、ヘッダ部４１と、パラメータ部４２と、データ部４３とを含む。ヘッダ部４１は、プログラムデータパケット４０の送信先としてのＣＰＵ１１１を特定するデバイスポート番号、プログラムデータパケット４０のパケットタイプがＣＰＵ間通信であることを特定する識別子（ＩＤ）、プログラムデータパケット４０のＩＤ、データ長などを含む。パラメータ部４２は、送信元であるＣＰＵ２１１を特定するＩＤ、送信先であるＣＰＵ１１１を特定するＩＤ、及びプログラム番号を含む。ＣＰＵ２１１は、組み込みシステム１０の仕様に基づいてプログラム番号を指定する。データ部４３は、関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ０（）」を含む。関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ０（）」はバイナリコードである。プログラムデータパケット４０を用いることで、ＣＰＵユニット２１０は、任意のデータサイズのプログラムコードをＣＰＵユニット１１０に送信することができる。
【００３３】
図７のステップＳ２００において、パケット解析部１２２は、プログラムデータパケット４０を解析し、ヘッダ部４１及びデータ部４３を互いに分離する。パケット解析部１２２は、ヘッダ部４１を解析する。解析の結果、プログラムデータパケット４０のパケットタイプがＣＰＵ間通信であることを認識すると、パケット解析部１２２のハードウェアは、データ部４３に含まれる関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ０（）」をプログラムバッファ１２３に自動的に格納する。このとき、パケット解析部１２２は、パラメータ部４２に含まれるプログラム番号に基づいてプログラムバッファ１２３内のアドレスを指定し、そのアドレスに関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ０（）」を格納する。例えば、パケット解析部１２２は、プログラム番号をアドレスに変換するテーブルを参照して、関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ０（）」を格納すべきアドレスを決定する。ここで、パラメータ部４２に含まれるプログラム番号と関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ（）」のプログラム番号が同じであるため、パケット解析部１２２は、プログラムバッファ１２３に格納されていた関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ（）」を関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ０（）」で置き換える。
【００３４】
図７を参照して、ＣＰＵ１１１は、起動すると、メインメモリ１１２に格納された関数「Ｍａｉｎ＿Ｆｕｎｃ（）」に対してプログラムフェッチを行い、メイン関数「Ｍａｉｎ＿Ｆｕｎｃ（）」の実行を開始する（Ｓ２０２）。ＣＰＵ１１１は、メイン関数「Ｍａｉｎ＿Ｆｕｎｃ（）」に基づいてプログラムバッファ１２３に格納された関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ０（）」に対してプログラムフェッチを行い、関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ０（）」を実行する（Ｓ２０４）。関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ０（）」の実行後、ＣＰＵ１１１は、メイン関数「Ｍａｉｎ＿Ｆｕｎｃ（）」に戻り、終了・ループ状態となる（Ｓ２０６）。
【００３５】
次に、ステップＳ２０８を説明する。関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ０（）」に基づいてＣＰＵユニット１１０のＣＰＵ１１１が実行する処理を変更したいとき、ＣＰＵユニット２１０のＣＰＵ２１１は、ＣＰＵ１１１に実行させるべきプログラムコードとしての関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ１（）」を生成する。ＣＰＵユニット２１０のＣＰＵ２１１は、関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ０（）」を修正することにより関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ１（）」を生成してもよい。ＣＰＵユニット２１０は、ＣＰＵボード間インターフェース３００を介してＣＰＵユニット１１０に関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ１（）」を含む他のプログラムデータパケット４０を送信する。インターフェース制御部１２０のパケットバッファ１２１は、他のプログラムデータパケット４０を受信する。パケットバッファ１２１は、他のプログラムデータパケット４０をパケット解析部１２２に送る。
【００３６】
他のプログラムデータパケット４０のヘッダ部４１は、デバイスポート番号、他のプログラムデータパケット４０のパケットタイプがＣＰＵ間通信であることを特定するＩＤ、他のプログラムデータパケット４０のＩＤ、データ長などを含む。他のプログラムデータパケット４０のパラメータ部４２は、送信元であるＣＰＵ２１１を特定するＩＤ、送信先であるＣＰＵ１１１を特定するＩＤ、及びプログラム番号を含む。他のプログラムデータパケット４０のデータ部４３は、関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ１（）」を含む。関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ１（）」はバイナリコードである。
【００３７】
ステップＳ２０８において、パケット解析部１２２は、他のプログラムデータパケット４０を解析し、ヘッダ部４１及びデータ部４３を互いに分離する。パケット解析部１２２は、ヘッダ部４１を解析する。解析の結果、他のプログラムデータパケット４０のパケットタイプがＣＰＵ間通信であることを認識すると、パケット解析部１２２のハードウェアは、データ部４３に含まれる関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ１（）」をプログラムバッファ１２３に自動的に格納する。このとき、パケット解析部１２２は、パラメータ部４２に含まれるプログラム番号に基づいてプログラムバッファ１２３内のアドレスを指定し、そのアドレスに関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ１（）」を格納する。ここで、他のプログラムデータパケット４０のパラメータ部４２に含まれるプログラム番号と関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ０（）」をデータ部４３に含むプログラムデータパケット４０のパラメータ部４２に含まれていたプログラム番号が同じであるため、パケット解析部１２２は、プログラムバッファ１２３に格納されていた関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ０（）」を関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ１（）」で置き換える。関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ１（）」がバイナリコードであるため、ＣＰＵ１１１は、関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ１（）」を即座に実行することが可能である。
【００３８】
ここで、パケット解析部１２２がプログラムバッファ１２３への関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ１（）」の格納を開始しようとした時にＣＰＵ１１がプログラムバッファ１２３に格納された関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ０（）」に対するプログラムフェッチを行っている場合、インターフェース制御部１２０のハードウェアは、ＣＰＵ１１が関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ０（）」に対するプログラムフェッチを行っている間、パケット解析部１２２によるプログラムバッファ１２３に対する関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ１（）」の格納を待ち状態に設定する。パケット解析部１２２は、ＣＰＵ１１１によるプログラムバッファ１２３に格納された関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ０（）」に対するプログラムフェッチが終了してから、プログラムバッファ１２３に関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ１（）」を格納する。
【００３９】
図７を参照して、ＣＰＵ１１１は、メイン関数「Ｍａｉｎ＿Ｆｕｎｃ（）」に基づいてプログラムバッファ１２３に対してプログラムフェッチを行い、プログラムバッファ１２３に格納された関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ１（）」を実行する（Ｓ２１０）。ここで、ＣＰＵ１１１がプログラムバッファ１２３に対するプログラムフェッチを開始しようとした時にパケット解析部１２２がプログラムバッファ１２３への関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ１（）」の格納を行っている場合、インターフェース制御部１２０のハードウェアは、パケット解析部１２２が関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ１（）」をプログラムバッファ１２３に格納している間、ＣＰＵ１１１のプログラムバッファ１２３に対するプログラムフェッチを待ち状態に設定する。インターフェース制御部１２０のハードウェア（例えば、パケット解析部１２２）は、プログラムバッファ１２３への関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ１（）」の格納に同期して、ＣＰＵ１１１のプログラムフェッチを有効化する。ＣＰＵ１１１は、パケット解析部１２２によるプログラムバッファ１２３への関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ１（）」の格納が終了してから、プログラムバッファ１２３に格納された関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ１（）」に対するプログラムフェッチを行う。
【００４０】
関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ１（）」の実行後、ＣＰＵ１１１は、メイン関数「Ｍａｉｎ＿Ｆｕｎｃ（）」に戻り、終了・ループ状態となる（Ｓ２１２）。ＣＰＵ１１１は、メイン関数「Ｍａｉｎ＿Ｆｕｎｃ（）」に基づいてプログラムバッファ１２３に対してプログラムフェッチを行い、プログラムバッファ１２３に格納された関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ１（）」を実行する（Ｓ２１４）。
【００４１】
図８は、パケットバッファ１２１によるプログラムデータパケット４０の受信、プログラムデータパケット４０のパケットバッファ１２１からパケット解析部１２２への出力、及びパケット解析部１２２によるプログラムバッファ１２３へのデータ部４３の格納を矢印で示す。更に、図８は、ＣＰＵ１１１によるメインメモリ１１２に対するプログラムフェッチ、及びＣＰＵ１１１によるプログラムバッファ１２３に対するプログラムフェッチを矢印で示す。
【００４２】
上述したように、ＣＰＵ１１１がメイン関数「Ｍａｉｎ＿Ｆｕｎｃ（）」に基づいてプログラムバッファ１２３に対してプログラムフェッチを行う。そのため、割込み信号を用いないでＣＰＵ１１１に関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ０（）」及び関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ１」を実行させることができる。したがって、割込みによる遅延が発生することが防がれる。
【００４３】
以上、ＣＰＵユニット２１０がＣＰＵユニット１１０にプログラムデータパケット４０を送る場合の組み込みシステム１０の動作を説明した。ＣＰＵユニット１１０及びＣＰＵユニット２１０が互いにプログラムデータパケットを送ることも可能である。以下、ＣＰＵユニット１１０がＣＰＵユニット２１０にプログラムデータパケットを送る場合の組み込みシステム１０の動作の概略を説明する。
【００４４】
ＣＰＵユニット１１０は、プログラムデータパケットをＣＰＵユニット２１０に出力する。プログラムデータパケットのデータ部は、ＣＰＵユニット２１０に実行させるべきプログラムコードを含む。ＣＰＵユニット２１０のインターフェース制御部２２０は、プログラムデータパケットを受け取る。インターフェース制御部２２０のパケット解析部２２２は、プログラムデータパケットのヘッダ部を解析し、その解析結果に基づいてプログラムコードをプログラムバッファ２２３に格納する。ＣＰＵユニット２１０のＣＰＵ２１１は、プログラムバッファ２２３に対してプログラムフェッチを行う。インターフェース制御部２２０は、パケット解析部２２２がプログラムコードをプログラムバッファ２２３に格納している間、ＣＰＵ２１１のプログラムバッファ２２３に対するプログラムフェッチを待ち状態に設定する。インターフェース制御部２２０は、ＣＰＵ２１１がプログラムバッファ２２３に対してプログラムフェッチを行っている間、パケット解析部２２２によるプログラムバッファ２２３に対するプログラムコードの格納を待ち状態に設定する。
【００４５】
以上、ＣＰＵユニット１１０及び２１０が別々の基板に搭載される場合を説明したが、ＣＰＵユニット１１０及び２１０は同一の基板に搭載されてもよい。組み込みシステム１０をＵＳＢハードディスクドライブ以外の電子機器に適用してもよい。ＣＰＵボード１００及び２００は、異なる動作を実行してもよく、同一の動作を実行してもよい。プログラムデータパケット４０のデータ部４３は、複数の関数を含んでもよい。ＣＰＵ１１１及びメインメモリ１１２は、同一のチップに設けられてもよく、別々のチップに設けられてもよい。ＣＰＵ１１１及びインターフェース制御部１２０は、同一のチップに設けられてもよく、別々のチップに設けられてもよい。ＣＰＵ２１１及びメインメモリ２１２は、同一のチップに設けられてもよく、別々のチップに設けられてもよい。ＣＰＵ２１１及びインターフェース制御部２２０は、同一のチップに設けられてもよく、別々のチップに設けられてもよい。
【００４６】
（実施の形態３）
次に、実施の形態３にかかる組み込みシステム１０及びＣＰＵ間通信方法を説明する。以下、実施の形態２と相違する事項を説明する。
【００４７】
実施の形態３では、関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ０（）」を関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ１（）」で更新した（置き換えた）際に、その更新をＣＰＵ１１１に通知する。そのため、関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ１（）」をデータ部４３に含むプログラムデータパケット４０のヘッダ部４１は、関数の更新を通知する割込みを発生させることを指定するフラグを含む。
【００４８】
図９を参照して、パケット解析部１２２は、関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ１（）」をデータ部４３に含むプログラムデータパケット４０のヘッダ部４１を解析する。その解析の結果、ヘッダ部４１が上述したフラグを含むことを認識すると、パケット解析部１２２は、関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ１（）」をプログラムバッファ１２３に格納した後、ＣＰＵ１１１に割込み信号５０を出力する。割込み信号５０がない場合、ＣＰＵ１１１は、メイン関数「Ｍａｉｎ＿Ｆｕｎｃ（）」を通常の手順で実行する中でプログラムバッファ１２３に格納された関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ１（）」に対してプログラムフェッチを行う。割込み信号５０がある場合、ＣＰＵ１１１は、例えば、通常と異なる手順でメイン関数「Ｍａｉｎ＿Ｆｕｎｃ（）」を実行することができる。
【００４９】
実施の形態３によれば、割込み信号５０を発生させるためのフラグとＣＰＵ１１１に実行させるべき関数「Ｓｕｂ＿Ｆｕｎｃ＿Ａ１（）」とが同一のパケットで送られる。そのため、一般的な割込みベクタ方式によるＣＰＵ間通信よりも高速にＣＰＵ間通信を行うことが可能である。実施の形態３によれば、プログラムデータパケット４０の受信、プログラムデータパケット４０の解析、関数のプログラムバッファ１２３への格納、及び割込み信号５０の出力をインターフェース制御部１２０のハードウェアにより高レスポンスで実現できる。
【００５０】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
【符号の説明】
【００５１】
１０  組み込みシステム
１１０、２１０  ＣＰＵユニット
１１１、２１１  ＣＰＵ
１１２、２１２  メインメモリ
１２０、２２０  インターフェース制御部
１２３、２２３  プログラムバッファ
４０  プログラムデータパケット
４１  ヘッダ部
４３  データ部
５０  割込み信号
【図１】
2014126917.tif 000003
【図２】
2014126917.tif 000004
【図３】
2014126917.tif 000005
【図４】
2014126917.tif 000006
【図５】
2014126917.tif 000007
【図６】
2014126917.tif 000008
【図７】
2014126917.tif 000009
【図８】
2014126917.tif 000010
【図９】
2014126917.tif 000011