connect module

アナログ設計

この記事で学べること

  • connect module の役割と定義
  • nettype と connect module の関係
  • 実務での利用シーン(インタフェース抽象化、混在設計、チェック挿入など)
  • 誤解しやすいポイントと注意点
  • 図解による構造理解
  • 関連用語の整理

概要(全体像)

connect module は SystemVerilog の nettype と組み合わせて使用される仕組みで、
信号接続時の振る舞い(resolution関数・変換処理・チェック)をユーザが定義できる 拡張機能です。

従来の wiretri のようなBuilt-in resolutionルールでは表現できない「複数ドライバの合成」「アナログ値の変換」「接続時のチェック」などをモジュールとして定義し、接続時に自動適用 できる点が特徴です。


なぜ重要なのか(背景・目的)

背景

  • Mixed-signal、パワーモデル、抽象化モデルなど、単純な 0/1/High-Z では表現できない信号 が増加
  • UVM や高位検証では、接続時に自動でチェックや変換を挿入したい という要求がある

connect module の目的

  • 信号の型(nettype)に応じた接続ルールを定義する
  • 複数ドライバのresolutionをユーザが制御する
  • 接続時に自動で変換・チェックを挿入する
  • 抽象化レベルの異なるモデル間の接続を安全に行う

基本概念の整理

nettype(ネットタイプ)

定義
SystemVerilog でユーザ定義のネット型を作る仕組み。
データ型(struct など)とresolution関数(または connect module)を紐づける。

typedef struct {
  logic valid;
  logic [7:0] data;
} bus_t;

nettype bus_t bus_net with bus_resolve;

実務での意味

  • プロトコルを「型」として扱える
  • 接続ミスをコンパイル時に検出できる
  • Resolutionルールを統一できる

connect module

定義
nettype に紐づく「接続時の振る舞い」をモジュールとして定義する仕組み。
複数ドライバの合成、値変換、チェックなどを記述できる。

例(最小例)

connectmodule bus_resolve (bus_t driver, inout bus_t net);
  // 解決処理
  assign net = driver; 
endmodule

実務での意味

  • 複数ドライバの優先順位を定義
  • アナログ値の合成(例:電流の和)
  • 接続時の自動チェック(例:valid の衝突検出)
  • モデル間の抽象度差を吸収(例:real → logic 変換)

connect module とResolution関数の違い

項目Resolution関数connect module
記述形式関数モジュール
記述できる内容純粋な値計算のみ任意の SystemVerilog 構造(assign, always 等)
複雑な処理不向き向いている
チェック挿入困難容易
アナログ/抽象化モデル不向き適している

実務での具体的な利用シーン

複数ドライバのResolution

例:

  • 複数の IP が同じ bus_t を駆動する
  • valid の衝突を検出し、エラーを出力
  • data の優先順位を制御

Mixed-signal モデルの接続

例:

  • real 型の電圧モデルと、デジタルの logic 信号を接続
  • connect module 内でしきい値変換(real → logic)を実装
  • アナログモデルの抽象化に必須

自動チェック挿入

例:

  • 接続時にプロトコル整合性をチェック
  • valid/data の組み合わせを監視
  • 不正な接続を早期に検出

抽象度の異なるモデル間の接続

例:

  • RTL と TLM モデルの混在
  • bus_t の一部フィールドを無視・変換して接続
  • モデル差を吸収し、テストベンチの再利用性を向上

誤解しやすい点・注意点

connect module は「インスタンス化しない」

ユーザが明示的にインスタンスするものではなく、nettype の接続時に自動で挿入される

always ブロックを使えるが、過度なロジックは避ける

  • connect module は「接続のための補助ロジック」
  • 複雑な状態機械を入れるべきではない

Resolutionの順序はツール依存ではなく仕様で定義される

  • 複数ドライバ → connect module → net に反映
  • Resolutionの流れを理解していないとデバッグが難しくなる

nettype と connect module はセットで理解する必要がある

  • connect module 単体では意味を持たない
  • nettype の型定義と紐づけが本質

関連する専門用語の整理

用語定義実務での意味
nettypeユーザ定義ネット型nettype bus_t bus_netプロトコルを型として扱う
connect module接続時の振る舞いを定義するモジュールconnectmodule bus_resolve解決・変換・チェックを自動挿入
Resolution関数複数ドライバの値を合成する関数function bus_t resolve(...)単純な合成処理に向く

まとめ

  • connect module は nettype に紐づく「接続時の振る舞い」を定義する仕組み
  • 複数ドライバの解決、値変換、チェック挿入などを柔軟に記述できる
  • 解決関数よりも表現力が高く、抽象化モデルや mixed-signal に適している
  • 実務では プロトコル整合性チェック抽象度差の吸収 に大きく貢献
  • connect module は「自動挿入される」点を理解することが重要

コメント

タイトルとURLをコピーしました