Placement and Routing
To use the place and route flow, we need a completed cell library. The .rect
files for the completed cell library (that include the full cell geometry, including wiring) with the configuration variables pointing to the cell library path.
Once the routed cell library .rect
files are ready, using the same interact
script described in the cell mapping step will create a layout problem for place and route that includes the correct LEF for the cells. The script is repeated here:
$ interact -ref=1 -Tsky130l interact> act:read "out.act" interact> act:merge "cells.act" interact> act:expand interact> act:top sdt_triple interact> ckt:cell-map interact> load-scm "phydb.scm" interact> phydb:create 1.8 1 "output.lef" interact>
Running this with the correct .rect
files will ensure that the generated LEF will include correct pin locations, routing obstacles, etc.
Placement
The next step is to run the placement engine called dali
. To do so, continue with the following interact
commands:
interact> dali:init 3 interact> dali:place-design 0.6 interact> dali:place-io "met1" interact> dali:export-phydb interact> dali:close interact> phydb:write-aux-rect "output" interact> phydb:update-lef "output" interact>
The first command initializes the placement engine. The 3
is the verbosity level (0 turns off verbose messages). The next command runs the global and detailed placer, with a placement density of 0.6
. Note that you should have provided sufficient area in the phydb:create
command, otherwise this will fail. The next command places the I/O pins on metal1 in an automated fashion. (“met1” comes from the name for metal1 in the sky130l technology file.) Finally, the placed results are used to update the physical database, and the placement engine is terminated.
The last two commands are required because Dali uses a gridded cell placement approach. This means that wells and selects have to be superimposed once the gridded cell placement is complete. Hence, the LEF file needs to be updated to include these new parts of the design.
At any point, you can see the current state of the DEF file using:
interact> phydb:write-def "file.def" interact>
This flow corresponds to a gridded placement flow.
Power routing
For gridded cells, the power buses are run after placement. To run this special power bus router, use the following commands:
interact> pwroute:init 3 interact> pwroute:set_reinforcement 0 interact> pwroute:run interact> pwroute:export-phydb interact> pwroute:close interact>
Here we turn off reinforcements, as the technology does not have many metal layers. For a more modern process, the power router is capable of adding horizontal and vertical reinforcements of the power grid as well.
Global routing
Finally, we can run the global router called sproute
as follows:
interact> sproute:init 3 interact> sproute:run interact> sproute:close interact>
The routing guide file can be saved using
interact> phydb:write-guide "output.guide" interact>
This contains the global routing guide that can be read by a number of open source tools (e.g. TritonRoute, which is installed as part of the actflow repo) to complete the detailed routing. For example, the command
$ TritonRoute -lef output.lef -def output.def -guide output.guide -output routed
would run detailed routing, saving the result to routed.def
.