はじめに
通信やメモリアクセスを考えるとき、転送そのものにかかる時間に加えて、順番待ちや中継処理、受信後の処理も気になります。
たとえば、CANの送信周期を短くすると送信待ちが増えることがあります。Gatewayの処理時間を変えると、別のバスへ届くタイミングが変わります。SRAMでは、同時に処理できる読み出しの数によって待ち時間が変わります。
こうした条件の違いを、入力データと時系列の結果で確かめるためのツールが DIR Simulator です。
この記事では、DIRでできることと使い方の全体像を紹介します。個別の設定や実験手順は別記事で扱い、このページを入口としてつなげていきます。
GitHubリポジトリでソースとサンプルを公開しています。本記事は公開版v1.1.6を基準にしています。
DIRとは
DIRは、CAN・Ethernetなどの通信や、SoC内のデータ転送、メモリ・IPCを対象とした、Rust製の離散イベント型シミュレータです。IPCは、ここではメールボックスや共有メモリを介したデータの受け渡しを指します。
離散イベント型では、「要求が発生する」「送信を開始する」「処理が完了する」といった出来事を、仮想的な時刻の上で順に処理します。構成や条件を与えると、それに応じた送信順、待ち時間、処理結果などを記録できます。
たとえば、同じ構成のまま送信周期やキュー容量だけを変え、結果の違いを比較できます。条件を一つ変えて、どの待ち時間や結果が変わったかを追う、という使い方ができます。
どんなことを試せるか
主な対象と、確認できる内容の例をまとめます。
| 対象 | 確認できることの例 |
|---|---|
| Classical CAN | 調停による送信順、送信待ち、キュー満杯時の破棄、受信フィルタや受信処理遅延 |
| CAN FD | 与えられた位相ごとのbit数を使った、データ速度と送信時間・待ち時間の比較 |
| 複数CANバス・Gateway | 別バスへの中継、処理遅延、転送先の送信待ち、受信バッファの保持 |
| Ethernet | 優先キュー、VLAN、multicast、配送期限、TSNの送信制御など |
| SoC内の通信 | AXI・AHB・共有バス・NoCの、要求の競合や転送待ち |
| メモリ・IPC | DDRのリフレッシュ、SRAMのポート数、メールボックス容量、DMAのコピー完了と通知 |
扱う粒度はモデルごとに異なります。CAN FDは外部で算定した位相ごとのbit数を使う時間評価で、SoC・メモリ系などには処理の受け渡しを抽象化したモデルを使います。結果を読むときは、そのモデルが表す範囲と前提を確認します。
通信方式の学習、小さな構成での動作確認、条件を変えた比較実験などが、使い始めやすい用途です。
結果をViewerで確かめる
DIRでは、実行結果をJSONやCSVへ保存できます。さらに、その結果を埋め込んだHTMLを生成し、ブラウザの Viewer で確認できます。
公開ガイド「初めてのCAN実行」に掲載している実際のViewer画面です。3ノードの最小CAN例を表示しています。画像と数値は同ガイドの基準版v1.1.3で取得したものです。
Viewerでは、構成図とタイムラインを見ながら、次のような内容を確認できます。
- どのノードが送信し、どのノードが受信したか
- 送信や処理がいつ始まり、いつ終わったか
- どこで待ちが発生しているか
- 選択した時刻に、要求やキューがどの状態だったか
再生や一時停止、時刻指定、前後のイベント時刻への移動ができるため、気になる場面を止めて調べられます。保存済みの結果を表示する仕組みなので、設定を変えた場合はシミュレーションを再実行して比較します。
結果を埋め込んだ単独HTMLは、表示用サーバーを起動せずに開けます。同じ記録を見ながら、送信順や待ち時間を説明する資料としても使えます。
構成・条件・実行を分ける3層モデル
DIRという名前は、Definition・Initialization・Runtime の頭文字です。
| 層 | 役割 | 主に使うもの |
|---|---|---|
| Definition(定義) | ノードやバスなどの構成、ポート、接続を定義する | NED |
| Initialization(初期化) | 実行時間やパラメータを設定し、送信内容などの入力を指定する | INIと、そこから参照するJSON |
| Runtime(実行) | モデルの振る舞いを実行し、結果を記録する | Rust製の実行エンジンと各モデル |
この分け方によって、同じ構成を使いながら条件を変えられます。たとえばCANの配線を保ったまま、ビットレート、送信周期、キュー容量を変えて比較できます。用意されたモデルとサンプルを使う場合は、入力ファイルを編集して実行できます。
構成や入力の編集には、ブラウザで操作するローカルの NED editor も用意しています。構成図を使った編集や、入力の検証・保存に利用できます。
NEDは構造記述の対応サブセットを扱い、INIはDIR独自の設定仕様です。既存のOMNeT++プロジェクトをそのまま動かす完全互換環境ではありません。
使い始めるまでの流れ
まずは、同梱の小さなCANサンプルから始めると、入力と結果の関係を追いやすくなります。
- ソースを取得し、Rustでビルドする。
-
validateで入力の構文や接続、設定値を確認する。 -
runで実行し、結果を保存する。 -
viewでViewer用HTMLを生成し、ブラウザで開く。
そのあとで、条件を一つ変え、別の出力先へ実行して比較します。たとえばビットレートだけを変えると、送信時間や次の要求の待ち時間への影響を確認できます。
動作確認環境はWSL上のUbuntu 24.04 LTS x86_64で、Rust 1.85.0を使用しています。具体的な導入・実行コマンドは、公開ガイドの「初めてのCAN実行」にまとめています。
詳しい使い方と関連記事
最初は「初めてのCAN実行」→「Viewerで結果を読む」→「CANの調停」の順に読むと、一つの実験としてつながります。「設定・用語・FAQ」は、設定や用語を確認したいときに参照してください。
Qiitaで公開した記事
| 順番 | 記事 |
|---|---|
| 01 | 初めてのCAN実行 |
| 02 | Viewerで結果を読む |
| 03 | 設定・用語・FAQ |
分野別の実験と機能リファレンス
| 分野 | 扱うテーマ |
|---|---|
| CAN・CAN FD | 調停、受信フィルタ、受信処理遅延、データ速度の比較 |
| Gateway | 処理遅延と複数CANバスへの中継 |
| Ethernet | 配送期限、優先キュー、VLAN、multicast、動的制御、TSN |
| SoC内の通信 | 共有バス、AXI、AHB、NoC |
| メモリ・IPC | SRAM、DDR、共有メモリ、メールボックス、DMA |
| 機能リファレンス | 共通基盤、画面操作、各モデル、後続拡張と仕様変更の検討 |
詳細な説明と実習入力は公開ガイドから読むことができます。Qiitaの記事は公開でき次第、上の一覧へ順に追加します。
出典:DIR SimulatorのREADME、公開ガイド、各モデルの仕様。各実習の測定バージョンは、リンク先の記事に記載しています。
Copyright (c) 2026 DIR Simulator contributors. Licensed under MIT OR Apache-2.0.
