UVM layering sequence for layered protocol

OSI(Open System Interconnect )模型中,将网络结构分为7层,自上而下:应用层,表示层,会话层,传输层,网络层,链路层,物理层。每层都有相应的协议和对应的数据结构。
IC中常见的如PCIe,USB,UFS等都是分层传输的协议。对于这些高速IP,其验证环境通常也采用分层结构,方便扩展和重用。

UVM common architecture

常见的UVM验证结构从功能上划分,也是层次化的,分为 test,scenario,functional,command,signal;UVC (UVM verification component)中的sequencer,driver,monitor组成一个完成的agent。
在这里插入图片描述
sequence可以看作一个单线程的任务task body(),通过产生一些transaction实现一种场景scenario
sequencer可以看作arbiter,负责调度众多的sequence,将transaction传递给driver
driver则根据transaction执行具体的signal驱动任务
在这里插入图片描述
上述单一UVC的结构适用于模块级的验证;对于USB这类复杂的分层协议,适合采用layering sequence或者chained sequencer的验证结构。

Layering Sequence

UVM在设计之初就支持layering sequenceUniversal Verification Methodology (UVM) 1.2 User’s Guide6.5.2 Protocol Layering 小节有相应介绍。

在这里插入图片描述
在层级结构中,分为TX,RX两个方向;每一层对应一个协议层和一个transaction类;每一层都有对应的sequencer和sequence;

TX方向,HL'seqHL'seqr上启动;HL'seqr仲裁之后将HL'seq产生的tr传递给LL'seqLL'seq对接收到的HL'tr处理生成LL'trLL'seqLL'seqr上启动;LL'seqr仲裁之后将tr传递给DrvDrv将解析LL'tr,并驱动到interface上。
layering sequence如下图:
在这里插入图片描述

LL'seq像Drv一样,通过调用uvm_seq_item_pull_port中的get_next_item,从HL'seqr中获得tr;但是seq不属于uvm_component,不支持TLM机制,所以LL'seq调用的是其所挂载的LL'seqr上的pull port;LL'seqrHL'seqr在agent内完成port连接;
LL'seqbody()任务是forever循环的,一直请求从HL pull到tr;

RX方向,LL'mon监测interface生成对应的tr,通过uvm_analysis_port调用write函数将tr发送给HL'monHL'mon将收到的LL'tr解析或封装后成为HL'tr,再广播给其他uvm component
HL'mon除了连接到LL'mon,也可以和其他component通讯。

layering sequence在结构上多了对应的sequencer和transaction,以及一些连接port。

LL'seqr可以挂载多个layering sequence,比如USB中一个 2.0 sequence,一个 3.0 sequence;Ethernet中一个IPv4 sequence,一个IPv6 sequence;如下图所示:
在这里插入图片描述
上述描述的都是两层处理,对于USB这类分为protocol,link,phy三层协议的IP,需要分为三层处理。

Layering Agents

layering agents适用于各协议层级已拥有独立的agent,当需要构建层级时,可以override配置现有的agent构建。
在这里插入图片描述
如上图,HL'agt原有的driver和monitor可以负责interface上的驱动和采样;当需要配合LL'agent使用时,layering driver和layering monitor通过facotory机制,将取代原有的driver和monitor;
Layering Driver从HL’seqr pull到HL’tr,并根据协议转化成LL'tr;调用调用passthru sequence的start_item/finish_item函数的方式将LL'tr显式挂载到LL'seqr上;LL'drvLL'sqr上pull到tr,在驱动interface;
layering driver如下图:
在这里插入图片描述layering driver需要替换掉原有的driver的function,不可以再调用super.run_phase();forever一直执行获取HL'trLL'seq不需要构建body函数,不再产生LL'tr,而是通过layering driver生成LL'tr,所以称为pass thru sequence;

HL'agtLL'agt在env中创建,调用set_inst_override_by_type将HL原有的driver,monitor替换掉。

小结

无论是layering sequence还是layering agent的实现,tr都是通过TLM传递,只不过TX方向借助的是uvm_sequencer内建的seq_item_export,而RX方向是自定义的uvm_analysis_port

layering sequence中,HL'trLL'tr的转化由sequence完成;在layering driver中,HL'trLL'tr的转化由driver完成;相当于register model的adapter,完成不同类型的tr转化;只不过adapter完成的是寄存器读写的转化,layering component完成的是协议层间的转化;

参考

  1. Universal Verification Methodology(UVM) 1.2 User’s Guide
  2. Requests, Responses, Layered Protocols and Layered Agents
  3. Beyond UVM: Creating Truly Reusable Protocol Layering
  4. Layered Testbench Architecture for Serial Protocol using UVM
  5. UVM设计模式 (七)命令模式、三种sequence启动方式、start_item/finish_item、中介模式、virtual sequence

更多相关内容: 🔗百度网盘

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

劲仔小鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值