135 bb_ins.lock_model(); 136 default_map.add_submap(bb_ins.default_map, 16'h1000); 137 138 mb_ins = mac_blk::type_id::create("mb_ins"); 139 mb_ins.configure(this, ""); 140 mb_ins.build(); 141 mb_ins.lock_model(); 142 default_map.add_submap(mb_ins.default_map, 16'h2...
build; 再创建所有的uvm_reg_map 成员, 比如 axi_map = create_map("axi_map", 0, axi_bus_width(单位byte), 大小端, 是否coverage), 最后对每一个uvm reg block做基地址map: axi_map.add_submap(<uvm_reg_block>.default_map, addr_base), 这样就把寄存器都添加到一个rag model文件,并把地址map好...
1functionvoid uvm_reg_map::set_base_addr(uvm_reg_addr_t offset);2if(m_parent_map !=null)begin3m_parent_map.set_submap_offset(this, offset);4end5elsebegin6m_base_addr =offset;7if(m_parent.is_locked())begin8uvm_reg_map top_map =get_root_map();9top_map.Xinit_address_mapX();10...
0,4,UVM_LITTLE_ENDIAN,0);cfg=ral_block_traffic_cfg::type_id::create("cfg",get_full_name);cfg.configure(this,"DUT");cfg.build();add_hdl_path("tb")
在lock或者add_submap的时候,更新map_info中的addr,调用Function Xinit_address_mapX 定义自己的do_bus_write和do_bus_read, uvm_reg_block,包含类,包含底层的uvm_reg_block,uvm_reg, default_path,定义自己的hdl_path, lock,表明当前的model是lock住的,调用function lock_model() ...
在lock或者add_submap的时候,更新map_info中的addr,调用Function Xinit_address_mapX 定义自己的do_bus_write和do_bus_read, uvm_reg_block,包含类,包含底层的uvm_reg_block,uvm_reg, default_path,定义自己的hdl_path, lock,表明当前的model是lock住的,调用function lock_model() ...
("cfg",get_full_name);cfg.configure(this,"DUT");cfg.build();add_hdl_path("tb");// Add a specified address map instance to this address_map// add_submap(uvm_reg_map child_map, uvm_reg_addr_t offset)default_map.add_submap(this.cfg.default_map,`UVM_REG_ADDR_WIDTH'h0);end...
bus_map.add_submap(bus.bus_map, 'h0); lock_model(); endfunction endclass Add Register Access to the Interface Template File 我们从interface template file的主要部分开始,其中指定了事务和接口中的变量。为了使示例简单,我们省略monitor和focv,只包含driver。
add_submap virtual function void add_submap (uvm_reg_mapchild_map, uvm_reg_addr_toffset) Add an address map Add the specified address map instance to this address map. The address map is located at the specified base address. The number of consecutive physical addresses occupied by the submap...
(name, UVM_NO_COVERAGE); endfunction virtual function void build; bus = bus_reg_block::type_id::create("bus"); bus.configure(this); bus.build(); bus_map = create_map("bus_map", 'h0, 1, UVM_LITTLE_ENDIAN); default_map = bus_map; bus_map.add_submap...