Updating a workspace tutorial
This training page covers workspace updates at the file and resource levels and of the top level IPV.
Updating the Workspace
Often your workspace will contain IPs for which other users have created new releases beyond the workspace contents resulting in the workspace being out of date. Perforce IPLM provides methods to update your existing workspace to include those new versions with the 'pi update' command.
Note that 'pi update' will bring in specified new release from Perforce IPLM, it is always possible to run file level updates from the DM system (in Perforce's case via 'p4 sync').
Let's look at an example when the current user has loaded in an IP into a workspace, and another user has released a new version of one of the resource IPs (say one of the IPs at HEAD.TRUNK). Let's load tutorial.intf_ana into two workspaces in Local Mode ( tutorial.intf_ana and ws1) .
Loading tutorial.intf_ana into Two Workspaces in Local Mode
We load the IP into the first workspace “/tmp/tutorial.intf_ana”.
> pi ip load tutorial.intf_ana Loading IPV 'tutorial.intf_ana@1.TRUNK' into Workspace '/tmp/tutorial.intf_ana'. INFO:Waiting for 2 PiCache jobs ... INFO:Waiting for 1 PiCache job ... ┌────────────────────────┬─────────────────┬───────────┬───────────────┐ │ NAME │ VERSION │ MODE │ RELATIVE PATH │ ╞════════════════════════╪═════════════════╪═══════════╪═══════════════╡ │ tutorial.intf_ana │ 1.TRUNK │ Refer │ intf_ana │ │ tutorial.acells_tsmc18 │ 1.TRUNK │ Refer │ acells_tsmc18 │ │ tutorial.adc │ HEAD.TRUNK [@1] │ Refer │ adc │ │ tutorial.dac │ HEAD.TRUNK [@0] │ Container │ │ │ tutorial.laysc_tsmc18 │ 1.TRUNK │ Refer │ laysc_tsmc18 │ └────────────────────────┴─────────────────┴───────────┴───────────────┘
We then load the same IP into a second workspace “/tmp/ws1”.
> pi ip load tutorial.intf_ana ws1 Loading IPV 'tutorial.intf_ana@1.TRUNK' into Workspace '/tmp/ws1'. INFO:Waiting for 1 PiCache job ... ┌────────────────────────┬─────────────────┬───────────┬───────────────┐ │ NAME │ VERSION │ MODE │ RELATIVE PATH │ ╞════════════════════════╪═════════════════╪═══════════╪═══════════════╡ │ tutorial.intf_ana │ 1.TRUNK │ Refer │ intf_ana │ │ tutorial.acells_tsmc18 │ 1.TRUNK │ Refer │ acells_tsmc18 │ │ tutorial.adc │ HEAD.TRUNK [@1] │ Refer │ adc │ │ tutorial.dac │ HEAD.TRUNK [@0] │ Container │ │ │ tutorial.laysc_tsmc18 │ 1.TRUNK │ Refer │ laysc_tsmc18 │ └────────────────────────┴─────────────────┴───────────┴───────────────┘
Below is the initial state of the 'tutorial.intf_ana' workspace before any new resource IPs have been released:
Initial state of the 'tutorial.intf_ana' Workspace
> cd tutorial.intf_ana > pi ws st -v Workspace ID : 6c308b4c-beda-4bcf-8335-0a532310bc00 Directory : /tmp/tutorial.intf_ana IP : tutorial.intf_ana@1.TRUNK Resources : ┌────────────────────────┬──────────────────┬─────────────────┬───────────┬───────────────┬───────────┐ │ NAME │ EXPECTED VERSION │ LOCAL VERSION │ WS STATUS │ SERVER STATUS │ MODE │ ╞════════════════════════╪══════════════════╪═════════════════╪═══════════╪═══════════════╪═══════════╡ │ tutorial.intf_ana │ 1.TRUNK │ 1.TRUNK │ OK │ OK │ Refer │ │ tutorial.acells_tsmc18 │ 1.TRUNK │ 1.TRUNK │ OK │ OK │ Refer │ │ tutorial.adc │ HEAD.TRUNK [@1] │ HEAD.TRUNK [@1] │ OK │ OK │ Refer │ │ tutorial.dac │ HEAD.TRUNK [@0] │ HEAD.TRUNK [@0] │ OK │ OK │ Container │ │ tutorial.laysc_tsmc18 │ 1.TRUNK │ 1.TRUNK │ OK │ OK │ Refer │ └────────────────────────┴──────────────────┴─────────────────┴───────────┴───────────────┴───────────┘
Similarly, below is the initial state of the 'ws1' workspace before any new resource IPs have been released:
Initial State of the 'ws1' Workspace
> cd ../ws1 > pi ws st -v Workspace ID : 234a3066-2080-473d-a331-2c869b39344f Directory : /tmp/ws1 IP : tutorial.intf_ana@1.TRUNK Resources : ┌────────────────────────┬──────────────────┬─────────────────┬───────────┬───────────────┬───────────┐ │ NAME │ EXPECTED VERSION │ LOCAL VERSION │ WS STATUS │ SERVER STATUS │ MODE │ ╞════════════════════════╪══════════════════╪═════════════════╪═══════════╪═══════════════╪═══════════╡ │ tutorial.intf_ana │ 1.TRUNK │ 1.TRUNK │ OK │ OK │ Refer │ │ tutorial.acells_tsmc18 │ 1.TRUNK │ 1.TRUNK │ OK │ OK │ Refer │ │ tutorial.adc │ HEAD.TRUNK [@1] │ HEAD.TRUNK [@1] │ OK │ OK │ Refer │ │ tutorial.dac │ HEAD.TRUNK [@0] │ HEAD.TRUNK [@0] │ OK │ OK │ Container │ │ tutorial.laysc_tsmc18 │ 1.TRUNK │ 1.TRUNK │ OK │ OK │ Refer │ └────────────────────────┴──────────────────┴─────────────────┴───────────┴───────────────┴───────────┘
Updating files in @HEAD IPs
When a user (either another user or current user) has edited files of a resource IP that is at HEAD (in another workspace) and saved the changes to the DM system, the status of other workspaces will change to indicate an updated is needed to the resource IP. In the example below, we will add a new file to the DM system for tutorial.adc. (the file was added from 'ws1' workspace) :
Adding a new file to the DM system for tutorial.adc
> pi ip local tutorial.adc Switching 'tutorial.adc@HEAD.TRUNK' to local mode. Successfully switched 'tutorial.adc@HEAD.TRUNK' to local mode.
> touch adc/hw_code/readme > p4 add adc/hw_code/readme //mdx_test/tutorial/adc/TRUNK/hw_code/readme#1 - opened for add /tmp/ws1/adc/hw_code/readme - empty, assuming text (+Fl). > p4 submit -d 'new file' Submitting change 4. Locking 1 files ... add //mdx_test/tutorial/adc/TRUNK/hw_code/readme#1 Change 4 submitted. mdx@demo2:/tmp/ws1$ pi ws st -v Workspace ID : 234a3066-2080-473d-a331-2c869b39344f Directory : /tmp/ws1 IP : tutorial.intf_ana@1.TRUNK Resources : ┌────────────────────────┬──────────────────┬─────────────────┬───────────┬───────────────┬───────────┐ │ NAME │ EXPECTED VERSION │ LOCAL VERSION │ WS STATUS │ SERVER STATUS │ MODE │ ╞════════════════════════╪══════════════════╪═════════════════╪═══════════╪═══════════════╪═══════════╡ │ tutorial.intf_ana │ 1.TRUNK │ 1.TRUNK │ OK │ OK │ Refer │ │ tutorial.acells_tsmc18 │ 1.TRUNK │ 1.TRUNK │ OK │ OK │ Refer │ │ tutorial.adc │ HEAD.TRUNK [@1] │ HEAD.TRUNK [@1] │ OK │ OK │ Local │ │ tutorial.dac │ HEAD.TRUNK [@0] │ HEAD.TRUNK [@0] │ OK │ OK │ Container │ │ tutorial.laysc_tsmc18 │ 1.TRUNK │ 1.TRUNK │ OK │ OK │ Refer │ └────────────────────────┴──────────────────┴─────────────────┴───────────┴───────────────┴───────────┘
Although 'tutorial.adc' was updated, because the IP is at head, the files in this workspace are up to date with the P4 repository so the 'WS STATUS' is 'OK' rather than 'Update Needed'.
Now going back to the initial workspace 'tutorial.intf_ana', the workspace status shows as:
Workspace status
> cd tutorial.intf_ana > pi ws st -v Workspace ID : 6c308b4c-beda-4bcf-8335-0a532310bc00 Directory : /tmp/tutorial.intf_ana IP : tutorial.intf_ana@1.TRUNK Resources : ┌────────────────────────┬──────────────────┬─────────────────┬───────────────┬───────────────┬───────────┐ │ NAME │ EXPECTED VERSION │ LOCAL VERSION │ WS STATUS │ SERVER STATUS │ MODE │ ╞════════════════════════╪══════════════════╪═════════════════╪═══════════════╪═══════════════╪═══════════╡ │ tutorial.intf_ana │ 1.TRUNK │ 1.TRUNK │ OK │ OK │ Refer │ │ tutorial.acells_tsmc18 │ 1.TRUNK │ 1.TRUNK │ OK │ OK │ Refer │ │ tutorial.adc │ HEAD.TRUNK [@1] │ HEAD.TRUNK [@1] │ Update Needed │ OK │ Refer │ │ tutorial.dac │ HEAD.TRUNK [@0] │ HEAD.TRUNK [@0] │ OK │ OK │ Container │ │ tutorial.laysc_tsmc18 │ 1.TRUNK │ 1.TRUNK │ OK │ OK │ Refer │ └────────────────────────┴──────────────────┴─────────────────┴───────────────┴───────────────┴───────────┘
From the 'tutorial.intf_ana' workspace Perforce IPLM indicates an updated is needed to the tutorial.adc@HEAD IPV.
If we run a pi ip diff we can see exactly what updates will be brought in:
> pi ip diff tutorial.adc tutorial.adc@HEAD.TRUNK [@1] on the server and tutorial.adc@HEAD.TRUNK [@1] in the Workspace differ. ┌────────────────┬──────────────────────────────┬───────────┐ │ FILES │ tutorial.adc@HEAD.TRUNK [@1] │ Workspace │ ╞════════════════╪══════════════════════════════╪═══════════╡ │ hw_code/readme │ 1 │ │ └────────────────┴──────────────────────────────┴───────────┘
The diff shows the changes available in the latest @HEAD of the IP, which will be brought in as part of an update.
Running an update on the workspace will bring in the latest files to this workspace. It will show the list of resources that have been updated.
Run the command 'pi update' to update the workspace from the top level (assumed when no IP is provided):
pi update command
> pi up Updating Workspace. For large IP this could take a while. INFO:Waiting for 1 PiCache job ... INFO:Waiting for 1 PiCache job ... ┌──────────────┬─────────────────┬─────────────────┬───────┬──────┐ │ NAME │ OLD VERSION │ NEW VERSION │ MODE │ PATH │ ╞══════════════╪═════════════════╪═════════════════╪═══════╪══════╡ │ tutorial.adc │ HEAD.TRUNK [@1] │ HEAD.TRUNK [@1] │ Refer │ adc │ └──────────────┴─────────────────┴─────────────────┴───────┴──────┘ > pi ws st -v Workspace ID : 6c308b4c-beda-4bcf-8335-0a532310bc00 Directory : /tmp/tutorial.intf_ana IP : tutorial.intf_ana@1.TRUNK Resources : ┌────────────────────────┬──────────────────┬─────────────────┬───────────┬───────────────┬───────────┐ │ NAME │ EXPECTED VERSION │ LOCAL VERSION │ WS STATUS │ SERVER STATUS │ MODE │ ╞════════════════════════╪══════════════════╪═════════════════╪═══════════╪═══════════════╪═══════════╡ │ tutorial.intf_ana │ 1.TRUNK │ 1.TRUNK │ OK │ OK │ Refer │ │ tutorial.acells_tsmc18 │ 1.TRUNK │ 1.TRUNK │ OK │ OK │ Refer │ │ tutorial.adc │ HEAD.TRUNK [@1] │ HEAD.TRUNK [@1] │ OK │ OK │ Refer │ │ tutorial.dac │ HEAD.TRUNK [@0] │ HEAD.TRUNK [@0] │ OK │ OK │ Container │ │ tutorial.laysc_tsmc18 │ 1.TRUNK │ 1.TRUNK │ OK │ OK │ Refer │ └────────────────────────┴──────────────────┴─────────────────┴───────────┴───────────────┴───────────┘
See Updating the Workspace in the User Guide for more information.
Updating resources
If there's a newer version of one of the resource IPs, say 'tutorial.acells_tsmc18', the user can update the workspace to use that new resource IP by adding the IPV to the pi update command.
> pi update <resource IPV>
We can release a new version of an IP by either editing/adding a new file under that IP's workspace and then releasing the IP with the pi release command or by editing the IP and making some changes.
For this example, lets use 'pi ip edit tutorial.acells_tsmc18' and change one of the fields, say 'project_props' to '* --path blocks/$IP'.
pi ip edit tutorial.acells_tsmc18
> pi ip edit tutorial.acells_tsmc18 < go to bottom of template >< change 'project_props' field to: > project_props = * --path blocks/$IP < save and exit template >
Modifying the IP with the 'pi ip edit' is called a 'server side edit' of the IP, meaning we have modified the IP configuration without needed a workspace. Now we can update one of the workspaces with the new IP Version:
pi ip edit tutorial.acells_tsmc18 Command
> pi update tutorial.acells_tsmc18@2.TRUNK Updating Workspace. For large IP this could take a while. INFO:Waiting for 1 PiCache job ... INFO:Waiting for 1 PiCache job ... ┌────────────────────────┬─────────────┬─────────────┬───────┬───────────────┐ │ NAME │ OLD VERSION │ NEW VERSION │ MODE │ PATH │ ╞════════════════════════╪═════════════╪═════════════╪═══════╪═══════════════╡ │ tutorial.acells_tsmc18 │ 1.TRUNK │ 2.TRUNK │ Refer │ acells_tsmc18 │ └────────────────────────┴─────────────┴─────────────┴───────┴───────────────┘ > pi ws st -v Workspace ID : 6c308b4c-beda-4bcf-8335-0a532310bc00 Directory : /tmp/tutorial.intf_ana IP : tutorial.intf_ana@1.TRUNK Resources : ┌────────────────────────┬──────────────────┬─────────────────┬───────────┬───────────────┬───────────┐ │ NAME │ EXPECTED VERSION │ LOCAL VERSION │ WS STATUS │ SERVER STATUS │ MODE │ ╞════════════════════════╪══════════════════╪═════════════════╪═══════════╪═══════════════╪═══════════╡ │ tutorial.intf_ana │ 1.TRUNK │ 1.TRUNK │ Modified │ OK │ Refer │ │ tutorial.acells_tsmc18 │ 1.TRUNK │ 2.TRUNK │ OK │ OK │ Refer │ │ tutorial.adc │ HEAD.TRUNK [@1] │ HEAD.TRUNK [@1] │ Modified │ OK │ Refer │ │ tutorial.dac │ HEAD.TRUNK [@0] │ HEAD.TRUNK [@0] │ OK │ OK │ Container │ │ tutorial.laysc_tsmc18 │ 1.TRUNK │ 1.TRUNK │ OK │ OK │ Refer │ └────────────────────────┴──────────────────┴─────────────────┴───────────┴───────────────┴───────────┘
The workspace status output shows that the acells_tsmc18 'LOCAL VERSION' is now 2.TRUNK, where the 'EXPECTED VERSION' is 1.TRUNK, because of our update. It is quite common to move resource versions around to run sims or verification, in anticipation of making a new release of an IP higher in the hierarchy. Let's check why 'intf_ana' and 'adc' also now are reporting Modified status.
> pi ip diff intf_ana tutorial.intf_ana@1.TRUNK on the server and tutorial.intf_ana@1.TRUNK in the Workspace differ. ┌────────────────────────┬───────────────────────────┬───┬───────────┐ │ RESOURCES │ tutorial.intf_ana@1.TRUNK │ │ Workspace │ ╞════════════════════════╪═══════════════════════════╪═══╪═══════════╡ │ tutorial.acells_tsmc18 │ 1.TRUNK │ → │ 2.TRUNK │ └────────────────────────┴───────────────────────────┴───┴───────────┘ > pi ip diff adc tutorial.adc@HEAD.TRUNK [@1] on the server and tutorial.adc@HEAD.TRUNK [@1] in the Workspace differ. ┌────────────────────────┬──────────────────────────────┬───┬───────────┐ │ RESOURCES │ tutorial.adc@HEAD.TRUNK [@1] │ │ Workspace │ ╞════════════════════════╪══════════════════════════════╪═══╪═══════════╡ │ tutorial.acells_tsmc18 │ 1.TRUNK │ → │ 2.TRUNK │ └────────────────────────┴──────────────────────────────┴───┴───────────┘ > pi ip tree tutorial.intf_ana@1.TRUNK tutorial.intf_ana@1.TRUNK ├─ tutorial.acells_tsmc18@1.TRUNK ├─ tutorial.adc@HEAD.TRUNK [@1] │ ├─ tutorial.acells_tsmc18@1.TRUNK │ └─ tutorial.laysc_tsmc18@1.TRUNK ├─ tutorial.dac@HEAD.TRUNK [@0] └─ tutorial.laysc_tsmc18@1.TRUNK
Both of these IPV's include 'acells_tsmc18' as a resource so when the version moves to a different one than expected, these IPVs are 'Modified' from their loaded release state. See Viewing Workspace Modifications for more information on this.
To get everything back the tutorial.intf_ana@1 release workspace configuration we started with we could move acells_tsmc18 back to the original @1 version directly via 'pi up cells_tsmc18@1'. If there were a number of modifications and a larger workspace it might be confusing to get everything back to the original state, so instead we can use pi update with the --force option:
pi update -f command
> pi up -f Updating Workspace. For large IP this could take a while. ┌────────────────────────┬─────────────┬─────────────┬───────┬───────────────┐ │ NAME │ OLD VERSION │ NEW VERSION │ MODE │ PATH │ ╞════════════════════════╪═════════════╪═════════════╪═══════╪═══════════════╡ │ tutorial.acells_tsmc18 │ 2.TRUNK │ 1.TRUNK │ Refer │ acells_tsmc18 │ └────────────────────────┴─────────────┴─────────────┴───────┴───────────────┘ > pi ws st -v Workspace ID : 6c308b4c-beda-4bcf-8335-0a532310bc00 Directory : /tmp/tutorial.intf_ana IP : tutorial.intf_ana@1.TRUNK Resources : ┌────────────────────────┬──────────────────┬─────────────────┬───────────┬───────────────┬───────────┐ │ NAME │ EXPECTED VERSION │ LOCAL VERSION │ WS STATUS │ SERVER STATUS │ MODE │ ╞════════════════════════╪══════════════════╪═════════════════╪═══════════╪═══════════════╪═══════════╡ │ tutorial.intf_ana │ 1.TRUNK │ 1.TRUNK │ OK │ OK │ Refer │ │ tutorial.acells_tsmc18 │ 1.TRUNK │ 1.TRUNK │ OK │ OK │ Refer │ │ tutorial.adc │ HEAD.TRUNK [@1] │ HEAD.TRUNK [@1] │ OK │ OK │ Refer │ │ tutorial.dac │ HEAD.TRUNK [@0] │ HEAD.TRUNK [@0] │ OK │ OK │ Container │ │ tutorial.laysc_tsmc18 │ 1.TRUNK │ 1.TRUNK │ OK │ OK │ Refer │ └────────────────────────┴──────────────────┴─────────────────┴───────────┴───────────────┴───────────┘
Updating the Top IPV
If there is a newer version of the top level IP, it will be indicated as such to the user when running :
> pi ws st -v
For this example, lets use 'pi ip edit tutorial.intf_ana' and change one of the fields, say 'project_props' to '* --path blocks/$IP'.
pi ip edit tutorial.intf_ana
> pi ip edit tutorial.intf_ana < go to bottom of template >< change 'project_props' field to: > project_props = * --path blocks/$IP < save and exit template >
Now lets check the status in one of our workspaces:
Editing the top level IP
> pi ws st -v Workspace ID : 6c308b4c-beda-4bcf-8335-0a532310bc00 Directory : /tmp/tutorial.intf_ana IP : tutorial.intf_ana@1.TRUNK Resources : ┌────────────────────────┬──────────────────┬─────────────────┬───────────┬───────────────────────┬───────────┐ │ NAME │ EXPECTED VERSION │ LOCAL VERSION │ WS STATUS │ SERVER STATUS │ MODE │ ╞════════════════════════╪══════════════════╪═════════════════╪═══════════╪═══════════════════════╪═══════════╡ │ tutorial.intf_ana │ 1.TRUNK │ 1.TRUNK │ OK │ New version available │ Refer │ │ tutorial.acells_tsmc18 │ 1.TRUNK │ 1.TRUNK │ OK │ OK │ Refer │ │ tutorial.adc │ HEAD.TRUNK [@1] │ HEAD.TRUNK [@1] │ OK │ OK │ Refer │ │ tutorial.dac │ HEAD.TRUNK [@0] │ HEAD.TRUNK [@0] │ OK │ OK │ Container │ │ tutorial.laysc_tsmc18 │ 1.TRUNK │ 1.TRUNK │ OK │ OK │ Refer │ └────────────────────────┴──────────────────┴─────────────────┴───────────┴───────────────────────┴───────────┘
We can see what the latest version of the IP is by running:
Latest IP Version
> pi ip list tutorial.intf_ana ┌───────────────────────────┬────┬─────────────┬────────────┬───────────────────────────────┬─────────────────┐ │ NAME │ DM │ ALIASES │ CREATED BY │ CREATED ON │ VERSION MESSAGE │ ╞═══════════════════════════╪════╪═════════════╪════════════╪═══════════════════════════════╪═════════════════╡ │ tutorial.intf_ana@2.TRUNK │ P4 │ HEAD LATEST │ admin │ 2020-06-19 15:54:55 -0400 EDT │ hier release │ └───────────────────────────┴────┴─────────────┴────────────┴───────────────────────────────┴─────────────────┘ Found 1 matching object(s).
To see the difference between the current workspace and the newer version of the IP, run "pi ip diff <IPV>".
pi ip diff <IPV> -v command
> pi ip diff tutorial.intf_ana@2.TRUNK tutorial.intf_ana@2.TRUNK on the server and tutorial.intf_ana@1.TRUNK in the Workspace differ. ┌────────────────────┬───────────────────────────┬──────────────┐ │ META DATA │ tutorial.intf_ana@2.TRUNK │ Workspace │ ╞════════════════════╪═══════════════════════════╪══════════════╡ │ Project Properties │ * --path blocks/$IP │ * --path $IP │ └────────────────────┴───────────────────────────┴──────────────┘
The above example shows that the project property '–path' setting is different between the IP in the workspace and the latest version. If there were files that were different between the two, it would be indicated as well in the above table.
To update to the newer version of the IP we run:
Updating to the new IP Version
> pi update Updating Workspace. For large IP this could take a while. INFO:Waiting for 2 PiCache jobs ... INFO:Waiting for 1 PiCache job ... ┌────────────────────────┬─────────────────┬─────────────────┬───────┬──────────────────────┐ │ NAME │ OLD VERSION │ NEW VERSION │ MODE │ PATH │ ╞════════════════════════╪═════════════════╪═════════════════╪═══════╪══════════════════════╡ │ tutorial.acells_tsmc18 │ 1.TRUNK │ 1.TRUNK │ Refer │ blocks/acells_tsmc18 │ │ tutorial.adc │ HEAD.TRUNK [@1] │ HEAD.TRUNK [@1] │ Refer │ blocks/adc │ │ tutorial.intf_ana │ 1.TRUNK │ 2.TRUNK │ Refer │ blocks/intf_ana │ │ tutorial.laysc_tsmc18 │ 1.TRUNK │ 1.TRUNK │ Refer │ blocks/laysc_tsmc18 │ └────────────────────────┴─────────────────┴─────────────────┴───────┴──────────────────────┘ > pi ws st -v Workspace ID : 6c308b4c-beda-4bcf-8335-0a532310bc00 Directory : /tmp/tutorial.intf_ana IP : tutorial.intf_ana@2.TRUNK Resources : ┌────────────────────────┬──────────────────┬─────────────────┬───────────┬───────────────┬───────────┐ │ NAME │ EXPECTED VERSION │ LOCAL VERSION │ WS STATUS │ SERVER STATUS │ MODE │ ╞════════════════════════╪══════════════════╪═════════════════╪═══════════╪═══════════════╪═══════════╡ │ tutorial.intf_ana │ 2.TRUNK │ 2.TRUNK │ OK │ OK │ Refer │ │ tutorial.acells_tsmc18 │ 1.TRUNK │ 1.TRUNK │ OK │ OK │ Refer │ │ tutorial.adc │ HEAD.TRUNK [@1] │ HEAD.TRUNK [@1] │ OK │ OK │ Refer │ │ tutorial.dac │ HEAD.TRUNK [@0] │ HEAD.TRUNK [@0] │ OK │ OK │ Container │ │ tutorial.laysc_tsmc18 │ 1.TRUNK │ 1.TRUNK │ OK │ OK │ Refer │ └────────────────────────┴──────────────────┴─────────────────┴───────────┴───────────────┴───────────┘