Skip to content

Synthesis & Physical Design

Homework :

  • Synthesize your design — review gate count and check for unintended latches
  • Run place and route flow
  • Analyze timing reports — identify and fix any violations
  • Generate GDS and review layout in KLayout

Design synthesis

I modified the given Makefile by adding my projet to the list to be able to synthetise it by typing make synth-til. til being the short name of the project as it’s copying the til311 IC. The end of the run give us some stats :

=== design hierarchy ===

        +----------Count including submodules.
        |
       58 til311
       50 decoder
        8 shift

        +----------Count including submodules.
        |
       53 wires
       92 wire bits
       16 public wires
       55 public wire bits
       14 ports
       47 port bits
        - memories
        - memory bits
        - processes
       58 cells
        3   $_ANDNOT_
        1   $_AND_
        8   $_DFF_PP0_
       27   $_MUX_
        1   $_NAND_
        1   $_NOR_
        3   $_NOT_
        3   $_ORNOT_
       11   $_OR_
        2 submodules
        1   decoder
        1   shift

Now the synthesis for Sky130, launched by typing make sky130-til. It uses the synth.tcl script because there are more steps. Result is slightly different :

=== design hierarchy ===

        +----------Count including submodules.
        |        +-Area including submodules.
        |        | 
       52  431.664 til311
       36  201.443 decoder
       16  230.221 shift

        +----------Count including submodules.
        |        +-Area including submodules.
        |        | 
       47        - wires
       86        - wire bits
       16        - public wires
       55        - public wire bits
       14        - ports
       47        - port bits
        -        - memories
        -        - memory bits
        -        - processes
       52  431.664 cells
        1    7.507   sky130_fd_sc_hd__a21o_1
        2    10.01   sky130_fd_sc_hd__a21oi_1
        1    8.758   sky130_fd_sc_hd__a22o_1
        1    7.507   sky130_fd_sc_hd__a22oi_1
        2   17.517   sky130_fd_sc_hd__a2bb2oi_1
        1    8.758   sky130_fd_sc_hd__a32oi_1
       10   37.536   sky130_fd_sc_hd__clkinv_1
        8  200.192   sky130_fd_sc_hd__dfrtp_1
        3   18.768   sky130_fd_sc_hd__lpflow_isobufsrc_1
        5   18.768   sky130_fd_sc_hd__nand2_1
        2   12.512   sky130_fd_sc_hd__nand2b_1
        4   15.014   sky130_fd_sc_hd__nor2_1
        2    10.01   sky130_fd_sc_hd__nor3_1
        7   35.034   sky130_fd_sc_hd__o21ai_0
        1    6.256   sky130_fd_sc_hd__o22ai_1
        2   17.517   sky130_fd_sc_hd__o32ai_1
        2  431.664 submodules
        1  201.443   decoder
        1  230.221   shift

   Chip area for top module '\til311': 431.664000
     of which used for sequential elements: 200.192000 (46.38%)

This time, two files are created in the build/ directory, a JSON file and Verilog file. We can visualize in a graph what was created using the show command in yosys or by sending the .json file to netlistsvg, a tool we can use online or install localy. Netlistsvg result : Netlistsvg graph We can add this in the flow TCL file:

# Generate DOT file for graphics visualization
show -prefix $OUT_DIR/${TOP}_synth -notitle -colors 2 -width -format dot

It creates a DOT file we can view with xdot. It creates a big graph not so easy to read. I barely explored the options to visualize a netlist.

Place & Route

make pnr-til uses the much bigger flow/pnr.tcl script and takes a little bit more time to execute, even for a simple design like this. Most report files are empty, i’m not sure it’s normal. Design area 432 um^2 44% utilization. As the design is very simple with no real clock, timing analysis is not really usefull here.

GDS

make gds-til runs quickly. Klayout full hierarchy