Quantcast
Channel: UVM Forums RSS Feed
Viewing all articles
Browse latest Browse all 756

(Possible) Bug in uvm_mem

$
0
0

I'm trying to declare a memory like this:

class some_mem extends uvm_mem;
  function new(string name = "some_mem");
    super.new(name, 2 ** 24, 8, "RO");
  endfunction
endfunction

Later on, I'm trying to add this memory to an address map that was created like this:

default_map = create_map("some_map", 0, 4, UVM_NO_ENDIAN);

By using the default value for the byte_addressing argument I want each address to represent a one byte location. The problem I'm seeing is that the uvm_reg_map_info associated with this memory shows an end address of 32'03ff_ffff and a stride of 4, instead of 32'00ff_ffff and a stride of 1. I've narrowed it down to the function uvm_reg_map::get_physical_address(...), at line 1378 of uvm_reg_map.svh:

int multiplier = m_byte_addressing ? bus_width : 1;

I guess this should be the other way around:

int multiplier = m_byte_addressing ? 1: bus_width;

Even better would be to use:

int multiplier = get_addr_unit_bytes();

Viewing all articles
Browse latest Browse all 756

Trending Articles