Registers (with parameter) description using IP-XACT standard

Hello All,

I apologize for talking here about IP-XACT and not strictly UVM but I’m running into some troubles and your help will help me to generate an UVM registers description.

Idea is to generate the UVM registers description of an IP, using the IP-XACT standard.

Few weeks ago I started to write 2 scripts :

  • 1 perl for parsing our IP Specifications and generating the IP-XACT file
  • another perl for parsing the IP-XACT and generating all UVM registers and fields description

Everything is working fine (not so bad I think) except for one kind of registers :

Thoses who are duplicated based on an IP Parameter.
I’m not able to find the correct way to describe them in IP-XACT…

Let’s take an example :

A register nammed PRR at @0xA0 has 2 fields :

  • PEF
  • PER

Below is the IP-XACT description of such a register.

<spirit:register>
    <spirit:name>PRR</spirit:name>
    <spirit:description>foo</spirit:description>
    <spirit:addressOffset>0x0A0</spirit:addressOffset>
    <spirit:size>32</spirit:size>
    <spirit:access>read-write</spirit:access>
    <spirit:field>
      <spirit:name>PER</spirit:name>
      <spirit:description>bar</spirit:description>
      <spirit:bitOffset>0</spirit:bitOffset>
      <spirit:bitWidth>15</spirit:bitWidth>
      <spirit:access>read-write</spirit:access>
      <spirit:volatile>false</spirit:volatile>
    </spirit:field>
    <spirit:field>
      <spirit:name>REF</spirit:name>
      <spirit:description>bar</spirit:description>
      <spirit:bitOffset>16</spirit:bitOffset>
      <spirit:bitWidth>15</spirit:bitWidth>
      <spirit:access>read-write</spirit:access>
      <spirit:volatile>false</spirit:volatile>
    </spirit:field>
  </spirit:register>

No issue so far!

But now consider that this register is repeated n times with register address equals to @0xA0 + 0x04*n.
n is between 0 to PARAM_N and PARAM_N is an RTL IP Parameter.

Is someone knowing how to describe this register in IP-XACT?

I already tried to found some XML IP-XACT examples on the net + read carefully the IP-XACT specification (IEEE) but I’m not really sure about the exact XML description.

Thanks in advance.

Xavier

I’m not sure about IP-XACT but I’ve used a work around though. Write a script which will generated the system verilog description for 1 register using either RALGEN(synopsys) or iREGGEN(cadence) and then instantiate it multiple times using the design parameter multiple times in the register block. This is just a workaround but doesn’t exactly attack your problem.

In reply to sujithsh:

Hi Sujithsh,

Thanks for helping me but this work around is too important for my needs and the future utilization of the IP-XACT file.

To me, the IP-XACT file description is a starting point for numerous others scripts that I probably implement in the future.

So it’s really important for me to have a “legal” description.
Furthermore I could imagine that a day we will provide the IP-XACT file to our providers/clients or partners.

Others suggestions?

Thanks;
Xavier

In reply to xavier.correcher:

Hello Xavier,

Maybe you already found a solution but I think you could try something like:

  • Your Component param:
<spirit:parameter>
  <spirit:name>PARAM_N<spirit:name>
  <spirit:value spirit:id=”param_n” spirit:minimum="0" spirit:maximum="10">1</spirit:value>
</spirit:parameter>
  • For register description
<spirit:dim spirit:resolve="dependent"
spirit:dependency="id('param_n')">1</spirit:dim>

See you

Julien