Systemverilog

スポンサーリンク
Systemverilog

UVM uvm_config_dbでsetした値をログに表示する

uvm_config_db#()::dump();完結に、uvm_config_db#(<type>)::set()で登録した値はuvm_config_db#()::dump();でログに表示されます。<type>は指定してもしなくても、す...
Systemverilog

UVM TPRGEDが出た uvm_warning

現象同じAgentを継承して別々なEnvを作成してそのEnvをテストベンチに組み込むとTPRGEDのWarningが出ますtop.svpackage pkg1; `include "uvm_macros.svh" import uvm_pk...
Systemverilog

distの重みづけの動作確認 SystemVerilog

distでrand変数に重みづけするdistでrand変数に重みづけができます。動作確認してみます。「:=」の動作確認0:10%, 1:30%, 2:30%, 4:30%の出現確率で10,000回実行します。module top; clas...
Systemverilog

SystemVerilog constraintでrand変数に制約をつける

はじめにSytemVerilogのclassの変数はrandを付けることで乱数にすることができます。rand変数はrandomizeメソッドで乱数が生成されます。このとき、constraintで生成される乱数に制約を付けることができます。m...
Systemverilog

ノンブロッキングとブロッキングでFFの動作が変わる話 SystemVerilog

はじめにFFを作るとき、ノンブロッキング代入とブロッキング代入で多段FFの動作が変わります。入力を2段のFFで受けて出力する回路でその動作を見ていきます。ノンブロッキングnonblocking.svmodule dut( input clk...
Systemverilog

SystemVerilog Interfaceで回路を作成する 内部回路

はじめにInterfaceブロックの中に回路を作成してみます。サンプルコードdut_if.svInterfaceです。validがHighのときのdinが有効データになります。interface dut_if#( parameter BW ...
Systemverilog

SystemVerilog Event変数を使ってみる ->

はじめにあるシーケンシャルブロックから別なメソッド・シーケンシャルブロックを起動したいときにevent変数が便利です。宣言する方法は以下です。event <変数名>;下記のように使用します。-><変数名>;サンプルコードセンシビリティリスト...
Systemverilog

SystemVerilog Interfaceを使用して回路を作成する modport

はじめにInterfaceのmodportの機能を使用して回路を作成してみます。バスのプロトコルは、validがHighのとき、スレーブに設定したアドレスとaddrが等しいときのdataが有効になります。サンプルコードtb.svテストベンチ...
Systemverilog

SystemVerilog randとrandcの違い クラスのランダム変数

rand/randcの違いrand変数の範囲すべてを網羅する前に同じ値が返ることもある。(一様分布)randc変数の範囲すべてを網羅するまで同じ値は返らない。(ランダム循環)サンプルコードmodule top; class sample; ...
Systemverilog

SystemVerilog $left/$right/$low/$high/$size/$dimensions システムタスク

はじめにSystemVerilogのLRMを読んでいると配列に関する面白い?システムタスクがあったので紹介します。$left 配列の左側bit a;int b;initial begin b = $left(a); $display("%d...
スポンサーリンク