story · 2020年06月10日

数字IC验证系列之事务级建模

提高验证生产力的关键之一是提高验证的抽象层次。

DUT的实际接口是信号级的,我们有必要在事务级管理大量的验证任务,例如

产生激励和收集覆盖率数据。

UVM提供了一组可用于连接各个组件的事务级通信接口。 TLM接口的使用将验证环境中的组件相互隔离开来。当RTL被修改时,UVM验证环境只需要替换事务级接口和DUT信号级接口的****转换。

TLM(transaction-level modeling)事务级建模,是一种用于构建高度抽象组件和模型的建模风格。

在UVM中,事务是一个类对象,uvm\_transaction(从uvm\_object扩展),

包括建模两个组件之间通信所需的任何信息。下面是一个简单的总线协议事务级建模:

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

事务对象包括变量,约束以及操作数据的方法。
610.png
producer生成事务并将它们发送给consumer:

class producer extends uvm_component;
uvm_blocking_put_port #(simple_trans) put_port; // 1 parameter
function new( string name, uvm_component parent);
put_port = new(“put_port”, this);
...
endfunction
virtual task run();
  simple_trans t;
  for(int i = 0; i < N; i++) begin
  // Generate t.
  put_port.put(t);
end
endtask

consumerput调用put()。

class consumer extends uvm_component;
uvm_blocking_put_imp #(simple_trans, consumer) put_export; // 2 parameters
...
task put(simple_trans t);
  case(t.kind)
    READ: // Do read.
    WRITE: // Do write.
  endcase
endtask
endclass

在许多情况下,组件可能需要独立运行,producer创建事务的同时,而consumer同时操作事务。UVM提供了uvm\_tlm\_fifo通道以促进不同进程间的此类通信。producer将事务放入uvm\_tlm\_fifo,而consumer从uvm\_tlm\_fifo获事务:
610.bmp
TLM接口的使用将验证环境中的每个组件与其他组件隔离开来。

较小的组件可以分层次地形成更大的组件。父级组件可以对子级组件进行访问。

愿将你的时光,温柔以待

本文转载自公众号:芯片数字实验室
原文链接:
https://mp.weixin.qq.com/s/AA1cqcKkU1MoWWSa0825VQ
未经作者同意,请勿转载!

推荐阅读
想了解更多内容,欢迎关注芯片数字实验室专栏
推荐阅读
关注数
12313
内容数
219
前瞻性的眼光,和持之以恒的学习~
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息