Tracing IP usage on the server

Helix IPLM manages IP CIPBs through their lifecycles via IP Hierarchies. These hierarchical associations between IPs provide traceability both from the top down through the release hierarchy and from the bottom up through IP usage tracking. IP Hierarchy Management from the top down is discussed on the IP Hierarchy page. This page discusses tracing IP usage from the bottom up on the server. 

Tracing IP usage

Tracing where IPs are used across project hierarchies allows tracking IPs that may have bugs or licensing requirements associated with them in every project in which they are used. 

For the purposes of IP usage reporting "Top Level" or "Project" IPs are defined as IPs that don't have any parents (are not used as resources by any IPVs in Helix IPLM). Each Top Level IPV hierarchy that contains the queried IPV in its hierarchy will be reported as a separate sparse tree output, and (on the CLI and IP page on IPLM Web) summarized in the lower top level IP summary section.

More details concerning the tracing of IP, IPV, and Line usage in workspaces via the 'pi ws list --contains' command is listed in the Listing Workspaces section. 

Copying IPs in Helix IPLM maintains a record of which IPV a new IP or IP Line was copied from, see Copying IPs and IP Lines (Branches) for more information on copying IPs in Helix IPLM

IP usage tracking on IPLM Web

IP Hierarchies can be built by including IPVs as resources on ther IPs. Clicking on the usage tab of the IPV page shows where that IPV is referenced as a resource by other top level IPs (IPs that are not themselves referenced as a resource). IPLM Web reports usage on both the IP and IPV pages, where the IP pages report the Top Level IPV usage across all IPVs.

IP usage

On the IP page, the Parents tab shows the IP usage, the immediate parent that uses the IP, and a summary of the IPV usage.

IPV usage

On the IPV page, the Usage tab shows a detailed view of every version on the Line that is in use.

Command line

Tracking the usage of an IP or IPV on the command line is accomplished with the 'pi ip usage' command.

pi ip usage Command

> pi ip usage -h
Usage: pi ip usage [-h] [--format {tree,dot,json}] [--top] ipv

Description: Report on IPV usage by other IPVs.

Positional arguments:
  ipv                   Identifier of the IPV

Optional arguments:
  --format {tree,dot,json}
                        Return the results in the specified format.
  --top                 Return the consolidated list of IPs that use the IPV.
  -h, --help            Show this help message and exit

Examples:
# Display all IPV using lib1.ip1.
  pi ip usage lib1.ip1

The following output shows the usage of a popular standard cell Library IP that is used in several projects.

Note:  The display shows a pruned tree of each of the hierarchies that this specific version of the IP is used in. Only the relevant sections of the tree are shown all the way to the top of the hierarchy. The display also summarizes the list of top level IPVs at the end for a quick summary of all the 'projects' that use this IPV.

IP Usage of a Single IPV
> pi ip usage StandardCells_TSMC_coco.CS-DTI-TS28N-GS-SCPWR@5.TRUNK
coco.SOC_TOP@10.TRUNK
└─ coco.Graphics@6.TRUNK
   ├─ coco.GPU@6.TRUNK
   │  └─ StandardCells_TSMC_coco.CS-DTI-TS28N-GS-SCPWR@5.TRUNK
   └─ coco.VideoMemoryController@6.TRUNK
      └─ StandardCells_TSMC_coco.CS-DTI-TS28N-GS-SCPWR@5.TRUNK

The IP StandardCells_TSMC_coco.CS-DTI-TS28N-GS-SCPWR is used in 1 top level IP(s):
   coco.SOC_TOP

To omit the sparse tree output and return only the summary display, use the option 'pi ip usage --top'.

Note that by omitting the Version and Line information in the following command, we are tracking usage for all variants of the standard cell Library on all lines that may be present. 

IP Usage of all IPVs on all Projects
> pi ip usage StandardCells_TSMC_coco.CS-DTI-TS28N-GS-SCPWR
Shelley_P4.SOC@5.TRUNK
└─ Shelley_P4.PeripheralSubsystem@5.TRUNK
   └─ Shelley_P4.USB@4.TRUNK
      └─ StandardCells_TSMC_coco.CS-DTI-TS28N-GS-SCPWR@1.revA0

