(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-02-05
(45)【発行日】2025-02-14
(54)【発明の名称】サービス機能の集約型リアルタイム処理装置
(51)【国際特許分類】
G06F 9/50 20060101AFI20250206BHJP
【FI】
G06F9/50 120B
(21)【出願番号】P 2021091966
(22)【出願日】2021-05-31
【審査請求日】2024-02-21
【新規性喪失の例外の表示】特許法第30条第2項適用 刊行物名 電子情報通信学会技術研究報告 VLD2020-75,HWS2020-50(2021-03) 発行日 2021年3月3日 発行所 一般社団法人電子情報通信学会
(73)【特許権者】
【識別番号】503092180
【氏名又は名称】学校法人関西学院
(74)【代理人】
【識別番号】110000822
【氏名又は名称】弁理士法人グローバル知財
(72)【発明者】
【氏名】石浦 菜岐佐
【審査官】坂庭 剛史
(56)【参考文献】
【文献】特開2019-144910(JP,A)
【文献】特開平10-021291(JP,A)
【文献】特開平08-263299(JP,A)
【文献】特開2007-018254(JP,A)
【文献】特開平05-250437(JP,A)
【文献】大迫裕樹、石浦菜岐佐、冨山宏之、神原弘之,RTOSを用いたシステムのフルハードウェア実装とその自動化,電子情報通信学会技術研究報告,日本,一般社団法人電子情報通信学会,2019年02月20日,Vol.118, No.457,pp.175-180(VLD2018-122),ISSN 0913-5685
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/50
(57)【特許請求の範囲】
【請求項1】
リアルタイムOSを用いるプロセッサで動作する全ての処理タスクが個々にハードウェア化された複数の回路モジュールと、
前記回路モジュール毎のサービスの起動要求を受け付けるポートと、タスク状態及びタスク優先度を記憶するレジスタと、リアルタイムOSのサービスが集約してハードウェア化されたサービスモジュール群と、前記ポートからサービスの起動要求を読み込み、サービスの同時複数要求がある場合には、前記回路モジュール毎のタスク状態及びタスク優先度に応じて調停し、起動要求されたサービスモジュールを起動して、サービスが起動中の前記回路モジュールに対応する前記ポートに対して、前記サービスモジュールにおけるサービスの実行結果と実行完了状態を、実行結果値として出力する調停機構、を有し、前記回路モジュールが用いるリアルタイムOSのサービスが重複なく集約してハードウェア化され、前記回路モジュールからのサービスの起動要求を並列に受付け、タスク状態及びタスク優先度に応じて同時複数要求を調停して要求されたサービスを実行し、実行されたサービスの
前記実行結果値を前記回路モジュールに受渡しするサービス実行管理回路、
を備え、プロセッサを用いず、全てハードウェア化されたことを特徴とするリアルタイム処理装置。
【請求項2】
前記調停機構は、前記回路モジュールのタスクからサービスの起動要求があり、かつ、前記タスク状態が停止状態でないタスクの前記タスク優先度を比較し、比較した中で最も高い優先度のタスクの識別番号と、識別番号に対応するタスクが起動要求するサービスの識別番号及びパラメータとを、前記サービスモジュールに引渡すことを特徴とする請求項
1に記載のリアルタイム処理装置。
【請求項3】
前記レジスタに、前記タスク優先度および前記タスク状態が記憶され、
前記タスク優先度および前記タスク状態は、前記サービスモジュールにより書き換えできることを特徴とする請求項
2に記載のリアルタイム処理装置。
【請求項4】
前記処理タスクは、周期的に起動するタスクと、非定期的な割り込みに対するタスクとが含まれることを特徴とする請求項1~
3の何れかに記載のリアルタイム処理装置。
【請求項5】
前記回路モジュールは、全て独立して実装され、全てが並列に実行し得ることを特徴とする請求項1~
4の何れかに記載のリアルタイム処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プロセッサ(CPU)、リアルタイムOS(Operating System)、処理プログラムの組合せと機能等価な専用ハードウェアのリアルタイム処理装置に関するものである。
【背景技術】
【0002】
近年の情報通信技術の発展に伴って、機器に組込まれる制御システムには、益々高い機能と高い応答性能が要求されるようになっている。特に、自動運転車両、無人飛行機、ロボット制御などの制御には、非常に高い応答性能が要求されており、このような高性能な制御システムを如何に実装するかが重要な課題になっている。
【0003】
従来から、リアルタイムOSを用いたシステムの応答性を向上させる手法として、リアルタイムOSの機能をハードウェアとして実装する方法が知られている。リアルタイムOSは、タスクやハンドラが制約時間内に実行を完了するようにシステムを実装するための機能を提供する。しかし、これらの方法では、タスクやハンドラはソフトウェアとして実行されるため、システムの高機能化が進むにつれ、その処理の計算量が多い場合には必ずしも応答性能が改善されないといった問題があり、リアルタイムOSを利用したシステムのリアルタイム性確保は難しくなってきているのが実状である。
【0004】
一方で、高位合成技術を用いて、リアルタイムOS上で動作するタスクをハードウェア化し、処理の高速化を図ることが知られている。この高位合成技術を利用して指定したタスクをハードウェア化するシステムレベル設計方法が存在するが、リアルタイムOSを含めたシステム全体をハードウェア化することは実現されていないといった実状である。
【0005】
上記の実状を踏まえ、本発明者は、既に、リアルタイムOS、タスクを含めたシステム全体をハードウェア化したリアルタイム処理装置を提案している(特許文献1、非特許文献1を参照)。提案したリアルタイム処理装置は、リアルタイムOSを用いる演算処理装置で動作する全てのタスクが個々にハードウェア化された複数の回路モジュールと、回路モジュールの起動/停止の信号を生成するモジュール実行機構と、回路モジュールがアクセスし得る共有メモリと、共有メモリにアクセスする回路モジュールの調停を行う調停機構を備え、CPUなどの演算処理ユニットを用いず、リアルタイムOSのサービスの全ての機能を含めてフルハードウェア化されるものである。このリアルタイム処理装置の作製においては、リアルタイムOS上で動作するプログラムを入力として、 これを実行するプロセッサと機能等価なハードウェアを自動生成し、タスクがそれぞれ独立に動作するハードウェアに合成される。そのため、全てのタスクは並列に実行でき、タスクの切り替えオーバーヘッドが無く、高い応答性能を実現できる。
【0006】
しかしながら、タスクをハードウェア化した回路モジュールの回路規模が大きくなることが問題であった。これは、リアルタイムOSのサービス機能を含めてタスクがハードウェア化されていることが問題を招いていた。すなわち、タスクが要求するOSのサービス機能は個々のタスクの処理内容に応じて通常異なるものの、異なるタスクにおいて同じのサービス機能を用いる場合であっても、個々のタスクが独立に動作できるように同じサービス機能を含めて回路モジュール化されており、そのため重複したサービス機能の回路が存在し、結果として回路規模の増大化を招く事態となっていたのである。
【先行技術文献】
【特許文献】
【0007】
【非特許文献】
【0008】
【文献】N.Ishiura, et al.,“Synthesis of Full Hardware Implementation ofRTOS-Based Systems”, Proc. RSP 2018, pp. 1-7 (2018.10).
【発明の概要】
【発明が解決しようとする課題】
【0009】
上述の如く、従来のリアルタイム処理装置では、リアルタイムOSのサービス機能を重複してタスクがハードウェア化されているため、回路規模の増大化の問題が生じている。そこで、リアルタイムOSのサービス機能を含めずに、タスクをハードウェア化し、サービス機能だけを集約して回路を構築しようとした場合には、タスクからサービス機能を起動する仕組みが必要になり、またハードウェア化されたタスクがそれぞれ独立に動作することから、同時に複数のタスクからサービス機能の要求があった場合の調停の仕組みが必要になる。
【0010】
かかる状況に鑑みて、本発明は、個々の回路モジュールにサービス機能を分散せず集約化することによって回路規模が削減され、タスクからサービス機能を起動する仕組みと同時に複数のタスクからサービス機能の要求があった場合の調停の仕組みを備えたリアルタイム処理装置を提供することを目的とする。
【課題を解決するための手段】
【0011】
上記課題を達成すべく、本発明のリアルタイム処理装置は、複数の回路モジュールと、サービス実行管理回路を備え、プロセッサを用いず、全てハードウェア化されたことを特徴とする。回路モジュールは、リアルタイムOSを用いるプロセッサで動作する全ての処理タスクが個々にハードウェア化される。また、サービス実行管理回路は、回路モジュールが用いるリアルタイムOSのサービスが重複なく集約してハードウェア化され、回路モジュールからのサービスの起動要求を並列に受付け、タスク状態及びタスク優先度に応じて同時複数要求を調停して要求されたサービスを実行し、実行されたサービスの実行結果値を回路モジュールに受渡しする。
【0012】
上記の構成によれば、リアルタイムOSのサービス機能を集約して、処理タスクの全ての機能をハードウェア化でき、
格段に高速な応答を実現すると共に、回路規模の削減が図ることができる。処理タスクの回路モジュールは、全て独立して実装され、全てが並列に実行され、タスクのスケジューリング機能が不要である。すなわち、処理タスクを時分割によりプロセッサで並行して演算処理する必要はなく、タスクスイッチの切り替えに伴うオーバーヘッドがほとんど生じないため、システムの応答時間を格段に短縮できる。
【0013】
ここで、リアルタイムシステムとは、例えば、制御システムにおいて、入力に対して定められた時間以内に応答をするものと定義する。例えば、自動車の制御システムのように、距離センサーから前方車両との距離が近接しているという入力があると、数μs以内にブレーキに作動信号を出力するといったシステムである。リアルタイムOSとは、リアルタイムシステムを効率的に実装するためのOSであり、処理タスクの起動や停止、及び、処理タスク間の通信などを担うプログラムをいう。システムコールとは、処理タスクのプログラムからリアルタイムOSのサービス機能を呼び出すことをいう。
【0014】
処理タスクとは、リアルタイムシステムにおいて、複数の処理を並行して行っている処理、例えば、走行モーターの制御を行いながら、画像カメラで障害物の検出を行う等、これらの個々の処理と定義する。本明細書において、処理タスクは処理ハンドラを含む意味で用いている。処理ハンドラとは、タスクの一種であり、制御システムに対する非定期的な入力、例えば、障害物の急接近や外部からの緊急信号に応答するため、特定の入力があった場合には実行中のタスクを一時中断して特定の処理を実行するタスクである。
タスクスイッチとは、プロセッサが搭載された制御システムにおいて、処理タスクから別の処理タスクに処理を切り替えることをいう。プロセッサが搭載された制御システムでは、タスクスイッチのために、現在実行している処理タスクの状態をすべてメモリに退避し、再び処理タスクを実行する場合にはこれを復元するという処理が必要になる。これらの処理は本体目的のタスクの処理ではないことから、オーバーヘッドという。タスクスケジューリングとは、プロセッサが搭載された制御システムにおいて、プロセッサが実行する処理タスクを状況に応じて切り替える機能をいう。リアルタイムといった制約を満たすために、処理タスクに、タスクの優先順位(タスク優先度)を設定でき、リアルタイムOSはこの優先度に基づいてタスクスケジューリングを行う。
【0015】
本発明のリアルタイム処理装置では、タスクの回路モジュールは、全て独立して実装され、全てが並列に実行されることから、タスクスイッチ、タスクスケジューリングが不要であるが、OSのサービス機能の要求に関するスケジューリングが必要であり、タスク優先度に応じた調停を行うが、これについては後述する。本発明のリアルタイム処理装置における回路モジュールは、高位合成により個々にハードウェア化されることが好ましい。高位合成とは、C言語などで書かれたプログラムから、等価なハードウェア(論理回路) の設計記述を自動生成する技術である。
【0016】
本発明のリアルタイム処理装置におけるサービス実行管理回路では、上述のとおり、回路モジュールが用いるリアルタイムOSのサービスが重複なく集約してハードウェア化されている。リアルタイムOSのサービスとは、処理タスクのプログラムからシステムコールを呼び出すことにより実行されるOSのプログラムであるが、これをハードウェア化すると共に、タスクの一部として組み込み回路モジュールとするのではなく、タスクの回路モジュールとは別回路のサービス実行管理回路の一部としてハードウェア化する。そして、サービス実行管理回路では、個々に独立した回路モジュールからのサービスの起動要求を並列に受付ける構成である。
【0017】
サービス実行管理回路では、タスク状態及びタスク優先度に応じて同時複数要求を調停して要求されたサービスを実行し、実行されたサービスの実行結果値を回路モジュールに受渡しする。ここで、タスク状態は、サービス機能を要求し、要求したサービスの完了待ちの状態であるか否かを示すものであり、タスク優先度は、OSのサービス機能の要求に関して、同時複数要求を調停するために用いるものである。実行されたサービスの実行結果値には、サービスの実行による計算結果の値、及びサービスの実行の成否を表す値(正常終了又はエラー)が含まれる。
リアルタイムOSのシステムコール(関数)では、サービスの実行の成否を表す値(正常終了コード又はエラーコード)を関数の返り値として呼び出し側の処理プログラムに返す。サービスコールによっては、返り値とは別にサービスの処理結果であるデータを受け渡すこともある。サービス実行管理回路における実行結果値は、返り値と処理結果のデータを纏めたものであり、サービス機能の処理完了は、別途、制御信号で通知している。
【0018】
本発明のリアルタイム処理装置において、サービス実行管理回路は、具体的には、以下の1)~4)を備える。
1)回路モジュール毎のサービスの起動要求を受け付けるポート、
2)タスク状態及びタスク優先度を記憶するレジスタ、
3)リアルタイムOSのサービスが集約してハードウェア化されたサービスモジュール群、
4)ポートからサービスの起動要求を読み込み、サービスの同時複数要求がある場合には、回路モジュール毎のタスク状態及びタスク優先度に応じて調停し、起動要求されたサービスモジュールを起動して、サービスが起動中の前記回路モジュールに対応するポートに対して、サービスモジュールにおけるサービスの実行結果と実行完了状態を、実行結果値として出力する調停機構。
【0019】
上記1)のポートは、サービス実行管理回路の一形態として、サービスの起動要求をレジスタで受け付けることもできる。サービス起動要求はポートを介することでもよく、また、レジスタを介するものでもよい。上記3)のサービスモジュール群は、個々のサービスモジュールの集合体を指すが、システムによってはサービスモジュールが1つだけの場合もあり、それを許容する。
【0020】
上記4)の調停機構は、回路モジュールのタスクからサービスの起動要求があり、かつ、タスク状態が停止状態でないタスクのタスク優先度を比較し、比較した中で最も高い優先度のタスクの識別番号と、識別番号に対応するタスクが起動要求するサービスの識別番号及びパラメータとをサービスモジュールに引渡す。ここで、サービスの識別番号とは、要求するサービス機能のユニークな番号であり、従来のシステムコールの関数名に相当するものである。また、パラメータとは、従来のシステムコールの引数に相当するものである。
【0021】
本発明のリアルタイム処理装置では、上記2)のレジスタに、タスク優先度およびタスク状態が記憶され、タスク優先度およびタスク状態は、サービスモジュールにより書き換え可能である。
【0022】
本発明のリアルタイム処理装置において、処理タスクは、周期的に起動するタスクと、非定期的な割り込みに対するタスクとが含まれる。また、本発明のリアルタイム処理装置における回路モジュールは、全て独立して実装され、全てが並列に実行するものである。
【0023】
次に、本発明のリアルタイム処理装置の作製方法について説明する。本発明のリアルタイム処理装置の作製方法は、以下の1)~7)のステップを備える。
1)リアルタイムOSを用いるプロセッサで動作する処理タスクの構成と設定パラメータを与えられたプログラムから抽出するステップ、
2)処理タスクが使用するリアルタイムOSのシステムコールの呼び出しをサービスの起動要求処理および実行結果値の受け取り処理に置換するステップ、
3)処理タスクの全てを、個々にハードウェア化して複数の回路モジュールに変換するステップ、
4)リアルタイムOSのシステムコールの関数本体を重複なく集約して、個々にハードウェア化して複数のサービスモジュールに変換するステップ、
5)サービスの起動要求に応じてサービスモジュールを起動し、かつ、サービスの同時複数要求がある場合には、回路モジュール毎のタスク状態及びタスク優先度に応じて調停する調停機構を回路生成するステップ、
6)回路モジュール毎のタスク状態及びタスク優先度を記憶するレジスタと、サービスモジュールと、調停機構とを接続して構成されるサービス実行管理回路を生成するステップ、
7)回路モジュールを、サービス実行管理回路に接続するステップ。
【0024】
上記1)では、従来のリアルタイムOSを用いたプログラム(群)をスキャンして、そこから情報を抽出してハードウェアを全自動で合成することができる。
上記3)の回路モジュールに変換するステップは、高位合成により個々にハードウェア化することができる。
【発明の効果】
【0025】
本発明のリアルタイム処理装置によれば、タスクからサービス機能を起動する仕組みと同時に複数のタスクからサービス機能の要求があった場合の調停の仕組みを備え、個々の回路モジュールにサービス機能を分散せず集約化することによって回路規模が削減できるといった効果がある。また、全ての処理タスクを並列に実行させることができ、処理性能とレスポンスの向上を図ることができるといった効果がある。
【図面の簡単な説明】
【0026】
【
図2】本発明のリアルタイム処理装置の一実施形態のハードウェア構成図
【
図3】サービス実行管理回路の機能ブロック図(1)
【
図4】サービス実行管理回路の機能ブロック図(2)
【
図5】サービス実行管理回路の機能ブロック図(3)
【
図6】リクエストアービタ(調停機構)の機能ブロック図
【
図8】本発明のリアルタイム処理装置の他の実施形態の概略図
【
図9】本発明のリアルタイム処理装置の他の実施形態のハードウェア構成図
【
図10】先行で提案したリアルタイム処理装置の概略図
【発明を実施するための形態】
【0027】
以下、本発明の実施形態の一例を、図面を参照しながら詳細に説明していく。なお、本発明の範囲は、以下の実施例や図示例に限定されるものではなく、幾多の変更及び変形が可能である。
【実施例1】
【0028】
図1は、本発明のリアルタイム処理装置の概略図を示している。一方、
図10は、特許文献1に開示された先行提案のリアルタイム処理装置の概略図を示している。
図1,10中、T1~T3はタスクを実行するハードウェアである回路モジュール2、S1~S4はサービス機能の処理を行うハードウェアであるサービスモジュール6を表す。
図10に示すように、先行提案のリアルタイム処理装置100は、回路モジュール200及びモジュール実行機構(マネージャー)300から構成される。リアルタイム処理装置100では、リアルタイムOSのサービス機能の処理を、モジュール実行機構(マネージャー)300側ではなく、回路モジュール200側、すなわちタスク側のプログラムの一部として高位合成していたことから、同じサービス機能が、複数の回路モジュール200の中に重複して存在していた。
【0029】
これに対して、
図1に示すように、本発明のリアルタイム処理装置1では、サービス機能の処理は、回路モジュール2側、すなわちタスク側ではなく、すべてサービス実行管理回路3側に集約することにより、この重複を排除している。サービス機能の起動は、タスクである回路モジュール2がポート41(TFi、TAi)にそれぞれ起動したいサービスの識別番号とパラメータ(引数)を出力することにより行う。
複数のタスク、すなわち複数の回路モジュール2から、複数のサービスの起動要求が同時に発生した場合には、サービス実行管理回路3が、要求を行ったタスクのその時点でのタスク優先度に従って、最初に処理するサービスを決定し、対応するサービスモジュール6を起動する。起動したサービスモジュール6の実行が完了すると、サービス実行管理回路3が、サービスモジュール6が出力する実行完了値をTAiに格納し、TFiに実行完了を表す値を書き込んでタスクに完了を通知する。
【0030】
図2は、本発明のリアルタイム処理装置の一実施形態のハードウェア構成図を示している。
図2に示すように、リアルタイム処理装置1は、回路モジュール2及びサービス実行管理回路3から構成される。
回路モジュール2は、リアルタイムOSを用いるプロセッサ(CPU)で動作する全ての処理タスクが個々にハードウェア化されたものである。また、サービス実行管理回路3は、回路モジュール2が用いるリアルタイムOSのサービスが重複なく集約してハードウェア化されたサービスモジュール群と、回路モジュール2からのサービスの起動要求を並列に受付け、タスク状態及びタスク優先度に応じて同時複数要求を調停して要求されたサービスを実行し、実行されたサービスの実行結果値を回路モジュール2に受渡しするリクエストアービタ(RA)5を備える。
【0031】
サービス実行管理回路3において、TFiおよびTAiは、タスクTi(以下、タスクT1~T3を、Ti、但し、iは1~3を表す)サービス実行管理回路3にサービスを通知するポート41であり、status[Ti]は、タスクTiの状態変数を格納するレジスタ群42である。一方、status[G]は、リアルタイム処理装置の全体システムの状態変数を格納するレジスタ群42である。なお、サービス実行管理回路3にサービスを通知するポート41は、タスクTiの回路モジュールと直結してもよく、また、バスを介して接続してもよい。また、ポート41は、レジスタにすることでもよい。
リクエストアービタ(RA)5は、複数のサービス機能の処理要求があった場合の調停を行う調停機構である。S1~S4は、サービス処理を行うハードウェアモジュール(サービスモジュール6)である。S1~S4は、各々、異なるサービス処理を行うモジュールであり、それぞれ異なる識別番号が割り当てられている。XF、XA、XTは、サービス実行管理回路3とサービスモジュール6を仲介するレジスタ43である。サービスモジュール6は、サービス機能の処理の実行のためにstatusレジスタ群42の読み書きを行う。TFiとXFには、サービス要求の有無、サービス機能を処理するサービスモジュール6の識別番号が符号化されている。TAiとXAはレジスタ配列であり、要求のあったサービスに必要な個数だけパラメータ(引数)が書き込まれる。XTには、サービス要求を行ったタスクの識別番号が符号化され書き込まれる。
【0032】
回路モジュール2及びサービス実行管理回路3の具体的な動作の流れを
図3~6を参照して説明する。
図3~5は、本発明のリアルタイム処理装置の機能ブロック図を示し、図中の矢印は主なデータの流れを示し、制御信号は省略している。また、
図6は、本発明のリアルタイム処理装置の調停機構であるリクエストアービタの機能ブロック図を示している。
まず、タスクTiは、パラメータ(引数)をTAiに、サービスの識別番号をTFiに書き込むことによってサービス実行管理回路3にサービス機能の起動要求を行う。
図3(1)では、タスクT1が、パラメータ(引数)をTA
1に、サービスの識別番号をTF
1に書き込む例を示している。
図3(2)に示すように、リクエストアービタ(RA)は、TFiを監視し、タスクTiからサービスの要求があれば、
図3(3)に示すように、リクエストアービタ(RA)は、XF、XA、XTにそれぞれTFi、TAi、iを書き込む。複数のタスクから複数のサービス要求が同時にあった場合、あるいは、あるサービス機能の要求の処理待ちの間に別のサービス要求があった場合には、タスク優先度に応じてそのうちの1つを選択してXF、XA、XTを書き込む。それ以外のサービス要求は、実行中のサービスの終了を待つ。
【0033】
サービスモジュールは、XFを監視しており、XFに自身のサービスの識別番号が書かれると処理を開始し、XA、XTを読み込んで要求されたサービス機能の処理を実行する。
図4(1)に示す例では、XFにサービスモジュールS1の識別番号が書かれたので、サービスモジュールS1が処理を開始し、XA、XTを読み込んで要求されたサービス機能の処理を実行する様子を示している。
図4(2)に示すように、サービスモジュールS1は、必要に応じてタスク状態のレジスタにアクセスして、タスクやシステムの状態変数を参照・更新する。また、
図4(2)に示すように、サービス機能の処理が完了すると(サービス実行中にエラーが発生した場合を含む)、XAのレジスタにサービス機能の実行結果値を書き込むと共に、リクエストアービタ(RA)に対して完了信号を出す。
リクエストアービタ(RA)は、
図4(3)に示すように、XTの値から要求があったタスク番号を認識し、
図5(1)に示すように、XAの実行結果値を、要求があったタスク1のTA1のポートに出力し、実行の完了を表す値(完了通知)をTF1に出力してタスク1に処理完了を通知する。
図5(2)に示すように、タスクT1は、TF1とTA1のポートからサービス機能の実行結果値と完了通知(図示せず)を受け取る。
【0034】
リクエストアービタ5は、複数のサービスモジュールの起動要求が同時に発生している場合に、次に実行するサービスモジュールを決定し、XF、XA、XTレジスタ43を介して該当するサービスモジュール6を起動する。サービスモジュールの選択は、その時点でのタスク優先度により行う。すなわち、起動要求を出しているタスクのうち、その時点で実行中であり、かつその時点での優先度が最も高いタスクのサービス機能の起動要求を選択する。なお、タスク状態やタスク優先度は、サービス機能の起動要求を出してからサービスモジュールの処理が開始されるまでに変動し得る。
【0035】
図6(1)(2)は、調停機構(リクエストアービタ)の機能ブロック図を示している。
図6(1)に示すように、TFi(i=1~3)にサービス機能の起動要求があった場合に、実行が停止状態でないタスクのタスク優先度を比較し、優先度が最大のタスクの識別番号をXTに、対応する起動要求されたサービスモジュールの識別番号とパラメータ(引数)を、XFとXAに書き込む。すなわち、タスク状態を表すstatus[Ti]において、stall信号線が“1”(タスク状態が停止)の場合に、AND回路のstatus[Ti]からの入力は“0”となるため、AND回路の出力は常に“0”になり、一方、タスク状態を表すstatus[Ti]において、stall信号線が“0”(タスク状態が停止でない)の場合に、AND回路のstatus[Ti]からの入力は“1”となり、サービス機能の起動要求を表すrequest信号線が“1”(起動要求有り)であれば、AND回路の出力は“1”になり、選択回路(selector)を介して、タスク優先度(priority)が優先度比較器(priority comparator)に入力され、優先度が最大のタスクの識別番号 (highest
priority task)がXTに出力される。
例えば、
図6(2)に示すように、タスクT1及びタスクT3(図示せず)からそれぞれTF1とTF3にサービス機能の起動要求があった場合に、status[T1]とstatus[T3]を参照し、タスク状態が停止状態でないならば、タスクT1,T3のタスク優先度を比較し、優先度が大きいタスクの識別番号をXTに(例えば、タスクT1の優先度がタスクT3よりも大きい場合には、タスクT1の識別番号をXTに出力)、対応する起動要求されたサービスモジュールの識別番号とパラメータ(引数)を、XFとXAに書き込む。
【0036】
TFiとTAiは、タスクTiがサービス機能を起動したい時に書き込むサービスの識別番号と必要なパラメータ(引数)を示している。status[Ti]は、タスクTiの各種状態を記憶しているレジスタ群である。stalliは、タスクTiが停止しているとき、すなわち実行状態ではないとき“1”、そうでないときは“0”になる。priorityiは、タスクTiのその時点でのタスク優先度である。優先度は固定ではなく、サービス機能の起動により実行中に変化する。ここでは、数値が大きいほど優先度が高く、“1”が最低の優先度としている。Priority´iは、実行状態にあるタスクTiがサービス起動を要求している時には、そのタスク優先度(priorityi)と等しく、そうでない場合には“0”となる。
requestiは、タスクTiがサービス機能の起動要求を行っている時は“1”、そうでないときは“0”になる。ここで、TFiはその特定のビットがrequestiになるように符号化することができる。stalliは、タスクTiが実行状態でないときは“1”、そうでないときは“0”となる。selectorは、選択信号(図中で横から入力されている信号)が指定した入力を選択して出力する。Priority comparator は、priorityiが最も大きいi(タスク番号)を出力する。XTには、priority
comparator の出力がセットされ、XFとXAには選択されたタスクTiのXFiとTAiがセットされる。
【0037】
(リアルタイム処理装置の作製方法について)
図7に、本発明のリアルタイム処理装置の作製方法のフローを示す。
まず、リアルタイムOSを用いるプロセッサで動作する処理タスクの構成と設定パラメータをプログラムから抽出する(ステップS01)。ここで、プログラムからの抽出は自動で行うことも可能である。次に、処理タスクが使用するリアルタイムOSのシステムコールの呼び出しをサービスの起動要求処理および実行結果値の受け取り処理に置換する(ステップS02)。そして、処理タスクの全てを、個々にハードウェア化して複数の回路モジュールに変換する(ステップS03)。ステップS01~S03によって、回路モジュールを作製する。
次に、サービス実行管理回路を作製する。まず、回路モジュールで起動要求されるリアルタイムOSのシステムコールの関数本体を重複なく集約して、個々にハードウェア化して複数のサービスモジュールに変換する(ステップS04)。そして、サービスの起動要求に応じてサービスモジュールを起動し、かつ、サービスの同時複数要求がある場合には、回路モジュール毎のタスク状態及びタスク優先度に応じて調停する調停機構を回路生成し(ステップS05)、回路モジュール毎のタスク状態を記憶するレジスタと、サービスモジュールと、調停機構とを接続して構成されるサービス実行管理回路を生成する(ステップS06)。
最後に、作製した回路モジュールと、作製したサービス実行管理回路を接続する(ステップS07)。
なお、
図7のフローにおいて、回路モジュールの作製(ステップS01~S03)と、サービス実行管理回路の作製(ステップS04~S06)のステップを並列に行い、最後に、作製した回路モジュールと、作製したサービス実行管理回路を接続する(ステップS07)ことでもよい。
【0038】
本発明のリアルタイム処理装置の作製方法では、リアルタイムOSのシステムコールを用いた処理タスクのプログラムを入力し、処理タスクおよびリアルタイムOSのサービス機能の全てをハードウェアに合成している。リアルタイムOSのサービス機能とは、具体的には、リアルタイムOSのシステムコールの関数本体に記述されている機能である。処理タスクおよびリアルタイムOSのサービス機能の全てをハードウェアに合成することにより、OSのカーネルの関数プログラムを実行するプロセッサと機能等価なハードウェア装置を作製する。
また、本発明のリアルタイム処理装置の作製方法では、それぞれの処理タスクを独立した1つのハードウェアの回路モジュールに合成し、全ての処理タスクを並列に実行させることによって、処理性能とレスポンスの向上を図り、リアルタイムOSのタスクスケジューリング機能を不要にし、軽量なハードウェアでシステムを制御する。
【0039】
ここで、上記3)の処理タスクを回路モジュールに変換する具体例について説明する。処理タスクを回路モジュールに変換する方法として、例えば、高位合成を用いることができる。高位合成は、C言語などのプログラミング言語で記述されたソフトウェア処理動作の記述から、ハードウェア設計の記述を自動生成する技術である。高位合成を用いて回路モジュールを作製することにより、ハードウェア記述言語(HDL)と呼ばれる論理回路を設計するための言語よりも、設計者がクロック周波数や信号タイミングを細かく意識することなく、回路機能を高い抽象度で設計でき、また、ソフトウェア開発のノウハウを用いたデバッグが可能になるメリットがある。高位合成を用いて回路モジュールを作製するシステムは、例えば、Xilinx社の「Vivado HLS」といった市販ツールを用いることができる。
【0040】
(実装と実験結果について)
本発明のリアルタイム処理装置の構成に基づいて、TOPPERS/ASP3付属のサンプルプログラム“sample1" をハードウェア化した結果について説明する。TOPPERS/ASP3とは、TOPPERS/ASPカーネルを拡張し改良したものであり、TOPPERSの第3世代カーネル(ITRON(Industrial The Real-time Operating-system Nucleus)系の組込み機器用のリアルタイムOS)の基盤となるものとして開発されたものである。
【0041】
このプログラムは、全体を制御するタスク(MAIN_TASK)、例外を処理するタスク(EXC_TASK)、および3つの並行実行タスク(TASK1,TASK2,TASK3)からなり、MAINN_TASKはシリアル通信からのメッセージを受けとり、OSのサービス機能を呼び出し実行する。
本発明のリアルタイム処理装置のサービス実行管理回路は、Verilog(IEEE 1364として標準化されているハードウェア記述言語(HDL))で設計した。サービスモジュールに関しては、TOPPERS/ASP3のサービス機能178個中でタスクからの呼び出しに関する28個のサービス機能をサポートした。タスクの回路モジュールは、ACAPによる高位合成により合成した。ACAPの詳細については、本発明者の論文「ACAP: Binary Synthesizer Based on MIPS Object Codes」(Proc. ITC-CSCC 2014, pp.725-728)を参照。ACAPによる高位合成は、C言語などで記述されたプログラムをそれぞれgas(アセンブラ)やgcc(コンパイラ)で変換して得られる機械語を入力とし、これを高位合成の標準的な内部データ構造であるCDFG(Control Data-Flow Graph)に変換し、このCDFGに対して、最適化、スケジューリング、バインディングを行って制御論理を決定し、最終的にハードウェア記述言語を出力する。これらの設計は、Xilinx社の「Vivado HLS」(2016.4)の市販ツールを用いて、Xilinx FPGA Artix-7 (xc7a100tcsg324-3) をターゲットに論理合成した。
【0042】
本実験において、上記の論理合成した本発明のリアルタイム処理装置(実施例)に関して、各モジュールの回路規模、回路のクリティカルパスの伝播遅延時間、各タスクの実行サイクル数と遅延時間に関して、表1,2に纏める。表1,2には、実施例と対比できるように、前述の特許文献1に示した先行提案のリアルタイム処理装置(比較例)の回路規模や遅延時間などを示している。なお、表1において、LUTは、ルックアップテーブル」(Look Up Table)の略称で、ある入力数以下の任意の論理関数を実現できる論理ブロックであり、FFは、フリップフロップ(flip-flop)である。
【0043】
【0044】
【0045】
表1に示すように、論理合成した各モジュールの回路規模を比べると、本発明のリアルタイム処理装置では、3つの並行実行タスク(TASK1,TASK2,TASK3)の回路規模が先行提案のリアルタイム処理装置に比べて削減できていたが、サービスモジュールとリクエストアービタがあらたに必要になったため、全体としては回路規模を大幅に削減できなかった。このことは、実験で用いたsample1プログラムは、一般的な実用プログラムから見ても使用されているサービス機能の処理自体が軽量なためであり、回路規模削減の効果がサービスモジュールとリクエストアービタによる回路規模の増加を大きく上回らなかったためであり、タスク数が増え、要求されるサービス機能の種類が増大するほど、回路規模の削減効果が顕著に表れる。
【0046】
また、表2に示すように、各サービス機能が起動要求され状態が更新されるまでの実行サイクル数を比較すると、本発明のリアルタイム処理装置では、先行提案のリアルタイム処理装置に比べて半分のサイクル数以下に削減できていた。また、本発明のリアルタイム処理装置では、タスクがサービス機能の起動要求をしてから、実際にサービス機能の実行結果値が送られてくる遅延時間が、いずれのサービス機能も200ns以内であった。
【0047】
(その他の実施例)
(1)
図8,9は、本発明のリアルタイム処理装置の他の実施形態の概略図とハードウェア構成図を示しているが、図に示すように、リアルタイム処理装置1aは、回路モジュールとして、タスク(T1~T3)に加えて、特定の入力があった場合には実行中のタスクを一時中断して特定の処理を実行するタスクであるハンドラ(H1,H2)を設けてもよい。
【0048】
(2)
図1~
図6において、ポート41は、レジスタとすることでもよい。レジスタの場合には、タスクのメモリ空間にマップされているため、タスクはそのアドレスに対して読み書きすることにより、サービス機能の起動と実行結果値の受け取りを行うことができる。
【0049】
(3)全ての処理タスクの回路モジュールは、高位合成などを用いて自動で作製する以外に、レジスタ転送レベル(RTL;Register Transfer Level)などのハードウェア記述言語を用いて手動で設計し作製してもよく、高位合成で自動作製された回路モジュールと、手動で設計された回路モジュールが混在しても構わない。また、回路モジュールを、従来の装置と同じ動作のプログラム (例えば、高位合成システムに入力するプログラムそのもの) を実行するプロセッサで置き換えることも可能である。
【産業上の利用可能性】
【0050】
本発明は、自動運転車両、無人飛行機、ロボット制御などの制御装置として有用である。
【符号の説明】
【0051】
1,1a,100 リアルタイム処理装置
2,200 回路モジュール
3 サービス実行管理回路
5 リクエストアービタ(RA)
6 サービスモジュール
41 ポート
42 レジスタ群
43 レジスタ
300 モジュール実行機構(マネージャー)