879 Views
August 09, 24
スライド概要
この資料では、CPUエミュレータ Athrill の概要を整理しています。
• Athrillとは?
• Athrill誕生の背景
• Athrillの機能概要
• Athrillの全体アーキテクチャ
• Athrill開発リポジトリ
TOPPERS/箱庭WG活動でUnityやらAthrillやらmROSやら触ってます。 最近は仕事の関係でWeb系の技術に注力しつつ、箱庭への転用を模索しています。 2023年8月1日:合同会社箱庭ラボに移動しました
Athrill(アスリル) Overview 合同会社箱庭ラボ 森崇
はじめに • この資料では、CPUエミュレータ Athrill の概要を整理しています。 • Athrillとは? • Athrill誕生の背景 • Athrillの機能概要 • Athrillの全体アーキテクチャ • Athrill開発リポジトリ 2
Athrillとは? • CPUエミュレータです。 • CPU命令セットをソフトウェア(C言語)で再現しています。 • アーキテクチャとして、様々なCPUサポート可能な設計になっています。 • マルチコアもいけます! • 周辺デバイスも仮想デバイスとして組み込みできます。 • 割り込みコントローラ • タイマーデバイス 週末作った! • CAN通信モジュール • デバッグ機能も備わっています。 • ブレーク設定、ステップ実行、レジスタ参照、メモリ参照、 3
Unity連携もできます! コロナ禍で、オンラインでロボット教育の需要の高まりを受けて、多くの方にご利用いただきました。 動画:https://www.youtube.com/watch?v=OAg_YApjfns 4
Athrill誕生の背景 • こちらの記事を参照ください! • 今さらなぜCPUエミュレータを自作しようとおもったのか? • 「わくわく」を英訳して、「athrill(アスリル)」 5
Athrillの機能概要 • 仮想マイコン • 使い方イメージ • 機能構造 • Athrill機能をひと巡り 6
仮想マイコン • RTOSを動作させることができます。 • サポートしているCPU • V850 • RH850 • ARMv7 • サポートしているOS • TOPPERS/ASP3 • TOPPERS/ATK2 7
使い方のイメージ • CUIベースでサクサクっと! ELFファイルを引数で渡して デバッグ開始 cコマンドで CPU実行継続 ASP3起動メッセージ qコマンドで CPU実行停止 8
機能構造 • 静的構造 • CPUアーキをそのままソフト構造に落としこ み、直感的な機能配置を実現 Main Cpu #1 • 動的構造 • デバッグを容易にするため、Main処理が 各機能を順番にトリガ(起動) ITC #1 Cpu #2 ITC #2 Device Debu gger Bus Peripheral Mpu 9
Athrill機能をひと巡り • デバッグ(11) • 問題の早期検出(4) • テスト自動化(2) • もっと知りたい方は、こちらを参照ください! • Athrillの機能マニュアル 10
1 2 3 4 5 6 7 11 8 9 10 11 ◼デバッグ ブレーク設定 bコマンドで ブレーク設定 該当関数がないと, サジェストしてくれる main関数を, ブレーク設定 cコマンドで 処理再開 ブレーク停止した
12 1 2 3 4 5 6 7 8 9 ◼デバッグ pコマンドで 変数の値を参照 変数の参照/設定 sコマンドで 任意アドレスの値を設定 (まだ1バイト単位しかサポートしてないです…) pコマンドで 値が書き換わっていることを確認 10 11
13 1 ◼デバッグ 2 3 4 5 6 7 8 9 10 11 CPUコマンドで レジスタ状態表示 レジスタを表示 レジスタ値を シンボル(関数,変数)変換
14 1 2 3 4 5 6 7 8 9 ◼デバッグ 消費クロック eコマンドで 消費クロック数を表示 (起動直後) main_taskが起動するまでの 消費クロックを表示 10 11
15 1 2 3 4 5 6 7 ◼デバッグ 命令ログ vコマンドで CPU命令ログを記録(log.txt) 8 9 10 11
1 ◼デバッグ マルチコア対応 coreコマンドで デバッグ対象コアを選択 (core#0のみ対象) core#0 の命令実行時に停止 2 3 4 5 6 7 8 9 10 11 coreコマンドで coreコマンドで アクティブなコア情報を表示 アクティブなコア情報を表示
17 1 ◼デバッグ シリアル入力 Sコマンドの引数で シリアル入力できる (チャネル=0, “3>a”) asp3のサンプル実行 内容がシリアル入力に より変化したことがわ かります 2 3 4 5 6 7 8 9 10 11
18 1 2 3 4 5 6 ◼デバッグ 割り込み発生 iコマンドで 割り込みを発生させる 36番の割り込みが発 生した 7 8 9 10 11
19 1 2 3 4 5 6 7 8 ◼デバッグ 関数実行トレース ftコマンドで 関数レベルでのトレース表示 関数レベルでの トレース情報 9 10 11
20 1 2 3 4 5 6 7 8 9 ◼デバッグ データアクセス状況表示 (例:asp3カーネルで使用している変数) accessコマンドで 変数のアクセス・コンテキストを表示 intcfg_tableに対して, 読み書きが別コンテキストで 発生していることがわかる 10 11
21 1 2 3 4 5 6 7 8 ◼デバッグ プロファイル profコマンドで 各関数の呼び出し回数/ 実行クロック数(単体/総合)※を表示 ※平均値 プロファイル情報 9 10 11
22 1 ◼問題の早期検出 未初期化変数参照 未初期化変数 参照個所 未初期化変数の参照を検出 2 3 4
23 1 2 3 4 ◼問題の早期検出 ROM領域への書き込み操作 ROM領域への書き込 み操作 ROM領域への書き込みを検出
24 1 2 3 ◼問題の早期検出 スタック オーバーフロー main関数の入り口でスタッ クオーバーフローを検出 スタックを破壊する 変数 4
25 1 2 3 4 ◼問題の早期検出 変数領域外書き込み 変数領域外書き込みを検出 2バイト変数に4バイト 書き込みする
26 ◼テスト自動化 -tオプションで タイムアウト付きのバッ クグラウンド実行が可能 バックグラウンド 実行 タイムアウト時間が来た ら自動終了する 1 2
27 1 ◼テスト自動化 シナリオテストで実施したいテスト内容 をシェルスクリプトで実行する シナリオテスト athrill_remoteコマンドで 遠隔コマンド実行 -rオプションで リモート実行できる 2
Athrillの全体アーキテクチャ ・CPU実行フロー管理 ・CPU時間管理 ・デバッグ機能 : CPU命令セット <<ターゲット依存>> <<ターゲット依存>> 周辺デバイス (ローダブルモジュール) 周辺デバイス 周辺デバイス 割り込み コントローラ / デフォルト 組込みデバイス メモリ管理 MMAP ファイル Athrillデバイス API バス [凡例] ターゲット依存 コード Athrill デバイス 共通コード 28
Athrill開発リポジトリ athrill-device athrill athrill-gcc-v850e2m athrill-target-rh850f1x athrill-target-ARMv7-A [凡例] ターゲット依存 コード Athrill デバイス 共通コード 29