Systemverilog UVM uvm_config_dbでsetした値をログに表示する uvm_config_db#()::dump();完結に、uvm_config_db#(<type>)::set()で登録した値はuvm_config_db#()::dump();でログに表示されます。<type>は指定してもしなくても、す... 2022.08.12 SystemverilogUVM
Systemverilog UVM TPRGEDが出た uvm_warning 現象同じAgentを継承して別々なEnvを作成してそのEnvをテストベンチに組み込むとTPRGEDのWarningが出ますtop.svpackage pkg1; `include "uvm_macros.svh" import uvm_pk... 2022.08.12 SystemverilogUVM
Systemverilog distの重みづけの動作確認 SystemVerilog distでrand変数に重みづけするdistでrand変数に重みづけができます。動作確認してみます。「:=」の動作確認0:10%, 1:30%, 2:30%, 4:30%の出現確率で10,000回実行します。module top; clas... 2022.08.10 Systemverilog
Systemverilog SystemVerilog constraintでrand変数に制約をつける はじめにSytemVerilogのclassの変数はrandを付けることで乱数にすることができます。rand変数はrandomizeメソッドで乱数が生成されます。このとき、constraintで生成される乱数に制約を付けることができます。m... 2022.07.14 Systemverilog
Systemverilog ノンブロッキングとブロッキングでFFの動作が変わる話 SystemVerilog はじめにFFを作るとき、ノンブロッキング代入とブロッキング代入で多段FFの動作が変わります。入力を2段のFFで受けて出力する回路でその動作を見ていきます。ノンブロッキングnonblocking.svmodule dut( input clk... 2022.07.07 Systemverilog
Systemverilog SystemVerilog Interfaceで回路を作成する 内部回路 はじめにInterfaceブロックの中に回路を作成してみます。サンプルコードdut_if.svInterfaceです。validがHighのときのdinが有効データになります。interface dut_if#( parameter BW ... 2022.07.04 Systemverilog
Systemverilog SystemVerilog Event変数を使ってみる -> はじめにあるシーケンシャルブロックから別なメソッド・シーケンシャルブロックを起動したいときにevent変数が便利です。宣言する方法は以下です。event <変数名>;下記のように使用します。-><変数名>;サンプルコードセンシビリティリスト... 2022.07.02 Systemverilog
Systemverilog SystemVerilog Interfaceを使用して回路を作成する modport はじめにInterfaceのmodportの機能を使用して回路を作成してみます。バスのプロトコルは、validがHighのとき、スレーブに設定したアドレスとaddrが等しいときのdataが有効になります。サンプルコードtb.svテストベンチ... 2022.06.17 Systemverilog
Systemverilog SystemVerilog randとrandcの違い クラスのランダム変数 rand/randcの違いrand変数の範囲すべてを網羅する前に同じ値が返ることもある。(一様分布)randc変数の範囲すべてを網羅するまで同じ値は返らない。(ランダム循環)サンプルコードmodule top; class sample; ... 2022.06.09 Systemverilog
Systemverilog SystemVerilog $left/$right/$low/$high/$size/$dimensions システムタスク はじめにSystemVerilogのLRMを読んでいると配列に関する面白い?システムタスクがあったので紹介します。$left 配列の左側bit a;int b;initial begin b = $left(a); $display("%d... 2022.06.02 Systemverilog