| パラダイム | 構造化(設計) オブジェクト指向(検証) |
|---|---|
| デザイン: | シノプシス、後のIEEE |
| 初登場 | 2002年 |
| 安定版リリース | IEEE 1800-2023 / 2023年12月16日 |
| タイピングの規律 | 静的、弱い |
| ファイル名拡張子 | .sv、.svh |
| 影響を受けた | |
| 設計: Verilog、VHDL、C++、検証: OpenVera、Java | |
IEEE 1800として標準化されたSystemVerilog は、電子システムのモデル化、設計、シミュレーション、テスト、実装に使用されるハードウェア記述およびハードウェア検証言語です。SystemVerilog はVerilogといくつかの拡張機能に基づいており、2008 年以降、Verilog は同じIEEE 標準の一部となっています。Verilog の進化形として、半導体および電子設計業界 で広く使用されています。
歴史
SystemVerilogは、2002年に新興企業Co-Design AutomationがAccelleraにSuperlog言語を寄贈したことから始まりました。 [1]検証機能の大部分は、 Synopsysが寄贈したOpenVera言語に基づいています。2005年、SystemVerilogはIEEE標準1800-2005として採用されました。[2] 2009年、この標準はベースVerilog(IEEE 1364-2005)標準と統合され、IEEE標準1800-2009が作成されました。
SystemVerilog標準はその後2012年、[3] 2017年、[4]そして最近では2023年12月に更新されました。 [5]
デザインの特徴
SystemVerilog の機能セットは、次の 2 つの異なる役割に分けられます。
- レジスタ転送レベル(RTL) 設計用の SystemVerilog はVerilog-2005の拡張であり、その言語のすべての機能が SystemVerilog で利用できます。したがって、Verilog は SystemVerilog のサブセットです。
- 検証用の SystemVerilog は、広範なオブジェクト指向プログラミング手法を使用しており、Verilog よりもJavaと密接に関連しています。これらの構造は、通常、合成できません。
この記事の残りの部分では、 Verilog-2005にはない SystemVerilog の機能について説明します。
データの有効期間
SystemVerilog で指定されるデータ有効期間には、静的と自動の 2 種類があります。自動変数は、プログラム実行が変数のスコープに入った瞬間に作成されます。静的変数は、プログラム実行の開始時に作成され、実行中に新しい値が割り当てられない限り、プログラムの有効期間全体にわたって同じ値を保持します。
タスクまたは関数内で型を指定せずに宣言された変数は、自動変数とみなされます。変数が静的であることを指定するには、宣言で型の前に「 static」キーワードstatic int x;を配置します (例:「 」)。「automatic」キーワードも同様に使用されます。
新しいデータ型
拡張された変数型により、 Verilog の「reg」型に新しい機能が追加されます。
ロジック[ 31 : 0 ] my_var ;
Verilog-1995 および -2001 では、reg 変数はRTL コードなどの動作ステートメントに制限されています。SystemVerilog は、reg タイプを拡張して、ゲートやモジュールなどの単一のドライバで駆動できるようにします。SystemVerilog では、このタイプに「ロジック」という名前を付けて、このタイプにこの追加機能があり、ハードウェア レジスタではないことをユーザーに知らせています。「ロジック」と「reg」という名前は互換性があります。複数のドライバを持つ信号 (汎用入出力用のトライステート バッファなど) は、「ワイヤ」などのネット タイプとして宣言して、SystemVerilog が最終値を解決できるようにする必要があります。
多次元 パック配列は、 Verilog の「レジスタ」と「メモリ」の概念を統合および拡張します。
ロジック[ 1 : 0 ][ 2 : 0 ] my_pack [ 32 ];
従来の Verilog では、変数名の左側に宣言できる次元は 1 つだけでした。SystemVerilog では、このような「パックされた」次元は任意の数だけ許可されます。パックされた配列型の変数は、整数の算術量に 1:1 でマッピングされます。上記の例では、 の各要素は、my_pack式で 6 ビットの整数として使用できます。名前の右側の次元 (この場合は 32) は、「アンパックされた」次元と呼ばれます。Verilog -2001と同様に、アンパックされた次元は任意の数だけ許可されます。
列挙データ型(enums) を使用すると、数値に意味のある名前を割り当てることができます。列挙型として宣言された変数は、キャストせずに別の列挙型の変数に割り当てることはできません。これは、Verilog-2005 で列挙型の値の推奨実装手法であったパラメータには当てはまりません。
typedef enum logic [ 2 : 0 ] { RED 、GREEN 、BLUE 、CYAN 、MAGENTA 、YELLOW } color_t ;
color_t my_color = GREEN ; initial $ display ( "色は%sです" , my_color . name ());
上記のように、設計者は列挙値を表すために使用される基礎となる算術型 (logic [2:0]この場合は ) を指定できます。メタ値 X と Z は、不正な状態を表すためにここで使用できます。組み込み関数は、name()現在の列挙値の ASCII 文字列を返します。これは、検証とテストに役立ちます。
新しい整数型: SystemVerilog はbyte、、、shortintをそれぞれ 8、16、32、64 ビットの 2 状態符号付き整数型として定義します。 型は、 とよく似た動作をする可変幅の 2 状態型です。2 状態型には、従来の Verilog の X メタ値と Z メタ値がありませんint。これらの型を使用すると、シミュレーションが高速化される可能性があります。
longintbitlogic
構造体と共用体は、 C プログラミング言語とほぼ同じように機能します。SystemVerilog の機能強化には、 packed属性とtagged属性が含まれます。このtagged属性により、共用体のどのメンバーが現在使用中であるかを実行時に追跡できます。このpacked属性により、構造体または共用体がビットのパック配列に 1:1 でマップされます。データ型の内容は、C および C++ の
ビットフィールドstructと同様に、ギャップのない連続したメモリ ブロックを占有します
typedef struct packed { bit [ 10 : 0 ] expo ; bit sign ; bit [ 51 : 0 ] mant ; } FP ;
FPゼロ= 64'b0 ;
この例に示すように、SystemVerilog はC や C++ と同様に typedefもサポートしています。
手続きブロック
SystemVerilog では、ハードウェアをモデル化するための 3 つの新しい手続き型ブロックが導入されています: always_comb(組み合わせロジックをモデル化)、always_ff(フリップフロップをモデル化)、およびalways_latch(ラッチをモデル化)。Verilog では、単一の汎用alwaysブロックを使用してさまざまな種類のハードウェア構造をモデル化していましたが、SystemVerilog の新しいブロックはそれぞれ、ブロックで記述されたハードウェアがモデルの意図された使用法と一致するようにセマンティック制限を課すことで、特定の種類のハードウェアをモデル化することを目的としています。HDL コンパイラまたは検証プログラムは、意図された種類の動作のみが発生するように追加の手順を実行できます。
ブロックは組み合わせ論理always_combをモデル化します。シミュレーターは、含まれるステートメントからのすべての変数を感度リストとして推測します。
always_comb開始tmp = b * b - 4 * a * c ; no_root = ( tmp < 0 );終了
ブロックはレベルセンシティブalways_latchラッチをモデル化します。この場合も、センシティビティ リストはコードから推測されます。
always_latch
if ( en ) q <= d ;
ブロックは同期ロジック(特にエッジに敏感なシーケンシャルロジック)
always_ffをモデル化します。
always_ff @( posedge clk )カウント<=カウント+ 1 ;
電子設計自動化(EDA) ツールは、ハードウェア モデルがブロック使用セマンティクスに違反していないことを確認することで、設計の意図を検証できます。たとえば、新しいブロックでは、1 つのソースのみを許可することで変数への割り当てを制限しますが、Verilog のalwaysブロックでは、複数の手続き型ソースからの割り当てが許可されます。
インターフェース
小規模な設計の場合、Verilogポートはモジュールと周囲の環境との接続を簡潔に記述します。ただし、大規模な設計階層内の主要ブロックには通常、数千のポートがあります。SystemVerilog では、接続されたモジュール間のポート名宣言の冗長性を削減するとともに、関連する信号をユーザー宣言のバンドルにグループ化して抽象化するために、インターフェイスの概念が導入されています。追加の概念は、ロジック接続の方向を示す modportです。
例:
インターフェースintf ;ロジックa ;ロジックb ; modport in (入力a ,出力b ); modport out (入力b ,出力a ); endinterface
モジュールトップ; intf i (); u_a m1 (. i1 ( i.in ) ); u_b m2 (. i2 ( i.out ) ) ;モジュール終了
モジュールu_a ( intf . in i1 );モジュール終了
モジュールu_b ( intf . out i2 );モジュール終了
検証機能
以下の検証機能は通常は合成不可能であり、HDL コードに基づいてハードウェアに実装することはできません。代わりに、拡張可能で柔軟なテストベンチの作成に役立ちます。
新しいデータ型
データstring型は可変長のテキスト文字列を表します。例:
string s1 = "Hello" ; string s2 = "world" ; string p = ".?!" ; string s3 = { s1 , ", " , s2 , p [ 2 ]}; // 文字列の連結$ display ( "[%d] %s" , s3 . len (), s3 ); // シミュレーションでは次のように出力されます: "[13] Hello, world!"
設計で使用される静的配列に加えて、SystemVerilog では動的配列、連想配列、キューが提供されます。
int cmdline_elements ; // # 動的配列の要素int da []; // 動的配列int ai [ int ]; // 連想配列、int でインデックス付けint as [ string ]; // 連想配列、文字列でインデックス付けint qa [$]; // キュー、配列として、または組み込みメソッドでインデックス付け
initial begin cmdline_elements = 16 ; da = new [ cmdline_elements ]; // 16 要素の配列を割り当てるend
動的配列は、アンパック配列とほぼ同じように機能しますが、実行時に動的に割り当てられるという利点があります (上記を参照)。パック配列のサイズはコンパイル時に (定数または定数の式から) わかっている必要がありますが、動的配列のサイズは別の実行時変数から初期化できるため、必要に応じて配列のサイズを任意に変更できます。
連想配列は、ユーザーが指定したキー タイプとデータ タイプを持つバイナリ検索ツリーと考えることができます。キーは順序付けを意味し、連想配列の要素は辞書式順序で読み取ることができます。最後に、キューはC++ STL dequeタイプの多くの機能を提供します。つまり、要素はどちらの端からでも効率的に追加および削除できます。これらのプリミティブにより、大規模な設計のスコアボードに必要な複雑なデータ構造を作成できます。
クラス
SystemVerilog はオブジェクト指向プログラミングモデルを提供します。
SystemVerilog では、クラスは単一継承モデルをサポートしますが、いわゆる「インターフェース クラス」(概念的にはinterfaceJava の機能と同じ) を使用することで多重継承に似た機能を実装できます。クラスは型によってパラメータ化でき、 C++ テンプレートの基本機能を提供します。ただし、テンプレートの特殊化と関数テンプレートはサポートされていません。
SystemVerilog のポリモーフィズム機能は C++ の機能と似ています。プログラマーは、virtual派生クラスが関数を制御できるように関数を明示的に記述できます。詳細については、
仮想関数を参照してください。
カプセル化とデータの非表示はlocal、およびキーワードを使用して実現されますprotected。これらのキーワードは、非表示にするすべての項目に適用する必要があります。デフォルトでは、すべてのクラス プロパティはpublicです。
クラス インスタンスは、 キーワードを使用して動的に作成されますnew。で示されるコンストラクタfunction newを定義できます。SystemVerilog には自動ガベージ コレクションがあるため、 new 演算子によって作成されたインスタンスを明示的に破棄する言語機能はありません。
例:
仮想クラスMemory ;仮想関数bit [ 31 : 0 ] read ( bit [ 31 : 0 ] addr ); endfunction仮想関数void write ( bit [ 31 : 0 ] addr , bit [ 31 : 0 ] data ); endfunction endclass
クラスSRAM #(パラメーターAWIDTH = 10 )はMemoryを拡張します。ビット[ 31 : 0 ] mem [ 1 << AWIDTH ];
仮想関数ビット[ 31 : 0 ]読み取り(ビット[ 31 : 0 ]アドレス);メモリ[アドレス]を返す;関数終了
仮想関数void write ( bit [ 31 : 0 ] addr , bit [ 31 : 0 ] data ); mem [ addr ] = data ; endfunction endclass
制約付きランダム生成
クラス定義または何らかの語彙範囲のスタンドアロン変数として定義された整数量には、一連の制約に基づいてランダムな値を割り当てることができます。この機能は、検証用のランダムなシナリオを作成するのに役立ちます。
クラス定義内では、randおよびrandc修飾子は、ランダム化される変数を示します。 は順列randcベースのランダム化を指定します。この場合、変数は、任意の値が繰り返される前に、すべての可能な値を 1 回取ります。 修飾子のない変数はランダム化されません。
クラスeth_frame ; randビット[ 47 : 0 ] dest ; randビット[ 47 : 0 ] src ; randビット[ 15 : 0 ] f_type ; randバイトペイロード[];ビット[ 31 : 0 ] fcs ; randビット[ 31 : 0 ] fcs_corrupt ;
制約基本{ペイロード.サイズ内部{[ 46 : 1500 ]}; }
制約good_fr { fcs_corrupt == 0 ; }エンドクラス
この例では、fcsフィールドはランダム化されていません。実際には、フィールドは CRC ジェネレータで計算され、fcs_corruptフィールドはそれを破壊して FCS エラーを挿入するために使用されます。示されている 2 つの制約は、準拠するEthernet フレームに適用できます。制約は選択的に有効にできます。この機能は、上記の例で破損したフレームを生成するために必要です。制約は、変数、含意、および反復間の相互関係を含む、任意の複雑さになる場合があります。SystemVerilog制約ソルバーは、解が存在する場合はそれを見つける必要がありますが、これは一般にNP 困難な問題 (ブール値の充足可能性)であるため、解を見つけるのに必要な時間については保証しません。
ランダム化の方法
各 SystemVerilog クラスには、pre_randomize、randomize、post_randomize という 3 つの定義済みランダム化メソッドがあります。randomize メソッドは、クラス変数のランダム化のためにユーザーによって呼び出されます。pre_randomize メソッドは、ランダム化の前に randomize メソッドによって呼び出され、post_randomize メソッドは、ランダム化の後に randomize メソッドによって呼び出されます。
クラスeth_frame ; randビット[ 47 : 0 ] dest ; randビット[ 47 : 0 ] src ; randビット[ 15 : 0 ] f_type ; randバイトペイロード[];ビット[ 31 : 0 ] fcs ; randビットcorrupted_frame ;
制約basic { payload . size inside {[ 46 : 1500 ]}; } function void post_randomize () this . calculate_fcs (); // ランダム化されたフレームに従って fcs フィールドを更新if ( corrupted_frame ) // このフレームが破損している場合this . corrupt_fcs (); // fcs を破損endfunction endclass
制約の制御
ランダム化を制御するには、constraint_mode() メソッドと random_mode() メソッドを使用します。constraint_mode() は特定の制約をオンまたはオフにするために使用され、random_mode は特定の変数のランダム化をオンまたはオフにするために使用されます。以下のコードは、イーサネット フレームを記述し、手順的にテストします。
クラスeth_frame ; randビット[ 47 : 0 ] dest ; randビット[ 47 : 0 ] src ; randビット[ 15 : 0 ] f_type ; randバイトペイロード[];ビット[ 31 : 0 ] fcs ; randビットcorrupted_frame ;
制約基本{ペイロード.サイズ内部{[ 46 : 1500 ]}; }制約one_src_cst { src == 48'h1f00 }
制約dist_to_fcs { fcs dist { 0 :/ 30 ,[ 1 : 2500 ] :/ 50 }; // 30と50は重みです(この例では30/80または50/80)}
endclass
.
.
.
eth_frame my_frame ;
my_frame . one_src_cst . const_mode ( 0 ); // 制約 one_src_cst は考慮されません。my_frame . f_type . random_mode ( 0 ); // このフレーム インスタンスでは f_type 変数はランダム化されません。my_frame . randomize ();
アサーション
アサーションは、特定の条件または状態に達した後に現れる設計のプロパティを検証するのに役立ちます。SystemVerilogには、プロパティ仕様言語に似た独自のアサーション仕様言語があります。アサーションを提供するSystemVerilog言語構造のサブセットは、一般にSystemVerilogアサーションまたはSVAと呼ばれます。[6]
SystemVerilog アサーションは、シーケンスとプロパティから構築されます。プロパティはシーケンスのスーパーセットです。シーケンスはプロパティのように使用できますが、通常は役に立ちません。
シーケンスは、ブール式に時間演算子を追加して構成されます。最も単純な時間演算子は、##連結を実行する演算子です。[説明が必要]
シーケンスS1 ; @( posedge clk ) req ## 1 gnt ;シーケンス終了
このシーケンスは、gnt信号がハイになった後 1 クロック サイクル後にreqハイになった場合に一致します。すべてのシーケンス操作はクロックに同期していることに注意してください。
その他の順次演算子には、繰り返し演算子やさまざまな接続詞が含まれます。これらの演算子を使用すると、設計者は設計コンポーネント間の複雑な関係を表現できます。
アサーションは、シーケンスまたはプロパティを継続的に評価することによって機能します。プロパティが失敗すると、アサーションも失敗します。上記のシーケンスは、が低い場合は常に失敗します。次のプロパティが必要である
reqという要件を正確に表現するには、次のようになります。gntreq
プロパティreq_gnt ; @( posedge clk ) req |=> gnt ; endproperty
assert_req_gnt: assert property ( req_gnt ) else $ error ( "req の後に gnt が続いていません。" );
この例では、含意演算子を示します|=>。含意の左側の節は前提と呼ばれ、右側の節は結論と呼ばれます。 含意の 評価は、前提の評価を繰り返し試行することから始まります。前提が成功すると、結論が試行され、アサーションの成功は結論の成功に依存します。この例では、 がハイになるまで結論は試行されません。reqその後、次のクロックで がハイでない場合、プロパティは失敗しますgnt。
SystemVerilog は、アサーションに加えて、プロパティの仮定とカバレッジもサポートしています。仮定は、形式論理 証明ツールが 真であると仮定しなければならない条件を確立します。アサーションは、真であると証明されなければならないプロパティを指定します。シミュレーションでは、アサーションと仮定の両方がテスト刺激に対して検証されます。プロパティ カバレッジにより、検証エンジニアはアサーションが設計を正確に監視していることを検証できます。[曖昧]
カバレッジ
ハードウェア検証言語に適用されるカバレッジは、シミュレーション内のサンプリング イベントに基づく統計の収集を指します。カバレッジは、テスト対象デバイス(DUT) が十分な種類の刺激にさらされ、DUT が正しく機能しているという高い信頼性が得られるタイミングを判断するために使用されます。これは、設計コードをインストルメント化して設計内のすべてのコード行が実行されたことを確認するコード カバレッジとは異なることに注意してください。機能カバレッジは、設計空間内のすべての必要なコーナー ケースとエッジ ケースが調査されたこと。
SystemVerilog カバレッジ グループは、関連付けられた変数の値のヒストグラムを格納する「ビン」のデータベースを作成します。複数の変数の直積を表すヒストグラムを作成するクロス カバレッジも定義できます。
サンプリングイベントは、サンプルを取得するタイミングを制御します。サンプリングイベントは、Verilog イベント、コード ブロックの開始または終了、またはsampleカバレッジ グループのメソッドの呼び出しのいずれかになります。データが意味のある場合にのみサンプリングされるように注意する必要があります。
例えば:
class eth_frame ; // 上記の定義covergroup cov ; coverpoint dest { bins bcast [ 1 ] = { 48'hFFFFFFFFFFFF }; bins ucast [ 1 ] = default ; } coverpoint f_type { bins length [ 16 ] = { [ 0 : 1535 ] }; bins typed [ 16 ] = { [ 1536 : 32767 ] }; bins other [ 1 ] = default ; } psize: coverpoint payload . size { bins size [] = { 46 , [ 47 : 63 ], 64 , [ 65 : 511 ], [ 512 : 1023 ], [ 1024 : 1499 ], 1500 }; }
sz_x_t:クロスf_type 、psize ;エンドグループエンドクラス
この例では、検証エンジニアは、ブロードキャスト フレームとユニキャスト フレームの分布、サイズ/f_type フィールド、およびペイロード サイズに注目しています。ペイロード サイズ カバーポイントの範囲は、最小サイズと最大サイズのフレームを含む、興味深いコーナー ケースを反映しています。
同期
複雑なテスト環境は、相互に通信する必要がある再利用可能な検証コンポーネントで構成されています。Verilog の「イベント」プリミティブでは、異なるブロックの手続き型ステートメントが相互にトリガーできましたが、スレッド同期の強制はプログラマの (賢い) 使い方次第でした。SystemVerilog は、スレッド間同期専用の2 つのプリミティブ、メールボックスとセマフォを提供しています。メールボックスは、FIFOメッセージ キューとしてモデル化されます。オプションで、FIFO をタイプ パラメーター化して、指定されたタイプのオブジェクトのみが通過できるようにすることもできます。通常、オブジェクトはトランザクションを表すクラス インスタンスです。トランザクションとは、検証コンポーネントによって実行される基本操作 (フレームの送信など) です。セマフォは、カウント セマフォとしてモデル化されます。
従来のVerilogの一般的な改善
上記の新機能に加えて、SystemVerilog では Verilog の既存の言語機能の使いやすさが向上しています。次に、これらの機能強化の一部を示します。
- 手続き型代入演算子(<=、=)が配列に対して直接操作できるようになりました。
- ポート (inout、input、 output ) 定義が拡張され、より幅広いデータ型がサポートされるようになりました。struct 、enum、real、多次元型がサポートされます。
- for ループ構造により、 for ステートメント内での自動変数宣言が可能になりました。ループフロー制御は、continueおよびbreakステートメントによって改善されました。
- SystemVerilog は、whileループ構造にdo /while ループを追加します。
- 定数変数、つまり実行時に変更されないものとして指定された変数は、 constを使用して指定できます。
- 変数の初期化が配列に対して実行できるようになりました。
- SystemVerilogでは、増分演算子と減分演算子(
x++、、、 )がサポートされています。また、C およびその派生言語の他の複合代入演算子 (、、、、、、、、、、、)もサポートされています。++xx----xx += ax -= ax *= ax /= ax %= ax <<= ax >>= ax &= ax ^= ax |= a - プリプロセッサでは、`define マクロ置換機能、具体的にはリテラル文字列 ("") 内の置換、および複数のマクロ トークンを 1 つの単語に連結する機能が改善されました。
- fork /join構造がjoin_noneとjoin_anyで拡張されました。
- `timescale ディレクティブの追加により、各ソース ファイルでローカル タイムスケールが使用される大規模なシミュレーション環境で、シミュレーション タイムスケールをより予測可能な方法で制御できるようになります。
- タスク ポートは、 refとして宣言できるようになりました。参照により、タスク本体は呼び出し元のスコープ内のソース引数に直接アクセスできます。これは、コンピュータ プログラミングでは「参照渡し」と呼ばれます。引数の値のコピーではなく、元の変数自体を操作するため、タスク/関数は呼び出し元のスコープ内の変数 (ネットは除く) をリアルタイムで変更できます。入出力ポートの宣言は、変数を値で渡し、タスクが終了するまで呼び出し元のスコープ変数の更新を延期します。
- 関数はvoidとして宣言できるようになりました。これは値を返さないことを意味します。
- パラメータは、ユーザー定義のtypedefを含む任意の型で宣言できます。
これに加えて、SystemVerilogでは、 SystemVerilog DPI (ダイレクト プログラミング インターフェイス) によって、外国語(C/C++ など)への便利なインターフェイスが可能になります。
検証および合成ソフトウェア
設計検証の役割において、SystemVerilog はチップ設計業界で広く使用されています。3 大 EDA ベンダー ( Cadence Design Systems、Mentor Graphics、Synopsys ) は、SystemVerilog を自社の混合言語HDL シミュレータに組み込んでいます。SystemVerilog 言語リファレンス マニュアル全体のサポートを主張できるシミュレータはまだないため、テストベンチの相互運用性は課題となっていますが、ベンダー間の互換性を促進する取り組みが進行中です。[いつ? ] 2008 年、Cadence と Mentor は、再利用可能なテストベンチと既成の検証 IP の開発を容易にするオープンソースのクラス ライブラリと使用フレームワークである Open Verification Methodology をリリースしました。SystemVerilog クラス ライブラリ (VMM) を最初に公開した Synopsys は、その後、独自の VMM を一般に公開することで対応しました。多くのサードパーティ プロバイダーが SystemVerilog 検証 IP を発表しているか、すでにリリースしています。
設計合成の役割 (ハードウェア設計記述のゲートネットリストへの変換)では、SystemVerilog の採用は遅れています。多くの設計チームは、異なるベンダーの複数のツールを含む設計フローを使用しています。ほとんどの設計チームは、フロントエンド ツール スイート全体 (リンター、形式検証、自動テスト構造ジェネレーター) が共通の言語サブセットをサポートするまで、SystemVerilog RTL 設計に移行できません。[更新が必要ですか? ]
参照
- HDLシミュレータ一覧(SV2005で検索)
- Verilog-AMS
- e (検証言語)
- スペックC
- アクセレラ
- システムC
- システムRDL
参考文献
- SystemVerilog の IEEE 標準: 統一ハードウェア設計、仕様、検証言語。2005 年。doi :10.1109 / IEEESTD.2005.97972。ISBN 978-0-7381-4810-6。
- SystemVerilog の IEEE 標準 - 統合ハードウェア設計、仕様、検証言語。2009 年。doi :10.1109 / IEEESTD.2009.5354441。ISBN 978-0-7381-6130-3。
- SystemVerilog の IEEE 標準 - 統合ハードウェア設計、仕様、検証言語。2013 年。doi :10.1109 / IEEESTD.2013.6469140。ISBN 978-0-7381-8110-3。
- SystemVerilog の IEEE 標準 - 統合ハードウェア設計、仕様、検証言語。2017 年。doi :10.1109 / IEEESTD.2018.8299595。ISBN 978-1-5044-4509-2。
- McGrath, Dylan (2005-11-09). 「IEEE が Verilog の改訂版 SystemVerilog を承認」. EE Times . 2007-01-31閲覧。
- Puneet Kumar (2005-11-09)。「System Verilog チュートリアル」。
- ゴピ・クリシュナ (2005-11-09)。 「SystemVerilog、SVA、SV DPI チュートリアル」。
- HDVL。「その他の SystemVerilog Web リンク」。
- Spear, Chris、「SystemVerilog for Verification 」、Springer、ニューヨーク市、NY。ISBN 0-387-76529-8
- Stuart Sutherland、Simon Davidmann、Peter Flake、「SystemVerilog for Design 第 2 版: ハードウェア設計とモデリングのためのSystemVerilogの使用ガイド」Springer、ニューヨーク市、NY。ISBN 0-387-33399-1
- Ben Cohen、Srinivasan Venkataramanan、Ajeetha Kumari、Lisa Piper [1] SystemVerilogアサーションハンドブック、第4版、2016- http://SystemVerilog.us
- Ben Cohen Srinivasan Venkataramanan および Ajeetha Kumari [2] VMM 導入への実践的アプローチ - http://SystemVerilog.us
- エリック・セリグマンとトム・シューベルト[3] 形式検証:現代のVLSI設計に不可欠なツールキット、2015年7月24日、
外部リンク
- IEEE 標準リファレンス
- 1800-2017 - SystemVerilogのIEEE標準 - 統合ハードウェア設計、仕様、検証言語。2017バージョンはIEEE GETプログラムを通じて無料で入手できます。[1]
- チュートリアル
- SystemVerilog チュートリアル
- 初心者向け SystemVerilog チュートリアル
- 標準の開発
- IEEE P1800 – SystemVerilog ワーキンググループ
- IEEE 1800-2005 以前に使用されたサイト
- SystemVerilog公式サイト
- SystemVerilog 技術委員会
- 言語拡張
- Verilog AUTOs – Verilog コードのメンテナンスを簡素化するオープンソースのメタコメント システム
- オンラインツール
- EDA Playground – Web ブラウザから SystemVerilog を実行 (無料オンライン IDE)
- sverule – SystemVerilog BNF ナビゲータ (IEEE 1800-2012 準拠)
- その他のツール
- SVUnit – SystemVerilog でコードを書く開発者向けの単体テスト フレームワーク。SystemVerilog モジュール、クラス、およびインターフェイスを個別に検証します。
- sv2v - SystemVerilog から Verilog へのオープンソース コンバーター
- ^ IEEE GET プログラム、IEEE
