1

シーケンスとその動作を理解しようとしている基本的な UVM ベースの TB にいくつかの問題があります。

  1. bvalid は、応答項目で更新されるときに、ドライバーで常に 0 として選択されます。
  2. 最後の 2 つのトランザクションのいくつかのエラー メッセージ (# UVM_ERROR @ 18: uvm_test_top.axi_agent1.axi_base_seqr1@@axi_base_seq1 [uvm_test_top.axi_agent1.axi_base_seqr1.axi_base_seq1] 応答キューのオーバーフロー、応答が削除されました)

EDA Playground http://www.edaplayground.com/x/3x9のコンパイル コードへのリンクは次のとおりです 。

私が欠けているものに関する提案はありますか??

ありがとう

ベンクスタート

4

1 に答える 1

2

$urandom_range の仕様を見ると、署名が次のように表示されますfunction int unsigned $urandom_range( int unsigned maxval, int unsigned minval = 0 )。呼び出しをに変更すると$urandom_range(1, 0)、機能するはずです。

2 番目のエラーは、ドライバーから応答を送信していて、シーケンスでそれらを取得していないという事実から発生します。これはそれを行う行です: seq_item_port.item_done(axi_item_driv_src);. 単に実行するseq_item_port.item_done();(応答を送信しない) かget_response()、シーケンスの後に を呼び出しますfinish_item()。私が通常行うことは、元のリクエストのフィールドを更新してitem_done(). たとえば、読み取りトランザクションを開始する場合、ドライバーで制御信号を駆動し、DUT が応答するのを待ち、DUT からdata取得したデータで要求のフィールドを更新item_done()し、ドライバーを呼び出して要求をマークします。したように。このようにして、シーケンスでこのデータが必要な場合 (たとえば、将来のアイテムを制約するため) に取得できます。

于 2014-04-14T08:17:37.387 に答える