2014-12-19 1155 views
1

我有兩個順序項目類a_packet及其擴展類bad_packet。 默認情況下,使用a_packet類型。 試圖重寫a_packet實例與bad_packet,我能夠在我的UVM測試使用set_inst_override_by_name成功地做到這一點,如何使用UVM工廠的set_inst_override_by_name來覆蓋順序項

factory.set_inst_override_by_name("a_packet","bad_packet", "*"); 

現在我的問題是:如果我不想用「*」,怎麼樣瞭解序列項目實例的完整分層路徑?

我試圖利用序列項內部的get_full_name(),在驅動程序收到它之後,才知道確切的分層路徑。它顯示:

uvm_test_top.env.a_agt.a_seqr.a_sequence.a_packet 

但是,當我用上面的路徑替換*,最重要的是沒有發生。

factory.set_inst_override_by_name("a_packet","bad_packet","uvm_test_top.env.a_agt.a_seqr.a_sequence.a_packet"); 

我做錯了什麼?

+0

可能的重複[uvm set \ _inst \ _override for a sequence](http://stackoverflow.com/questions/26100386/uvm-set-inst-override-for-a-sequence) – 2014-12-19 11:06:17

+0

我上面鏈接的問題處理序列,而不是序列項目,但處理過程本質上是相同的(因爲序列是序列項目的子類別)。 – 2014-12-19 11:08:12

回答

2

當您創建數據包,你需要指定要create(..)的完整路徑相應的呼叫:

packet = a_packet::type_id::create("packet", , get_full_name()); 

如果您正在使用的uvm_do宏,你就必須改變使用明確序列API:

packet = a_packet::type_id::create("packet", , get_full_name()); 
start_item(packet); 
// ... randomize ... 
finish_item(packet); 

想法是從this DVCon紙,IV.A章節

相關問題