Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Nios®V/mでオープンソースRTOSを動かす / NiosVM seminar RTOS ...
Search
株式会社フィックスターズ
October 06, 2022
Programming
0
870
Nios®V/mでオープンソースRTOSを動かす / NiosVM seminar RTOS 20220921
2022年9月21日のインテル株式会社様主催のセミナーにて、「Nios®V/mでオープンソースRTOSを動かす」をテーマにお話しした際の当日資料です。
株式会社フィックスターズ
October 06, 2022
Tweet
Share
More Decks by 株式会社フィックスターズ
See All by 株式会社フィックスターズ
コンピュータービジョンセミナー5 / 3次元復元アルゴリズム Multi-View Stereo の CUDA高速化
fixstars
0
230
Kaggle_スコアアップセミナー_DFL-Bundesliga_Data_Shootout編/Kaggle_fixstars_corporation_20230509
fixstars
1
860
実践的!FPGA開発セミナーvol.21 / FPGA_seminar_21_fixstars_corporation_20230426
fixstars
0
1.2k
量子コンピュータ時代のプログラミングセミナー / 20230413_Amplify_seminar_shift_optimization
fixstars
0
790
実践的!FPGA開発セミナーvol.18 / FPGA_seminar_18_fixstars_corporation_20230125
fixstars
0
660
実践的!FPGA開発セミナーvol.19 / FPGA_seminar_19_fixstars_corporation_20230222
fixstars
0
590
実践的!FPGA開発セミナーvol.20 / FPGA_seminar_20_fixstars_corporation_20230329
fixstars
0
640
量子コンピュータ時代のプログラミングセミナー / 20230316_Amplify_seminar _route_planning_optimization
fixstars
0
730
量子コンピュータ時代のプログラミングセミナー / 20230216_Amplify_seminar _production_planning_optimization
fixstars
0
550
Other Decks in Programming
See All in Programming
MCP with Cloudflare Workers
yusukebe
2
230
DevFest - Serverless 101 with Google Cloud Functions
tunmise
0
120
ブラウザ単体でmp4書き出すまで - muddy-web - 2024-12
yue4u
3
490
命名をリントする
chiroruxx
1
450
【re:Growth 2024】 Aurora DSQL をちゃんと話します!
maroon1st
0
800
ある日突然あなたが管理しているサーバーにDDoSが来たらどうなるでしょう?知ってるようで何も知らなかったDDoS攻撃と対策 #phpcon.2024
akase244
2
410
rails statsで大解剖 🔍 “B/43流” のRailsの育て方を歴史とともに振り返ります
shoheimitani
2
960
短期間での新規プロダクト開発における「コスパの良い」Goのテスト戦略」 / kamakura.go
n3xem
2
180
range over funcの使い道と非同期N+1リゾルバーの夢 / about a range over func
mackee
0
110
テストケースの名前はどうつけるべきか?
orgachem
PRO
0
160
EC2からECSへ 念願のコンテナ移行と巨大レガシーPHPアプリケーションの再構築
sumiyae
2
430
KubeCon + CloudNativeCon NA 2024 Overviewat Kubernetes Meetup Tokyo #68 / amsy810_k8sjp68
masayaaoyama
0
260
Featured
See All Featured
Six Lessons from altMBA
skipperchong
27
3.5k
Building Your Own Lightsaber
phodgson
103
6.1k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
18k
Automating Front-end Workflow
addyosmani
1366
200k
Designing for humans not robots
tammielis
250
25k
Documentation Writing (for coders)
carmenintech
67
4.5k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Java REST API Framework Comparison - PWX 2021
mraible
28
8.3k
Agile that works and the tools we love
rasmusluckow
328
21k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Optimizing for Happiness
mojombo
376
70k
Thoughts on Productivity
jonyablonski
68
4.4k
Transcript
Copyright © Fixstars Group Nios® V/m でオープンソース RTOS を動かす 株式会社フィックスターズ
ソリューション第四事業部 シニアエンジニア 西田 竜之
Copyright © Fixstars Group 本日のAgenda はじめに ◦ 自己紹介 ◦
フィックスターズのご紹介 Nios® V/m でオープンソース RTOS を動かす ◦ 背景 & 実行環境 ◦ FreeRTOS on Nios® V/m ◦ TOPPERS on Nios® V/m ◦ まとめ 2
Copyright © Fixstars Group はじめに
Copyright © Fixstars Group 自己紹介 西田 竜之(ニシダ リュウジ) ソリューション第四事業部/シニアエンジニア
FPGAを用いたシステム開発に従事 ハードウェア開発をメインに担当 略歴 ◦ 半導体ベンダ ▪ サーバー向けASIC開発 ◦ 映像事務機メーカー ▪ 高画質エンジンLSI 映像機器向けFPGA開発 ◦ フィックスターズ ▪ FPGAを用いた高速取引金融システム ▪ OpenCLによるアプリの高速化 4
Copyright © Fixstars Group フィックスターズの強み コンピュータの性能を最大限に引き出す、ソフトウェア高速化のエキスパート集団 ハードウェアの知見 アルゴリズム実装力 各産業・研究分野の知見 5
目的の製品に最適なハードウェアを見抜き、 その性能をフル活用するソフトウェアを開 発します。 ハードウェアの特徴と製品要求仕様に合わ せて、アルゴリズムを改良して高速化を実 現します。 開発したい製品に使える技術を見抜き、実 際に動作する実装までトータルにサポート します。
Copyright © Fixstars Group サービス領域 様々な領域でソフトウェア高速化サービスを提供しています。大量データの高速処理は、 お客様の製品競争力の源泉となっています。 6 組込み高速化 画像処理・アルゴリズム
開発 分散並列システム開発 GPU向け高速化 FPGAを活用した システム開発 量子コンピューティング AI・深層学習 自動車向け ソフトウェア開発 フラッシュメモリ向けフ ァームウェア開発
Copyright © Fixstars Group FPGAシステム開発 システム全体の高速化を考えることを前提とした トータル開発サービスを提供しています。 お客様の課題 フィックスターズの提供する価値 FPGAのタスクが複雑化していて開発が難し
い ソフトとFPGAをもっとうまく連携させたい FPGAのハードウェアリソースを使い切って システムの性能を高めたい 開発期間を短縮したい 高密度な実装でFPGAを限界まで使い切る デバイス性能を限界まで引き出すRTLレベルのチューニング 短期間でのFPGA開発をサポート 様々な知見を持ち寄ることでFPGA開発の期間を短縮 イノベーション実現に向けた先端技術の適用 日々進化する最新技術を活用 高速・高性能なシステムを実現 最適なハードウェア構築をご提案
Copyright © Fixstars Group Nios® V/m でオープンソース RTOSを動かす
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
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) を使うことで、組み込みシステムの制約の中で 用途に応じて高い機能を実現できる
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 ポーティングが従来より容易に
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
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” で接続可能
Copyright © Fixstars Group ハードウェアブロック図 使用した Nios® V/m システム
14 ▪ Nios® V/m Tutorial デザインから 追加&変更 ・ RAM を 512KB に増加 ・ PLL を追加 300MHz にクロックアップ ・ LED 点灯用に PIO を追加
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 改善
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
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 として参照 その他、付属ライブラリ、デモデータの有無の違いがある
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
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基本機能 デモコード ポーティング、カーネル設定
Copyright © Fixstars Group FreeRTOS on Nios® V/m : 基本機能ポーティング
20 基本機能デモ ◦ 2プロセスを並列動作し、プロセス間でメッセージを送受信し表示するデモ ◦ 本デモのポーティングを通して、FreeRTOS 動作に最低限必要となる項目を示す ◦ ポーティング & デモアプリビルド手順 1. 基本機能デモアプリ取得 2. デモコード修正 3. CMake 環境の修正&ビルド Queue Send Task Receive Task
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/
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 ]
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 ]
Copyright © Fixstars Group FreeRTOS on Nios® V/m : 基本機能ポーティング
24 基本機能デモ結果 ◦ 左側ターミナルで リセット実行 ◦ 右側ターミナルに 2プロセス間通信 した結果が出力 される ◦ 受信タイミングで LED を点滅
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 ペリフェラル 割り込み
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
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/
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 ]
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 ]
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 ]
Copyright © Fixstars Group FreeRTOS on Nios® V/m : 割り込み機能ポーティング
31 CLI デモ結果 ◦ 基本機能デモ (LED 点滅) + CLI タスク ◦ “help” コマンド情報 出力 ◦ “task-stats” タスク状況表示
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
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
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
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
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 対応
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"
Copyright © Fixstars Group TOPPERS on Nios® V/m : 基本&割り込み機能ポーティング
38 2. タイマーのレジスタアドレス変更、クロック周波数変更 ◦ ターゲット依存のパラメータは target/niosv_seminor_gcc/niosv_seminor.h (元ファイルは sifive-fe310.h) にまとめられている ◦ タイマーレジスタアドレス、クロック周波数を修正 [ niosv_seminor.h ]
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 ]
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 で合わせ込みをする。
Copyright © Fixstars Group TOPPERS on Nios® V/m : 基本&割り込み機能ポーティング
41 サンプルアプリケーション実行結果 ◦ 左側ターミナルで リセット実行 ◦ 右側ターミナルにタスク の状態が出力される ◦ 3つのタスクが並列起動 ◦ コンソール入力に応じて 表示されるタスクが変わる
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
Copyright © Fixstars Group まとめ 43 Nios® V/m 上に、FreeRTOS
と TOPPERS の2種類の オープンソース RTOS をポーティングし、デモ動作を確認した RISC-V 用のコードとの違い、調整必要な点は以下である ◦ タイマーのレジスタアドレス、クロック周波数設定 ◦ PLIC を想定した割り込みハンドラの動作の変更 ◦ シリアル入出力ドライバのレジスタマップの合わせ込み RISC-V 用コードを流用しながら上記点を考慮することで、比較的容易に Nios® V/m 上でも オープンソース RTOS を動作させることができた。