Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Nios®V/mでオープンソースRTOSを動かす / NiosVM seminar RTOS ...

Nios®V/mでオープンソースRTOSを動かす / NiosVM seminar RTOS 20220921

2022年9月21日のインテル株式会社様主催のセミナーにて、「Nios®V/mでオープンソースRTOSを動かす」をテーマにお話しした際の当日資料です。

More Decks by 株式会社フィックスターズ

Other Decks in Programming

Transcript

  1. Copyright © Fixstars Group 本日のAgenda  はじめに ◦ 自己紹介 ◦

    フィックスターズのご紹介  Nios® V/m でオープンソース RTOS を動かす ◦ 背景 & 実行環境 ◦ FreeRTOS on Nios® V/m ◦ TOPPERS on Nios® V/m ◦ まとめ 2
  2. Copyright © Fixstars Group 自己紹介 西田 竜之(ニシダ リュウジ) ソリューション第四事業部/シニアエンジニア 

    FPGAを用いたシステム開発に従事  ハードウェア開発をメインに担当  略歴 ◦ 半導体ベンダ ▪ サーバー向けASIC開発 ◦ 映像事務機メーカー ▪ 高画質エンジンLSI 映像機器向けFPGA開発 ◦ フィックスターズ ▪ FPGAを用いた高速取引金融システム ▪ OpenCLによるアプリの高速化 4
  3. Copyright © Fixstars Group フィックスターズの強み コンピュータの性能を最大限に引き出す、ソフトウェア高速化のエキスパート集団 ハードウェアの知見 アルゴリズム実装力 各産業・研究分野の知見 5

    目的の製品に最適なハードウェアを見抜き、 その性能をフル活用するソフトウェアを開 発します。 ハードウェアの特徴と製品要求仕様に合わ せて、アルゴリズムを改良して高速化を実 現します。 開発したい製品に使える技術を見抜き、実 際に動作する実装までトータルにサポート します。
  4. Copyright © Fixstars Group サービス領域 様々な領域でソフトウェア高速化サービスを提供しています。大量データの高速処理は、 お客様の製品競争力の源泉となっています。 6 組込み高速化 画像処理・アルゴリズム

    開発 分散並列システム開発 GPU向け高速化 FPGAを活用した システム開発 量子コンピューティング AI・深層学習 自動車向け ソフトウェア開発 フラッシュメモリ向けフ ァームウェア開発
  5. Copyright © Fixstars Group FPGAシステム開発 システム全体の高速化を考えることを前提とした トータル開発サービスを提供しています。 お客様の課題 フィックスターズの提供する価値 FPGAのタスクが複雑化していて開発が難し

    い ソフトとFPGAをもっとうまく連携させたい FPGAのハードウェアリソースを使い切って システムの性能を高めたい 開発期間を短縮したい 高密度な実装でFPGAを限界まで使い切る デバイス性能を限界まで引き出すRTLレベルのチューニング 短期間でのFPGA開発をサポート 様々な知見を持ち寄ることでFPGA開発の期間を短縮 イノベーション実現に向けた先端技術の適用 日々進化する最新技術を活用 高速・高性能なシステムを実現 最適なハードウェア構築をご提案
  6. Copyright © Fixstars Group 講演Agenda  Nios® V/m でオープンソース RTOS

    を動かす ◦ 背景 & 実行環境 ▪ Nios® V/m + RTOS の意義 ▪ 実行環境 ▪ 使用した Nios® V/m システム ◦ FreeRTOS on Nios® V/m ▪ FreeRTOS ポーティング準備 ▪ 基本機能ポーティング ▪ 割り込み機能ポーティング ◦ TOPPERS on Nios® V/m ▪ TOPPERS ポーティング準備 ▪ 基本機能 & 割り込み機能ポーティング ◦ まとめ 9
  7. Copyright © Fixstars Group Nios® V/m + RTOS の意義 

    背景 ◦ CPU 内蔵 FPGA ◦ FPGA のソフトウェア制御 10 SOC FPGA + Linux ソフトコアCPU + RTOS ソフトコアCPU + BareMetal ハードウェア ステートマシン ▪ 部品点数削減 ボード面積縮小 ▪ バス性能向上 ソフト&ハード協調動作 CPU (マイコン) FPGA I/O (SPI,I2C etc.) FPGA CPU 高機能 高柔軟性 高リアルタイム性能 シンプル ▪ RTOS ( ≒ 組み込み OS) を使うことで、組み込みシステムの制約の中で 用途に応じて高い機能を実現できる
  8. Copyright © Fixstars Group Nios® V/m Nios® V/m + RTOS

    の意義  FPGA + RTOS 現状&理想  Nios® V/m + RTOS 11 ▪ 現状 ・採用例は一般的ではない ・ベンダサポート ライセンスの懸念 ・ソフトエンジニアと ハードエンジニアの狭間 ▪ 理想 ・技術の選択肢を広げて 最適構成を追求 ・低コスト&高機能 ・SOC FPGA 以外でも ネットワーク、 ファイルシステム etc. を利用 組み込みにもオープンソース化の流れ ・RISC-V ・RTOS ⇒ 情報入手が容易に ⇒ 理想状態に近づける インテル® FPGA サポート ・Platform Designer 対応 ・HAL, ドライバ RISC-V エコシステム ・ツール群 ・RTOSポーティング 情報 ▪ RTOS ポーティングが従来より容易に
  9. Copyright © Fixstars Group 実行環境  使用ボード ◦ インテル® Agilex™

    Fシリーズ FPGA 開発キット ◦ AGFB014R24A2E2VR0 ※ ES デバイス  ツール & OS ◦ 合成ツール :インテル® Quartus® Prime Pro ver 22.2 ◦ 合成マシン OS :CentOS 7.9 12 参照URL: https://www.intel.com/content/www/us/en/products/details/fpga/development-kits/agilex/f-series.html
  10. Copyright © Fixstars Group 実行環境  リモート開発環境 ◦ リモート JTAG

    接続で シームレスにボードに アクセス可能 ◦ ssh ポート転送で ファイヤーウォール環境 でも接続可能 13 JTAG サーバー起動 OpenOCD 起動 合成&ビルド デバッグ [クライアントPC側] [開発サーバー側] $ ssh –fN <user name>@<server IP> –R 11309:localhost:1309 ・クライアントPCからの ssh ポート転送コマンドを WSLで実行 ・JTAGサーバーは、port 番号 1309 を使用 ・リモート側の任意の port 番号(例えば11309) から転送する ・サーバー名 localhost:11309 で接続可能になる ・Programmer起動 ・JTAGサーバー有効 ・パスワード設定 ・Programmer 起動 ・“localhost:11309” で接続可能
  11. Copyright © Fixstars Group  ハードウェアブロック図 使用した Nios® V/m システム

    14 ▪ Nios® V/m Tutorial デザインから 追加&変更 ・ RAM を 512KB に増加 ・ PLL を追加 300MHz にクロックアップ ・ LED 点灯用に PIO を追加
  12. Copyright © Fixstars Group  Platform Designer ノウハウ ◦ バスインターコネクトで

    タイミングエラー発生 ⇒ Enable all pipeline stage を True に変更し、300MHz ミート  BSP 生成設定変更 ◦ JTAG UART ドライバを Small ドライバに変更 ▪ デフォルトは、割り込みベースの Fast ドライバ ▪ Small ドライバに変更し、printf でシンプルな 文字出力動作をさせる (RTOS のデバッグを容易にするため) 使用した Nios® V/m システム 15 niosv-bsp Command Line Option: --cmd="set_setting altera_avalon_jtag_uart_driver.enable_small_driver 1" ⇒ Fmax 改善
  13. Copyright © Fixstars Group 講演Agenda  Nios® V/m でオープンソース RTOS

    を動かす ◦ 背景 & 実行環境 ▪ Nios® V/m + RTOS の意義 ▪ 実行環境 ▪ 使用した Nios® V/m システム ◦ FreeRTOS on Nios® V/m ▪ FreeRTOS ポーティング準備 ▪ 基本機能ポーティング ▪ 割り込み機能ポーティング ◦ TOPPERS on Nios® V/m ▪ TOPPERS ポーティング準備 ▪ 基本機能 & 割り込み機能ポーティング ◦ まとめ 16
  14. Copyright © Fixstars Group FreeRTOS on Nios® V/m : ポーティング準備

    17  FreeRTOS ◦ 概要 ▪ オープンソース RTOS の一つ:2003 年公開、2017 年 Amazon 社が買収 ▪ AWS IOT サービスへの接続環境として提供 ⇒ IOT デバイスが開発容易に ▪ MIT ライセンス ▪ 各種 MCU へ移植されている(ARM, RISC-V, Nios® II, etc.) RISC-V porting情報 https://www.freertos.org/Using-FreeRTOS-on-RISC-V.html ◦ GitHub リポジトリ ▪ FreeRTOS https://github.com/FreeRTOS/FreeRTOS ←使用リポジトリ ▪ Amazon FreeRTOS https://github.com/aws/amazon-freertos • ともに FreeRTOS_kernel を submodule として参照 その他、付属ライブラリ、デモデータの有無の違いがある
  15. Copyright © Fixstars Group FreeRTOS on Nios® V/m : ポーティング準備

    18  Nios® V/m 利用時ソフトウェアスタック ◦ カーネルは BSP (HAL, driver) を介して ハードウェアを制御する ◦ スタートアップシーケンス、 割り込みサービスルーチンも HAL を 利用する  FreeRTOS 環境取得 ◦ 使用ブランチ: FreeRTOS 2021.12.00 ※tag付けされている最新 ※ 該当ブランチにカーネルソースコード用の CMakeLists.txt がないため、main から取得 $ git clone --recursive https://github.com/FreeRTOS/FreeRTOS.git $ cd FreeRTOS $ git checkout 202112.00 $ git submodule update $ cd FreeRTOS $ git checkout main -- CMakeLists.txt $ git checkout main -- portable/CMakeLists.txt
  16. Copyright © Fixstars Group FreeRTOS on Nios® V/m : ポーティング準備

    19  FreeRTOS データ構成 FreeRTOS/ `-- FreeRTOS/ |-- Test/ `-- Source/ |-- croutine.c |-- event_groups.c |-- list.c |-- queue.c |-- stream_buffer.c |-- tasks.c |-- timers.c |-- include/ | |-- atomic.h | |-- croutine.h | |-- deprecated_definitions.h | |-- event_groups.h | |-- FreeRTOS.h | |-- list.h | |-- message_buffer.h | |-- mpu_prototypes.h | |-- mpu_wrappers.h | |-- portable.h | |-- projdefs.h | |-- queue.h | |-- semphr.h | |-- stack_macros.h | |-- StackMacros.h | |-- stream_buffer.h | |-- task.h | `-- timers.h `-- portable/ `-- GCC/ `-- RISC-V/ |-- portASM.S |-- port.c |-- portmacro.h `-- chip_specific_extensions/ `-- RISCV_MTIME_CLINT_no_extensions/ `-- freertos_risc_v_chip_specific_extensions.h FreeRTOS/ |-- FreeRTOS/ | |-- Test/ | |-- Source/ | `-- Demo/ | |-- Common/ | | |-- include/ | | | `-- serial.h | | |-- Minimal/ | | `-- Ethernet/ | +-- CORTEX_A9_Cyclone_V_SoC_DK/ | | `-- printf-stdarg.c | `-- RISC-V-Qemu-sifive_e-Eclipse-GCC/ | |-- main.c | |-- blinky_demo/ | | `-- main_blinky.c | `-- FreeRTOSConfig.h `-- FreeRTOS-Plus/ |-- Source/ | `-- FreeRTOS-Plus-CLI/ | |-- FreeRTOS_CLI.c | `-- FreeRTOS_CLI.h `-- Demo/ `-- Common/ `-- FreeRTOS_Plus_CLI_Demos/ カーネルソース .c … 7ファイル .h … 18ファイル RISC-V, GCC用 ソースコード カーネルソースディレクトリ (FreeRTOS_kernel を submodule で指定) ← ポーティングコードディレクトリ デモディレクトリ ← FreeRTOS-Plus 追加ライブラリ Command Line Interface ライブラリソースコード RISC-V基本機能 デモコード ポーティング、カーネル設定
  17. Copyright © Fixstars Group FreeRTOS on Nios® V/m : 基本機能ポーティング

    20  基本機能デモ ◦ 2プロセスを並列動作し、プロセス間でメッセージを送受信し表示するデモ ◦ 本デモのポーティングを通して、FreeRTOS 動作に最低限必要となる項目を示す ◦ ポーティング & デモアプリビルド手順 1. 基本機能デモアプリ取得 2. デモコード修正 3. CMake 環境の修正&ビルド Queue Send Task Receive Task
  18. Copyright © Fixstars Group FreeRTOS on Nios® V/m : 基本機能ポーティング

    21 1. 基本機能デモアプリ取得 ◦ FreeRTOS/Demo/RISC-V-Qemu-sifive_e-Eclipse-GCC/ main.c, main_blinky.c, FreeRTOSConfig.h を基本機能デモアプリとして使用する ◦ FreeRTOS/Demo/CORTEX_A9_Cyclone_V_SoC_DK/ printf-stdarg.c を軽量版 sprintf 実装として利用する ◦ 上記4ファイルを Quaruts プロジェクトにコピーする <quartus_project>/software/app_freertos_demo/
  19. Copyright © Fixstars Group FreeRTOS on Nios® V/m : 基本機能ポーティング

    22 2-1. FreeRTOSConfig.h 修正 ◦ タイマーのレジスタアドレスを変更 ▪ アドレスは software/bsp/ 以下 system.h HAL/inc/intel_niosv_m.h を参照する ◦ クロック周波数を 300MHz に変更 2-2. main.c 修正 ◦ シリアル出力を alt_printf で実装 ◦ LED 点滅させる制御を追加 ※ LED 点滅コードは Receive Task (main_blinky.c 内) に追加する [ FreeRTOSConfig.h ] [ main.c ]
  20. Copyright © Fixstars Group FreeRTOS on Nios® V/m : 基本機能ポーティング

    23 3. CMakeLists.txt 修正 ◦ niosv-app コマンドで生成された CMakeLists.txt を修正 ◦ カーネルソースの CMakeLists.txt をサブディレクトリとして追加 ◦ 割り込みハンドラに、 alt_irq_handler を指定 ◦ サブディレクトリビルド結果の freertos_kernel, freertos_kernel_port を リンクするように修正 [ CMakeLists.txt ]
  21. Copyright © Fixstars Group FreeRTOS on Nios® V/m : 基本機能ポーティング

    24  基本機能デモ結果 ◦ 左側ターミナルで リセット実行 ◦ 右側ターミナルに 2プロセス間通信 した結果が出力 される ◦ 受信タイミングで LED を点滅
  22. Copyright © Fixstars Group FreeRTOS on Nios® V/m : 割り込み機能ポーティング

    25  RISC-V 割り込み仕様 ◦ CLINT … Core Local Interrupt タイマー割り込み、ソフトウェア割り込みを受け持つ ◦ PLIC … Platform-Level Interrupt Controller 複数のペリフェラルの割り込みを集約して、 Machine external interrupt (mcause = 11) に出力  Nios® V/m ペリフェラル割り込み ◦ PLIC は実装されていない ◦ 16 割り込み入力可能 mcause 16 ~ 31 にアサインされる ⇒ PLIC 実装が前提となっている コードを要修正 引用 : The RISC-V Instruction Set Manual Volume II: Privileged Architecture Privileged Architecture Version 1.10 PLIC からの割り込み (SiFive社 FE310 など) Nios® V/m ペリフェラル 割り込み RISC-V Core PLIC mcause = 11 Nios® V/m mcause = 16 ~ 31 ペリフェラル 割り込み
  23. Copyright © Fixstars Group FreeRTOS on Nios® V/m : 割り込み機能ポーティング

    26  CLI(Command Line Interface)デモ ◦ FreeRTOS-Plus-CLI ライブラリを用いて、コマンド入力、実行を行うデモ JTAG-UART シリアル入出力経由でコンソール入出力を行う ◦ 割り込みベースのシリアル入出力の動作を通して、割り込み動作に必要な内容を示す ◦ ポーティング & デモアプリビルド手順 1. CLI デモアプリ取得 2. デモコード修正 3. CMake 環境の修正&ビルド ※基本機能デモのポーティングと同じ JTAG- UART CLI Task
  24. Copyright © Fixstars Group FreeRTOS on Nios® V/m : 割り込み機能ポーティング

    27 1. CLI デモアプリ取得 ◦ 基本機能デモに加えて、以下の CLI サンプルコードを使用する ▪ FreeRTOS-Plus-CLI … CLI ライブラリ FreeRTOS/FreeRTOS-Plus/Source/FreeRTOS-Plus-CLI/FreeRTOS_CLI.h FreeRTOS/FreeRTOS-Plus/Source/FreeRTOS-Plus-CLI/FreeRTOS_CLI.c ▪ CLI デモ FreeRTOS/FreeRTOS-Plus/Demo/Common/FreeRTOS_Plus_CLI_Demos/Sample-CLI-commands.c FreeRTOS/FreeRTOS-Plus/Demo/Common/FreeRTOS_Plus_CLI_Demos/UARTCommandConsole.c ▪ シリアル入出力ドライバ FreeRTOS/FreeRTOS/Demo/Common/include/serial.h FreeRTOS/FreeRTOS/Demo/NiosII_CycloneIII_DBC3C40_GCC/RTOSDemo/serial.c ※ Nios® II の UART 用ファイルを参考にする ◦ 上記ファイルを Quaruts プロジェクトにコピーする <quartus_project>/software/app_freertos_cli/
  25. Copyright © Fixstars Group FreeRTOS on Nios® V/m : 割り込み機能ポーティング

    28 2-1. FreeRTOSConfig.h 修正 ◦ 基本機能デモでの修正 & CLI デモ用のパラメータ追加 2-2. main_blinky.c 修正 ◦ CLI デモタスクを追加 [ FreeRTOSConfig.h ] [ main_blinky.c ]
  26. Copyright © Fixstars Group FreeRTOS on Nios® V/m : 割り込み機能ポーティング

    29 2-3. serial.c 修正 ◦ HAL 割り込み登録はそのまま利用 ◦ 送信 Queue をブロッキング(空くまで待機)に変更 ◦ UART と JTAG_UART のレジスタを合わせ込んで変更 参照URL: https://www.intel.com/content/www/us/en/docs/programmable/683130/22-2/register-map-38176.html https://www.intel.com/content/www/us/en/docs/programmable/683130/22-2/register-map-17551.html ▪ UART ▪ JTAG_UART 割り込みイネーブル 割り込み保持 データ [ serial.c ]
  27. Copyright © Fixstars Group FreeRTOS on Nios® V/m : 割り込み機能ポーティング

    30 2-4. poatASM.S 修正 ◦ FreeRTOS/FreeRTOS/Source/portable/GCC/RISC-V/portASM.S ◦ Nios® V/m 仕様のペリフェラル割り込みが、未対応割り込みとなって停止 未対応割り込みへのジャンプをコメントアウトし、 次の portasmHANDLE_INTERRUPT (= alt_irq_handler 割り込みハンドラ) へ のジャンプに進ませる [ porgASM.S ]
  28. Copyright © Fixstars Group FreeRTOS on Nios® V/m : 割り込み機能ポーティング

    31  CLI デモ結果 ◦ 基本機能デモ (LED 点滅) + CLI タスク ◦ “help” コマンド情報 出力 ◦ “task-stats” タスク状況表示
  29. Copyright © Fixstars Group 講演Agenda  Nios® V/m でオープンソース RTOS

    を動かす ◦ 背景 & 実行環境 ▪ Nios® V/m + RTOS の意義 ▪ 実行環境 ▪ 使用した Nios® V/m システム ◦ FreeRTOS on Nios® V/m ▪ FreeRTOS ポーティング準備 ▪ 基本機能ポーティング ▪ 割り込み機能ポーティング ◦ TOPPERS on Nios® V/m ▪ TOPPERS ポーティング準備 ▪ 基本機能 & 割り込み機能ポーティング ◦ まとめ 32
  30. Copyright © Fixstars Group TOPPERS on Nios® V/m : ポーティング準備

    33  TOPPERS ◦ 概要 ▪ ITRON 仕様のオープンソース実装 ▪ 国内の採用実績が多い ▪ TOPPERSライセンス(機器に組み込んで利用する場合にプロジェクトに報告する) ▪ RISC-V へのポーティングも行われている ◦ 使用ソースコード & ダウンロードリンク ▪ asp-1.9.3.tar.gz … TOPPERS/ASPカーネル ターゲット非依存部パッケージ https://www.toppers.jp/download.cgi/asp-1.9.3.tar.gz ▪ asp_arch_riscv_gcc-1.9.4.tar.gz … RISC-V HI-FIVE1/K210アーキテクチャ・GCC依存部パッケージ https://www.toppers.jp/download.cgi/asp_arch_riscv_gcc-1.9.4.tar.gz
  31. Copyright © Fixstars Group TOPPERS on Nios® V/m : ポーティング準備

    34  Nios® V/m 利用時ソフトウェアスタック ◦ BSP (HAL, driver) は使用しない ◦ スタートアップシーケンス、 割り込みサービスルーチンなど TOPPERS が 提供するものを利用する  環境取得 ◦ .tar.gz をダウンロードして展開、asp ディレクトリに集約する ◦ コンフィギュレータ:Release 1.9.6(32bit Linux用バイナリ)を使用 $ wget https://www.toppers.jp/download.cgi/asp-1.9.3.tar.gz && tar zxvf asp-1.9.3.tar.gz $ wget https://www.toppers.jp/download.cgi/asp_arch_riscv_gcc-1.9.4.tar.gz && tar zxvf asp_arch_riscv_gcc-1.9.4.tar.gz $ cp –r asp_arch_riscv_gcc-1.9.4/asp/* asp $ wget https://www.toppers.jp/download.cgi/cfg-linux-static-1_9_6.gz $ gzip –d cfg-linux-static-1_9_6.gz && chmod +x cfg-linux-static-1_9_6 $ mkdir –p asp/cfg/cfg $ cp cfg-linux-static-1_9_6 asp/cfg/cfg/cfg
  32. Copyright © Fixstars Group TOPPERS on Nios® V/m : ポーティング準備

    35  TOPPERS データ構成 ◦ asp/arch/ … アーキテクチャ依存のディレクトリを含む ▪ 例)asp/arch/riscv_gcc/ … RISC-V & GCC 用 ◦ asp/target/ … ターゲットマイコン、ボードごとのディレクトリを含む ▪ 例)asp/target/hifive1_gcc/ …HiFive1 ボード用  TOPPERS アプリケーションビルド手順 ◦ asp/doc/user.txt 参照 ◦ <Target Name> で指定したターゲット用に、デフォルトで sample1 アプリケーション がビルドされる $ cd asp $ mkdir OBJ $ cd OBJ $ perl ../configure -T <Target Name> $ make depend $ make
  33. Copyright © Fixstars Group TOPPERS on Nios® V/m : 基本&割り込み機能ポーティング

    36  ポーティング方針 ◦ Nios® V/m 開発ツールが生成する BSP, CMake 環境は用いず、TOPPERS で提供される ビルド環境を利用する ◦ デフォルトでビルドされるアプリケーションを動作させることで、ポーティングを進める ▪ デフォルトアプリケーション(sample1) … 複数のタスクが並列に起動し、タスク状態と状態表示をコンソール入力で切り替える ◦ 修正手順 1. Nios® V/m 用コード環境作成 2. タイマーのレジスタアドレス変更、クロック周波数変更 3. PLIC のペリフェラル割り込みハンドラのコードの修正 4. シリアル入出力の JTAG-UART 対応
  34. Copyright © Fixstars Group TOPPERS on Nios® V/m : 基本&割り込み機能ポーティング

    37 1. Nios® V/m 用コード環境作成 ◦ arch/riscv_gcc から arch/niosv_gcc をコピーして作成 ◦ target/hifive1_gcc から target/niosv_seminor_gcc をコピーして作成 riscv_gcc の参照を niosv_gcc に変更 ◦ target/niosv_seminor_gcc/Makefile.target を修正 名前変更 mach を rv32ia に設定 クロスコンパイラ ツール名に合わせて変更 メモリ配置を 先頭から連続に $ cp -r arch/riscv_gcc arch/niosv_gcc $ cp -r target/hifive1_gcc target/niosv_seminor_gcc $ cd target/niosv_seminor_gcc && sed -i "s/riscv_gcc/niosv_gcc/g" * $ mv sifive-fe310.h niosv_seminor.h && sed -i "s/sifive-fe310/niosv_seminor/g"
  35. Copyright © Fixstars Group TOPPERS on Nios® V/m : 基本&割り込み機能ポーティング

    38 2. タイマーのレジスタアドレス変更、クロック周波数変更 ◦ ターゲット依存のパラメータは target/niosv_seminor_gcc/niosv_seminor.h (元ファイルは sifive-fe310.h) にまとめられている ◦ タイマーレジスタアドレス、クロック周波数を修正 [ niosv_seminor.h ]
  36. Copyright © Fixstars Group TOPPERS on Nios® V/m : 基本&割り込み機能ポーティング

    39 3. PLIC のペリフェラル割り込みハンドラのコードの修正 ◦ target/niosv_seminor_gcc/target_config.c machine_interrupt が、PLIC 対応のため JTAG_UART 用に変更 ◦ 割り込みベクタへの登録コードは コンフィギュレータが生成し、 RISC-V用コードをそのまま流用する ◦ arch/niosv_gcc/prc_config.c, prc_config.h 割り込み数の上限を 32 から 48 に増加 ◦ arch/niosv_gcc/prc_interrupt.h KERNEL_MIE に JTAG_UART 割り込み番号を追加 [ target_config.c ] [ prc_interrupt.h ]
  37. Copyright © Fixstars Group TOPPERS on Nios® V/m : 基本&割り込み機能ポーティング

    40 4. シリアル入出力の JTAG-UART 対応 ◦ target/niosv_seminor_gcc/target_serial.c を修正 ▪ 元ファイルは、 SiFive社 FE310 UART 用のコード ▪ レジスタマップを、SiFive社 FE310 UART と JTAG-UART で合わせ込みをする。
  38. Copyright © Fixstars Group TOPPERS on Nios® V/m : 基本&割り込み機能ポーティング

    41  サンプルアプリケーション実行結果 ◦ 左側ターミナルで リセット実行 ◦ 右側ターミナルにタスク の状態が出力される ◦ 3つのタスクが並列起動 ◦ コンソール入力に応じて 表示されるタスクが変わる
  39. Copyright © Fixstars Group 講演Agenda  Nios® V/m でオープンソース RTOS

    を動かす ◦ 背景 & 実行環境 ▪ Nios® V/m + RTOS の意義 ▪ 実行環境 ▪ 使用した Nios® V/m システム ◦ FreeRTOS on Nios® V/m ▪ FreeRTOS ポーティング準備 ▪ 基本機能ポーティング ▪ 割り込み機能ポーティング ◦ TOPPERS on Nios® V/m ▪ TOPPERS ポーティング準備 ▪ 基本機能 & 割り込み機能ポーティング ◦ まとめ 42
  40. Copyright © Fixstars Group まとめ 43  Nios® V/m 上に、FreeRTOS

    と TOPPERS の2種類の オープンソース RTOS をポーティングし、デモ動作を確認した  RISC-V 用のコードとの違い、調整必要な点は以下である ◦ タイマーのレジスタアドレス、クロック周波数設定 ◦ PLIC を想定した割り込みハンドラの動作の変更 ◦ シリアル入出力ドライバのレジスタマップの合わせ込み  RISC-V 用コードを流用しながら上記点を考慮することで、比較的容易に Nios® V/m 上でも オープンソース RTOS を動作させることができた。