1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Code を使ってSystemVerilogシミュレータ を開発してみた 1

Last updated at Posted at 2025-06-21

はじめに

筆者は、自分自身の勉強目的で、Claude Code を使って、mrun(仮) というSystemVerilogシミュレータを約一週間前から開発中です。
いずれ公開するつもりですが、現時点の開発状況をVerilatorと比較する形で紹介させていただきます。なお、Verilatorについて詳しくは前回の記事を参照ください。


概要

mrun(仮)とVerilatorは、どちらもSystemVerilogシミュレータですが、設計思想と対象用途が大きく異なります。

  • Verilator : 合成可能なRTLの高速機能検証に特化。C++にトランスパイルすることで高速実行を実現。
  • mrun(仮) : SystemVerilog言語仕様の完全な実装を目指す。検証環境構築や言語学習に適したインタープリタ型シミュレータ。そのほぼ 100% のコードを Claude Code を使って作成中。

詳細機能比較表

基本アーキテクチャ

機能 mrun(仮) Verilator v5.036 備考
実行方式 インタープリタ(バイトコード) トランスパイル(C++変換) Verilatorは高速だが再コンパイルが必要
シミュレーション方式 イベント駆動 サイクルベース mrun(仮)は詳細なタイミング制御が可能
4値論理サポート ◯ 完全対応 △ 2値主体 mrun(仮)はX/Z/強弱を完全サポート
コンパイル時間 ◯ 高速 △ 大規模設計で遅い mrun(仮)は即座に実行開始可能
実行速度 △ 中速 ◯ 超高速 Verilatorは商用ツールに匹敵する速度

SystemVerilog言語機能

データ型・構造

機能 mrun(仮) Verilator mrunの実装状況
logic, bit 4値/2値完全対応
enum 完全実装
struct (packed) 完全実装
struct (unpacked) △ 制限あり 完全実装
union 完全実装
固定長配列 多次元配列も対応
動的配列 △ 基本のみ push/pop等メソッド実装済
連想配列 △ delete()なし 全メソッド実装済
キュー push_front/back等実装済
string 完全実装

タイミング制御

機能 mrun(仮) Verilator mrun(仮)の実装状況
#delay △ --timingのみ タイムホイール実装済
@(posedge/negedge) △ クロックのみ推奨 エッジ検出完全実装
@(a or b) △ 制限あり EventExpression実装済
wait(condition) △ --timingのみ 条件待機・再評価実装済
fork/join △ 安定性向上中 3種類のjoin完全実装
fork/join_any 実装済
fork/join_none 実装済
イベント (->, @) △ 制限あり named event実装予定
disable 実装済

階層・接続性

機能 mrun(仮) Verilator mrun(仮)の実装状況
モジュール階層 深い階層も対応
interface △ 基本のみ 完全実装
modport 完全実装
virtual interface △ 実装中 将来実装予定
bind 部分実装
generate for/if generate対応

オブジェクト指向

機能 mrun(仮) Verilator mrun(仮)の実装状況
クラス基本 constructor等実装済
継承 基本実装済
virtual メソッド △ 計画中 将来実装予定
$cast △ 計画中 将来実装予定
パラメータ化クラス 部分実装

検証機能

機能 mrun(仮) Verilator mrun(仮)の実装状況
即時アサーション assert/assume/cover実装済
並列アサーション(SVA) △ 基本のみ シーケンス未実装
covergroup △ 計画中 将来実装予定
coverpoint △ 計画中 将来実装予定
ランダム化 (randomize) △ 制限あり 基本実装済
制約 (constraint) △ solve...before 部分実装

システムタスク

機能 mrun(仮) Verilator mrun(仮)の実装状況
$display/$write フォーマット対応済
$finish/$stop 完全実装
$time/$realtime 完全実装
$random 完全実装
$dumpfile/$dumpvars VCD出力実装中
$readmemh/$readmemb 実装予定
$monitor 実装予定

外部連携・拡張性

機能 mrun(仮) Verilator 備考
DPI-C △ 計画中 ◯ 完全対応 Verilatorの最強機能の一つ
VPI △ 計画中 △ 読み出し中心 mrun(仮)は将来部分的な実装予定
独自拡張API 両者とも豊富
デバッグ機能 ◯ 充実 mrunはインタラクティブデバッグ可能

開発・運用面

項目 mrun(仮) Verilator 備考
必要なC++バージョン C++23 C++14 (GCC13+) mrun(仮)は最新C++機能を積極活用
使用C++機能 std::expected, ranges, format等 C++14標準機能のみ mrun(仮)はモダンC++で開発効率向上
コンパイラ要件 GCC 14.2+/Clang 18+ GCC 13+/Clang 14+ mrun(仮)はより新しいコンパイラ必須
ビルドシステム CMake autoconf/CMake 両者ともCMake対応
プラットフォーム Linux/WSL Linux/Mac/Win Verilatorの方が幅広い
ライセンス オープンソース予定 LGPL v3 mrun(仮)はライセンス未定
成熟度 開発中 成熟・安定 Verilatorは20年以上の歴史、mrun(仮)は開発開始から約1週間

使い分け指針

mrun(仮)が適している用途

  1. SystemVerilog学習・教育

    • 言語仕様の完全な理解
    • インタラクティブな実験
    • デバッグしやすい環境
  2. 検証環境の開発

    • UVM/OVMスタイルの環境構築(将来)
    • 複雑なテストベンチ
    • 高度なタイミング制御が必要な検証
  3. プロトタイピング

    • 新しいデザインの素早い検証
    • アルゴリズムの実験
    • コンパイル時間を最小化したい場合

Verilatorが適している用途

  1. 大規模SoCの検証

    • 高速シミュレーションが必須
    • 合成可能なRTLの検証
    • CI/CDパイプライン統合
  2. ソフトウェア協調検証

    • エミュレータ的な使用
    • ファームウェア開発
    • システムレベル検証
  3. 形式的等価性検証の補完

    • ゲートレベルシミュレーション代替
    • 電力解析用の高速実行
    • カバレッジ収集

まとめ

  • Verilator: 実行速度を最優先。大規模な商用プロジェクトでの実績多数
  • mrun(仮): SystemVerilog言語仕様の完全性を重視。自分自身の勉強目的

今後の展望

mrun(仮)のロードマップ

  • virtual interface実装によるUVM対応
  • DPI-C/VPIの完全実装
  • 並列シミュレーション対応

Verilatorの方向性

  • SystemVerilog対応の漸進的改善
  • 更なる高速化
  • より良いデバッグ機能
  • エコシステムの拡充
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?