0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

UVM TLM的基本概念介绍

芯片验证工程师 来源:芯片验证工程师 2023-05-24 09:17 次阅读

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中的信息表明了建模的抽象级别。上面的simple_trans可以被扩展为包含更多的信息(例如要注入的等待状态的数量、传输的大小或其他属性),还可以对此transaction扩展以增加更多定向约束。

Transaction-Level 通信

Transaction-level接口定义了一组使用transaction作为参数的方法。TLM port定义了一组方法,与之相连的TLMexport提供了这些方法的实现(implementation)。

基本TLM通信

最基本的transaction-level操作就是一个组件将一个transactionput给另一个组件上。

c8eecb2e-f983-11ed-90ce-dac502259ad0.png

producer 上的方框表示一个port,consumer上的圆圈表示export。

producer生成transactions并将其发送出去:

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

uvm_*_port参数化为将要通信的transaction类型。put()调用的实际实现由consumer提供。

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

uvm_*_imp接受两个参数:transaction的类型和声明方法实现的对象类型。producer中的put()调用将阻塞,直到consumer的put实现完成。除此之外,producer的操作完全独立于put的实现(uvm_put_imp)。事实上,consumer可以被另一个也实现了put方法的组件所取代,producer可以继续以完全相同的方式工作。

所以说,TLM促进了验证环境开发的模块化,因为一个清晰的接口定义,所以组件很容易复用。

相反的操作是get

c904faf2-f983-11ed-90ce-dac502259ad0.png

在这种情况下,consumer通过其get端口向producer请求transactions:

class get_consumer extends uvm_component;
uvm_blocking_get_port #(simple_trans) get_port;
function new( string name, uvm_component parent);
  get_port = new(“get_port”, this);
  ...
endfunction
virtual task run();
  simple_trans t;
for(int i = 0; i < N; i++) begin
// Generate t.
    get_port.get(t);
  end
endtask

get()实现由producer提供。

class get_producer extends uvm_component;
  uvm_blocking_get_imp #(simple_trans, get_producer) get_export;
  ...
task get(output simple_trans t);
    simple_trans tmp = new();
// Assign values to tmp.
    t = tmp;
  endtask
endclass

与上面put()一样,get_consumer的get()将阻塞,直到get_producer的方法完成。在TLM术语中,put()和get()是阻塞方法(blocking)。

在这两个示例中,都有一个进程在运行,控制流都是从port传递到export,而数据流都是从producer到consumer。

进程间通信

在上⾯的put ⽰例中,consumer只有在其 put() ⽅法被调⽤时才会处于活动状态。在许多情况下,组件可能需要独⽴运⾏,其中producer在⼀个进程中创建transactions,⽽consumer需要在另⼀个进程中对这些transactions进⾏操作。

UVM 提供了 uvm_tlm_fifo来促进这种进程间通信。uvm_tlm_fifo实现了所有的TLM接⼝⽅法,因此producer将transaction放⼊uvm_tlm_fifo,⽽consumer则独⽴从fifo中获取transaction,如下图所⽰。

c91b3894-f983-11ed-90ce-dac502259ad0.png

当producer向fifo中put一个transaction时,如果fifo已满则阻塞,否则成功将transaction放入fifo并立即返回。如果fifo中存在transaction,get操作将立即返回这个transaction,并且从fifo中删除这个transaction,否则它将阻塞直到能够获取一个transaction。

因此,两次连续的get()将向consumer产生不同的transaction。而 peek()方法返回transaction的副本而不删除它,所以两次连续的peek()将返回同一transaction的副本。

阻塞(Blocking)和非阻塞(Nonblocking)

到目前为止我们看到的接口都是阻塞的(blocking),阻塞任务不允许失败,阻塞执行直到它们完成。阻塞期间,仿真时间会继续向后走。相反,非阻塞任务调用会立即(同一个delta cycle,不消耗仿真时间)返回。所以,在 UVM 中,非阻塞任务调用就是一个functions。

class consumer extends uvm_component;
uvm_get_port #(simple_trans) get_port;
task run;
  ...
for(int i=0; i<10; i++)
if(get_port.try_get(t))
//Do something with t.
      ...
endtask
endclass

如果存在transaction,它将在参数中返回,函数调⽤本⾝将返回TRUE。如果不存在transaction,函数将返回FALSE。类似地,还有try_peek()和try_put()⽅法 。

连接Transaction-Level组件

在为transaction-level组件定义了ports和exports之后,它们之间的连接是通过上一级验证组件中的connect()方法完成的。在验证环境中,ports和exports之间的 connect() 调用建立peer-to-peer连接或者层次化的连接,最终连接都终止于put()或者get()方法的实现。当组件调用

put_port.put(t);
意味着它实际上调用
target.put_export.put(t);
其中target是port连接到的组件。

Port/Export 兼容性

UVM中TLM 通信的另一个优点是在运行用例前检查所有TLM 连接的兼容性。为了使连接有效,export必须提供对应的方法并且数据参数类型相同。

