2017-09-05 40 views
0

UVM Testbench scenario如何同步來自不同UVM代理的兩個不相關的UVM序列項目?

這是我驗證奇偶編碼器解碼器DUT的方案。此處的解碼器輸入代理是重新激活的代理,並將錯誤注入從編碼器輸出代理中的被動監視器捕獲的數據流中。

現在我已經分別爲編碼器和解碼器輸入代理序列和序列項目。但是,如何同步兩個代理,以便解碼器重新激活代理添加錯誤併爲每個數據按順序創建一個新數據包。

例如,假設編碼器以1000,1010,0100,1011的順序發送數據,並且解碼器重新激活代理以次序(一個熱位) - 0010,1000,0001,0.0100創建錯誤分組。現在都創建數據數據包彼此不相關。然而,即使從被動代理監視器接收到兩個數據,即1000和1010,再活動代理也應該將第一個數據與第一個數據包比如1000^0010進行異或。 此外,由於兩個代理都生成項目,因此解碼器在從編碼器代理接收數據(通過被動編碼器代理監視器)之前不應發送項目。

+0

從某種意義上說它是實用的,我想知道如何編碼以使兩個代理相對於彼此同步並遵循時間順序。 –

+0

你想同步序列項還是序列號? –

+0

我想要同步序列項目,以便一旦從編碼器驅動程序發送並在編碼器監視器中接收到該項目,應將解碼器項目發送到解碼器驅動程序。另外,它應該考慮監視器中的亂序接收。 –

回答

0

我想,你想使用不同對象之間的鎖定機制。

您可以使用IPC(進程間通信)方法來控制它,如事件,郵箱,信號量。

在UVM中,可以使用高級方法,如uvm_event,TLM FIFOs,這可用於您的目的。

+0

鎖定機制有幫助嗎? –

+0

你的目的是等待一方發生某種事情,然後在另一方做些事情。對?所以上面的方法對於這個目的是有用的,就像你可以等待'uvm_event'去做一些事情一樣。 –

0

一種選擇是使用config_db將endcoder事務放在那裏,並從解碼器重新激活代理中獲取它。我認爲這不是很好的方式。 另一種選擇是讓虛擬序列(包括編碼器和解碼器序列)獲取編碼器數據包並提供給解碼器序列。

+0

編碼器和解碼器都有不同的虛擬序列。我想知道是否可以通過uvm_event或通過某種FIFO來完成,以便編碼器將數據和解碼器讀取或查看數據。 –

+0

在那種情況下,我認爲端口是另一種選擇,使用put和get端口。你可以在uvm例子文件夾 – haykp

+0

中找到這樣的例子。你可以請我直接指向這樣一個示例鏈接,其中兩個代理使用put和get端口進行同步。將很有趣學習 –

相關問題