Jump to content
Sign in to follow this  
VKrishnamurthy

AddressMaps in IP-XACT Design file, Multiple BusInstances

Recommended Posts

Hi Experts,

 

1.I have seen that Offsets of a Slave Module is described in the  Memory Maps in Component Description.

Is it possible to describe Offsets in the top design?

The motive is to repeat various instances of a Slave Component in a design, each slave instance having a different Offset.

 

2. Also, I  have a SystemC architecture in which I instantiate the same bus several times. But I connect each bus instance with a different number of modules. This is because the bus possesses MultiPassthrough Sockets. How can I reproduce it in IP-XACT?

Should I have a custom Component for each bus instance(with separate BusDef and AbsDef ?) as each instance  will have a different number of bus interfaces?

 

How can it be done?

 

Looking forward for your response!

 

Thanks in advance,

Venkatesh

 

 

Share this post


Link to post
Share on other sites

Hello Venkatesh,

 

Ad 1). The base address in an address block inside a memory map is an offset that is relative to the incoming address of the slave bus interface that references that memory map. So if you instantiate the slave module multiple times and connect the instances to a bus, then all slave instances will a different offset automatically depending on the addressing of that bus. There is no need to specify an (absolute) offset in a design. Having said that, it is not impossible since you can make the base address user resolved and set the configurable element value in the design.

 

Ad 2). It is not possible to describe a parameterized number of bus interfaces. Hence, you need to make a different IP-XACT component for each bus configuration allowing you to connect N masters and M slaves. Of course, you can instantiate such a component multiple times. There is no need for separate busdef and absdef. Each of the master bus interfaces on your IP-XACT bus requires a reference to an address space in that component and a base address. These base addresses and address spaces links to ad 1) because they specify the bus addressing, i.e., the address space for each connected slave. Again the bus addressing is relative.

 

Best regards,

Erwin

Share this post


Link to post
Share on other sites

Hello Erwin,

 

Thanks for your response.I have one more thing to be clarified.

 

Ad2) "Each of the master bus interfaces on your IP-XACT bus requires a reference to an address space in that component and a base address. These base addresses and address spaces links to ad 1) because they specify the bus addressing, i.e., the address space for each connected slave."

 

Does this mean that each Mirrored Master or Mirrored Slave BusInterfaces in the IP-XACT Bus Component should possess  Address Block References of the Slave Modules or are all Slave Memory Maps referenced in the Master BusInterface?

 

I could not find anywhere in the IP-XACT Standard(1685-2009) on how it can be done. Could you please explain with a simple example?

 

Best Regards,

Venkatesh

Share this post


Link to post
Share on other sites

Hi Venkatesh,

 

Sorry for my late reply. I recommend to avoid mirrored interfaces such that you can use bridges rather than channels. Please use slave instead of mirrored master and master instead of mirrored slave. Below are some fragments for a TLM bus.

 

Here is slave interface (target socket). In this case it bridges to all master interfaces but in general it does not have to be connected fully. You can have multiple slave interfaces of course.

        <spirit:busInterface>
            <spirit:name>target_socket_0</spirit:name>
            <spirit:busType spirit:version="2011-1.0" spirit:name="TLM2GP" spirit:library="ieee1666" spirit:vendor="accellera.org"/>
            <spirit:abstractionType spirit:version="2011-1.0" spirit:name="TLM2GP_tlm" spirit:library="ieee1666" spirit:vendor="accellera.org"/>
            <spirit:slave>
                <spirit:bridge spirit:opaque="false" spirit:masterRef="initiator_socket_0"/>
                <spirit:bridge spirit:opaque="false" spirit:masterRef="initiator_socket_1"/>
                <spirit:bridge spirit:opaque="false" spirit:masterRef="initiator_socket_2"/>
                <spirit:bridge spirit:opaque="false" spirit:masterRef="initiator_socket_3"/>
                <spirit:bridge spirit:opaque="false" spirit:masterRef="initiator_socket_4"/>
                <spirit:bridge spirit:opaque="false" spirit:masterRef="initiator_socket_5"/>
                <spirit:bridge spirit:opaque="false" spirit:masterRef="initiator_socket_6"/>
                <spirit:bridge spirit:opaque="false" spirit:masterRef="initiator_socket_7"/>
                <spirit:bridge spirit:opaque="false" spirit:masterRef="initiator_socket_8"/>
                <spirit:bridge spirit:opaque="false" spirit:masterRef="initiator_socket_9"/>
                <spirit:bridge spirit:opaque="false" spirit:masterRef="initiator_socket_10"/>
                <spirit:bridge spirit:opaque="false" spirit:masterRef="initiator_socket_11"/>
                <spirit:bridge spirit:opaque="false" spirit:masterRef="initiator_socket_12"/>
            </spirit:slave>
            <spirit:portMaps>
                <spirit:portMap>
                    <spirit:logicalPort>
                        <spirit:name>TLMSOCKET</spirit:name>
                    </spirit:logicalPort>
                    <spirit:physicalPort>
                        <spirit:name>target_socket_0</spirit:name>
                    </spirit:physicalPort>
                </spirit:portMap>
            </spirit:portMaps>
        </spirit:busInterface>

