Jump to content
ankit jain

Alternate registers usage for register: static or dynamic?

Recommended Posts

Hi, I wanted to know use case of alternate register.

Scenario 1(DYNAMIC) :  lets take an example, for capturing metadata of a register.The field(1) in register represents data whose context changes when another field (2)is having another data. So in this case h/w changes field (2) data dynamically, changing context of field (1) data. Does alternate register is used in this case? Can multiple "alternate group names" tag be used while  instantiating module registers.

Scenario 2(STATIC) : According to my understanding, alternate register is used for capturing registers according to mode in which module is to be instantiated i.e. only 1 register definition to be selected from multiple alternate registers while instantiating module registers using single "alternate group name" tag. 

What is the use case of alternate registers.(Scenario 1 or 2)

Thanks

Share this post


Link to post
Share on other sites

Hello Ankit,

 

The active alternate register in the component implementation is selected by an alternateGroup.  An alternateGroup is considered actively selecting an alternateRegisters due to an unspecified combination of port values, register values, memory values, or other component internal state values which can change value while the component implementation is running.  An alternateGroup does not change the component implementation. Both scenarios you mention could be supported by the IP-XACT alternateRegister feature. Some examples:

1. The alternateGroup activation combination includes a component port value which can be tied to a constant in the component instantiation.

2. The alternateGroup activation combination includes a field value.

Share this post


Link to post
Share on other sites

Thanks Richard for quick reply, can you share some insights on the example below considering SEL_AB as field 2, DTA and DTB as field1.

Q2) Also if one doesn't want to use alternate register, what field naming convention to use as IPXACT doesn't allow usage of "/" character? ex in field name, DTA/DTB with which character to replace "/"?

Untitled.png.1335935558d8716ec8b00c9e93937de2.png

<spirit:component xmlns:spirit="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1685-2009" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1685-2009 http://www.spiritconsortium.org/XMLSchema/SPIRIT/1685-2009/index.xsd">
    <spirit:vendor>Vendor</spirit:vendor>
    <spirit:library>Library</spirit:library>
    <spirit:name>new_file</spirit:name>
    <spirit:version>1.0</spirit:version>
    <spirit:memoryMaps>
        <spirit:memoryMap>
            <spirit:name>mmap</spirit:name>
            <spirit:addressBlock>
                <spirit:name>blk1</spirit:name>
                <spirit:baseAddress>0x0</spirit:baseAddress>
                <spirit:range>0xc</spirit:range>
                <spirit:width>32</spirit:width>
                <spirit:usage>register</spirit:usage>
                <spirit:access>read-write</spirit:access>
                <spirit:register>
                    <spirit:name>regA</spirit:name>
                    <spirit:addressOffset>0x0</spirit:addressOffset>
                    <spirit:size>32</spirit:size>
                    <spirit:access>read-write</spirit:access>
                    <spirit:field>
                        <spirit:name>DTA</spirit:name>
                        <spirit:bitOffset>0</spirit:bitOffset>
                        <spirit:bitWidth>16</spirit:bitWidth>
                        <spirit:access>read-write</spirit:access>
                    </spirit:field>
                    <spirit:field>
                        <spirit:name>SEL_AB</spirit:name>
                        <spirit:bitOffset>16</spirit:bitOffset>
                        <spirit:bitWidth>4</spirit:bitWidth>
                        <spirit:access>read-write</spirit:access>
                    </spirit:field>
                    <spirit:alternateRegisters>
                        <spirit:alternateRegister>
                            <spirit:name>regB</spirit:name>
                            <spirit:alternateGroups>
                                <spirit:alternateGroup>DB</spirit:alternateGroup>
                            </spirit:alternateGroups>
                            <spirit:access>read-write</spirit:access>
                            <spirit:field>
                                <spirit:name>DTB</spirit:name>
                                <spirit:bitOffset>0</spirit:bitOffset>
                                <spirit:bitWidth>16</spirit:bitWidth>
                                <spirit:access>read-write</spirit:access>
                            </spirit:field>
                            <spirit:field>
                                <spirit:name>SEL_AB</spirit:name>
                                <spirit:bitOffset>16</spirit:bitOffset>
                                <spirit:bitWidth>1</spirit:bitWidth>
                                <spirit:access>read-write</spirit:access>
                            </spirit:field>
                        </spirit:alternateRegister>
                    </spirit:alternateRegisters>
                </spirit:register>
            </spirit:addressBlock>
            <spirit:addressUnitBits>8</spirit:addressUnitBits>
        </spirit:memoryMap>
    </spirit:memoryMaps>
</spirit:component>

 

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

×