1)基础用法:
首先我们需要造一个喇叭,也就是create一个uvm_blocking_put_port ;
然后要找来听众,也就是在另外一个component里面create一个uvm_blocking_get_port ,注意这里用的是get_port而不是put_port了。
把听众的位置记录在一个小本本上,也就是在env或者test里面执行analysis_base库的connect函数。要注意的是,由于我们往里面加了FIFO,所以我们需要先造一个FIFO出来,然后把FIFO跟前面两步造的喇叭uvm_blocking_put_port 和听众m_get_port连接起来。
让听众接受到广播之后做出反应。这时候不用再去实现了,直接写通过get拿到pkg之后要干什么就可以了,当然要强行实现一下get我想也是可以的。如果这里变得了使用nonblocking的话,把get改成try_get就好
2)项目升级用法:与上一致;
3)底层原理分析:
常用的连接:port接imp,export接imp,port接port,export接export。
实际使用中用analysis_portàanalysis_imp 还是 portàtlm_analysis_fifoßport 可以根据实际情况自己决定。put和get系列端口与相应imp的通信通常是一对一的(可以一对多,但是本书没有给出一对多的例子
使用uvm_analysis_fifo(uvm_tlm_analysis_fifo), analysis_fifo的本质是一块缓存+两个imp. 用fifo来实现portàfifoßport,fifo上有很多export,但是这些export实际都是imp。
使用fifo还是imp自己来把握。 各有各的好处。
imp可以使用uvm_analysis_imp_decl(_标记)的macro,有时候会很方便。
而analysis_fifo可以用for循环来操作fifo数组,也可以带来代码的简洁。 imp不能在connect和new的时候用for循环。