clacasse Posted August 10, 2011 Report Share Posted August 10, 2011 I am trying to use the burst_write task to write to a 128 bit wide memory. I have included some lines that show how I setup the memory, etc. The `UVM_REG_DATA_WIDTH define is set to 128. Memory creation... (128 bits wide, 0x200_0000 locations of 128 bits.) mem = new($psprintf("mem[%0d]",i), 0x200_0000, 128, "RW", UVM_NO_COVERAGE); Memory map creation... (16 byte wide memory map) memory_map = create_map($psprintf("memory_map[%0d]",i), 'h0, 16, UVM_LITTLE_ENDIAN, 1); The burst_write appears to send the correct data for the 1st bus write, but all of the other bus writes have their data zeroed out. I believe this is due to the following code in the uvm_reg_map::do_bus_write task: data = (value >> (curr_byte*8)) & ((1'b1 << (bus_width * 8))-1); The curr_byte value is not reset inside of this task, it is only incremented by the number of bytes written. So when this task begins breaking down the burst into individual transfers to be transformed by the adapter (adapter::reg2bus), all data after the 1st full bus width will be shifted to zero. Is this a bug, or have I done something wrong here? Has anyone had success using the burst_write task to write to a uvm_mem, and if so how were you able to do so? Thanks, Chris Quote Link to comment Share on other sites More sharing options...
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.