UVM中uvm_component之间的transaction传输

有5个uvm component class:A, B, C, D, E,需要把一个transaction从A通过B, C, D传到E,怎么传输?

        方法一:使用TLM通信传输,利用多层PORT端口级联实现,如图1所示。

UVM中uvm_component之间的transaction传输_第1张图片 图1 多层PORT连接

        A component的代码为:

UVM中uvm_component之间的transaction传输_第2张图片 图2 A component代码

        B component的代码为:

UVM中uvm_component之间的transaction传输_第3张图片 图3 B component的代码

       C component和D component的代码类似于B component。在每个component中定义一个uvm_blocking_put_port端口(PORT)和次内层component的句柄,然后再build_phase中实例化,最后在connect_phase中连接起来。

        E component的代码为:

UVM中uvm_component之间的transaction传输_第4张图片 图4 E component的代码

        env的代码为:

图5 env的代码

       TLM是Transaction Level Modeling(事务级建模)的缩写,它起源于SystemC的一种通信标准。TLM通信中有三个常用的术语:put操作、get操作和transport操作。有三种端口PORT、EXPORT和IMP。在UVM中,只有IMP才能作为连接关系的终点,如果PORT或者EXPORT作为终点,则会报错。

       除了以上三种端口外,UVM中还有两种特殊的端口:analysis_portanalysis_export,用于传递transactionanalysis_portanalysis_export如果直接相连会出错,只有在analysis_export后面再连接一级uvm_analysis_imp才不会出错。

在此基础上,可以引入FIFO来进行通信,FIFO的本质是一块缓存加两个IMPFIFO中的analysis_exportblocking_get_export虽然名字中有关键字export,但是其类型却是IMP(uvm_analysis_imp)

       不过无论使用FIFO还是使用IMP,都能实现同样的目标,两者各有其优势与劣势,在实际应用中,读者可以根据自己的习惯来选择合适的连接方式。

你可能感兴趣的:(UVM)