私はこれに新しいので、Systemverilogにカバレッジモニタを書き込む方法の例を教えてください。私はモニターを理解する必要があります。例や参考資料もすべていいです。SystemVerilogにUVMモニタを書き込む方法
-3
A
答えて
2
John Aynsley(Doulos製)は、あなたに役立つセクションがあるUVMに関する良い記事を書いています。この論文はDVCon 2011で公開されており、free copyを得ることができます: "メインストリームユーザーによる機能検証のための容易なUVM"。
このホワイトペーパーで説明したように、考えられるのはuvm_monitor
とuvm_subscriber
です。 UVMサブスクライバ内のすべてのFunctional Coverageコードが表示されていても、そのコードをモニタ内に置くことはできません。以下に示すように
モニタコードがなります
class my_monitor extends uvm_monitor;
`uvm_component_utils(my_monitor)
uvm_analysis_port #(my_tx) aport;
virtual dut_if dut_vi;
...
task run;
forever
begin
my_tx tx;
// Sense the DUT pins on a clock edge
@(posedge dut_vi.clock);
tx = my_tx::type_id::create("tx");
tx.cmd = dut_vi.cmd;
tx.addr = dut_vi.addr;
tx.data = dut_vi.data;
aport.write(tx);
end
endtask
endclass
を紙に示すように、あなたは、加入者を作成します。
class my_subscriber extends uvm_subscriber #(my_tx);
`uvm_component_utils(my_subscriber)
// Coverage registers
bit cmd;
int addr;
int data;
covergroup cover_bus;
coverpoint cmd;
coverpoint addr;
coverpoint data;
endgroup
...
// Function called through analysis port
function void write(my_tx t);
cmd = t.cmd;
addr = t.addr;
data = t.data;
cover_bus.sample();
endfunction
endclass
を最後に、あなたは、モニターと加入者の両方をインスタンス化次のコンポーネント階層のレベルアップを行い、論文のように接続します。
class my_env extends uvm_env;
`uvm_component_utils(my_env)
my_monitor monitor;
my_subscriber subscriber;
...
function void build;
super.build();
monitor = my_monitor::type_id::create("monitor" , this);
subscriber = my_subscriber::type_id::create("subscriber", this);
endfunction
function void connect;
monitor.aport.connect(subscriber.analysis_export);
endfunction
endclass
PS。論文に示されているコードのソースファイルは、すべてDoulos websiteからダウンロードできます。
関連する問題
- 1. バイナリ書き込みSystemVerilog
- 2. 印刷モニタから複数のTCPポートに書き込む
- 3. Readerのアプリケーションインスタンスを書き込むときに<*>を書き込む方法
- 4. $ .getJSONにオプションパラメータを書き込む方法
- 5. インクルードファイルにハイパーリンクを書き込む方法
- 6. バッファにバッファを書き込む方法
- 7. ローカルドキュメントライブラリにファイルを書き込む方法
- 8. Log4jをコンソールに書き込む方法
- 9. ログインプラグインをMediaWikiに書き込む方法
- 10. リンクリストオブジェクトをファイルに書き込む方法
- 11. Javadocにタグを書き込む方法
- 12. インパラデータベースにスパークデータフレームを書き込む方法
- 13. カーネルスペースにパケットを書き込む方法
- 14. フォームデータをテキストドキュメントに書き込む方法
- 15. アレイにイメージを書き込む方法
- 16. ビンファイルにシングルビットを書き込む方法
- 17. バイナリファイルに書き込む方法は?
- 18. VB.NET:MVCのPlaceHolderに書き込む方法
- 19. パーティション/データファイルに書き込む方法は?
- 20. ディスクに直接書き込む方法
- 21. DLQに書き込む方法は?
- 22. OCamlファイルに書き込む方法は?
- 23. Jetty:アクセスログに書き込む方法
- 24. UWP C#イベントログに書き込む方法
- 25. チャンネル3に書き込む方法は?
- 26. Uint8ClampedArrayに書き込む方法は?
- 27. C#でファイルに書き込む方法
- 28. Ext.jsのmemoryproxyに書き込む方法
- 29. ContactStore.Contact.Phonesに書き込む方法は?
- 30. SPANタグに書き込む方法は?