テストベンチの機能 - 2023.2 日本語

Vivado Design Suite ユーザー ガイド: ロジック シミュレーション (UG900)

Document ID
UG900
Release Date
2023-10-18
Version
2023.2 日本語

Vivado シミュレータでは、次の表に示すように、よく使用されるテストテストベンチ機能の一部がサポートされています。

表 1. サポートされるダイナミック型コンストラクト
プライマリ コンストラクト セカンダリ コンストラクト LRM セクション ステータス
文字列データ型   6.16 サポートあり
  文字列演算子 (IEEE 1800-2012 の表 6-9) 6.16 サポートあり
  len() 6.16.1 サポートあり
  putc() 6.16.2 サポートあり
  getc() 6.16.3 サポートあり
  toupper() 6.16.4 サポートあり
  tolower() 6.16.5 サポートあり
  compare 6.16.6 サポートあり
  icompare() 6.16.7 サポートあり
  substr() 6.16.8 サポートあり
  atoi()、atohex()、atooct()、atobin() 6.16.9 サポートあり
  atoreal() 6.16.10 サポートあり
  itoa() 6.16.11 サポートあり
  hextoa() 6.16.12 サポートあり
  octtoa() 6.16.13 サポートあり
  bintoa() 6.16.14 サポートあり
  realtoa() 6.16.15 サポートあり
動的配列   7.5 サポートあり
  動的配列 (新規) 7.5.1 サポートあり
  サイズ 7.5.2 サポートあり
  削除 7.5.3 サポートあり
連想配列   7.8 サポートあり
  ワイルドカード インデックス 7.8.1 サポートあり
  文字列インデックス 7.8.2 サポートあり
  クラス インデックス 7.8.3 サポートあり
  積分インデックス 7.8.4 サポートあり
  その他のユーザー定義型 7.8.5 サポートあり
  無効インデックスへのアクセス 7.8.6 サポートあり
  連想配列メソッド 7.9 サポートあり
  num() および size() 7.9.1 サポートあり
  delete() 7.9.2 サポートあり
  exists() 7.9.3 サポートあり
  first() 7.9.4 サポートあり
  last() 7.9.5 サポートあり
  next() 7.9.6 サポートあり
  prev() 7.9.7 サポートあり
  トラバース メソッドへの引数 7.9.8 サポートあり
  連想配列代入 7.9.9 サポートあり
  連想配列引数 7.9.10 サポートあり
  連想配列リテラル 7.9.11 サポートあり
[Queue]   7.10 サポートあり
  キュー演算子 7.10.1 サポートあり
  キュー メソッド 7.10.2 サポートあり
  size() 7.10.2.1 サポートあり
  insert() 7.10.2.2 サポートあり
  delete() 7.10.2.3 サポートあり
  pop_front() 7.10.2.4 サポートあり
  pop_back() 7.10.2.5 サポートあり
  push_front() 7.10.2.6 サポートあり
  push_back() 7.10.2.7 サポートあり
  キューのエレメントへの参照の持続性 7.10.3 サポートあり
  代入およびアンパック型配列連結を使用したキューのアップデート 7.10.4 サポートあり
  境界付きキュー 7.10.5 サポートあり
クラス   8 サポートあり
  クラス ジェネラル 8.1 サポートあり
  概要 8.2 サポートあり
  構文 8.3 サポートあり
  オブジェクト (クラス インスタンス) 8.4 サポートあり
  オブジェクト プロパティおよびオブジェクト パラメーター データ 8.5 サポートあり
  オブジェクト メソッド 8.6 サポートあり
  コンストラクター 8.7 サポートあり
  スタティック クラス プロパティ 8.8 サポートあり
  スタティック メソッド 8.9 サポートあり
  this 8.10 サポートあり
  割り当て、名前変更、およびコピー 8.11 サポートあり
  継承およびサブクラス 8.12 サポートあり
  オーバーライドされたメンバー 8.13 サポートあり
  スーパー 8.14 サポートあり
  キャスト演算子 8.15 サポートあり
  チェーン コンストラクター 8.16 サポートあり
  データ非表示およびカプセル化 8.17 サポートあり
  定数クラス プロパティ 8.18 サポートあり
  仮想メソッド 8.19 サポートあり
  抽象クラスおよび純仮想メソッド 8.20 サポートあり
  多様性: ダイナミック メソッド ルックアップ 8.21 サポートあり
  クラス スコープ解決演算子 :: 8.22 サポートあり
  アウト オブ ブロック宣言 8.23 サポートあり
  パラメーター化されたクラス 8.24 サポートあり
  パラメーター化されたクラスのクラス解決演算子 8.24.1 サポートあり
  Typedef クラス 8.25 サポートあり
  インターフェイス クラス 8.26 サポートあり
  インターフェイス クラスの多重継承 8.26.6 サポートあり
  メモリ管理 8.27 サポートあり
  クラスおよびストラクチャ 8.28 サポートあり
