2014-03-28 29 views
0

我是一名UVM初學者。到目前爲止,我能夠爲我的DUT創建以下環境。如何監測來自測試/序列的DUT輸出?

帶有監視器,驅動程序和來自我的DUT的所有輸入輸出接口序列的代理。 頂級UVM環境。 將有效數據發送到DUT的序列。我還沒有實現記分牌。

我遇到了一些麻煩,以瞭解如何處理場景,如下列:

對於TB-DUT接口,TB需要等待來自DUT的事件(或交易)。一旦它收到交易,結核病需要發回迴應。什麼是實施這個最好的方法?我如何從序列中監控DUT事務?我的代理商擁有監視器,可監視來自DUT的任何新輸出信號。那麼,我是否需要以某種方式將來自代理監視器的數據傳送到我的測試/序列類?我知道監視器有一個分析端口,它可以用來發送接收到的數據到記分板進行檢查。那麼,我是否需要使用相同的端口讀取DUT輸出數據,創建有效的響應並將其發送到DUT?

謝謝!

回答

5

這被稱爲從屬序列或響應者。該協議如下

  1. 從屬程序發送到驅動程序的請求 - 「請告訴我該怎麼做」
  2. 驅動程序檢測到總線電平的請求並返回信息返回序列 - 「這就是你應該這樣做「
  3. 從機序列完成準備響應所需的工作,然後向驅動程序發送一個響應項 - 」Here you go「
  4. 驅動程序用響應項的內容完成總線級響應,完成握手回到序列 - 「謝謝 你」

這在Verification Academy UVM Cookbook中有更詳細的解釋。

+0

非常感謝戴夫。我正在處理響應序列。我認爲我能夠在從DUT獲取請求數據到響應代理方面取得了一些進展。你介意看看我關於這個問題的最新問題嗎?我對uvm土地完全陌生。我將不勝感激任何輸入/指針... http://stackoverflow.com/questions/23024817/failing-to-write-in-systemverilog-mailbox – newbie

0

這可以使用uvm_object完成。

  1. 創建uvm_object基類。定義您的虛擬方法,例如wait_state,但保留爲空。
  2. 擴展該類並實現虛擬方法。將該類包含在測試平臺中並實例化一個對象。說的對象是 「my_tb」
  3. 使用uvm_config_db#(uvm_object)::集...將它傳遞給定序
  4. 抓住序usign內的對象uvm_config_db#(uvm_object)::得到...
  5. 從序列中:任何時候你可以訪問它的地方:p_sequencer.my_tb.wait_state()。