Fill: cells, metal and density

Distinguish row fillers, decoupling cells and metal fill, then audit what a density or extraction result actually covers.

Lesson
L7.4
Time
25 min
Runs on
OpenROAD
Check
5 questions

The routed MAC gains 985 filler cells and 3675 metal rectangles. The extracted RC summary remains unchanged. That observation raises a coverage question: did this extraction path account for the added floating shapes?

LayoutRows and floating metal after fill
  • Tap cells
  • Fill and decap
  • Logic
  • Buffers and inverters
  • Flip-flops
  • Clock tree
  • met1
  • met2
  • met3
  • met4
  • met5
  • Floating metal fill outlines
  • I/O pins
Stage
Detailed route
Cell area
10,231.1 µm²
Utilization
100.0 %
Wirelength (HPWL)
6,331 µm
Routed wirelength
7,652 µm
Worst max slack
1.0077 ns
Total negative max slack
0.0000 ns
Worst min slack
0.3489 ns
Rows and floating metal after fillDrawing the layout…
  1. Global route

    The placed cells before fill.

  2. Detailed route

    Filler cells occupy row gaps; outlined rectangles show separate floating metal fill.

Read the layout as text

mac: die 112.02 × 112.02 µm, core 101.66 × 100.64 µm, 37 rows of 2.72 µm, 39 signal pins.

StageCell areaUtilizationWirelength (HPWL)Routed wirelengthWorst max slackTotal negative max slackWorst min slackClock skewRouting usageOverflowCells placed
Floorplan4,332.9 µm²42.4 %——1.5886 ns0.0000 ns0.4679 ns———136 tap cells; I/O pins not placed yet
Global placement4,332.9 µm²42.4 %4,952 µm—1.1493 ns0.0000 ns0.4919 ns——0.0994136 tap cells, 6 buffers and inverters, 389 logic, 52 flip-flops
Detailed placement4,332.9 µm²42.4 %6,041 µm—1.0508 ns0.0000 ns0.4980 ns———136 tap cells, 6 buffers and inverters, 389 logic, 52 flip-flops
Clock tree4,420.5 µm²43.2 %6,331 µm—1.0227 ns0.0000 ns0.3439 ns0.0084 ns——136 tap cells, 6 buffers and inverters, 389 logic, 52 flip-flops, 8 clock tree
Global route4,420.5 µm²43.2 %6,331 µm13,938 µm0.7109 ns0.0000 ns0.3259 ns—13.1 %0136 tap cells, 6 buffers and inverters, 389 logic, 52 flip-flops, 8 clock tree
Detailed route10,231.1 µm²100.0 %6,331 µm7,652 µm1.0077 ns0.0000 ns0.3489 ns———136 tap cells, 6 buffers and inverters, 389 logic, 52 flip-flops, 8 clock tree, 985 fill and decap; 3675 metal fill rectangles

Measured DEF cell placements and FILLS rectangles. This view is not a density-rule report.

Three additions serve different purposes

AdditionPhysical purposeMeasured example
Row fillerComplete compatible row geometry and supply rails985 cells inserted
Decap cellProvide local capacitance between supply railsdecap_3 area 3.7536 µm²; none inserted here
Metal fillAdjust local layer pattern density3675 floating rectangles

A shared word does not make these additions electrically or geometrically interchangeable.

Filler cells occupy unused row sites using compatible cell boundaries, well or implant geometry and power rails. They do not add a logic function. Their usefulness depends on the library’s row construction; the full geometric checks still determine whether the completed boundaries are legal.

A decoupling cell stores charge between supply rails and can support local switching demand. Its benefit depends on capacitance, placement and the impedance of the power network. A cell’s area is not its capacitance, and this exercise does not infer a voltage-drop improvement from a decap name.

Inserted filler masterCountLEF footprint
fill_842510.0096 µm²
fill_41635.0048 µm²
fill_12021.2512 µm²
fill_21952.5024 µm²

The added footprint is 5810.5728 µm². Occupancy after adding physical fillers must not be confused with useful logic utilization.

Metal fill adds shapes on routing layers, often electrically floating. It does not occupy standard-cell row sites and cannot replace taps or supply-connected decaps. The pinned fill procedure uses floating rectangles; it does not turn them into additional signal routes.

Density is a windowed geometric measurement

