uvm_user_guide_1.2 -- ch2 TLM 通信

本文详细介绍了UVM中TLM-1的实现,包括transaction的基本概念,如transaction对象的属性和操作,以及transaction级通信、基本TLM通信、进程间通信。还讲解了 blocking 与 nonblocking 通信方式,以及如何连接transaction级组件。此外,提到了TLM的层次性连接和analysis通信,分析port和export的作用。
摘要由CSDN通过智能技术生成

2.1 TLM-1的实现

2.1.1 Basics

2.1.1.1 Transactions

在UVM中,transaction是包含了两个组件之间传递的信息的类对象。例如,一个传输总线协议信息的transaction以如下方式建模:

class simple_trans extends uvm_sequence_item;
    rand data_t data;
    rand addr_t addr;
    rand enum {WRITE, READ} kind;
    constraint c1 { addr < 16'h2000; }
    ...
endclass

transaction对象包含变量、约束以及其他需要对transaction进行操作的域和方法。此外,上面的transaction可以被扩展到包含更多信息的transaction,也可以定义包含多个其他transaction的更高级别的transaction。

2.1.1.2 Transaction级通信

Transaction级的接口定义了一系列使用transaction对象作为参数的方法。一个TLM port 在特定的连接中定义了这些方法,TLM export 提供了这些方法的实现。将 port 连接到 export 后,在 port 中可以调用该方法进行执行。

2.1.1.3 基本TLM通信

最基本的transaction级操作允许一个组件将transaction put 到另一个组件。
在这里插入图片描述

producer的方块表示一个 port,consumer的圆圈表示一个 export。producer产生transaction然后通过其 put_port 发送:

class producer extends uvm_component;
    uvm_blocking_put_port #(simple_trans) put_port;
    ...
    put_port = new("put_port", this);  // instantiated in build phase
    ...
    virtual task run();
        simple_trans t;
        for(int i=0; i<N; i++) begin
            put_port.put(t);
        end
    endtask

:uvm_ * _port的参数是要传输的transaction类型

put() 方法由consumer实现:

class consumer extends uvm_component;
    uvm_blocking_put_imp #(simple_trans, consumer) put_export;
    ...
    task put(simple_trans t);
        ...
    endtask

:uvm_ * _imp的第一个参数是要传输的transaction类型,第二个参数是实现传输方法的对象类型

另一种与 put 操作相对应的操作是 get:
在这里插入图片描述

在这种情况下,consumer通过 get 端口向producer请求获取transaction。

class get_consumer extends uvm_component;
    uvm_blocking_get_port #(simple_trans) get_port;
    ...
    get_port = new("get_port", this);  //
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值