Jump to content

Ai_Ar

Members
  • Posts

    4
  • Joined

  • Last visited

Everything posted by Ai_Ar

  1. I see that the write is happening correctly in the RTL, but the get called after write doesn't returns "0" instead of the write value. the mirror(since explicit prediction) called after read returns the correct value that was written in. reg_model.amp_reg.ampstate_8_reg_blk.svm_control_reg.write(.status(status),.value(in_data0), .extension(ext),.parent(this)); ctrl_value = reg_model.amp_reg.reg_blk.control_reg.get(); reg_model.amp_reg.amp_reg.reg_blk.control_reg.read(.status(status), .value(read_data),.extension(ext),.parent(this)); value = reg_model.amp_reg.reg_blk.control_reg.get_mirrored_value(); `uvm_info("reg_seq", $sformatf("The mirror value is:%0h",value), UVM_HIGH) if(ctrl_value == value) begin `uvm_info("reg_seq", "svm_control_reg read back value matches write ", UVM_LOW) end
  2. Hi, I have a top level reg map set up as below. In my adapter I am trying to retrieve all the registers by address of incoming reg_item in bus2reg function to simulate burst condition. The get_reg_by_offset call returns null every time. I don't understand why the address is not found considering all the registers have unique offsets. Infact I retrieved the base address of the incoming reg_item to check if I can the register before incrementing for next offset, but it cannot find the register with base address. Any help is appreciated. Top register file: TOP_map = create_map(.name("TOP_map"), .base_addr('hFE00), .n_bytes(1),.endian(UVM_LITTLE_ENDIAN),.byte_addressing(1) ); default_map = CONTROL_TOP_map; TOP_map.add_submap(this.int_reg_blk.I2C_INT_map, .offset(8'h7C)); TOP_map.add_submap(this.scan_blk.SCAN_CTL_map, .offset(8'h84)); TOP_map.add_submap(this.ctrl_int_reg_blk.HOR_CTRL_map, .offset(8'h94)); TOP_map.I2C_INT_map.add_hdl_path("********", "RTL"); //didn't want to add proprietary code paths get_reg_by_offset call uvm_reg_item in_item = get_item(); base_addr = in_item.map.get_base_addr(); if(!(in_item.map.get_reg_by_offset(base_addr))) `uvm_error(get_type_name(), "Register not found in reg map") else registers[i] = in_item.map.get_reg_by_offset(base_addr+1);
  3. Hi, what do you mean? how is the data sent to the adapter's bus2reg function?
  4. I am facing the same issue. I have an explicit predictor connected to the monitor analysis port, provide_respons is set to 0 in the adapter. So why does predicter invoke bus2reg again if the monitor write already invoked it? the second time data is incorrect. [pb_reg_adapter] bus2reg: the addr is:fe7c, wr_rd_en is:0 and the data is:1 [REG_PREDICT] Observed READ transaction to register i2c_reg_model.i2c_enable: value='h1 [pb_reg_adapter] bus2reg: the addr is:fe7c, wr_rd_en is:0 and the data is:0
×
×
  • Create New...