cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Highlighted
2,011 Views
Registered: ‎12-22-2015

How can I set the address of an AXI peripheral inside an IP block from the top level?

I want to have individually addressable IP blocks inside a higher level IP block. I have created a simple example so that I can explain my design.

 

low_level_ip.png

The axiregister components are simple registers which store the last data value written to them over the axi lite interface. I have then used the Create and Package New IP tool to package this as an IP block (called double_reg). This block was then instantiated in a top level design:

top_level.png

If I set the address of each of the axiregisters inside the double_reg IP, using the address editor, then I can successfully write to both axiregisters.

 

I presume that this wouldn't work if I instantiate multiple instances of the double_reg IP (as I would have multiple blocks with the same hard coded addresses). To get round this problem I would like to set the addresses of the internal axiregister blocks from the top level design.

 

The Create and Package New IP tool contains an Addressing and Memory tab which seems to provide the functionality I'm looking for but I cannot find any useful information on line explaining how to use it.

 

  • Is it possible to set the address of an axi peripheral which resides inside an IP block from the top level? If so, how?

 

0 Kudos
1 Reply
Highlighted
Teacher
Teacher
1,939 Views
Registered: ‎03-31-2012

toby.gomersall@dunelm.org.uk

 

>> I presume that this wouldn't work if I instantiate multiple instances of the double_reg IP (

 

Not sure why you presume this. Did you try it to see that it didn't work? One possibility is that the address editor would drill down the packaged ip and find all sub-blocks which need an address assigned. At least this is how it works for hierarchical block designs in BD editor.

If that actually doesn't work, the solution might be to declare the address space needs of the complete block just like you would for any regular IP during packaging ie how many ranges, whether they're memory or register etc so that they can be cumulatively enumerated during address assignment. It is actually disappointing that the package creation flow can't figure this out itself. It actually has all the information it needs to populate the addressing & memory tab.

- 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.
0 Kudos