(57)【要約】      （修正有）【課題】リアルタイムＯＳを含めたシステム全体をハードウェア化したリアルタイム処理装置及びその作製方法を提供する。【解決手段】リアルタイム処理装置１は、ＣＰＵなどの演算処理ユニットを用いず、フルハードウェア化され、リアルタイムＯＳを用いる演算処理装置で動作する全処理タスク及びハンドラが個々にハードウェア化された複数の回路モジュール２、回路モジュールの起動／停止の信号を生成するモジュール実行機構３、回路モジュールがアクセスする共有メモリ５、共有メモリにアクセスする回路モジュールの調停を行う調停機構４から構成する。リアルタイムＯＳを用いる演算処理装置で動作する処理タスク及びハンドラの構成と設定パラメータを、コンフィグレーションファイルから抽出し、処理タスク及びハンドラの全てを、個々にハードウェア化して複数の回路モジュールに変換し、それらを合成する。【選択図】図１
2019144910.tif 000002
【特許請求の範囲】
【請求項１】
リアルタイムＯＳを用いる演算処理装置で動作する全処理タスク及びハンドラが個々にハードウェア化された複数の回路モジュールと、
前記回路モジュールの起動／停止の信号を生成するモジュール実行機構と、
前記回路モジュールがアクセスし得る共有メモリと、
前記共有メモリにアクセスする前記回路モジュールの調停を行う調停機構、
を備え、
演算処理ユニットを用いず、全てハードウェア化されたことを特徴とするリアルタイム処理装置。
【請求項２】
前記モジュール実行機構は、
前記回路モジュール毎の起動／停止の状態を記憶する状態レジスタを備え、
前記回路モジュールからの信号によって前記状態レジスタを読み書きし、
前記状態レジスタにおける前記回路モジュールの起動／停止のレジスタ値の変化に応じて前記回路モジュールを制御することを特徴とする請求項１に記載のリアルタイム処理装置。
【請求項３】
前記状態レジスタは、前記回路モジュールの起動／停止状態を表すレジスタ値と、前記回路モジュールの優先度を表すレジスタ値とから少なくとも構成されることを特徴とする請求項２に記載のリアルタイム処理装置。
【請求項４】
前記調停機構は、前記回路モジュールの優先度を表すレジスタ値に応じて、前記共有メモリにアクセスする前記回路モジュールを調停することを特徴とする請求項３に記載のリアルタイム処理装置。
【請求項５】
前記回路モジュールは、全て独立して実装され、全てが並列に実行し得ることを特徴とする請求項１〜４の何れかに記載のリアルタイム処理装置。
【請求項６】
前記回路モジュールは、高位合成により個々にハードウェア化されたことを特徴とする請求項１〜５の何れかに記載のリアルタイム処理装置。
【請求項７】
前記モジュール実行機構は、
前記回路モジュールからメモリアクセス用アドレスを読み込み、
前記共有メモリに記憶されている前記回路モジュール毎の起動／停止の状態を記憶する状態レジスタを読み書きし、
前記状態レジスタにおける前記回路モジュールの起動／停止のレジスタ値の変化に応じて前記回路モジュールを制御することを特徴とする請求項１に記載のリアルタイム処理装置。
【請求項８】
下記１）〜６）のステップを備えるリアルタイム処理装置の作製方法：
１）リアルタイムＯＳを用いる演算処理装置で動作する処理タスク及びハンドラの構成と設定パラメータをコンフィグレーションファイルから抽出するステップと、
２）前記処理タスク及びハンドラが使用する前記リアルタイムＯＳのシステムコールで呼び出される関数本体を、状態レジスタの読み書き処理に置換し、前記処理タスク及びハンドラに結合するステップと、
３）前記結合された処理タスク及びハンドラの全てを、個々にハードウェア化して複数の回路モジュールに変換するステップと、
４）前記状態レジスタの値の変化に応じて前記回路モジュールの起動／停止の信号を生成するモジュール実行機構を回路生成するステップと、
５）前記共有メモリにアクセスする前記回路モジュールを調停する調停機構を回路生成するステップと、
６）前記回路モジュールを、前記モジュール実行機構と前記調停機構とに接続するステップ。
【請求項９】
前記状態レジスタは、前記回路モジュールの起動／停止状態を表すレジスタ値と、前記回路モジュールの優先度を表すレジスタ値とから少なくとも構成され、
前記調停機構は、前記回路モジュールの優先度を表すレジスタ値に応じて、前記共有メモリにアクセスする前記回路モジュールを調停することを特徴とする請求項８に記載のリアルタイム処理装置の作製方法。
【請求項１０】
上記の回路モジュールに変換するステップは、前記処理タスク及びハンドラを、高位合成により個々にハードウェア化することを特徴とする請求項８又は９に記載のリアルタイム処理装置の作製方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、リアルタイムＯＳ（Operating System）を用いる制御システムの処理プログラムから、ＣＰＵ、リアルタイムＯＳ、処理プログラムの組合せと機能等価な専用ハードウェアのリアルタイム処理装置及び該装置を自動的に生成する作製方法に関するものである。
【背景技術】
【０００２】
家電製品、車載機器、医療機器等の機器の制御部分は、リアルタイムＯＳを用いたプログラムで実装され、マイクロコンピュータ（ＣＰＵなどの電子部品）によって実行されている。近年の情報通信技術の発展に伴って、機器に組込まれる制御システムには益々高い機能と高い応答性能が要求されるようになっている。特に、自動運転車両、無人飛行機、ロボット制御などの制御には、非常に高い応答性能が要求されており、このような高性能な制御システムを如何に実装するかが重要な課題になっている。
【０００３】
従来から、リアルタイムＯＳを用いたシステムの応答性を向上させる手法として、リアルタイムＯＳの機能をハードウェアとして実装する方法が知られている（例えば、特許文献１、非特許文献１，２を参照。）。しかし、これらの方法では、処理タスクや処理ハンドラはソフトウェアとして実行されるため、その処理の計算量が多い場合には必ずしも応答性能は改善されないといった問題がある。
【０００４】
一方で、高位合成技術を用いて、処理タスクや処理ハンドラをハードウェア化し、処理の高速化を図ることが知られている。この高位合成技術を利用して処理タスクや割込みハンドラをハードウェア化するシステムレベル設計方法が存在するが（例えば、非特許文献３を参照。）、リアルタイムＯＳを含めたシステム全体をハードウェア化することは実現されていないといった実状である。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００１−７５８２０号公報
【非特許文献】
【０００６】
【非特許文献１】森久直ら，“組込み制御システム向けリアルタイムＯＳのハードウェア化”，東京都立産業技術研究所研究報告, 第8 号(2005).
【非特許文献２】Carl Stenquist，“HW-RTOS Improved RTOS Performance by Implementation in Silicon"，White Paper Renesas R-IN32M3 Industrial Network ASSP, (2014).
【非特許文献３】Yuki Ando et al., “System-level Design Method for Control Systems with Hardware-implemented Interrupt Handler”, Journal of Information Processing, Vol. 23, No. 5,pp. 532-541. (2014).
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上述の如く、リアルタイムＯＳのハードウェア化による処理の高速化、処理タスクや処理ハンドラをハードウェア化による処理の高速化は行われているが、リアルタイムＯＳを含めたシステム全体をハードウェア化することは実現されるというものではない。
【０００８】
かかる状況に鑑みて、本発明は、リアルタイムＯＳを含めたシステム全体をハードウェア化したリアルタイム処理装置、並びに、リアルタイムＯＳを用いたプログラムを入力とし、処理タスクと処理ハンドラ及びリアルタイムＯＳのサービスコールの機能全てをハードウェア化しそれらを合成させるといったリアルタイム処理装置の作製方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記課題を解決すべく、本発明のリアルタイム処理装置は、下記１）〜４）を備え、ＣＰＵなどの演算処理ユニットを用いず、フルハードウェア化される。
１）リアルタイムＯＳを用いる演算処理装置で動作する全処理タスク及びハンドラが個々にハードウェア化された複数の回路モジュール。
２）回路モジュールの起動／停止の信号を生成するモジュール実行機構。
３）回路モジュールがアクセスし得る共有メモリ。
４）共有メモリにアクセスする前記回路モジュールの調停を行う調停機構。
【００１０】
上記の構成によれば、制御システムの一部だけではなく、リアルタイムＯＳの機能も含めた処理タスク及びハンドラの全ての機能をハードウェア化することで、 格段に高速な応答を実現することができる。
【００１１】
上記２）のモジュール実行機構は、上記１）の回路モジュールからの信号によって、上記３）の回路モジュール毎の状態レジスタを読み書きし、状態レジスタにおける回路モジュールの起動／停止のレジスタ値の変化に応じて回路モジュールを制御することにより、処理タスク及びハンドラのスケジューリング機能が不要になる。ここで、状態レジスタは、回路モジュールの起動／停止状態を制御するための状態を記憶するレジスタであり、回路モジュールの起動／停止状態を表すレジスタ値と、回路モジュールの優先度を表すレジスタ値とから少なくとも構成される。
また、上記１）の回路モジュールは、全て独立して実装され、全てが並列に実行される。これにより、処理タスクやハンドラを時分割によりＣＰＵで並行して演算処理する必要はなく、タスクスイッチの切り替えに伴うオーバヘッドがほとんど生じないため、システムの応答時間を格段に短縮できる。処理タスクや処理ハンドラの並列実行により処理を高速化できる。処理タスク及びハンドラのスケジューリング機能が不要であり、簡潔なハードウェアで実現できるのである。
【００１２】
ここで、本明細書で用いる用語について定義する。
リアルタイムシステムとは、制御システムの中でも、入力に対して定められた時間以内に応答をするものと定義する。例えば、距離センサーから前方車両との距離が近接しているという入力があると、２０マイクロ秒以内にブレーキに作動信号を出力するといったシステムである。
また、処理タスクとは、制御システムにおいて、複数の処理を並行して行っている処理、例えば、走行モーターの制御を行いながら、画像カメラで障害物の検出を行う等、これらの個々の処理と定義する。
処理ハンドラとは、制御システムに対する非定期的な入力、例えば、障害物の急接近や外部からの緊急信号に応答するため、特定の入力があった場合には実行中のタスクを一時中断して特定の処理を行うが、このような特定の入力を割り込みに対する処理タスクと定義する。
タスクスイッチとは、ＣＰＵが搭載された制御システムにおいて、処理タスクやハンドラから別の処理タスクやハンドラに処理を切り替えることと定義する。ＣＰＵが搭載された制御システムでは、タスクスイッチのためには、 現在実行している処理タスクの状態をすべてメモリに退避し、再び処理タスクを実行する場合にはこれを復元するという処理が必要になるため、 そのオーバヘッドが生じてしまうという問題がある。
【００１３】
リアルタイムＯＳとは、リアルタイムシステムを効率的に実装するためのＯＳであり、処理タスクやハンドラの起動や停止、及び、これらの間の通信などを担うプログラムと定義する。
タスクスケジューリングとは、ＣＰＵが搭載された制御システムにおいて、ＣＰＵが実行する処理タスクを状況に応じて切り替える機能をタスクスケジューリングと定義する。リアルタイムといった制約を満たすために、処理タスクやハンドラに、優先順位（優先度）を設定でき、リアルタイムＯＳはこの優先度に基づいてタスクのスケジューリングを行う。
システムコールとは、プログラムからリアルタイムＯＳの機能を呼び出すことをいう。システムコールを具体的に行うための呼び出し方は厳密に定められており、ＡＰＩ (application program interface) という。
【００１４】
上記１）の回路モジュールは、高位合成により個々にハードウェア化されることが好ましい。高位合成とは、Ｃ言語などで書かれたプログラムから、等価なハードウェア(論理回路) の設計記述を自動生成する技術である。
【００１５】
上記３）の共有メモリは、処理タスクやハンドラがアクセスできるメモリとして共用されるものであるが、この共有メモリは１つのセクションで構成される以外に、複数のセクションに分けられており、異なるセクションのメモリは同時に異なる回路モジュールからアクセスできるメモリ構成でも構わない。
【００１６】
上記４）の調停機構は、具体的には、回路モジュールの優先度を表すレジスタ値に応じて、共有メモリにアクセスする回路モジュールを調停して共有メモリにアクセルする回路モジュールを決定する。
【００１７】
次に、本発明のリアルタイム処理装置の作製方法を説明する。本発明のリアルタイム処理装置の作製方法は、下記１）〜６）のステップを備え、リアルタイムＯＳを用いたプログラムを入力とし、処理タスクとハンドラ及びリアルタイムＯＳのサービスコールの機能全てをハードウェア化しそれらを合成させて、装置を自動的に生成する。
１）リアルタイムＯＳを用いる演算処理装置で動作する処理タスク及びハンドラの構成と設定パラメータをコンフィグレーションファイルから抽出するステップ。
２）処理タスク及びハンドラが使用するリアルタイムＯＳのシステムコールで呼び出される関数本体を、状態レジスタの読み書き処理に置換し、前記処理タスク及びハンドラに結合するステップと、
３）結合された処理タスク及びハンドラの全てを、個々にハードウェア化して複数の回路モジュールに変換するステップ。
４）状態レジスタの値の変化に応じて回路モジュールの起動／停止の信号を生成するモジュール実行機構を回路生成するステップ。
５）共有メモリにアクセスする回路モジュールを調停する調停機構を回路生成するステップ。
６）回路モジュールを、モジュール実行機構と前記調停機構とに接続するステップ。
【００１８】
ここで、状態レジスタは、回路モジュールの起動／停止状態を表すレジスタ値と、回路モジュールの優先度を表すレジスタ値とから少なくとも構成される。そして、調停機構は、回路モジュールの優先度を表すレジスタ値に応じて、共有メモリにアクセスする回路モジュールを調停する。
また、上記３）の回路モジュールに変換するステップは、具体的には、上記２）のステップ後に、結合された処理タスク及びハンドラを、高位合成により個々にハードウェア化する。
【発明の効果】
【００１９】
本発明によれば、１つの処理タスクや処理ハンドラを独立した１つのハードウェアに合成して、全ての処理タスク及びハンドラを並列に実行させることができ、処理性能とレスポンスの向上を図れるといった効果がある。また、リアルタイムＯＳのタスクスケジューリング機能を不要にし、軽量なハードウェアでシステムを制御できるといった効果がある。
【図面の簡単な説明】
【００２０】
【図１】リアルタイム処理装置のハードウェア構成図
【図２】従来装置と本発明のリアルタイム処理装置の構成の対比図
【図３】リアルタイム処理装置の作製方法のフロー図
【図４】回路モジュールに変換する方法の説明図
【図５】リアルタイム処理装置の動作説明図（１）
【図６】リアルタイム処理装置の動作説明図（２）
【図７】リアルタイム処理装置の動作説明図（３）
【図８】リアルタイム処理装置の動作説明図（４）
【図９】リアルタイム処理装置の動作説明図（５）
【図１０】リアルタイム処理装置の動作説明図（６）
【図１１】リアルタイム処理装置の動作説明図（７）
【図１２】リアルタイム処理装置の動作説明図（８）
【図１３】実施例２のリアルタイム処理装置のハードウェア構成図
【図１４】実施例３のリアルタイム処理装置のハードウェア構成図
【発明を実施するための最良の形態】
【００２１】
以下、本発明の実施形態の一例を、図面を参照しながら詳細に説明していく。なお、本発明の範囲は、以下の実施例や図示例に限定されるものではなく、幾多の変更及び変形が可能である。
【実施例１】
【００２２】
本発明のリアルタイム処理装置の一実施例に係るハードウェア構成について図１を参照し説明する。
リアルタイム処理装置１は、回路モジュール２と、モジュール実行機構３と、調停機構４、及び共有メモリ５から構成される。回路モジュール２は、リアルタイムＯＳを用いる演算処理装置で動作する処理タスクやハンドラがハードウェア化されたものである。
モジュール実行機構３は、回路モジュールである各処理タスクやハンドラの実行（起動／停止）を制御するものであり、調停機構４は、共有メモリ５のメモリアクセスの調停を行うものである。
上述のとおり、処理タスクは、制御システムにおいて、複数の処理を並行して行っている処理と定義されるが、従来はコンピュータが実行する処理プログラムであり、メモリに保存され、コンピュータが読み出し実行するものであった。また、処理ハンドラは、上述のとおり、制御システムに対する非定期的な入力などの特定の入力を割り込みに対する処理タスクと定義されるが、同様に従来はコンピュータが実行する処理プログラムである。
【００２３】
図１に示す回路モジュール２は、従来、リアルタイムＯＳを用いる演算処理装置のコンピュータが実行する全ての処理タスク及びハンドラが個々にハードウェア化されたものであり、処理タスク１（２ａ）、処理タスク２（２ｂ）、周期ハンドラ（２ｃ）、アラームハンドラ（２ｄ）、割込ハンドラ（２ｅ）は、何れもハードウェア化された回路モジュールである。
また、モジュール実行機構３は、各処理タスク（２ａ，２ｂ）及びハンドラ（２ｃ〜２ｅ）とは、メモリアクセス用のアドレス、データ及びタスクの起動／停止を制御する信号線で接続されている。モジュール実行機構３は、その内部に各々の処理タスク及びハンドラの起動／停止の状態を記憶する状態レジスタ（タスク１状態レジスタ、タスク２状態レジスタ、周期ハンドラ状態レジスタ、アラームハンドラ状態レジスタ、割込ハンドラ状態レジスタ）を備えている。それぞれの状態レジスタは、回路モジュールの起動／停止状態を表すレジスタ値と、回路モジュールの優先度を表すレジスタ値を少なくとも含む。周期ハンドラやアラームハンドラの状態レジスタには、タイマカウント値も含まれている。タイマカウント値が所定の値になった場合には、モジュール実行機構３が周期ハンドラやアラームハンドラを実行制御する。
【００２４】
モジュール実行機構３内の状態レジスタは、回路モジュール２からメモリアクセスと同様に読み書きすることができる。すなわち、モジュール実行機構３は、回路モジュール２からメモリアクセス用アドレスを読み込み、読み込んだアドレスが内部の状態レジスタを示す場合には、回路モジュール２に状態レジスタの値を読み書きさせることを可能にする。
また、モジュール実行機構３は、状態レジスタにおける回路モジュールの起動／停止のレジスタ値の変化に応じて、回路モジュールを起動又は停止させる。
また、モジュール実行機構３は、周期ハンドラやアラームハンドラの状態レジスタ内のタイマカウント値が所定の値になった場合には、周期ハンドラやアラームハンドラを起動又は停止させる。
【００２５】
全ての処理タスク及びハンドラの回路モジュールは、１つのアドレス空間を共有しており、全てのデータは共有メモリ５にデータ格納される。メモリのポート数には限りがあるので、同時に複数のメモリアクセスがあった場合は、調停機構４が調停を行う。この調停は、処理タスクやハンドラの優先度に基づいて行う。すなわち、同時に起こった複数のメモリアクセスのうち、優先度の最も高い処理タスク又はハンドラのメモリアクセスのみが許可され、それ以外の処理タスクやハンドラの回路ジュールには、モジュール実行機構３が停止信号を出力し、優先度の最も高い処理タスク以外の処理タスクやハンドラは停止する。処理タスクやハンドラの優先度は、状態レジスタに記憶されている。
このように、調停機構４は、回路モジュールの優先度を表すレジスタ値に応じて、共有メモリ５にアクセスする回路モジュールを調停している。調停機構４は、複数の処理タスク／ハンドラからメモリアクセスがあった場合にこれを調停するが、例えば、ＡＲＭ社が開発したＲＩＳＣ（Reduced Instruction Set Computer）アーキテクチャに採用されているＡＸＩ（Advanced eXtensible Interface）のような既存の接続回路であって構わない。
【００２６】
以上のように、処理タスクの実行は、モジュール実行機構３からの起動／停止信号によって制御される。全処理タスクが並列実行可能であるため、実行可能状態の処理タスクは即座に実行状態に遷移し、実行されることになる。停止状態や待ち状態、強制待ち状態では、モジュール実行機構３から停止信号が該当する処理タスクに対して出力され、停止信号を入力した処理タスクの回路モジュールが停止する。なお、処理タスクのディパッチの禁止は状態レジスタで記憶し、その値に応じて起動／停止信号が処理タスクに送られる。
【００２７】
周期ハンドラやアラームハンドラの実行は、処理タスクと同様に、モジュール実行機構３からの起動／停止信号によって制御される。
例えば、周期イベントやアラームイベントが起動された場合に、モジュール実行機構３内部の当該周期ハンドラやアラームハンドラの状態レジスタの内部のタイマ値がセットされ、サイクル毎にタイマ値が減じられる。そして、タイマ値が０（ゼロ）になると周期ハンドラやアラームハンドラの回路モジュールに対して、モジュール実行機構３から停止信号が解除され、周期ハンドラやアラームハンドラの回路モジュールが起動し、処理動作の実行が開始される。周期ハンドラの場合は、タイマが０になった後、自動的に次のタイマが再設定される。
【００２８】
割込ハンドラも他のハンドラと同様、モジュール実行機構３からの起動／停止信号によって管理される。モジュール実行機構３に対して割込信号が入ると、割込みがマスクされ、無効にされていなければ、割込ハンドラの回路モジュールへの停止信号が解除され、実行が開始される。
【００２９】
図２を参照して、従来装置と本発明のリアルタイム処理装置の構成を対比する。
図２（１）は、従来のリアルタイム処理装置の構成模式図である。従来装置では、演算処理ユニット（ＣＰＵ）を用いて、リアルタイムＯＳというプログラムで処理タスクやハンドラの実行制御、スケジューリング、タスクの切替え、メモリアクセス制御を行っている。タスク１、タスク２、・・・、タスクｎ、周期１ハンドラ、周期２ハンドラ、アラームハンドラ、割込ハンドラは、全てプログラムであり、リアルタイムＯＳのシステムコールの関数プログラムと結合された後、ＣＰＵが逐次処理できるプログラムコード（機械語）に置き換えられ、そのプログラムコードがメモリに記憶されている。
演算処理ユニット（ＣＰＵ）は、メモリに記憶されたプログラムコードを読み出して実行し、リアルタイム処理を実現している。
【００３０】
一方、図２（２）に示すように、本発明のリアルタイム処理装置の場合は、タスク１、タスク２、・・・、タスクｎ、周期１ハンドラ、周期２ハンドラ、アラームハンドラ、割込ハンドラを全て回路モジュール２として実現し、上述したモジュール実行機構３及び調停機構４、共有メモリ５でリアルタイム処理を実現しており、従来のように演算処理ユニット（ＣＰＵ）は用いず、全てハードウェア化されている。
また、タスク１、タスク２、・・・、タスクｎ、周期１ハンドラ、周期２ハンドラ、アラームハンドラ、割込ハンドラなど全ての処理タスク及びハンドラは、実行が可能な状態であれば、その優先度によらず、全て実行できることが特徴である。
【００３１】
図３に、リアルタイム処理装置の作製方法のフローを示す。
まず、処理タスク／ハンドラの構成と設定パラメータをコンフィグレーションファイルから抽出し（ステップＳ０１）、処理タスク／ハンドラが使用するリアルタイムＯＳのシステムコールの関数本体を、状態レジスタの読み書き処理プログラムに置換し、処理タスク／ハンドラの処理プログラムと結合する（ステップＳ０２）。そして、結合された処理タスク／ハンドラの全てを、回路モジュールに変換する（ステップＳ０３）。
次に、状態レジスタの値の変化に応じて回路モジュールの起動／停止の信号を生成するモジュール実行機構の回路を生成する（ステップＳ０４）。また、共有メモリにアクセスする回路モジュールの調停機構の回路を生成する（ステップＳ０５）。そして、回路モジュールをモジュール実行機構と調停機構に接続する（ステップＳ０６）。
【００３２】
このように、本発明のリアルタイム処理装置の作製方法では、リアルタイムＯＳのシステムコールを用いた処理タスク／ハンドラのプログラムを入力し、処理タスク／ハンドラおよびリアルタイムＯＳのシステムコールの機能全てをハードウェアに合成している。リアルタイムＯＳのシステムコールの機能とは、具体的には、リアルタイムＯＳのシステムコールの関数本体に記述されている機能である。処理タスク／ハンドラおよびリアルタイムＯＳのシステムコールの機能全てをハードウェアに合成することにより、カーネルの関数プログラムを実行するプロセッサと機能等価なハードウェアを合成するのである。
また、本発明のリアルタイム処理装置の作製方法では、１つの処理タスクやハンドラを独立した１つのハードウェアの回路モジュールに合成し、全ての処理タスク／ハンドラを並列に実行させることによって、処理性能とレスポンスの向上を図る。これによってリアルタイムＯＳのタスクスケジューリング機能を不要にし、軽量なハードウェアでシステムを制御することができる。
【００３３】
次に、処理タスク／ハンドラを、回路モジュールに変換する具体例について説明する。処理タスク／ハンドラを回路モジュールに変換する方法として、高位合成を用いることができる。図４を参照し、回路モジュールに変換する方法として高位合成について説明する。
高位合成は、Ｃ言語などのプログラミング言語で記述されたソフトウェア処理動作の記述から、ハードウェア設計の記述を自動生成する技術である。高位合成を用いて回路モジュールを作製することにより、高い抽象度での設計やソフトウェア開発のノウハウを用いたデバッグが可能になるメリットがある。
【００３４】
高位合成を実行するシステムとして、例えば、ＡＣＡＰ（詳細は、Nagisa Ishiura et.al., “ACAP: Binary Synthesizer Based on MIPS Object Codes”, Proc. ITC-CSCC 2014, pp. 725-728 (2014).を参照。）が知られている。ＡＣＡＰは、アセンブラやコンパイラを用いることにより、アセンブリ言語やＣ言語プログラムも入力可能であり、レジスタ転送レベルのハンドラを生成できる。図４を参照して、ＡＣＡＰによる高位合成の処理の流れについて説明する。
ＡＣＡＰによる高位合成処理は、アセンブリ言語やＣ言語で記述されたプログラムをそれぞれｇａｓ（アセンブラ）やｇｃｃ（コンパイラ）で変換して得られる機械語を入力とし、これを高位合成の標準的な内部データ構造であるＣＤＦＧ（Control Data-Flow Graph）に変換する。このＣＤＦＧに対して、最適化（処理の効率化のための変換）、スケジューリング（演算処理の並列化と、各演算をどのタイミングで実行するかの決定）、バインディング（演算処理の演算器への割り当てと中間結果の記憶装置への割り当て）を行って制御論理を決定し、最終的にハードウェア記述言語“Ｖｅｒｉｌｏｇ  ＨＤＬ”によるハードウェアの設計記述を出力する。
なお、本発明に用いる高位合成システムは、上記ＡＣＡＰに限定されるものではなく、市販ツールである例えば、Ｘｉｌｉｎｘ社の「Ｖｉｖａｄｏ  ＨＬＳ」を用いることも可能である（https://www.xilinx.com/products/design-tools/vivado/integration/esl-design.html）。
【００３５】
次に、処理タスク／ハンドラの回路モジュールとしてのハードウェア合成処理の流れについて説明する。まず、従来のＣＰＵを用いるリアルタイム処理装置に用いられるコンフィギュレーションファイルの記述から、処理タスク／ハンドラの状態や関連するマクロ等の定義ファイル、および合成用の処理タスク／ハンドラのメイン関数を含むメインファイルを生成する。
そして、メインファイル、定義ファイル、処理タスク／ハンドラのアプリケーションプログラムファイルを記述したソースファイル、および、処理タスク／ハンドラが使用するリアルタイムＯＳのシステムコールの関数本体を状態レジスタの読み書き処理プログラムに置換したもの（ハードウェア合成用に実装したＯＳシステムコール）を結合する。結合された処理タスク／ハンドラの全てを、高位合成システムＡＣＡＰに入力し、処理プログラムのソフトウェアの記述からハードウェア設計の記述を自動生成し、ハードウェアの回路モジュールを生成する。
【００３６】
ここで、モジュール実行機構３の内部にある状態レジスタについて説明する。
下記表１は、状態レジスタの内部のレジスタ値の意味の一例を示している。１つの状態レジスタは、例えば、３２ビットで構成され、各々の処理タスク／ハンドラ毎に複数の状態レジスタが割り当てられる。
【００３７】
【表１】
2019144910.tif 000003
【００３８】
モジュール実行機構は、状態レジスタのタスク状態の変化に応じて、該当する処理タスク／ハンドラに起動／停止信号を出力する。下記表２に示すように、処理タスクは、起動信号を入力して実行状態になる（停止が解除される）。処理タスクは、起動信号を入力すると、実行可能状態から実行状態に即遷移できるのである。従来装置の場合、ソフトウェアで実行されているため、実行可能状態になった処理タスク（プログラム）は、直ちに実行されるのではなく、一旦キューにつながれ、ＣＰＵがそのタスクを実行する状態になるまで待つ必要があった。しかし、本発明の装置では、状態レジスタのタスク状態が実行可能状態になった場合に、タスクは直ちに実行可能である。また、他の処理タスクから別の処理タスクに実行を切り替えるためのオーバヘッド（レジスタの退避や復旧など）が不要なため、実行が高速になるのである。
【００３９】
【表２】
2019144910.tif 000004
【００４０】
図５〜１２を参照し、実施例１のリアルタイム処理装置の動作の仕組みについて説明する。
図５に示すように、モジュール実行機構３は、内部のタスク１状態レジスタのタスク状態が起動となっている場合、処理タスク１の回路モジュールに起動信号を出力する。処理タスク１では処理が実行される。処理タスク１が実行結果データを共有メモリ５のデータ領域に書き込む際には、処理タスク１からアドレスと共にデータがモジュール実行機構３に出力される。モジュール実行機構３では、処理タスク１からのメモリアクセスのアドレスが共有メモリ５に割り当てられているアドレスであれば、それをそのまま調停機構４に出力する。その際、タスク１状態レジスタの現在の優先度も併せて調停機構４に出力する。調停機構４では、入力したアドレスに従って、共有メモリ５にアクセスし、データを書き込む。優先度については同時に複数のアクセスがあった場合に、優先度の高いものにアクセスさせる際の判定に用いている。
【００４１】
図６に示すように、モジュール実行機構３は、内部のタスク１状態レジスタのタスク状態が起動となっている場合、処理タスク１の回路モジュールに起動信号を出力する。処理タスク１では処理が実行される。処理タスク１が共有メモリ５のデータを読み込む際には、処理タスク１からアドレスのみがモジュール実行機構３に出力される。モジュール実行機構３では、処理タスク１からのメモリアクセスのアドレスが共有メモリ５に割り当てられているアドレスであれば、それをそのまま調停機構４に出力する。その際、タスク１状態レジスタの現在の優先度も併せて調停機構４に出力する。調停機構４では、入力したアドレスに従って、共有メモリにアクセスし、データを読み込み、読み込んだデータをモジュール実行機構３に出力する。モジュール実行機構３では調停機構４から入力したデータをそのまま処理タスク１に出力する。
【００４２】
図７に示すように、モジュール実行機構３は、内部のタスク１状態レジスタのタスク状態が起動となっている場合、処理タスク１の回路モジュールに起動信号を出力する。処理タスク１では処理が実行される。処理タスク１がタスク１状態レジスタにアクセス（読み書き）する際には、処理タスク１からタスク１状態レジスタに割り当てられたアドレスがモジュール実行機構３に出力される。タスク１状態レジスタに書き込みする場合は、アドレスと共にデータも出力される。
【００４３】
図８に示すように、モジュール実行機構３は、内部のタスク１状態レジスタのタスク状態が起動となっている場合、処理タスク１の回路モジュールに起動信号を出力する。処理タスク１では処理が実行される。処理タスク１がタスク２状態レジスタにアクセス（読み書き）するため、処理タスク１からタスク２状態レジスタに割り当てられたアドレスがモジュール実行機構３に出力される。タスク２状態レジスタに書き込みする場合は、アドレスと共にデータも出力される。図８に示すケースでは、タスク２状態レジスタのタスク状態が、処理タスク１によって書き換えられ、実行状態に遷移したとする。
モジュール実行機構３では、内部のタスク２状態レジスタのタスク状態が停止から起動へと更新されたことで、処理タスク２の回路モジュールに起動信号を出力する。処理タスク２では処理が実行される。処理タスク２が共有メモリ５にアクセスする際には、処理タスク２からアドレス、書き込みの場合にはデータを併せて、モジュール実行機構３に出力される。モジュール実行機構３では、それをそのまま調停機構４に出力する。その際、タスク２状態レジスタの現在の優先度も併せて調停機構４に出力する。調停機構４では、入力したアドレスに従って、共有メモリにアクセスする。
【００４４】
図９に示すように、モジュール実行機構３は、内部のタスク１状態レジスタのタスク状態が起動となっている場合、処理タスク１の回路モジュールに起動信号を出力する。処理タスク１では処理が実行される。モジュール実行機構３は、内部のタスク２状態レジスタのタスク状態が起動となっている場合、処理タスク２の回路モジュールに起動信号を出力する。処理タスク２では処理が実行される。処理タスク１と２は、別の回路モジュールで構成されており、同時に実行される。
処理タスク１が共有メモリ５に書き込みする際には、処理タスク１からアドレスと、書き込みデータが、併せてモジュール実行機構３に出力される。モジュール実行機構３では、それをそのまま調停機構４に出力する。その際、タスク１状態レジスタの現在の優先度も併せて調停機構４に出力する。
一方、同時に実行されている処理タスク２が共有メモリ５に書き込みする際には、処理タスク２からアドレスと、書き込みデータが、併せてモジュール実行機構３に出力される。モジュール実行機構３では、それをそのまま調停機構４に出力する。その際、タスク２状態レジスタの現在の優先度も併せて調停機構４に出力する。
調停機構４では、優先度の高い方（この場合は処理タスク２）から入力したアドレスに従って、共有メモリにアクセスする。
【００４５】
図１０を参照し、図９に示す状況で、割込信号が入った場合について説明する。割込信号が入ると、割込ハンドラ状態レジスタのタスク状態が実行状態に変化する。モジュール実行機構３は、割込ハンドラ状態レジスタのタスク状態が起動となっている場合、割込ハンドラの回路モジュールに起動信号を出力する。割込ハンドラでは割込処理が実行される。割込ハンドラが割込処理の実行中に、共有メモリ５に書き込みする際には、割込ハンドラからアドレスと、書き込みデータがモジュール実行機構３に出力される。モジュール実行機構３では、それをそのまま調停機構４に出力する。その際、割込ハンドラ状態レジスタの優先度も併せて調停機構４に出力する。
図１０の場合では、共有メモリ５にアクセス（データ書き込み）しようとしている回路モジュールは３つあり（処理タスク１、処理タスク２、割込ハンドラ）、それぞれデータ書き込みを要求している。調停機構４では、処理タスク１、処理タスク２、割込ハンドラの優先度を判定し、最も優先度の高い割込ハンドラのメモリアクセスのみ実行することになる。なお、割込ハンドラのメモリアクセスが終了すれば、メモリアクセスを待っている処理タスク１、処理タスク２の内、優先度が高い処理タスクのメモリアクセスを実行し、それが終了すれば優先度が低かった他方の処理タスクのメモリアクセスを実行する。
【００４６】
図１１を参照して、周期ハンドラの動作について説明する。周期ハンドラは、カウント処理やサイクリック通信処理などリアルタイム処理装置において、周期的に起動される処理を行うタスクである。モジュール実行機構３の内部の周期ハンドラ状態レジスタには、タイマカウント値が含まれ、タイマカウント値が所定の値になった場合には、モジュール実行機構３が周期ハンドラを実行制御する。具体的には、周期ハンドラが起動された場合、状態レジスタ内部のタイマカウント値がセットされ、サイクル毎にそのタイマカウント値が減じられ（或は、所定値が増減され）、タイマカウント値が０になると周期ハンドラの起動信号がモジュール実行機構３から出力され、実行が開始される。なお、タイマカウント値は、他の処理タスクから書き込みが可能である。
周期ハンドラが実行中に、共有メモリ５にアクセスする際には、周期ハンドラからアドレスと、書き込みの場合には書き込みデータがモジュール実行機構３に出力される。モジュール実行機構３では、それをそのまま調停機構４に出力する。その際、周期ハンドラ状態レジスタの優先度も併せて調停機構４に出力する。
【００４７】
図１２を参照して、アラームハンドラの動作に関し、処理タスク２から起動され、タイマカウント値がセットされ、一定時間後にアラームが停止する動作について説明する。アラームハンドラは、周期ハンドラと同様に、モジュール実行機構３の内部のアラームハンドラ状態レジスタには、タイマカウント値が含まれ、タイマカウント値が所定の値になった場合には、モジュール実行機構３がアラームハンドラを実行制御する。
図１２に示す例では、処理タスク２が起動され、処理タスク２によって、モジュール実行機構３の内部のアラームハンドラ状態レジスタのタイマカウント値が所定の値に書き換えられ、モジュール実行機構３がアラームハンドラに起動信号を出力している。
アラームハンドラが実行中に、共有メモリ５に書き込みする際には、アラームハンドラからアドレスと、書き込みデータがモジュール実行機構３に出力される。モジュール実行機構３では、それをそのまま調停機構４に出力する。その際、アラームハンドラ状態レジスタの優先度も併せて調停機構４に出力する。
【実施例２】
【００４８】
（複数のセクションに分けられた共有メモリ）
図１３を参照して、共有メモリを複数のセクション分けして使用するリアルタイム処理装置の実施態様について説明する。
図１３に示すように、共有メモリ５を複数のセクションのメモリ領域に分け、異なるセクションのメモリ領域は同時にアクセスできるようにしてもよい。この場合、異なる処理タスクが個々の処理に用いるデータは、それぞれ異なるセクションのメモリ領域に割り当てることが好ましい。図１３に示す例では、共有メモリ５は５つのセクションのメモリ領域に分けられており、処理タスク１がセクション１のメモリ領域にアクセスし、処理タスク２がセクション２のメモリ領域にアクセスし、周期ハンドラがセクション３のメモリ領域にアクセスし、アラームハンドラがセクション４のメモリ領域にアクセスし、割込ハンドラがセクション５のメモリ領域にアクセスする構成になっている。このような構成では、異なる処理タスク／ハンドラが個々の処理に用いるデータは、それぞれ異なるセクションのメモリ領域に割り当てることができるため、調停機構４による共有メモリ５の調停によって、処理タスク／ハンドラが待たされることがなく、リアルタイム処理装置の性能を更に向上できる可能性がある。
【００４９】
共有メモリ５が複数のセクションに分けられたとしても、処理タスクやハンドラの間で共有するデータなど、同一のセクションへ複数の処理タスクから同時にメモリアクセスが起こる場合がある。このように、同一のセクションへ複数の処理タスクから同時にメモリアクセスが起こった場合には、調停機構４によって、そのうち優先度の最も高い処理タスク又はハンドラのメモリアクセスのみが許可され、それ以外の処理タスク又はハンドラのメモリアクセスは待たされる（モジュール実行機構３が停止信号を出力し、優先度の最も高い処理タスク以外の処理タスクやハンドラは停止する。）。
同一のセクションへ複数の処理タスクから同時にメモリアクセスが起こらない限りは、複数のセクションに分けられる構成により、処理タスク又はハンドラが、優先順位の高い他の処理タスクやハンドラに妨げられることなく共有メモリにアクセスし、効率よく処理を実行することができるのである。
【実施例３】
【００５０】
（共有メモリに状態レジスタを配置する構成について）
図１４に、本発明のリアルタイム処理装置の他の実施形態のハードウェア概略構成図を示す。図１４に示すように、状態レジスタをモジュール実行機構３の内部に配置するのではなく、共有メモリ５に配置する構成も可能である。但し、この場合、処理タスクやハンドラの状態を確認するために、都度、共有メモリ５にアクセスするといったオーバヘッドが生じることから、装置全体の性能が下がる方向になる。
【実施例４】
【００５１】
上述の如く、本発明のリアルタイム処理装置では、実行可能状態にある全ての処理タスクを即座に実行状態に遷移して実行させることができるが、これ以外に、実行可能状態にある処理タスクのうち、優先順位が最高位の処理タスクだけを実行状態に遷移させて実行させ、それ以外のタスクを停止させるという排他制御を行うことも可能である。
従来のリアルタイム処理装置において、ＣＰＵ上では１つの処理タスクしか実行されないことを前提にして排他制御のプログラムが書かれることがある。そのため、上述した本発明のリアルタイム処理装置の作製方法で、従来のプログラムそのものから高位合成などの手法で回路モジュールを作製しそのまま動かす場合には、優先順位が最高位の処理タスクのみを実行状態に遷移させて、それ以外のタスクを停止させるという実行制御を行う方が適しているからである。
具体的には、モジュール実行機構３が、実行可能状態にある処理タスク及びハンドラのうち、優先順位が最高位のものだけを実行状態に遷移させて実行させる。これにより、従来のリアルタイム処理装置で動作していたプログラムをそのまま活用した場合であっても、排他制御の実現を容易化できる。
【実施例５】
【００５２】
全ての処理タスク／ハンドラの回路モジュールは、高位合成などを用いて自動で作製する以外に、回路モジュールは手動で設計し作製してもよく、高位合成で自動作製された回路モジュールと、手動で設計された回路モジュールが混在しても構わない。また、回路モジュールを、従来の装置と同じ動作のプログラム (例えば、高位合成システムに入力するプログラムそのもの) を実行するプロセッサで置き換えることも可能である。
すなわち、本発明のリアルタイム処理装置における処理タスク／ハンドラの回路モジュールは、高位合成により個々にハードウェア化される以外に、手設計により得た同様の動作をする回路や、同様の動作を実現するプログラムを実行するプロセッサで置き換えることも可能である。
【産業上の利用可能性】
【００５３】
本発明は、自動運転車両、無人飛行機、ロボット制御などの制御装置として有用である。
【符号の説明】
【００５４】
１  リアルタイム処理装置
２  回路モジュール
３  モジュール実行機構（マネージャー）
４  調停機構（アービタ）
５  共有メモリ
６  状態レジスタ
２ａ、２ｂ  処理タスク
２ｃ  周期ハンドラ
２ｄ  アラームハンドラ
２ｅ  割込ハンドラ
【図１】
2019144910.tif 000005
【図２】
2019144910.tif 000006
【図３】
2019144910.tif 000007
【図４】
2019144910.tif 000008
【図５】
2019144910.tif 000009
【図６】
2019144910.tif 000010
【図７】
2019144910.tif 000011
【図８】
2019144910.tif 000012
【図９】
2019144910.tif 000013
【図１０】
2019144910.tif 000014
【図１１】
2019144910.tif 000015
【図１２】
2019144910.tif 000016
【図１３】
2019144910.tif 000017
【図１４】
2019144910.tif 000018