RTOS を用いたシステムの高位合成によるフルハードウェア化
大迫 裕樹

石浦 菜岐佐

神原 弘之

冨山 宏之

Yuuki Oosako

Nagisa Ishiura

Hiroyuki Kanbara

Hiroyuki Tomiyama

関西学院大学 理工学部

京都高度技術研究所

立命館大学 理工学部

本稿では, TOPPERS/ASP3 カーネルを用いたプログasm

C

ラムを高位合成によりフルハードウェア実装する手法を

gas

gcc

提案する. 本手法では, 1 つのタスクやハンドラを独立した 1 つの ハードウェアに合成し, 全てのタスク/ハンドラが並列に実行することを許す. これによって, 処理性能とレスポンスを向上させるとともに, RTOS のタスクスケジューリング機能を不要にし, 軽量なハードウェアでシステムを制御することを目指す.

1 はじめに

CDFG-32756 -32760+ lw +MIPS binary

Lobjdump...
lw v1,-32756(gp)lw v0,-32764(gp)nopaddu v0,v1,v0
sll v0,v0,0x2
sw v0,-32760(gp)
...

lw

L

library info
optimization

schedulingbinding+addu
RTL IR-32764<<sllcomposer+

CDFG generator

Ssw

Verilog
HDL

図 1 ACAP の高位合成処理の流れ [6]近年の情報通信技術の発展によって, 新しい製品やサービスが次々に提供されるようになっているが, これらに必要な機器を実装するために, 組込みシステムには益々高い機能が要求されるようになっている. 特に, 車載機器, 無人飛行機, ロボットの制御には, 高い機能と同時に高い応答性能が要求される.
リアルタイム OS (RTOS) を用いたシステムの応答性を向上させる手法としては, RTOS の機能をハードウェアとして実装する手法 [1][2][3] がある. しかし, これらの手法では, タスクやハンドラはソフトウェアとして実行されるため, その処理の計算量が多い場合には必ずしも応答性能は改善されない. 高位合成技術 [4] を用いれば, タスクやハンドラをハードウェア化し, 高速化することができる.

高位合成システム ACAP [6] は, MIPS R3000 の機械語プログラムを入力として (アセンブラやコンパイラを用いることにより, アセンブリ言語や C 言語プログラムも入力可能である), レジスタ転送レベルの Verilog HDL を生成する. ACAP の処理の流れを図 1 に示す. ACAP は,入力された機械語プログラムを CDFG (control dataflowgraph) に変換した後, 最適化, スケジューリング, バインディングの処理を施して, これを Verilog HDL に変換する. また, ACAP は割込みハンドラを含むプログラムの合成も可能である [7].

これを利用してタスクや割込みハンドラをハードウェア化するシステムレベル設計手法 [5] が存在するが, RTOSを含めたシステム全体をハードウェア化することはできない.

3 TOPPERS/ASP3 カーネルを用いたプログ
ラムのフルハードウェア化
3.1 概要本研究では, RTOS を用いたプログラムを入力とし, タ

本手法では, TOPPERS/ASP3 カーネルを用いたプロ

スク, ハンドラおよび RTOS のサービスコールの機能全グラムを入力とし, これを実行するプロセッサと機能等価てをハードウェアに合成する手法を提案する. 本手法でなハードウェアを合成する.

は, 1 つのタスクやハンドラを独立した 1 つの ハードウェ

対象プログラムは, 複数のタスク, 周期ハンドラ, アラー

アに合成し, 全てのタスク/ハンドラを並列に実行させる

ムハンドラ, 割込みハンドラからなるものとする. ただし,ことによって, 処理性能とレスポンスの向上を目指す. まこれらのタスク類は, 並列に実行され得るという前提で必た, これによって RTOS のタスクスケジューリング機能要な排他制御が記述されているものとする. すなわち, 同を不要にし, 軽量なハードウェアでシステムを制御するこ

時に 2 つ以上のタスクが実行されないことを前提としたとを目指す.

2 高位合成排他制御を実装しているプログラムは, 本稿の手法の対象外である.
本手法で実装するハードウェアの構成を図 2 に示す. 1

高位合成は, C 言語等で記述された動作記述からハードつのタスク/ハンドラは 独立したハードウェアモジュールウェア設計記述を自動生成する技術である. これにより,として実装する. これらは並列に動作可能である. すなわ

高い抽象度での設計や, ソフトウェア開発のノウハウを用ち, 実行が可能な状態にあるタスクは, その優先度によらいたデバッグが可能になる.

ず全て実行される. ただし, 複数のメモリアクセスを同時arbiter

TSK TSK TSK TSK CYC CYC ALM INT
TOPPERS/ASP3

