cancel
Showing results for 
Search instead for 
Did you mean: 
Adventurer
Adventurer
3,745 Views
Registered: ‎08-27-2013

Custom IP Register values being mirrored at some offset

Jump to solution

I have created an AXI-LITE custom IP Vivado.  This IP has 16 registers that can be read and written.  I have noticed that the values contained in the registers are being mirrored at an offset corresponding to the number of registers I have allocated.

 

For example, when using the address editor I set the IP to use the minimum address space, 4K.  This leaves 1024, 32-bit registers in the address map.  Since I am using 16 registers these values are then mirrored 64 times within this 4k block of memory.  Can some explain to me what is happening here? 

 

I have tried to prevent these register values from being mirrored but have been unsuccessful so far.

 

Thank you.

0 Kudos
1 Solution

Accepted Solutions
Highlighted
Teacher
Teacher
7,088 Views
Registered: ‎03-31-2012

Re: Custom IP Register values being mirrored at some offset

Jump to solution

@chadjerde what's happening is that the address decoder in the axi-lite slave is looking at only 6 bits of address instead of the full 12 so you are getting 2^6 copies of it. The only way to fix this is to go into the code and change a couple of case statements so it looks at all the 12 bit address.

 

Of course this causes larger logic to be implemented. Then the question arises: why do you care? Just make sure your program doesn't talk to addresses which are not specifically declared. If and when you add more registers, you can always increase the decoder size then.

- Please mark the Answer as "Accept as solution" if information provided is helpful.
Give Kudos to a post which you think is helpful and reply oriented.

View solution in original post

1 Reply
Highlighted
Teacher
Teacher
7,089 Views
Registered: ‎03-31-2012

Re: Custom IP Register values being mirrored at some offset

Jump to solution

@chadjerde what's happening is that the address decoder in the axi-lite slave is looking at only 6 bits of address instead of the full 12 so you are getting 2^6 copies of it. The only way to fix this is to go into the code and change a couple of case statements so it looks at all the 12 bit address.

 

Of course this causes larger logic to be implemented. Then the question arises: why do you care? Just make sure your program doesn't talk to addresses which are not specifically declared. If and when you add more registers, you can always increase the decoder size then.

- Please mark the Answer as "Accept as solution" if information provided is helpful.
Give Kudos to a post which you think is helpful and reply oriented.

View solution in original post