SystemVerilog

LRMの読み方をご紹介

この記事は SystemVerilog Advent Calendar 2020の 1日目になります。 まだまだ空きがありますので、興味あれば参加してください。 プロローグ きっかけはこの本が発売されたことから SystemVerilog入門―設計・仕様・検証のためのハードウェア記述言語― 超久…

UVM Cookbook released in new edition

UVM Cookbookが改版されたようです。 UVM Cookbook released in new edition UVM Cookbookは Verification Academy's(旧Mentor)が運営しているところからリリースされてます。 更新内容は IEEE1800.2に沿った内容になったということで、OVMなどの内容やリン…

virtual interface paramter記述

引数にinterfaceで思い出したのですが、interfaceにparameter持たせた時に 仮引数の宣言の仕方がさっぱりわからなかった記憶が。 ってなことだったので、試してみました。 interface if_hoge#(parameter BW = 8)(); logic [BW-1:0] data; endinterface : if_…

$countones で bitランダム

きっかけはこちらの Verification Academyにて "hot bit" randomization このスレッドにCVCの方が回答したものが、こちらになります。 Smart constraint modeling in SystemVerilog class c; rand bit[31:0] vec_1; constraint cst_max_2_hot_bits { $counto…

SystemVerilog:bitスライスと初期値代入

problem about variable part select in SystemVerilog 確かに、こういう風に書きたいと思った時もありますね。 addr[8-:idx_bits] = {idx_bits{1'b1}}; ☆ここでのポイント addr[ const_or_var : const ] = { const { const_or_var } }; ビットスライス右側…

__FILE__ マクロのパス表示について

※本内容はシミュレータによって変わる場合があるかもしれません。 きっかけはこちらの記事になります。 SystemVerilog 2009 macro `FILE ? absolute or relative path? こちらの記事のほうでは Questaシミュレータを使用した場合のようです。 私の方は Model…

SystemVerilog:配列/bit幅に「-」値指定

bit幅に「-(マイナス)」値を使った書き方ができるとは。。。 私自身書いたことがなかったので、試しに書いてみました。 サンプルコード module testbench; int tmp[-2:5]; int data; initial begin for(int i=-2; i<5; i++) begin tmp[i] = data + 1; data++…

SystemVerilog:$finishの引数

IEEE規格では以下のように定義されています。 Table 20.1 Diagnostics for $finish Argument value Diagnostic message 0 Prints nothing 1 Prints simulation time and location 2 Prints simulation time, location, and statistics about the memory and …

SystemVerilog:pre/post_randomize()

SystemVerilogのランダム生成には、以下の functionが存在します。 IEEE1800-2012引用: 18.6.2 Pre_randomize() and post_randomize() Every class contains pre_randomize() and post_randomize() methods, which are automatically called by randomize()…

SystemVerilog : semaphore

SystemVerilog:mailbox で mailbox 書いたので、次は「semaphore」書いてみました。 サンプルコード module testbench (); semaphore sm_hoge; task task_put(); sm_hoge.put(); endtask task task_get; forever begin if (sm_hoge.try_get()) begin $displ…

SystemVerilog:unique, priority

SystemVerilog 2012:unique constraint でも紹介しましたが、SystemVerilogでは if/caseに対して以下の制約が追加されています。 unique unique0 priority これらの予約語を使いことにおいて、シミュレータに検知されることができます。 共通条件 すべての条…

SystemVerilog 2012 : soft constraint

Introducing soft constraints in SystemVerilog 2012 より、SystemVerilog 2012 にて soft constraint が追加されるらしいです。 これって元々こちらからのもの? Soft Constraints for SystemVerilog Package - @Venginnerの戯言 soft constraintってなに…

SystemVerilog 2012 : unique constraint

Bringing in uniqueness constraint to SystemVerilog ? welcome P1800-2012 より、SystemVerilog 2012では constraintにも uniqueが設定出来るようになるみたいです。 これは便利かも! unique とは? case文を記述例としてあげています。 unique/priority…

SystemVerilog:コマンドラインからの指定($plusargs)

Plus args in System Verilog is Plus point!! UVMでのテスト指定とかでみたことはあったけど、自分で指定出来るですね。 SystemVerilogでは、2種類の定義が可能です。 $test$plusargs ( string ) $value$plusargs ( user_string, variable ) $test$plusargs…

SystemVerilog 2012の多重継承(implements)

SystemVerilog 2012の拡張部分の「多重継承」について予習を。 予習するきっかけはこちらのブログになります。 Did you miss multiple-inheritance in SystemVerilog?(VerificationOnWeb(VoW)) 多重継承ってなに? 多重継承とは、1つのクラスが複数のクラス…

SystemVerilog:mailbox

SystemVerilogの「mailbox」を書いてみました。 FIFOの拡張版(やり取り制御込み)といったところでしょうか。 ちなみに、キッカケはこちらのブログです。 Is my SystemVerilog mailbox half-full or half-empty? An engineer’s hunger now served! サンプルコ…

SystemVerilog:byte型の代入メモ

こちらのブログにて、 SystemVerilog String Literal "Gotcha" ぱっと見ると、意味がわからなったけど少し眺めてみると内容が理解できた。 つまり、byte型に対して、文字列(本来ありえないけど)を代入した場合に、どの部分が代入されるかということ。 番号 9…

SystemVerilog:fork~join/join_any/join_none

今回の勉強題材はこちら。 SystemVerilog Fork Disable "Gotchas" automatic これはVerilog-HDL 2001から automatic が追加されています。 参考:automaticを意識する。 fork~join_any サンプルコードは書いてあるので、省略。 fork~joinの場合の出力結果…

SystemVerilog class の new

そういえば、書いてなかったので書いてみた。 サンプルコード class hoge; int int_tmp = 4; function new(int a); int_tmp = a; endfunction endclass module testbench; hoge cl_hoge = new(10); initial begin $display("--- cl_hoge.int_tmp = %3d",cl_h…

task/functionのオーバーロードを検討してみた。(DPI-C編)

「task/functionのオーバーロードを検討してみた。」を見て DPI-Cで書いてみみた ただ、この場合だと C++のオーバーロードを使ったやり方になりますので、 シナリオは C++側に書くことになります。 C++側のコード #include <stdio.h> #ifdef __cplusplus extern "C" {</stdio.h>…

SystemVerilog class の this

SystemVerilog「this」 を使ってみましょう。というお話です。 サンプルコード class base; int a; virtual function void set_a(int in); a = in; endfunction endclass class hoge extends base ; int a; function void set_a(int in); this.a = in; $disp…

SystemVerilog パラメータ class

module と同じような感じで、classにもパラメータを渡すことができます。 C++で言うとテンプレートみたいな感じです。 サンプルコード class hoge #(int width = 1); logic [width-1:0] l_a; function void show(); $display("--- a = %3d", l_a); endfuncti…

SystemVerilog Class スコープ演算子

タイトルは適当につけていますが、規格上の説明は Class scope resolution operator :: のようになってます。 サンプルコード class hoge; static function void show(int a, int b); $display("- a = %3d, b = %3d", a, b); endfunction endclass module te…

SystemVerilog で多態性(polymorphism)のお勉強

SystemVerilogから class が追加されたので出来ます。 サンプルコード class base; virtual function void show(int a, int b); $display("--- base: a = %3d, b = %3d", a, b); endfunction endclass class hoge extends base; virtual function void show(…

SystemVerilog class の super

SystemVerilog classにて、super というものがあります。 サンプルコード class base; virtual function void show(int a, int b); $display("- a = %3d, b = %3d", a, b); endfunction endclass class hoge extends base; function void show(int a, int b=…