Pattern density affects manufacturing steps such as etching and planarization. Excessively sparse or dense regions can process differently from nearby regions. The process rules define which shapes count, which windows are tested and which boundary exclusions apply.

LayerAdded fill rectanglesFill areaFill area / core area
met100.00 µm²0.00 %
met2386461.28 µm²4.51 %
met314652741.23 µm²26.79 %
met416483024.61 µm²29.56 %
met51761584.00 µm²15.48 %

These are added-fill statistics over a 10231.06 µm² row area. They exclude existing routed and cell metal, and are not complete density percentages.

For met1 through met4, the pinned technology LEF declares a maximum density of 70 %. Its window is 700 × 700 µm, stepped by 70 µm. This small block’s fill-area fraction cannot establish compliance with those chip-scale windows.

A complete density result must combine the relevant existing geometry with fill, apply the deck’s window and exclusion rules, and inspect every required window. A whole-block average can hide a sparse corner. A zero in this table records no added fill; existing cell and wire metal can still occupy that layer. Minimum-density rules also require their own authoritative definition; a maximum value does not supply a minimum.

The pinned met2 fill recipe tries rectangle widths 2, 1, 0.58, 0.3 µm. It requests 0.3 µm spacing to fill and 3 µm to other shapes. Recipe parameters describe insertion choices, not a certificate that every density rule passes.

Magic and KLayout are unavailable here, so a merged-layout window-density check remains unrun. The example intentionally reports fill counts and areas without painting those statistics as a completed manufacturing check.

Recheck electrical and geometric consequences

ObservationBefore fillAfter fill
TT maximum slack in this extraction path1.0077 ns1.0077 ns
Router DRC report0Only the pre-fill route was checked
Fill-aware extraction verificationNot applicable to added fillUnestablished by equal RC summaries

Unchanged numbers demonstrate the behavior of this tool path. They do not prove that floating metal has no capacitance.

Floating metal can change electrostatic coupling between nearby conductors. Its effect depends on geometry, neighboring conductors and the extraction model. A production extraction flow must represent those effects or use a validated approximation that accounts for them.

After fill, rerun the required geometry checks and extract the final physical representation. Here the router’s clean report precedes filler and metal insertion. Carrying that count forward as a post-fill DRC pass would give an earlier report credit for later edits.

Timing pathA separate load-sensitivity experiment

f0 → f1setup check, latest arrival2 cells

  • Clock latency
  • Cell delay
  • Setup time
A separate load-sensitivity experiment00.10.20.30.40.50.60.70.80.91time (ns)launch clk ↑capture clk ↑Data arrivesRequired byf0/CLK → f0/Q (dfxtp_1): 0.3156 ns1 dfxtp_1victim_driver/A → victim_driver/X (buf_1): 0.1880 ns2 buf_1setup −0.0825 nsslack +0.4138 ns · metarrival 0.5036required 0.9175A separate load-sensitivity experiment00.20.40.60.81time (ns)launch clk ↑capture clk ↑Data arrivesRequired byf0/CLK → f0/Q (dfxtp_1): 0.3156 ns1 dfxtp_1victim_driver/A → victim_driver/X (buf_1): 0.1880 ns2 buf_1setup −0.0825 nsslack +0.4138 ns · metarrival 0.5036required 0.9175
Read the path as a table

Launch: clk rise edge at 0.0000 ns, clock latency 0.0000 ns (ideal). Capture: clk rise edge at 1.0000 ns, latency 0.0000 ns, library setup time −0.0825 ns.

Arrival 0.5036 ns, required 0.9175 ns, slack 0.4138 ns (met).

CellArcThroughEdgeDelay (ns)Time (ns)Slew (ns)
1f0/CLK → f0/Qdfxtp_1rise0.31560.31560.0372
f0/Q → victim_driver/Awire launchrise0.00000.31560.0372
2victim_driver/A → victim_driver/Xbuf_1rise0.18800.50360.2043
victim_driver/X → f1/Dwire observerise0.00000.50360.2043
The report
Startpoint: f0 (rising edge-triggered flip-flop clocked by clk)
Endpoint: f1 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max

