UVM(五)

UVM TLM(Transaction level modeling)
TLM为组件之间的通信建立专门的通信信道,避免通信出现混乱
(例如reference model只能从master_agent的monitor获取数据)
在这里插入图片描述
transaction事务的传送分为put(producer主动发起事务的传输)和get(consumer主动从producer获取数据)其中使用port.put()函数(在consumer中定义),以及port.get()函数(在producer中定义)

常见的TLM port:
uvm_put_port #(T);//(port要传输的transaction的类型)
uvm_blocking_put_port#(T);
uvm_unblocking_put_port#(T);
uvm_get_port#(T);

put()//put()是一个task,可能会阻塞当前进程直到transaction传输成功
try_put()//try_put()是一个function,不会阻塞当前进程,不管transaction是否完成传输都会立刻返回
can_put()//can_put()是一个function,不会阻塞当前进程,不会发生transaction传输,只是检查对方是否准备好接受
get()//get()是一个task,会阻塞当前进程直到成功获取了一个transaction之后返回
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由于实现操作的方法在import中定义,所以不能将port->export而没有import
在这里插入图片描述
在这里插入图片描述
一、put模式的代码使用方法
在这里插入图片描述
reference_model扩展于uvm_component基类;由于reference_model是接收方,需要在其中定义import端口;之后实例化需要构造的对象;

在这里插入图片描述
在agent中加入export;连接reference_model和monitor
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
二、get模式的使用方法
在这里插入图片描述
在这里插入图片描述
monitor将需要发送的事务存放至fifo中,一旦有get函数的调用,立即将事务发送给reference_model
在这里插入图片描述
在这里插入图片描述
三、FIFO模式的使用方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
UVM analysis component

  • reference model(模拟DUT的行为,并根据输入计算出相应输出的组件)
  • scoreboard(将DUT的输出与从参考模型获取的期望值相对比,判断DUT是否正常工作的组件)
    在这里插入图片描述
    1、构建slave agent中的monitor
    在这里插入图片描述
    使用interface将monitor与DUT相连接,在run phase中,实现monitor对DUT的检测功能,并将事务打包给scoreboard
    在这里插入图片描述
    在这里插入图片描述
    2、将monitor放入agent当中,构建agent
    在这里插入图片描述
    3、创建scoreboard
    在这里插入图片描述
    4、为reference_model创建一个端口
    在这里插入图片描述
    5、创建两个FIFO,将组件与FIFO连接起来
    在这里插入图片描述
    在这里插入图片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章