uvm通信-uvc通信方式一之blocking/nonblocking_get/put/transport_port/export/imp


1.根據阻塞非阻塞,端口可分為uvm_blocking_*,uvm_nonblocking_*與uvm_*;

(1) nonblocking端口的所有操作都是非阻塞的,換言之,必須用函數實現,而不能用任務實現;

(2) uvm_blocking*只支持阻塞操作,uvm_nonblocking_*只支持非阻塞操作,uvm_*既支持阻塞操作,又支持非阻塞操作;

2.根據get/put/transport/peek/get_peek,端口可分為uvm_blocking/nonblocking_get_*, uvm_blocking/nonblocking_put*, uvm_blocking/nonblocking_transport*等;

 

3.根據port/export/imp,端口可分為uvm_*blocking_put/get/transport_port/export/imp;

(1) PORT, EXPORT, IMP體現的是控制流,在這種控制流中,PORT具有高優先級, EXPORT具有低優先級, IMP的優先級最低.

4.uvm_blocking_put*端口的使用

4.1不同類型port之間的連接(port/export/imp)以及imp與IMP的介紹

4.1.1PORT->EXPORT

(1) 僅有PORT與EXPORT,並實現二者的連接是不夠的,需要端口IMP的參與,只有IMP可以作為連接關系的終點;

4.1.2imp與IMP

(1) 下圖中的imp指的是一種tlm port類型,與port, export, imp相對應; 

(2) 下圖中的IMP指的是實現這個imp接口的component; 

4.1.3PORT->EXPORT->IMP

(1)A_port連接到B_export, B_export連接到B_imp;

(2)調用A.A_port.put(transaction)操作時, 會調用B.B_export.put(transaction); B.B_export.put(transaction)會調用B.B_imp.put(transaction); B.B_imp.put(transaction)會調用B.put(transaction).

(3)最終A_port的操作會落到B.put上, 這個task是屬於B的task,需要由B這個component來實現,所以IMP要和一個component相對應.

(4)port/export/imp的連接既connect函數的調用一定要在component的connect_phase實現;

4.1.4PORT->IMP(以uvm_blocking_put_*為例)

4.1.5EXPORT->IMP(以uvm_blocking_put_*為例)

(1) PORT可以與IMP相連接,同樣EXPORT也可以與IMP相連接,其連接方法與PORT和IMP的連接完全一樣;

4.2 同種類型port之間的連接(port與port, export與export)

4.2.1 PORT->PORT(以uvm_blocking_put_*為例)

(1) 在UVM中,支持帶層次的連接關系;PORT與PORT之間的連接不止局限於兩層,可以有無限多層.

4.2.2 EXPORT->EXPORT(以uvm_blocking_put_*為例)

(1) UVM同樣支持EXPORT與EXPORT之間的連接;

(2) EXPORT與EXPORT之間的連接也不只限於兩層,也可以有無限多層;

 

 

5.uvm_blocking_get端口的使用

(1) 與blocking_put系列端口類似, blocking_get_port也可以直接連接到blocking_get_imp,同時blocking_get_port也可以連接到blocking_get_port, blocking_get_export也可以連接到blocking_get_export; 但是在這些連接關系中,連接的終點必須是一個IMP.

(2) 在下圖中,數據流仍然是從A到B,但是A由動作發起者變成了動作接收者,而B由動作接收者變成了動作發起者;

 

 

 

 

 6.uvm_blocking_transport端口的使用

(1) transport系列端口與put和get系列端口不一樣; 在put和get系列端口中,所有的通信都是單向的,而在transport系列端口中,通信變成了雙向的;

(2) A中調用transport任務,該task有兩個參數,A中把生成的transaction作為transport的第一個參數;B中的transport任務接收到這筆transaction,會根據這筆transaction做某些操作,並把操作的結果作為transport的第二個參數發送出去; A根據接收到的rsp決定后面的行為;

 

 

7.nonblocking端口的使用(以nonblocking_put為例)

(1) nonblocking端口的所有操作都是非阻塞的,換言之,必須用函數實現,而不能用任務實現;

(2) 示例:

注1:由於端口變成了非阻塞的,所以在送出transaction之前需要調用can_put函數來確認是否可以執行put操作,如上圖所示;

注2:A中也可以不使用can_put,而直接調用try_put;這種情況下,即使不使用can_put,B中依然需要定義一個名字為can_put的函數,函數里可以沒有任何內容;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM