• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

SOC/IP验证工程师

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

寄存器模型的用法:reg中只有一个域,只有一个block

`ifndef REG_MODEL__SV
`define REG_MODEL__SV
class reg_invert extends uvm_reg;
    rand uvm_reg_field reg_data;
    virtual function void build();
        reg_data = uvm_reg_field::type_id::create("reg_data");
        // parameter: parent, size, lsb_pos, access, volatile, reset value, has_reset, is_rand, 
        // individually accessible   
        reg_data.configure(this, 1, 0, "RW", 1, 0, 1, 1, 0);
        // 此域的父辈,此域的宽度,此域的最低位,此字段的存取方式,是否是易失的,此域上电复位后的默认值,
        // 此域是否有复位,这个域是否可以随机化, 这个域是否可以单独存取
    endfunction
    `uvm_object_utils(reg_invert)
    function new(input string name="reg_invert");
        //parameter: name, size, has_coverage
        super.new(name, 16, UVM_NO_COVERAGE);
        //size:此寄存器总共的bit数
    endfunction
endclass

class reg_model extends uvm_reg_block;
   rand reg_invert invert;
   virtual function void build();
      default_map = create_map("default_map", 0, 2, UVM_BIG_ENDIAN, 0);
      //名字,基地址,系统总线的宽度byte,大小端,是否能按照byte寻址
      invert = reg_invert::type_id::create("invert", , get_full_name());
      invert.configure(this, null, "");
      //configure的主要功能就是指定寄存器后门访问的路径
      //此寄存器所在block的指针,reg_file的指针,此寄存器后门访问的路径
      invert.build();
      default_map.add_reg(invert, 'h9, "RW");
      //要加入的寄存器,寄存器的地址,寄存器的存取方式
   endfunction
   `uvm_object_utils(reg_model)
    function new(input string name="reg_model");
        super.new(name, UVM_NO_COVERAGE);
    endfunction 
endclass
`endif

posted on 2022-11-05 21:09  SOC验证工程师  阅读(123)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3