Fanout       Cap      Slew     Delay      Time   Description
-------------------------------------------------------------------------------------
                    0.1000    0.0000    0.0000   clock clk (rise edge)
                              0.0000    0.0000   clock network delay (ideal)
                    0.1000    0.0000    0.0000 ^ f0/CLK (sky130_fd_sc_hd__dfxtp_1)
     1    0.0022    0.0372    0.3156    0.3156 ^ f0/Q (sky130_fd_sc_hd__dfxtp_1)
                                                 launch (net)
                    0.0372    0.0000    0.3156 ^ victim_driver/A (sky130_fd_sc_hd__buf_1)
     2    0.0167    0.2043    0.1880    0.5036 ^ victim_driver/X (sky130_fd_sc_hd__buf_1)
                                                 observe (net)
                    0.2043    0.0000    0.5036 ^ f1/D (sky130_fd_sc_hd__dfxtp_1)
                                        0.5036   data arrival time

                    0.1000    1.0000    1.0000   clock clk (rise edge)
                              0.0000    1.0000   clock network delay (ideal)
                              0.0000    1.0000   clock reconvergence pessimism
                                        1.0000 ^ f1/CLK (sky130_fd_sc_hd__dfxtp_1)
                             -0.0825    0.9175   library setup time
                                        0.9175   data required time
-------------------------------------------------------------------------------------
                                        0.9175   data required time
                                       -0.5036   data arrival time
-------------------------------------------------------------------------------------
                                        0.4138   slack (MET)

A chosen grounded load changes this buffer’s timing; it is not extracted from the fill rectangles.

Consider a density window that overlaps two neighboring blocks, with most routed metal concentrated near the edge of only one block. Adding fill uniformly inside each block may still leave the shared window different from either isolated block average reported during implementation. The assembly context therefore belongs in the final density calculation, together with the process rules for exclusions and partial windows. A useful visualization colors each evaluated window by its own measured result, while preserving the corresponding rule name and counted area. This exercise lacks that complete geometric calculation, so its rectangle drawing intentionally lets you inspect insertion without presenting an unsupported density map. The same distinction matters during timing review: seeing floating rectangles on screen does not establish how the electrical solver represented their effects.

Asked in interviews
  1. Why add metal fill?

    To control pattern density according to process rules. Geometry, windows and exclusions determine whether it succeeds.

  2. Can filler cells replace decaps?

    No. Row completion and deliberate supply capacitance serve different purposes; their library implementations differ.

  3. Does unchanged timing prove fill is harmless?

    No. First establish that extraction included the relevant fill effects. Unchanged output can indicate missing model coverage.

Try it

A chosen 0.015 pF load gives 0.4138 ns setup slack. Increasing it to 0.020 pF gives 0.3612 ns.

This isolates load sensitivity. Neither chosen load is a measured equivalent of the floating fill above.

STAOpenSTA in OpenROAD 26Q2 · sky130hd tt_025C_1v80 Liberty · simulator service
Edit the constraints, then run them

          
Expected: WNS 0.4138 ns
Read the netlist: victim.v
module victim(clk, d, observe, q);
input clk, d; output observe, q; wire launch;
sky130_fd_sc_hd__dfxtp_1 f0 (.CLK(clk), .D(d), .Q(launch));
sky130_fd_sc_hd__buf_1 victim_driver (.A(launch), .X(observe));
sky130_fd_sc_hd__dfxtp_1 f1 (.CLK(clk), .D(observe), .Q(q));

endmodule

Check yourself

Predict the outputIncrease the live buffer’s chosen external load to 0.020 pF. What setup slack is reported, in ns?
create_clock -name clk -period 1 [get_ports clk]
set_clock_transition 0.1 [get_clocks clk]
set_load 0.020 [get_ports observe]
Read the netlist: design.v
module victim(clk, d, observe, q);
input clk, d; output observe, q; wire launch;
sky130_fd_sc_hd__dfxtp_1 f0 (.CLK(clk), .D(d), .Q(launch));
sky130_fd_sc_hd__buf_1 victim_driver (.A(launch), .X(observe));
sky130_fd_sc_hd__dfxtp_1 f1 (.CLK(clk), .D(observe), .Q(q));

endmodule
ConceptWhich conclusion follows from identical RC summaries before and after floating fill?
ConceptWhich quantity is needed for a window-density check?
ConceptWhat is a decap cell intended to provide?
ConceptWhy repeat geometry checks after fill?

Remember

  • Row fillers, decaps and metal fill address different physical needs.
  • Density rules count defined geometry in defined windows.
  • Added-fill area is not complete metal density.
  • Final geometry and extraction checks must account for fill.