manager
pri

CPU

addr
data

DMEM

pri

HW
TSK TSK TSK TSK CYC CYC ALM INT

mem

addr
data

addr
data

manager
arbiter

priaddrdata

DMEM
図 2 TOPPERS を用いたプログラムのフルハードウェア化

globalstatusaddr
data

pri
addr
dataに行うことができないため, 調停が必要になる. タスクのtask
statustask
statuscyclicstatusalarm
status

stall
addr
data
stall
addr
data

TSK1

...

IMEM

TSKn

stall
addr
data

CYCi

stall
addr
data

ALMi

優先度はこの調停に反映する.

pri

3.2 ハードウェア構成と動作の仕組み

addr
data

本 手 法 で 実 装 す る シ ス テ ム の 構 成 を , 図 3 に 示 す.

“TSKi” はタスク, “CYCi” は周期ハンドラ, “ALMi”
はアラームハンドラ, “INTi” は割込みハンドラである.
“manager” と “arbiter” は, それぞれタスク/スケジュー
ラの実行制御, メモリアクセスの調停を行うモジュールである.
各タスク/ハンドラの状態は, manager モジュール内の status レジスタに格納されており, カーネルの状態はglobal status レジスタに格納されている. 周期ハンドラ
やアラームハンドラのタイマは status レジスタに含まれる. タスク/ハンドラは stall 信号によって停止するようになっており, manager モジュールは, status レジスタの値に基づいて stall 信号を変更することにより, タスク/ハンドラの実行 (起動/停止) を制御する. status レジスタ
および global status レジスタは, メモリ空間上にマップされており, 各タスク/ハンドラモジュールからロード/ストア演算によりアクセスできる. タスク/ハンドラからのサービスコールは, これらのレジスタを参照/更新する処理として実装する.
全てのタスク/ハンドラモジュールは 1 つのアドレス空間を共有しており, 全てのデータは共有メモリ (mem) に置かれる. メモリのポート数には限りがあるので, 同時に複数のメモリアクセスがあった場合は, arbiter モジュー
ルが調停を行う. この調停は, タスク/ハンドラの優先度に基づいて行う. すなわち, 同時に起こった複数のメモリアクセスのうち, 優先度の最も高いタスク/ハンドラのメモリアクセスのみが許可され, それ以外のタスク/ハンドラモジュールには stall 信号が送られる.
3.2.1 タスク
タスクの実行は manager からの stall 信号によって制御される. 全タスクが並列実行可能であるため, ディスパッチが禁止されていない限り, 実行可能状態のタスクは即座に実行状態に遷移し, 実行される. 停止状態や待ち

int
status

stall
addr
data

INTi

int
図3

ハードウェア構成状態, 強制待ち状態では stall 信号が入力され, タスクモジュールの処理が停止する.
タスクモジュールは, タスクを実行するプログラムから高位合成により生成する. タスクの状態を遷移させるサービスコールは, manager 内部の status レジスタを書き換える関数 (あるいはマクロ) に変換した上で高位合成する.

3.2.2 周期ハンドラ・アラームハンドラ
周期ハンドラ・アラームハンドラの実行もタスク同様,manager からの stall 信号によって制御される. 周期通知・アラーム通知が起動された場合, status レジスタ内部のタイマがセットされ, サイクル毎にタイマの値が減じられる. タイマの値が 0 になると周期ハンドラ/アラームハ
ンドラモジュールへの stall が解除され, 実行が開始される. 周期ハンドラの場合は, タイマが 0 になった後, 自動的に次のタイマが再設定される.

3.2.3 割込みハンドラ
割込みハンドラも他のハンドラ同様, manager からのstall 信号によって管理される. manager に対して割込み信号 (int) が入ると, 割込みがマスクされていなければ割込みハンドラモジュールへの stall が解除され, 実行が開始される.
3.3 ハードウェア合成処理の流れ
ハードウェア合成処理の流れを図 4 に示す.

まず,TOPPERS の静的 API を記述したコンフィギュレー
ションファイル (PROG.cfg) から, タスク/ハンドラのPROG.cfg

PROG.cconfigurator

kernel_cfg.c

