ic验证笔记-20天挑战day19

1.寄存器模型

硬件的各个功能模块由处理来配置功能以及访问状态,而与处理器的对话是通过寄存器的读写来实现的。

寄存器的硬件实现是通过触发器,而每一个比特位的触发器都对应着寄存器的功能描述

一个寄存器由32个比特位构成,将单个寄存器拆分之后,又可以分为多个域(field),不同的域

代表着某一项独立的功能。不同的域,对外部的读写而言,又分为WO(write-only),RO(read-only,只读)和RW(read and write,读写),还有一些特殊行为(quirky)的寄存器,例如读后擦除模式(clean-on-read,RC),只写一次模式(write-on-to-set, W1S)

多个寄存器构成寄存器模型,属于验证环境的寄存器模型可以抽象化层次模型。

对功能验证而言,总线访问寄存器的方式抽象为寄存器模型访问的模式,这种方式使得寄存器后期的地址修改。

中心管理的寄存器描述文件:软件建立寄存器的方法与硬件寄存器保持一致

验证工程师会利用寄存器描述文件来生成uvm寄存器模型,以供验证过程中的激励使用,寄存器测试和功能覆盖率收集

uvm_reg_field:用来针对寄存器功能域来构建对应的比特位

uvm_reg:与寄存器相匹配,其内部可以例化和配置多个uvm_reg_field对象

uvm_mem:匹配硬件存储模型

uvm_reg_map:用来指定寄存器列表中各个寄存器的偏移地址,访问属性以及对应的总线

uvm_reg_block:可以容纳多个寄存器(uvm_reg),存储器(uvm_mem)和寄存器列表(uvm_reg_map)

class ctrl_reg extends uvm_reg;

        `uvm_object_utils(ctrl_reg)

        uvm_reg_field reserved;

        rand uvm_reg_field pkt_len;

        rand uvm_reg_field prio_level;

        ranf uvm_reg_field chnl_en;

        function new(string name = "ctrl_reg");

                super.new(name, 32, UVM_NO_COVERAGE);

        endfunction

        virtual function build();

                reserved = uvm_reg_field::type_id::create("reserved");

                pkt_len = uvm_reg_field::type_id::create("pkt_len");

                prio_level = uvm_reg_field::type_id::create("prio_level");

                chnl_en = uvm_reg_field::type_id::create("chnl_en");

                reserv
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值