====== Placement and Routing ====== To use the place and route flow, we need a completed [[asic:cells:start|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 [[https://ieeexplore.ieee.org/document/9256795|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''.