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.sv package pkg1; `include "uvm_macros.svh" import uv... 2022.08.12 SystemverilogUVM
Systemverilog distの重みづけの動作確認 SystemVerilog distでrand変数に重みづけする distでrand変数に重みづけができます。 動作確認してみます。 「:=」の動作確認 0:10%, 1:30%, 2:30%, 4:30% の出現確率で10,000回実行します。 module top... 2022.08.10 Systemverilog
Systemverilog SystemVerilog constraintでrand変数に制約をつける はじめに SytemVerilogのclassの変数はrandを付けることで乱数にすることができます。 rand変数はrandomizeメソッドで乱数が生成されます。 このとき、constraintで生成される乱数に制約を付けることができま... 2022.07.14 Systemverilog
Systemverilog ノンブロッキングとブロッキングでFFの動作が変わる話 SystemVerilog はじめに FFを作るとき、ノンブロッキング代入とブロッキング代入で多段FFの動作が変わります。 入力を2段のFFで受けて出力する回路でその動作を見ていきます。 ノンブロッキング nonblocking.sv module dut( inpu... 2022.07.07 Systemverilog
Systemverilog SystemVerilog Interfaceで回路を作成する 内部回路 はじめに Interfaceブロックの中に回路を作成してみます。 サンプルコード dut_if.sv Interfaceです。validがHighのときのdinが有効データになります。 interface dut_if#( paramete... 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 sa... 2022.06.09 Systemverilog
Systemverilog SystemVerilog $left/$right/$low/$high/$size/$dimensions システムタスク はじめに SystemVerilogのLRMを読んでいると配列に関する面白い?システムタスクがあったので紹介します。 $left 配列の左側 bit a; int b; initial begin b = $left(a); $displa... 2022.06.02 Systemverilog