coco.SOC_TOP@10.TRUNK
└─ coco.Graphics@6.TRUNK
   ├─ coco.GPU@6.TRUNK
   │  └─ StandardCells_TSMC_coco.CS-DTI-TS28N-GS-SCPWR@5.TRUNK
   └─ coco.VideoMemoryController@6.TRUNK
      └─ StandardCells_TSMC_coco.CS-DTI-TS28N-GS-SCPWR@5.TRUNK

The IP StandardCells_TSMC_coco.CS-DTI-TS28N-GS-SCPWR is used in 2 top level IP(s):
   Shelley_P4.SOC
   coco.SOC_TOP

Usage can be generated for IPVs at any level

Subsystem Usage
> pi ip usage coco.GPU
coco.SOC_TOP@10.TRUNK
└─ coco.Graphics@6.TRUNK
   └─ coco.GPU@6.TRUNK
 
The IP coco.GPU is used in 1 top level IP(s):
   coco.SOC_TOP

Usage of an IP @HEAD, @LATEST or at a specific ALIAS (in this case @GOLD) can also be generated by specifying it in the usage command as appropriate, for example: "pi ip usage lib.ip@HEAD.TRUNK". Usage of IPVs specified at a fixed release produces different output than outputs of the same IPV at an alias, even if that alias is present within the fixed release. Specifying the alias tracks usage of that alias specifically, independent of the underlying fixed release.

IPV Alias Usage
[tau deb8:ws_tSbWeXnTVZJH] pi ip usage Memories_UMC_coco.ABI-U-L090G_Multiport_RAM@GOLD.TRUNK
coco.SOC_TOP@11.TRUNK
└─ coco.MainMemory@7.TRUNK
   └─ Memories_UMC_coco.ABI-U-L090G_Multiport_RAM@GOLD.TRUNK

The Alias Memories_UMC_coco.ABI-U-L090G_Multiport_RAM@GOLD.TRUNK is used in 1 top level IP(s):
   coco.SOC_TOP

Permissions and usage

If a user doesn't have permissions to an IP  at any point in the sparse IP Hierarchy for a top level "project" IP, a warning is generated and that sparse tree/top level summary usage will not be listed in the usage output.

Top level IP reporting and intermediate aliases

If an intermediate level IPV included in the usage sparse hierarchy is included at an aliased version, the corresponding fixed version of the top level IP won't be reported as a top level IP/sparse hierarchy in the output.

IP Reporting with an Intermediate Alias
> pi ip usage tutorial.padring@.TRUNK
 
tutorial.tapeout_03@34.TRUNK
└─ tutorial.tutorial@GOLD.TRUNK [@6]
   └─ tutorial.padring@1.TRUNK

 
tutorial.tutorial@5.TRUNK
└─ tutorial.padring@1.TRUNK

tutorial.tutorial@4.TRUNK
└─ tutorial.padring@1.TRUNK

tutorial.tutorial@3.TRUNK
└─ tutorial.padring@1.TRUNK

tutorial.tutorial@2.TRUNK
└─ tutorial.padring@1.TRUNK

tutorial.tutorial@1.TRUNK
└─ tutorial.padring@1.TRUNK

tutorial.tutorial@0.TRUNK
└─ tutorial.padring@0.TRUNK

The Line 'tutorial.padring@.TRUNK' is used in 2 top level IP(s):
   tutorial.test
   tutorial.tutorial

In the above case the latest release of the tutorial.tutorial IP is @6. Because tutorial@6 is included @HEAD by the tutorial.tapeout_03@34.TRUNK IPV, there is no top level IPV output display for tutorial.tutorial@6.TRUNK. Releases @0 to @5 are not included as resources by any other higher level IPV so they appear as separate top level IPV sparse trees. The point to be aware of here is that an intermediate IPV@(ALIAS | LATEST | HEAD ) counts as usage for the fixed release that corresponds to that alias, and a separate top level tree for the fixed release will not be displayed.