MCDF UVM版本 层次梳理,结构图

目录

1.MCDF中的通信

1.1 驱动DUT的线路        

1.2 检查DUT功能的线路

2. 接口的传递

3. 句柄的传递(完成控制权的交付)


 MCDF结构层次图(UVM版本)如上:

1.MCDF中的通信

顺着图中蓝线和蓝色的块(代表了TLM端口,信箱,TLM FIFO)梳理一下MCDF中的通信,根据目的可以把MCDF中的通信分为两条线路,一条线是TB要产生事务去驱动DUT,另一条是需要将从DUT中监测到的数据送到checker完成检查;

1.1 驱动DUT的线路        

每一个agent内部都有从sequencer(图中sqr)到driver(图中drv)的通信,driver的port作为通信发起端,需要sequencer发起事务,而sequencer的事务则是来自于外部test层次的(这里后面再讲);

1.2 检查DUT功能的线路

每个agent中的monitor都在时刻监测着数据,它们在符合条件时,将数据收集到,通过port端口发送给checker中的imp端口,这里imp端口的方法就是将拿到的五个monitor(3个chnl_mon,1个fmt_mon,1个reg_mon)的数据放到信箱(图中深蓝色矩形块)里面备用。随后refmod(一个模拟DUT行为的模块,也要完成数据的打包)会通过port端口拿到checker中imp端口的数据,而这4个imp端口对应的方法则是从chnl信箱和reg信箱中拿出数据。

当refmod拿到chnl和reg的数据时,用reg数据完成对refmod的更新,用chnl数据完成打包,将数据送到TLM FIFO中,随后checker通过port端口拿到这三个refmod的数据,同时也会通过信箱拿到fmt的数据,随后将两者进行比对。

2. 接口的传递

接口在tb层次通过config_db::set设置完成,随后在test层次,通过config_db::get拿到。在test层次通过set_interface将对应的接口传递到各个agent,coverage,checker中。随后agent,checker也通过set_interface将接口传递到下级的层次中。

3. 句柄的传递(完成控制权的交付)

句柄的传递完成了控制权的交付,将控制权全部交给了上级test。为什么要这样做?试想进行验证工作中,需要多次修改的部分无非是激励,在UVM中,通常配置sequence和rgm来实现不同的激励,可以看见,与sequence搭配的各个sequencer在非常底层的位置,而rgm也在env层次下,我们希望将env封装起来,在上层完成配置,这样可以实现非常好的封闭性,有利于环境的复用。

在上述目的下, 在env下实现了一个virtual sequencer(virt sqr),包含了各个具体的sequencer,而在test层次实现了virtual sequence(virt seq),里面包含了各个子seq,seq中通过宏实现了p_sequencer与各个sqr的绑定,这样在virt seq的各个子seq中,通过句柄的两次传递就可以绑定到验证环境最底层的sqr(一个依赖于句柄传递,一个依赖于p_sequencer的绑定)。那么在完成了这样的操作后,在test中的virt seq写各种不同的seq,就可以在保证环境封闭性的前提下实现不同的激励。rgm同理,通过两次句柄传递,在virt seq中write/read寄存器模型,可以实现对env下rgm的write/read。

在这样的操作下,通过句柄的传递完成了控制权的交付,通过test下virt seq就可以控制整个验证环境产生不同的激励,以及对寄存器进行不同的读写操作。

猜你喜欢

转载自blog.csdn.net/weixin_55225128/article/details/127023822
今日推荐