uvm寄存器模型学习笔记(三)

1、reg blk编写

class cam extends uvm_reg;
    `uvm_object_utils(cam)
    
    virtual function void build();

    endfunction
    function new(input string name = "cam");
        super.new(name,8, UVM_NO_COVERAGE);
    endfunction
endclass

//----------------blk-----------------
class uart_reg_blk extends uvm_reg_block;
    `uvm_object_utils(uart_reg_blk)

    rand cam    cam_reg;
    //rand by_regfile     file;
    
  virtual function void build();
        `uvm_info(get_name(),"build function is called",UVM_LOW);
        default_map = create_map("default_map",0,1,UVM_BIG_ENDIAN,0);//每个寄存器占1字节
        //file = by_regfile::type_id::create("file", ,get_full_name());
        //file.configure(this,null,"reg11");
        
        
        cam_reg = cam::type_id::create("cam_reg", ,get_full_name());
        cam_reg.configure(this,null,"reg13");
        cam_reg.build();
        default_map.add_reg(cam_reg,8'd13,"RW");
        
        
    endfunct

2、加入reg model

class reg_model extends uvm_reg_block;
    `uvm_object_utils(reg_model)
    
    rand uart_reg_blk        uart_blk;
    
    virtual function void build();
        `uvm_info(get_name(),"build function is called",UVM_LOW)
        
        default_map = create_map("default_map",0,1,UVM_BIG_ENDIAN,0);
        
        uart_blk = uart_reg_blk::type_id::create("uart_blk");
        uart_blk.configure(this, "top_e.regs");
        uart_blk.build();
        uart_blk.lock_model();
        default_map.add_submap(uart_blk.default_map, 8'h00);

    endfunction

endclass

3、adapter (前门)

4、base test

reg_model                                          rg_m;
uart_adapter                                      reg_sqr_adapter;  

build phase

 rg_m   = reg_model::type_id::create("rg_m",   this);
    rg_m.configure(null, "");
    rg_m.build();
    rg_m.lock_model();
    rg_m.set_hdl_path_root("tb_top.dut_wrapper_e");
    env.p_rm = this.rg_m;//指针赋值
    sys_cfg = sys_config::type_id::create("sys_cfg");
    reg_sqr_adapter = new("reg_sqr_adapter");

connect phase

env.uart_master_env.i_agt.sqr.p_rm = this.rg_m;
    rg_m.default_map.set_sequencer(env.uart_master_env.i_agt.sqr, reg_sqr_adapter);
    rg_m.default_map.set_auto_predict(1);

5、env

声明:reg_model                                           p_rm;

build phase里指针赋值

rm.p_rm = this.p_rm;

6、参考模型

声明:reg_model                             p_rm;

7、sqr

声明:reg_model        p_rm;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值