TSKi_main.c../include/*.h../target/dummy_gcc/*.h../arch/gcc/*.h../kernel/*.h../syssvc/*.h...

kernel_cfg.hINTi_main.ckernel config.c, kernel config.h および sample1.c をコンパイルし, MIPS アセンブリを生成した. これにサービルコールをリンクして MIPS の実行可能バイナリを生成した. 生成したバイナリを ACAP を入力することにより, 各タスク/ハンドラおよびサービスコールの機能を持
つハードウェアの Verilog HDL 記述を生成した.
動作確認としては, TASK1 に 17 個のサービスコールをテストするコードをリンクして生成したハードウェアで RTL シミュレーションを行い, 正常に動作することがlib/*.c確認できている. 現在, arbiter, manager モジュールを実装中である.

GCC

ACAP

5 むすび
TSKi

CYCi

ALMi

INTi

図4TSKn.vCYCi.v

ALMi.v

INTi.v

合成の流れ

本稿では, TOPPERS/ASP3 カーネルを用いたシステ
ムを高位合成によりフルハードウェア実装する手法を提案した. タスク/ハンドラを並列動作可能なハードウェアに合成することにより, 処理速度とレスポンスを格段に向status や関連するマクロ等の定義ファイル (kernel cfg.c,kernel cfg.h), および合成用の main 関数を含むファイル(TASKi main.c 等) を生成する. TASKi main.c 等のメインファイル, kernel cfg.c, アプリケーションを記述したソースファイル (PROG.c), およびハードウェア合成用に実装したサービスコールを高位合成システム ACAP に入力し, Verilog HDL で記述されたハードウェアを生成する. また, 上記のファイルを GCC 等の x86 コンパイラに入力し, 実行バイナリ (TSKi, CYCi 等) を生成することにより, x86 上でテスト/デバッグを行うことができる.

4 実装と実験現在, 本手法により, TOPPERS/ASP3 カーネル付属のサンプルプログラム “sample1” のハードウェア化を進めている.
このプログラムは, 全体を制御するタスク MAIN TSK,並行実行する 3 つのタスク TASK1, TASK2, TASK3 と周期ハンドラ・アラームハンドラ・割込みハンドラからなる. 並行実行タスクは定期的にメッセージを出力し, 周期ハンドラでレディキューを回転している. メインタスクでは, シリアル通信から受け取った文字に対応してタスクやハンドラの状態を変化させる.

4.1 実装コンフィギュレーションファイルから高位合成用のソースコード kernel config.c, kernel config.h を生成するためのコンフィギュレータを Perl5 で実装した. また,TOPPERS/ASP3 のサービスコールのうち, sample1 に含まれる 33 個を TOPPERS の統合仕様書 [8] をベースにハードウェア実装用に C 言語で実装した.
4.2 実験
sample1.c からタスク TASK1〜TASK3 のハードウェア実装を生成した. コンフィギュレータに sample1.cfgを入力して生成した main 関数を含むソースファイル,上させることができると考えている. 残りのサービスコー
ルの実装, arbiter, manager モジュールの実装が今後の課題である.
謝辞
本研究に関して有益な御助言を頂いた元立命館大学の中谷嵩之氏, 元関西学院大学の田村真平氏に感謝致します. 本研究は一部科研費 16K00088, 16K01207, 15H02680 の助成による.

参考文献[1] 森久直, 坂巻佳壽美, 重松宏志: “組込み制御システム向けリアルタイム OS のハードウェア化,” 東京都立産業技術研究所研究報告, 第 8 号 (2005).
[2] 丸山修孝, 石原亨, 安浦寛人: “仮想キューによる高性能ハードウエア RTOS の実現,” FIT2010 (Aug. 2010).
[3] Carl Stenquist: “HW-RTOS Improved RTOS Performance by Implementation in Silicon,” White Paper—
Renesas R-IN32M3 Industrial Network ASSP (May2014).
[4] D. D. Gajski, N. D. Dutt, A. C-H Wu, and S. Y-L Lin:
High-Level Synthesis: Introduction to Chip and System
Design, Kluwer Academic Publishers (1992).
[5] Yuki Ando, Shinya Honda, Hiroaki Takada, Masato
Edahiro: “System-level Design Method for Control Systems with Hardware-implemented Interrupt Handler,”
Journal of Information Processing, Vol. 23, No. 5,
pp. 532-541. (Nov. 2014).
[6] Nagisa Ishiura, Hiroyuki Kanbara, and Hiroyuki
Tomiyama: “ACAP: Binary Synthesizer Based on MIPS
Object Codes,” in Proc. ITC-CSCC 2014, pp. 725–728(July 2014).
[7] 伊藤直也, 石浦菜岐佐, 冨山宏之, 神原弘之: “割込みハンドラを独立したモジュールとして実装するバイナリ合成,” 信
学技報, VLD2015-106 (Jan. 2016).
[8] TOPPERS project: “TOPPERS 第 3 世 代 カ ー ネル (ITRON 系) 統 合 仕 様 書 Release 3.0.0,” https://www.toppers.jp/docs/tech/tgki_spec-300.pdf(Feb. 2016).