2015-12-21 103 views

回答

0

一個大問題是來自uvm_config/resource_db的警告消息。 你從這些數據庫中拋棄了get()的結果,如果你在那裏遇到問題,你永遠不會看到它。

+0

感謝您的回答戴夫。我開始使用SystemVerilog/UVM。我注意到這個警告,但我不知道如何解決它。但是如果問題可能來自那裏,我會嘗試解決它(任何想法?),編譯器提出的「解決方案」不起作用。但我認爲問題在於我試圖獲取()交易時,我不知道我是否嘗試這樣做是正確的。再次感謝。 –

+0

我解決了警告!謝謝你!編譯器不是在說錯誤的東西,而是我在做混亂。好吧,現在它顯示沒有警告,但仍然沒有答案。 –

0

我收到了你的代碼解決多個問題後,工作,有如下幾點:

1)在「my_monitor.svh」時,UVM資源數據庫鍵名從「dut_if」到「dut_vif」

改變

2)在環境的連接階段,您似乎只連接了記分板的一個分析端口。修改如下:
agent.agent_ap_after.connect(sa_sb.sb_export_after); // This line was missing agent.agent_ap_before.connect(sa_sb.sb_export_before);

3)在你的記分牌,你似乎有創建的事務對象(使用new()方法),即 'transaction_before' 和 'transaction_after'。由於分析端口get()方法本身會爲您提供填充的事務對象,因此您並不需要這樣做。所以你可以在記分板的構造函數中刪除這兩個對象的創建。

4)'my_monitor'類的run_phase實現爲空。這個班有分析端口'mon_ap_before',它連接到你的記分板的'before_fifo'。由於沒有人正在寫入此顯示器的分析端口,因此記分牌中的以下行永遠不會解鎖:
before_fifo.get(transaction_before); //Will never come out of this statement
因此,根據需要在顯示器中添加一些邏輯。

希望這會有所幫助..

+0

Sundar,真的幫了我很多!真的很感謝你的評論。我已經修復了你寫關於代碼的所有內容,並且它非常有用。例如,我沒有看到我會卡在fifo上。完成所有這4個更改後,我開始收到以下消息: –

+0

「錯誤 - [NOA]空對象訪問 scoreboard.svh,42 解除引用深度1處的對象正在使用之前,它正在構建/分配 請確保在使用它之前分配了對象。「 好像我需要「初始化」我測試的這些對象的內容: 如果(transaction_before.out_operando == transaction_after.out_operando)開始 錯誤顯示在這一行,任何想法,爲什麼?再次感謝 –

+0

嘗試在記分板中的fifos get()調用之後執行'transaction_before'和'transaction_after'變量的sprint()。很可能您從監視器傳遞的對象是NULL(空),因此也是錯誤。也可以在分析端口寫入()之前嘗試在監視器內部的對象上執行sprint()..確保您從監視器傳遞有效的事務(非空)。 – sundar

相關問題