プロセス   9 サポートあり
  並列処理 - fork join_any および fork join_none 9.3 サポートあり
  wait fork 9.6.1 サポートあり
  disable fork 9.6.3 サポートあり
  詳細なプロセス制御 9.7 サポートあり
クロッキング ブロック   14 サポートあり
  資料全体 14.1 サポートあり
  概要 14.2 サポートあり
  クロッキング ブロック宣言 14.3 サポートあり
  入力および出力スキュー 14.4 サポートあり
  階層式 14.5 サポートなし
  複数クロッキング ブロックの信号 14.6 サポートあり
  クロッキング ブロックのスコープおよびライフタイム 14.7 サポートあり
  複数クロッキング ブロックの例 14.8 サポートあり
  インターフェイスおよびクロッキング ブロック 14.9 サポートあり
  クロッキング ブロック イベント 14.10 サポートあり
  サイクル遅延 14.11 サポートあり
  デフォルト クロッキング 14.12 サポートあり
  入力サンプリング 14.13 サポートあり
  グローバル クロック 14.14 サポートなし
  同期イベント 14.15 サポートあり
  同期ドライブ 14.16 サポートあり
  ドライブおよびノンブロッキング代入 14.16.1 サポートあり
  クロッキング出力信号の駆動 14.16.2 サポートあり
セマフォ   15.3 サポートあり
  セマフォ メソッド new() 15.3.1 サポートあり
  セマフォ メソッド put() 15.3.2 サポートあり
  セマフォ メソッド get() 15.3.3 サポートあり
  セマフォ メソッド try_get() 15.3.4 サポートあり
メールボックス   15.4 サポートあり
  メールボックス メソッド new() 15.4.1 サポートあり
  メールボックス メソッド num() 15.4.2 サポートあり
  メールボックス メソッド put() 15.4.3 サポートあり
  メールボックス メソッド try_put() 15.4.4 サポートあり
  メールボックス メソッド get() 15.4.5 サポートあり
  メールボックス メソッド try_get() 15.4.6 サポートあり
  メールボックス メソッド peek() 15.4.7 サポートあり
  メールボックス メソッド try_peek() 15.4.8 サポートあり
  パラメーター指定されたメールボックス 15.4.9 サポートあり
名前付きイベント   15.5 サポートあり
  イベントのトリガー 15.5.1 サポートあり
  イベントを待機 15.5.2 サポートあり
  持続トリガー 15.5.3 サポートなし
  イベント シーケンス 15.5.4 サポートなし
  名前付きイベント変数に対する演算 15.5.5 サポートあり
  結合イベント 15.5.5.1 サポートあり
  イベントの再要求 15.5.5.2 サポートあり
  イベント比較 15.5.5.3 サポートあり