Here are the first two master interfaces (initiator sockets). Each master interfaces references to an address space. For each address space you provide the base address (which is an offset to the lowest incoming address).

        <spirit:busInterface>
            <spirit:name>initiator_socket_0</spirit:name>
            <spirit:busType spirit:version="2011-1.0" spirit:name="TLM2GP" spirit:library="ieee1666" spirit:vendor="accellera.org"/>
            <spirit:abstractionType spirit:version="2011-1.0" spirit:name="TLM2GP_tlm" spirit:library="ieee1666" spirit:vendor="accellera.org"/>
            <spirit:master>
                <spirit:addressSpaceRef spirit:addressSpaceRef="AS_0">
                    <spirit:baseAddress>0x0</spirit:baseAddress>
                </spirit:addressSpaceRef>
            </spirit:master>
            <spirit:portMaps>
                <spirit:portMap>
                    <spirit:logicalPort>
                        <spirit:name>TLMSOCKET</spirit:name>
                    </spirit:logicalPort>
                    <spirit:physicalPort>
                        <spirit:name>initiator_socket_0</spirit:name>
                    </spirit:physicalPort>
                </spirit:portMap>
            </spirit:portMaps>
        </spirit:busInterface>
        <spirit:busInterface>
            <spirit:name>initiator_socket_1</spirit:name>
            <spirit:busType spirit:version="2011-1.0" spirit:name="TLM2GP" spirit:library="ieee1666" spirit:vendor="accellera.org"/>
            <spirit:abstractionType spirit:version="2011-1.0" spirit:name="TLM2GP_tlm" spirit:library="ieee1666" spirit:vendor="accellera.org"/>
            <spirit:master>
                <spirit:addressSpaceRef spirit:addressSpaceRef="AS_1">
                    <spirit:baseAddress>0x20000000</spirit:baseAddress>
                </spirit:addressSpaceRef>
            </spirit:master>
            <spirit:portMaps>
                <spirit:portMap>
                    <spirit:logicalPort>
                        <spirit:name>TLMSOCKET</spirit:name>
                    </spirit:logicalPort>
                    <spirit:physicalPort>
                        <spirit:name>initiator_socket_1</spirit:name>
                    </spirit:physicalPort>
                </spirit:portMap>
            </spirit:portMaps>
        </spirit:busInterface>

Here are the two referenced address spaces. They can have different ranges of course.

        <spirit:addressSpace>
            <spirit:name>AS_0</spirit:name>
            <spirit:range>0x20000000</spirit:range>
            <spirit:width>32</spirit:width>
        </spirit:addressSpace>
        <spirit:addressSpace>
            <spirit:name>AS_1</spirit:name>
            <spirit:range>0x20000000</spirit:range>
            <spirit:width>32</spirit:width>
        </spirit:addressSpace>

You can now connect slaves (memories, peripherals) to the master interfaces of the bus. Here is an example of a ROM.

  <spirit:busInterfaces>
    <spirit:busInterface>
      <spirit:name>target_socket</spirit:name>
      <spirit:busType spirit:library="ieee1666" spirit:name="TLM2GP" spirit:vendor="accellera.org" spirit:version="2011-1.0"/>
      <spirit:abstractionType spirit:library="ieee1666" spirit:name="TLM2GP_tlm" spirit:vendor="accellera.org" spirit:version="2011-1.0"/>
      <spirit:slave>
        <spirit:memoryMapRef spirit:memoryMapRef="MemoryMap"/>
      </spirit:slave>
      <spirit:portMaps>
        <spirit:portMap>
          <spirit:logicalPort>
            <spirit:name>TLMSOCKET</spirit:name>
          </spirit:logicalPort>
          <spirit:physicalPort>
            <spirit:name>socket</spirit:name>
          </spirit:physicalPort>
        </spirit:portMap>
      </spirit:portMaps>
    </spirit:busInterface>
  </spirit:busInterfaces>
  <spirit:memoryMaps>
    <spirit:memoryMap>
      <spirit:name>MemoryMap</spirit:name>
      <spirit:addressBlock>
        <spirit:name>ROM</spirit:name>
        <spirit:baseAddress>0x0</spirit:baseAddress>
        <spirit:range spirit:dependency="id('Size')" spirit:resolve="dependent">0x20000000</spirit:range>
        <spirit:width>32</spirit:width>
        <spirit:usage>memory</spirit:usage>
        <spirit:access>read-only</spirit:access>
      </spirit:addressBlock>
    </spirit:memoryMap>
  </spirit:memoryMaps>

Similary, you can connect masters to the slave interfaces of the bus. Here is an example of a master.

 <spirit:busInterfaces>
    <spirit:busInterface>
      <spirit:name>initiator_socket</spirit:name>
      <spirit:busType spirit:library="ieee1666" spirit:name="TLM2GP" spirit:vendor="accellera.org" spirit:version="2011-1.0"/>
      <spirit:abstractionType spirit:library="ieee1666" spirit:name="TLM2GP_tlm" spirit:vendor="accellera.org" spirit:version="2011-1.0"/>
      <spirit:master>
        <spirit:addressSpaceRef spirit:addressSpaceRef="AS">
          <spirit:baseAddress>0x0</spirit:baseAddress>
        </spirit:addressSpaceRef>
      </spirit:master>
      <spirit:portMaps>
        <spirit:portMap>
          <spirit:logicalPort>
            <spirit:name>TLMSOCKET</spirit:name>
          </spirit:logicalPort>
          <spirit:physicalPort>
            <spirit:name>socket</spirit:name>
          </spirit:physicalPort>
        </spirit:portMap>
      </spirit:portMaps>
    </spirit:busInterface>
  </spirit:busInterfaces>
  <spirit:addressSpaces>
    <spirit:addressSpace>
      <spirit:name>AS</spirit:name>
      <spirit:range>0xE0000000</spirit:range>
      <spirit:width>32</spirit:width>
    </spirit:addressSpace>
  </spirit:addressSpaces>

Best regards,

Erwin
 

 

 

 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×