この記事で学べること
- connect module の役割と定義
- nettype と connect module の関係
- 実務での利用シーン(インタフェース抽象化、混在設計、チェック挿入など)
- 誤解しやすいポイントと注意点
- 図解による構造理解
- 関連用語の整理
概要(全体像)
connect module は SystemVerilog の nettype と組み合わせて使用される仕組みで、
信号接続時の振る舞い(resolution関数・変換処理・チェック)をユーザが定義できる 拡張機能です。
従来の wire や tri のような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 は「自動挿入される」点を理解することが重要

コメント