アサーション   16 サポートあり
  資料全体 16.1 サポートあり
  概要 16.2 サポートあり
  assert 16.2 サポートあり
  assume 16.2 サポートあり
  cover 16.2 サポートなし
  restrict 16.2 サポートなし
  即時アサーション 16.3 サポートあり
  遅延 (deferred) アサーション 16.4 サポートなし
  並列アサーションの概要 16.5 サポートあり
  サンプリング 16.5.1 サポートあり
  アサーション クロック 16.5.2 サポートあり
  ブール式 16.6 サポートあり
  シーケンス 16.7 サポートあり
  シーケンスの宣言 16.8 サポートあり
  シーケンス宣言での型が指定された仮引数 16.8.1 サポートあり
  シーケンス宣言でのローカル変数仮引数 16.8.2 サポートあり
  シーケンス演算 16.9 サポートあり
  演算子の優先順位 16.9.1 サポートあり
  シーケンスでの繰り返し 16.9.2 サポートあり
  サンプリングされた値の関数 16.9.3 サポートあり
  グローバル クロックで過去または将来にサンプリングされる値の関数 16.9.4 サポートなし
  AND 演算 16.9.5 サポートあり
  交差 (長さ制限付き AND) 16.9.6 サポートあり
  OR 演算 16.9.7 サポートあり
  first_match 演算 16.9.8 サポートあり
  シーケンスの条件 16.9.9 サポートあり
  シーケンス内のシーケンス 16.9.10 サポートあり
  単純なサブシーケンスからのシーケンスの作成 16.9.11 サポートあり
  ローカル変数 16.10 サポートあり
  シーケンスの一致に対するサブルーチンの呼び出し 16.11 サポートあり
  プロパティの宣言 16.12 サポートあり
  シーケンス プロパティ 16.12.1 サポートあり
  否定プロパティ 16.12.2 サポートあり
  論理和プロパティ 16.12.3 サポートあり
  論理積プロパティ 16.12.4 サポートあり
  if-else プロパティ 16.12.5 サポートあり
  含意 16.12.6 サポートあり
  含意および iff プロパティ 16.12.7 サポートあり
  プロパティ インスタンシエーション 16.12.8 サポートあり
  followed-by プロパティ 16.12.9 サポートなし
  nexttime プロパティ 16.12.10 サポートなし
  always プロパティ 16.12.11 サポートなし
  until プロパティ 16.12.12 サポートなし
  eventually プロパティ 16.12.13 サポートなし
  中止プロパティ 16.12.14 サポートなし
  強演算子および弱演算子 16.12.15 サポートなし
  ケース 16.12.16 サポートなし
  再帰プロパティ 16.12.17 サポートなし
  プロパティ宣言での型が指定された仮引数 16.12.18 サポートあり
  プロパティ宣言でのローカル変数仮引数 16.12.19 サポートあり
  プロパティの例 16.12.20 サポートあり
  有限長さと無限長さの動作 16.12.21 サポートあり
  非縮退 16.12.22 サポートあり
  複数クロックのサポート 16.13 サポートなし
  並列アサーション 16.14 サポートあり
  assert 文 16.14.1 サポートあり
  assume 文 16.14.2 サポートあり
  cover 文 16.14.3 サポートなし
  restrict 文 16.14.4 サポートなし
  手続きコード外での並列アサーション文の使用 16.14.5 サポートあり
  手続きコードへの並列アサーション文の埋め込み 16.14.6 サポートなし
  推論された値の関数 16.14.7 サポートなし
  有意な評価 16.14.8 サポートなし
  disable iff の解決 16.15 サポートあり
  クロックの解決 16.16 サポートあり
  複数クロック シーケンスおよびプロパティのセマンティック先頭クロック 16.16.1 サポートあり
  expect 文 16.17 サポートなし
  クロッキング ブロックおよび並列アサーション 16.18 サポートあり
ランダム制約   18 サポートあり
  コンセプトおよび使用法 18.3 サポートあり
  ランダム変数 18.4 サポートあり
  rand 修飾子 18.4.1 サポートあり
  randc 修飾子 18.4.2 サポートあり
  制約ブロック 18.5 サポートあり
  外部制約ブロック 18.5.1 サポートあり
  制約継承 18.5.2 サポートあり
  セット メンバーシップ 18.5.3 サポートあり
  分配 18.5.4 サポートあり
  含意 18.5.6 サポートあり
  if-else 制約 18.5.7 サポートあり
  反復制約 18.5.8 サポートあり
  foreach 反復制約 18.5.8.1 サポートあり
  配列削減反復制約 18.5.8.2 サポートあり
  グローバル制約 18.5.9 サポートあり
  変数の順序付け 18.5.10 サポートあり
  スタティック制約ブロック 18.5.11 サポートあり
  制約内の関数 18.5.12 サポートあり
  制約ガード 18.5.13 サポートあり
  ソフト制約 18.5.14 サポートあり
  randomize メソッド 18.6.1 サポートあり
  pre_randomize および post_randomize 18.6.2 サポートあり
  ランダム化メソッドの動作 18.6.3 サポートあり
  インライン制約 18.7 サポートあり
  ローカル スコープ解決 18.7.1 サポートあり
  rand_mode を使用したランダム変数の無効化 18.8 サポートあり
  constraint_mode を使用した制約の制御 18.9 サポートあり
  動的な制約変更 18.10 サポートあり
  インライン ランダム変数制御 18.11 サポートあり
  インライン制約チェッカー 18.11.1 サポートあり
  スコープ変数 std::randomize のランダム化 18.12 サポートあり
  スコープ変数 std::randomize への制約の追加 18.12.1 サポートあり
  乱数システム関数およびメソッド 18.13 サポートあり
  $urandom 18.13.1 サポートあり
  $urandom_range 18.13.2 サポートあり
  srandom 18.13.3 サポートあり
  get_randstate 18.13.4 サポートあり
  set_randstate 18.13.5 サポートあり
  ランダム安定性 18.14 サポートあり
  ランダム化の手動シード設定 18.15 サポートあり
  randcase 18.16 サポートあり
  randsequence 18.17 サポートなし
