functionvoiduvm_reg_block::configure(uvm_reg_block parent=null,stringhdl_path="");this.parent =parent;if(parent !=null)this.parent.add_block(this); add_hdl_path(hdl_path); uvm_resource_db#(uvm_reg_block)::set("uvm_reg::*", get_full_name(),this); endfunction function uvm_reg_blo...
(1.3) uvm_reg_map的do_write完成后,如果auto predict功能打开了, uvm_reg的do_write会根据写入的值更新register model中寄存器的值; task uvm_reg::write(output uvm_status_e status, input uvm_reg_data_t value, input uvm_path_e path=UVM_DEFAULT_PATH, input uvm_reg_map map=null, input uvm_se...
uvm_reg_model——寄存器模型(一)uvm_reg_model——寄存器模型(⼀) 对于⼀个复杂设计,寄存器模型要能够模拟任意数量的寄存器域操作。UVM提供标准的基类库,UVM的寄存器模型来⾃于继承⾃VMM 的RAL(Register Abstract Layer),现在可以先将寄存器模型进⾏XML建模,再通过脚本⼯具直接⽣产寄存器模型。
uvm_reg_block,包含类,包含底层的uvm_reg_block,uvm_reg, default_path,定义自己的hdl_path, lock,表明当前的model是lock住的,调用function lock_model() 自己的coverage设置,new的时候设置到has_cover,get的时候,得到cover_on。 uvm_reg_sequence,只是实现了调用map中的读写操作,不支持burst_read,burst_write,...
调用uvm_reg的do_write(rw)。 // uvm_reg.svh task uvm_reg::write(output uvm_status_e status, input uvm_reg_data_t value, input uvm_path_e path = UVM_DEFAULT_PATH, input uvm_reg_map map =null, input uvm_sequence_base parent =null, ...
也就是说register model中的default_map里的set_sequencer方法实现了将三者的关联,传递的两个参数分别...
也就是说register model中的default_map里的set_sequencer方法实现了将三者的关联,传递的两个参数分别...
UVM REG Model入门 本章通过一个非常小的示例来解释UVM REG中一些常用操作的实现。 1.1. 示例 假设某个功能模块中包含如下寄存器,且寄存器通过APB接口进行配置。 1.1.1. status 状态寄存器,只读,Offset: 0h, Width: 32bits Field access width reset comment Reserved RO [31:4] 0 保留位 Error RO [3:...
task uvm_reg::mirror(output uvm_status_e status, input uvm_check_e check = UVM_NO_CHECK, input uvm_path_e path = UVM_DEFAULT_PATH, …); 1. 2. 3. 4. 它有多个参数,但是常用的只有前三个。其中第二个参数指的是如果发现DUT中寄存器的值与寄存器模型中的镜像值不一致,那么在更新寄存器模型之...
default_map = bus_map; bus_map.add_reg(reg0, 'h0, "RW"); lock_model(); endfunction endclass class top_reg_block extends uvm_reg_block; `uvm_object_utils(top_reg_block) bus_reg_block bus; uvm_reg_map bus_map; ... virtual function void build(); ...