uvm通信-uvc通信方式三之uvm_tlm_fifo & uvm_tlm_analysis_fifo


注1:采用fifo,用戶可以不用定義put/get/write等函數或任務;

1.uvm_tlm_analysis_fifo(參數化的類)

(1) uvm_tlm_analysis_fifo中的*_export,雖然名字中有export,但是本質上都是IMP;

(2) uvm_tlm_analysis_fifo內的緩沖使用system verilog中的mailbox實現;

(3)需要補充fifo的相關函數,如put,get,try_put,try_get;

注:下圖表示當sb收到monitor通過ap傳來的result時,會從cmd_f中pop trans,得到cmd信息,根據cmd信息計算expected result,並與actual result進行比較;

注:注意下圖中uvm_tlm_analysis_fifo.try_get(cmd)的使用;

注:下圖為env中uvc間的連接;

2.uvm_tlm_fifo與uvm_tlm_analysis_fifo

(1) uvm_tlm_fifo與uvm_tlm_analysis_fifo為FIFO的兩種類型(本質為uvm_component);

(2) 二者的差異在於uvm_tlm_analysis_fifo有一個analysis_export端口,並且有一個write函數,而uvm_tlm_fifo沒有;

3.使用FIFO通信

(1) FIFO的本質是一塊緩存加兩個IMP,可以在實例化時,通過指定fifo的size參數來指定FIFO緩存的上限, 默認情況下為1. 若要把緩存設置為無限大小,將傳入的size參數設置為0即可.

function new(string name, uvm_component parent=null, int size=1);

(2)fifo的函數size與flush

注1:size函數可以返回fifo緩存的上限值;

注2:flush函數可以用於清空FIFO緩存中的所有數據,一般用於復位等操作;

(3) 在monitor與FIFO的連接關系中, monitor依然是analysis_port, FIFO中是uvm_analysis_imp,數據流和控制流的方向相同;

(4) 在scoreboard與FIFO的連接關系中, scoreboard中采用blocking_get_port端口. FIFO中使用的是一個get端口的IMP,在這種連接關系中, 控制流是從scoreboard到FIFO, 而數據流是從FIFO到scoreboard.

(5) FIFO中的analysis_export和blocking_get_export雖然名字中有關鍵字export,但是其類型是IMP. 

 

 

 

 

 

 

 


免責聲明!

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



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