在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 6309|回复: 7

[求助] adapter与synopsis ahb vip的连接问题

[复制链接]
发表于 2018-7-31 11:23:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本人希望用adapter操作ahb vip实现对寄存器的前门读写操作,但是连接后出现以下问题,下面是错误提示和代码:Error-[NOA] Null object access
/home/IC/VIP/vip/svt/amba_svt/M-2016.12/sverilog/src/vcs/svt_ahb_master_transaction.svp, 522
  The object at dereference depth 1 is being used before it was
  constructed/allocated.
  Please make sure that the object is allocated before using it.

  #0 in \svt_ahb_master_transaction::is_transaction_valid  at
  /home/IC/VIP/vip/svt/amba_svt/M-2016.12/sverilog/src/vcs/svt_ahb_master_transaction.svp:522
  #1 in
  \svt_ahb_master_active_common#(svt_ahb_master_if.svt_ahb_master_modport,svt_ahb_master_if.svt_ahb_monitor_modport,svt_ahb_master_if.svt_ahb_debug_modport)::is_slave_boundary_crossed
  at
  /home/IC/VIP/vip/svt/amba_svt/M-2016.12/ahb_master_svt/sverilog/src/vcs/svt_ahb_master_active_common.svp:258



下面是我的代码
/////////////
adapter.sv
/////////////
class my_adapter extends uvm_reg_adapter;
    string tID = get_type_name();

    `uvm_object_utils(my_adapter)

   function new(string name="my_adapter");
      super.new(name);

provides_responses = 1;
   endfunction : new

   function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw);
      svt_ahb_master_transaction tr;

tr = svt_ahb_master_transaction::type_id::create("tr");

tr.data=new[1];

tr.data_huser=new[1];

tr.cfg=get_cfg;

tr.idle_xact_hwrite=0;

tr.num_incr_beats=0;

tr.addr = rw.addr;

tr.trans_type=svt_ahb_transaction::NSEQ;

tr.beat_htrans=svt_ahb_transaction::NSEQ;
      tr.xact_type = (rw.kind == UVM_READ) ? svt_ahb_transaction::READ : svt_ahb_transaction::WRITE;

tr.burst_type   = svt_ahb_transaction::SINGLE;
      tr.burst_size   = svt_ahb_transaction::BURST_SIZE_32BIT;
      if (tr.xact_type == svt_ahb_transaction::WRITE)
         tr.data[0] = rw.data;
      return tr;
   endfunction : reg2bus

   function void bus2reg(uvm_sequence_item bus_item, ref uvm_reg_bus_op rw);
      svt_ahb_master_transaction tr;
      if(!$cast(tr, bus_item)) begin
         `uvm_fatal(tID,
          "Provided bus_item is not of the correct type. Expecting bus_transaction")
          return;
      end
      rw.kind = (tr.xact_type == svt_ahb_transaction::READ) ? UVM_READ : UVM_WRITE;
      rw.addr = tr.addr;
      rw.byte_en = 'h3;
      rw.data = tr.data[0];
      rw.status = UVM_IS_OK;

`uvm_info("RAL ADAPTER",$sformatf("read data %h",rw.data),UVM_LOW)
   endfunction : bus2reg

endclass : my_adapter


//////////////
reg_seq.sv
/////////////
class case0_vseq extends uvm_reg_sequence ;


reg_model rm;


`uvm_object_utils(case0_vseq)
   
`uvm_declare_p_sequencer(my_vsqr)

   function  new(string name= "case0_vseq");
      super.new(name);
   endfunction

   virtual task body();
      uvm_status_e   status;
      uvm_reg_data_t value;

uvm_reg_mem_hdl_paths_seq ckseq;


      if(starting_phase != null)
         starting_phase.raise_objection(this);
      p_sequencer.p_rm.mm.write(status,0,'ha,UVM_FRONTDOOR);


p_sequencer.p_rm.mm.read(status,0,value,UVM_FRONTDOOR);
      if(starting_phase != null)
         starting_phase.drop_objection(this);
   endtask

endclass


class reg_model_test extends ahb_base_test;


function new(string name = "reg_model_test", uvm_component parent = null);
      super.new(name,parent);
   endfunction
   extern virtual function void build_phase(uvm_phase phase);
   `uvm_component_utils(reg_model_test)
endclass

function void reg_model_test::build_phase(uvm_phase phase);

super.build_phase(phase);

uvm_config_db#(uvm_object_wrapper)::set(this,
                                           "v_sqr.main_phase",
                                           "default_sequence",
                                           case0_vseq::type_id::get());

endfunction

//////////////////////////////
寄存器模型的连接方法与张强的UVM实战一致。已经被这个问题缠绕了好几周,希望大牛们帮忙解决
发表于 2018-8-1 09:47:18 | 显示全部楼层
你需要在ENV(或者test)里面创建相应的对象,包括register model,adapter等,并将创建的对象传给ahb 的sequencer。
 楼主| 发表于 2018-8-2 09:07:46 | 显示全部楼层
回复 2# robbenhu


   我在ahb_base_test的类里面已经建立了啊
发表于 2018-8-3 18:25:28 | 显示全部楼层
你考虑在寄存器读写的sequence的用一个非virtual sequencer启动试试
发表于 2018-8-3 18:30:36 | 显示全部楼层
另外,你考虑一下你在发送寄存器数据的sequence中的寄存器读写是不是出现问题
发表于 2021-6-8 11:22:56 | 显示全部楼层
解决了吗?
发表于 2022-8-3 13:40:41 | 显示全部楼层
我这用2018 vip遇到类似问题,初步判断是内部有成员需要例化,只是说这些代码都是加密无法查证。可以参考2018的手册,通过将abh master configuration里的reg_adapter功能启用,来实现uvm_ral使用ahb作为配置接口的功能。
发表于 2022-8-9 11:02:56 | 显示全部楼层
vip 内部有自己实现的adapter,只需要将配置中的reg开启,并且将env传到vip env 的regmodel中就行。具体的示例可以参考vip 的example示例。

路径如下

AMBA/vip/svt/amba_svt/latest/examples/sverilog
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-26 22:13 , Processed in 0.019968 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表