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.sv package pkg1; `include "uvm_macros.svh" import uv...
Systemverilog

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

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

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

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

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

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

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

はじめに Interfaceブロックの中に回路を作成してみます。 サンプルコード dut_if.sv Interfaceです。validがHighのときのdinが有効データになります。 interface dut_if#( paramete...
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 sa...
Systemverilog

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

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