blocking_put_port可以连接到 blocking_put_export 或 put_export,blocking_put_export需要实现put()方法的实现,put_export 还提供 try_put() 和 can_put()的实现。

​​​




审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • UVM
    UVM
    +关注

    关注

    0

    文章

    181

    浏览量

    19017
  • TLM
    TLM
    +关注

    关注

    1

    文章

    32

    浏览量

    24696
  • FIFO存储
    +关注

    关注

    0

    文章

    103

    浏览量

    5919

原文标题:UVM TLM 的基本概念

文章出处:【微信号:芯片验证工程师,微信公众号:芯片验证工程师】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言基本概念

    C语言基本概念
    发表于 08-01 02:00

    EMI的基本概念

    摘 要: 介绍了电磁干扰(EMI)的基本概念、危害及抑制技术,指出了强化管理,发展EMI抑制技术的重要意义。关键词:电磁干扰;抑制技术;EMC标准;管理1 电磁干扰基本概念在复杂的电磁环境中,任何
    发表于 05-30 06:28

    天线分集技术的基本概念介绍

    基本概念往往有助于理解多变的无线电通信链接品质,一旦理解了这些基本概念,其中许多问题可以通过一种低成本、易实现的被称作天线分集(antenna diversity)的技术来实现。
    发表于 07-02 06:04

    RAM技术的基本概念

    目前的铁路和电力及航空航天等多个行业已纷纷推行系统可靠性分析RAM技术,研发最佳的设备运行维护方案,从而消除设备隐患,避免设备事故发生,降低装置非计划停工次数和设备运行维护费用,促进装置安全长周期运行,具有重要的现实意义。本文主要概括介绍RAM技术的基本概念
    发表于 12-16 07:04

    阻抗控制相关的基本概念

    阻抗控制部分包括两部分内容:基本概念及阻抗匹配。本篇主要介绍阻抗控制相关的一些基本概念
    发表于 02-25 08:11

    AGV的基本概念及基本结构组成

    AGV基础知识一、AGV的基本概念二、AGV的基本结构硬件组成软件组成1.硬件结构2.单机结构3.主要类型4.主要引导方式介绍5.驱动方式介绍6.AGV的移载方式三、AGV的控制系统1.AGV
    发表于 09-14 08:23

    USB基本概念及从机编程方法介绍

    慕课苏州大学.嵌入式开发及应用.第四章.较复杂通信模块.USB基本概念及从机编程方法0 目录4 较复杂通信模块4.4 USB基本概念及从机编程方法4.4.1 课堂重点4.4.2 测试与作业5 下一
    发表于 11-08 09:14

    Uart协议(即串口)的基本概念及相关知识介绍

    一一介绍,今天要来了解的是Uart协议,即我们通常所说的串口通信。一、Uart协议(即串口)的基本概念UART全称为Universal Asynchronous Receiver
    发表于 01-17 08:55

    PPP协议的基本概念

    课程介绍.. . . . 2课程目标.. . . . 2相关资料.. . . . 2第一节 PPP协议基本概念31.1 概述31.2 PPP协议的基本概念 . 31.3 PPP协议的特点. 4小 结. . 4习 题. . 4第二
    发表于 06-24 17:11 16次下载

    详细介绍时序基本概念Timing arc

    时序分析基本概念介绍——Timing Arc
    的头像 发表于 01-02 09:29 2.4w次阅读
    详细<b class='flag-5'>介绍</b>时序<b class='flag-5'>基本概念</b>Timing arc

    眼图基本概念介绍.ppt

    眼图基本概念介绍.ppt
    发表于 11-08 15:05 3次下载

    UVM Transaction-Level验证组件

    如下图所示,UVM中的TLM接口为组件之间Transaction的发送和接收提供了一套统一的通信方法。
    的头像 发表于 05-29 09:31 456次阅读
    <b class='flag-5'>UVM</b> Transaction-Level验证组件

    UVM中基于SOCKET通信的TLM2.0介绍

    TLM2.0在2009年成为OSCI标准,主要用于构造总线系统的SystemC模型。
    的头像 发表于 06-25 09:58 1663次阅读
    <b class='flag-5'>UVM</b>中基于SOCKET通信的<b class='flag-5'>TLM</b>2.0<b class='flag-5'>介绍</b>

    介绍时序分析的基本概念lookup table

    今天要介绍的时序分析基本概念是lookup table。中文全称时序查找表。
    的头像 发表于 07-03 14:30 915次阅读
    <b class='flag-5'>介绍</b>时序分析的<b class='flag-5'>基本概念</b>lookup table

    时序分析Slew/Transition基本概念介绍

    今天要介绍的时序分析基本概念是Slew,信号转换时间,也被称为transition time。
    的头像 发表于 07-05 14:50 2105次阅读
    时序分析Slew/Transition<b class='flag-5'>基本概念</b><b class='flag-5'>介绍</b>