プログラム   24 サポートあり
  プログラム コンストラクト 24.3 サポートあり
  プログラム コンストラクトにおけるコードのセマンティックのスケジューリング 24.3.1 サポートあり
  プログラム ポート接続 24.3.2 サポートあり
  テストベンチ レースの除去 24.4 サポートあり
  サイクル/イベント モードのブロッキング タスク 24.5 サポートあり
  匿名プログラム 24.6 サポートなし
  プログラム制御タスク 24.7 サポートあり
機能カバレッジ   19 サポートあり
  資料全体 19.1 サポートあり
  概要 19.2 サポートあり
  カバレッジ モデルの定義: covergroup 19.3 サポートあり
  クラスでの covergroup の使用 19.4 サポートあり
  カバレッジ ポイントの定義 19.5 サポートあり
  値のビンの指定 19.5.1 サポートあり
  カバーグループを使用したカバーポイント ビン 19.5.1.1 サポートあり
  カバーポイント ビン設定カバーグループ式 19.5.1.2 サポートなし
  遷移のビンの指定 19.5.2 サポートあり
  カバレッジ ポイントの自動ビン作成 19.5.3 サポートあり
  カバレッジ ポイント ビンのワイルドカード指定 19.5.4 サポートあり
  カバレッジ ポイント値または遷移の除外 19.5.5 サポートあり
  無効なカバレッジ ポイント値または遷移の指定 19.5.6 サポートあり
  値の解決 19.5.7 サポートあり
  クロス カバレッジの定義 19.6 サポートあり
  クロス カバレッジ ビンの定義 19.6.1 サポートあり
  ユーザー定義のクロス カバレッジおよび選択式の例 19.6.1.1 サポートあり
  カバーグループ式を使用したクロス ビン 19.6.1.2 サポートあり
  クロス ビン自動定義型 19.6.1.3 サポートあり
  クロス ビン設定式 19.6.1.4 サポートあり
  クロス積の除外 19.6.2 サポートあり
  無効なクロス積の指定 19.6.3 サポートあり
  カバレッジ オプションの指定 19.7 サポートあり
  カバーグループ型のオプション 19.7.1 サポートあり
  定義済みのカバレッジ メソッド 19.8 サポートあり
  ビルトイン サンプル メソッドのオーバーライド 19.8.1 サポートあり
  定義済みのカバレッジ システム タスクおよびシステム関数 19.9 サポートあり
  option および type_option メンバーの構成 19.10 サポートあり
注記: キュー、動的配列、連想配列、クラスなどのダイナミック型のセンシティビティはサポートされていません。そのため、ダイナミック型のアップデートを待つブロックは正しく機能しない場合があります。次に例を示します。
module top();
int c[$];
event e1;
initial
begin
    c[0] = 10;
    for(int i = 0; i <= 10; i++)
    begin
        c = {i, c};
        -> e1;
        #5;
    end
end
always@(*) $display($time, " trying to read sensitivity on dynamic type : %d", c[0]); 
// this won't work as sensitivity on dynamic type is not supported
always @(e1) $display($time, " coming from event sensitivity : %d", c[0]); // this we 
can do as WA
always_comb if(c.size() > 0) $display($time, " Coming from size sensitivity : %d", 
c[0]); // sensitivity on size works