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"

Running this with the correct .rect files will ensure that the generated LEF will include correct pin locations, routing obstacles, etc.


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"

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"

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

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

The routing guide file can be saved using

interact> phydb:write-guide ""

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 routed

would run detailed routing, saving the result to routed.def.