Ryuz's tech blog

FPGAなどの技術ブログ

FPGAで RTOS(Real-Time OS)を作ることを考える

はじめに

こことかで少し実験を始めていい感触が出てきたので少し備忘録的に書いておきます。

具体的には ZynqMP の RPU(Cortex-R5) 用にPLでRTOSロジックを作っていろいろ実験中です。

なぜ今さらFPGARTOSなのか?

RTOSをロジックで記述しようという試みは遥か昔から存在していると思います。

一方で、ZynqMP のような GHz 級で動くハードマクロのCPUとPL(Programable Logic) が一体になった SoC が気軽に使えるようになったのも最近な気がしており、これは重要な気がします。

「いやいや ソフトマクロのCPU ならずっと昔からFPGAにあったではないか、それではだめなのか?」というご意見も至極ごもっともに思います。一方で、私としては計算機にさせるべき処理は「CPUに適している処理」と「プログラマブルロジックに適している処理」が存在しており、適材適所で使い分けるべきかと思っております。

そのような考え方の元では、「プログラマブルロジックでCPUを構成する」というソフトマクロCPUは本末転倒以外の何者でもないと考えます。

MicroBlazeやNIOSなどのソフトマクロのCPUのメリットが出るのは

  1. FPGAは必須だが両方を搭載できない事情(コスト/サイズなど)がある
  2. シーケンサ的処理を高級言語などで生産性良く開発したいとき
  3. アーキテクチャの実験がしたいとき

などのケースではないかと思います。

1についてはZynqのようなコアが今後もっと安く出てくるとケースとして縮小していくことが期待できますし、2についてはHLSがかなりカバーしてくれています。3は私も大好きなので何ら否定しません(研究開発は大事です)。

と言うような考えの元、あくまでハードマクロCPUとプログラマブルロジックの共存を前提に、従来CPUだけで実現していたRTOS上を「ハードマクロのCPUに適している処理」と「プログラマブルロジックが適している処理」に分離したとき、RTOSカーネルの結構な部分で「プログラマブルロジックが適しているんじゃないか?」という仮説の元であれこれ実験している次第です。

RTOSFPGA化するメリット

いくつか考えられるメリットを書いておきます

  • 優先度キューなどの処理が固定時間(ほぼ1サイクル)で完結できる
  • プログラマブルロジックから直接タスク起床/イベントフラグセット/セマフォカウントなどができる
  • タスク毎にカウンタを持てばいいのでタイムアウトキューも不要、サイクル単位で正確に時間管理
  • 貴重なTCM(密結合メモリ)をOSコードに取られない
  • FPGAなのでタスク数/セマフォ数など柔軟に変更できる
  • 遅延プロシージャコール(Deferred Procedure Calls)などの難しいことが不要

などが考えられます。

本来時間保証を目的とするRTOSの本分に立ち返ると、これは素直に非常に効果的に思います。

特筆すべきはやはりPL部分とのシームレスな結合にあるように思います。多くの場合RTOSのタスクは、センサーの反応とか、DMAの完了とか、通信パケットの到着とか、そういった外因をトリガに割り込みを受けて動き出すわけです。が、それらの外因を制御しているPL上のロジックが直接RTOS部にシグナルを入れてタスクの状態変更をできてしまうのであれば、CPUのソフトには割り込みコンテキストが不要なのではないかとさえ考えております。

まだまだ検証が必要と思いますが、ZynqMP の新しい使い方として、PL に RTOS 機能を持たせるというのがもう少し突き詰められればと思います。

おまけ

ちなみにソフトマクロのCPUを作る場合、CPU自体にRTOSブロックと連携する機能や専用命令つけてしまえばもっと面白いことが出来そうです。

レジスタファイルにBRAMを割り当てれば32タスク分ぐらいのレジスタセットが確保できるはずなので、タスクスイッチも即座にできるかもしれませんし、いろいろできそうです。 RISC-V あたりの命令セットで出来ないものかと言うのは秘かに妄想中です。

ただし、先に述べたように、ハードマクロのCPUは数GHz (ZynqMP の RPU は 500~600MHzほどですが)なのに対して、ソフトコアCPUはやはり数百MHzですので、この一桁の差はやはり絶対的なのではないかと思います。

量子化や並列化しやすい処理をPLで、直列性が高く浮動小数点などの高級な処理が必要なものをCPUに割り当て、お互いを効率よくランデブーさせるのにRTOSロジックが役立てば面白いなと思う次第です。