RAL来龙去脉补充

下面讲一下 vmm_ral_env 中的ral, 以及 vmm_ral_access类的介绍。

先看一下vmm_ral_env的源代码:

class vmm_ral_env extends `VMM_ENV;
   vmm_ral_access ral;

   extern function new(string name = "RAL-Based Verif Env");

   extern virtual task sw_reset(string domain = "");
endclass: vmm_ral_env


function vmm_ral_env::new(string name= "RAL-Based Verif Env");
   super.new(name);
   this.ral = new;
endfunction: new


task vmm_ral_env::sw_reset(string domain = "");
endtask: sw_reset

以上可以看出 vmm_ral_env自动创建了vmm_ral_access 类型的 ral 实例.   而vmm_ral_access是从vmm_xactor派生出来的,本质上是一个physical access component。

我们看一下ahb subenv的构造函数:

   extern function new(string                 inst = "",
                       ahb_mst_subenv_cfg     cfg = null,
                       vmm_consensus          end_test,
                       virtual ahb_subenv_if  vif,
                       vmm_ral_access         ral=null);


如次,可以将vmm_ral_env中的ral传入subenv中的ral引用。通过 ral.set_model(vmm_ral_block_or_sys model) 函数将 特定的 ral model 和 ral 这个physical access component 关联起来。

其实我们不一定要把 physical access component (ral) 和 特定的ral model (通过ralf 和ralgen 脚本生产)关联起来,也可以用ral的基本read,write函数。但是,synopsy的vmm_ral_access源代码在实现add_xactor时非要检查所谓的ral model 是否为空,否则退出,所以我们要用一个dummy model来骗过vmm。 代码如下:

myenv.sv 文件

// instance of ral dummy model
vmm_ral_sys  dummy_model;

.....


function void myenv::build();
    super.build();
    dummy_model=new(null,"dummy_model", "dummy", 4, vmm_ral::LITTLE_ENDIAN,0,"ahb");
    mst_subenv = new("Master Subenv", mst_cfg,end_vote,intf_inst,this.ral);
    ....
endfunction: build


 





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值