Floorplanning
QR code to pdverse.netexplore more at pdverse.net
Innovus PNR Mentor Guide

Floorplanning: Planning, Creation, Checks and Handoff

By the end of this chapter you will be able to read a floorplan and explain every decision in it. You will size the core, place and orient macros, reserve space and plan pins. You will check the result, test it with a trial placement, and hand it on with its evidence.

Why this chapter matters in a real project

Placement, power planning, clock tree synthesis and routing all inherit the geometry you choose here. A floorplan can be wrong in a quiet way. A macro may face the wrong direction, or a channel may be too narrow. Nothing complains at once.

The trouble shows up much later, as congestion or timing failures, when it is expensive to undo. A wrong core size means every later stage fights for room. A macro facing away from its logic means hundreds of wires detour around it.

The opposite mistake costs too. A core that is far too large makes every net longer than it needs to be. A clean floorplan check can also hide a poor arrangement, because the checks test consistency, not quality. This chapter teaches you to tell those apart.

Prerequisites

Learning objectives

  1. Explain what a floorplan decides, who depends on it, and what a floorplan check cannot show.
  2. Read an existing floorplan: die, core, rows, sites, macros, pins, halos, channels and blockages.
  3. Turn requirements and connectivity into candidate macro arrangements, and compare them with a simple calculation.
  4. State which area you divide by before you quote a utilization, and size the core from declared inputs.
  5. Create a floorplan, read back what was actually made, and check it.
  6. Place and orient macros, and tell halos, channels and blockages apart.
  7. Decide when module constraints and pin or pad planning are needed.
  8. Run the first checks, sort each finding into the right class, and decide what to do.
  9. Use a trial placement and a rough routing estimate as feedback, and say what they cannot show.
  10. Save and hand off a floorplan together with the evidence behind it.

Figure 1 shows the whole chapter on one page. Come back to it whenever you lose your place.

Floorplanning on one page
Inputs, decisions, evidence and handoff
Floorplanning on one page
Figure 1 The chapter in one picture: three inputs feed five decisions (the bracket under them), three kinds of evidence back them, and the handoff carries all of it forward.

What to notice: The first navy bar is the strongest claim this chapter allows. It says "consistent and a reasonable start", never "good".

How to read this chapter

1  What floorplanning does

1.1  Where we start

Design Data Preparation, Import, Sanity Checks and Export ended with a restored design. Its top module, libraries and analysis views had been compared with a baseline. The import also gave the database a boundary and some rows, so that the database is complete. That boundary is a default. It is not a plan.

Floorplanning is where the plan is made. The import told us the design is loaded and consistent. It did not tell us how large the block should be. It did not say where the large blocks should sit, or which edge each signal should use. Those are the questions of this chapter.

Where the analogy breaks - read this twice

Think of a floorplan as the furniture plan for an empty house. You fix the walls, place the heavy pieces first, keep the doorways clear and leave corridors. The small items arrive later, during placement.

  • Furniture can be moved next week. A macro, once its neighbors are built around it, is expensive to move.
  • A house plan is judged by eye. A floorplan is judged by numbers: density, track supply and congestion.
  • Corridors in a house carry people in any direction. Routing channels carry wires only on the layers and tracks that exist there.

1.2  What a floorplan decides

Each item below is taught in its own section.

1.3  Who depends on the floorplan

Table 1 lists who takes what from the floorplan, and what goes wrong for each when it is poor.

Table 1 Who depends on the floorplan
ConsumerWhat it takesWhat goes wrong when the floorplan is poor
PlacementRows and sites, fixed macros, blockages, fencesCells crowd into the room that is left; wires get long
Power planningCore and macro edges, reserved spaceRings and stripes have no room, or cut through pin areas
RoutingPin positions, channels, halosWires pile up in narrow gaps and cannot reach macro pins
TimingDistances between connected objectsPaths stretch and miss the clock period
Later reviewsThe record of what was decidedNobody can say why a macro sits where it does

1.4  What a floorplan check does not show

A floorplan check is a geometry check. A clean result does not show that the design will place without congestion, meet timing, or route. It does not show that the power grid will meet its voltage-drop limits. Nor does it show that the arrangement is the best one, or even a good one.

Those questions need placement, routing estimates and analysis. Section 13 introduces them in a limited way. This chapter trains you to say "the floorplan is geometrically consistent and is a reasonable starting point", and nothing stronger.

1.5  The rhythm used throughout

Every decision follows the same loop.

  1. Understand what the step is for and what it needs first.
  2. Check what is already there, with a command or a view.
  3. Decide what to change, and write down why.
  4. Make the change, only if the decision calls for it.
  5. Read back the result with the same command, and compare.
  6. Check for problems with the tool that fits the claim.
  7. Decide what to do next: continue, repair, or stop.

The loop repeats. The early steps are cheap because they only look.

Takeaway A clean floorplan check is a statement about consistency. It is never a statement about quality.

Figure 2 shows the order of the stages and the gates between them. Use this order to build and check a floorplan:

  1. Import, and study the connectivity.
  2. Make a minimum floorplan.
  3. Place, and estimate global routes to look at congestion.
  4. Resize if needed.
  5. Place the blocks, refine the macro positions, and place again.

This chapter follows that order. It treats the trial loop briefly, because placement methods are outside its scope.

The floorplanning workflow with its gates
Stages (boxes) and gates (diamonds), with their section numbers
The floorplanning workflow with its gates
Figure 2 Three gates: before any change, after the checks, and before handoff. A gate passes with evidence, or the work stops or loops back. The gray box is a conditional stage.

What to notice: The entry gate (Section 4) comes before any change, and the exit gate (Section 15) comes after the checks. The dashed arrow carries trial evidence back to a decision: an earlier one (Sections 3, 5, 8, 9) or a resize (Section 14). The arrow is drawn to one box for space; it stands for all five destinations. It never proves the floorplan is good.

1.6  How to read the evidence in this chapter

Three kinds of material appear in this chapter. Each one is labeled where it appears, as Table 2 shows.

Table 2 The three kinds of material in this chapter
KindWhat it isExample
CalculatedArithmetic on declared, invented inputs, run with plain TclThe four utilization values in Section 5
IllustrativeInvented data, shown so you can practice reading itThe check report in Section 12
JudgmentEngineering practice, not a tool ruleA 10 µm halo is a placeholder

Each code block has a header that says what it is for. A header that says inspection only reads. A header that says modifies the design changes the database. A header that says writes files saves data to disk and leaves the design unchanged. Every command carries a comment in plain words.

1.7  Check what is already there: identity and floorplan

Before any change, confirm which design is loaded and what geometry it has. All four commands only read.

INSPECTION - IDENTITY AND CURRENT FLOORPLAN
innovus> dbGet top.name ;# print the name of the top cell
innovus> dbGet top.numInsts ;# print how many instances the database holds
innovus> dbGet top.fplan.coreBox ;# show the core box of the current floorplan
innovus> dbGet top.fplan.? ;# list the attribute names this object offers

One result or several. dbGet returns a list. A single value is a list of one, and Tcl shows it as the bare value. If nothing is found, you get 0x0. Treat 0x0 as "nothing found", never as a coordinate or a count. A missing design is an error, not 0x0.

Where to find the result. At the prompt, each command prints its value. Inside a script, nothing prints unless the script calls puts.

The next block is invented. It shows how to read such answers for our running design, which Section 3 introduces.

ILLUSTRATIVE OUTPUT - IDENTITY READ-BACK (INVENTED, NOT TOOL OUTPUT)
innovus> dbGet top.name
stream_acc
innovus> dbGet top.numInsts
196214
innovus> dbGet top.fplan.coreBox
{10.0 10.0 1210.0 710.0}
innovus> dbGet top.fplan.?
(attribute names; they vary by installation)
What the evidence shows, and what it does not

2  Read a floorplan before creating one

You cannot judge a floorplan you cannot read. This section names the objects and shows how to see each one. After it, a floorplan stops being a picture. It becomes a set of boxes with relationships.

2.1  The vocabulary, drawn once

Figure 3, below, draws one corner of an invented floorplan with every object named.

Here are short definitions. The first eight follow the numbers in the figure; the last four are used later in the chapter.

Floorplan vocabulary
One corner of an invented floorplan, every object numbered
Floorplan vocabulary
Figure 3 One corner of an invented floorplan with every object named. Not to scale.

What to notice: The die (1) contains the core (2). Rows (8) exist only inside the core. A halo (3) belongs to a macro (4) and moves with it. A channel (5) is the free gap between two objects. A blockage (6) is a rectangle placed on purpose.

2.2  How to see each object

There is one way to see each object, in the display or with a command. The outline, rows and macros are in Table 3. Pins, constraints and reservations follow in Table 4.

Table 3 How to see each object: outline, rows and macros
ObjectHow to see it
DieDisplay; a defOut -⁠floorplan file
I/O boxDisplay; the floorPlan -⁠b form
CoredbGet top.fplan.coreBox
RowDisplay; ROW lines in a DEF file
SiteThe library site definition; row ticks in the display
Hard macrodbGet top.insts.cell.subClass block -⁠p2
Table 4 How to see each object: pins, constraints and reservations
ObjectHow to see it
PindbGet top.terms.name; checkDesign -⁠floorplan
Pad celldbGet top.insts.cell.baseClass pad -⁠p2
ConstraintDisplay; selectInst then reportSelect
HaloaddHaloToBlock sets it; the display shows it
Channelreport_narrow_channel
BlockageDisplay; createPlaceBlockage, createRouteBlk

Two limits apply.

2.3  Three boxes, not one

Tell three boundaries apart: the die, the I/O box and the core. The margin between the core and the I/O boundary is where I/O pad cells sit when pads are used. When there are no pads, power rings and pin routing share that room.

The two common size forms of floorPlan describe different boxes:

Mixing the two forms gives a floorplan that is wrong by exactly the margin.

Common beginner mistake

Mistaking the die for the core. A designer asks for 1000 × 1000 µm. They receive a die of 1080 × 1080 µm around a 1000 × 1000 µm core, or the other way round. Both are correct answers to different questions. Read the argument form before you read the number, and confirm the result in the display.

2.4  A reading routine for any floorplan

When someone hands you a floorplan, read it in this order. Each step explains the next.

  1. Identity. Which top, how many instances (Section 1).
  2. Outline. Die, I/O box and core, and their margins.
  3. Rows. Site, height, orientation pattern and extent.
  4. Macros. Position, orientation, status, and what faces what.
  5. Spacing. Halos, channels and blockages.
  6. Boundary. Pins or pads, their sides and their status.
  7. Constraints. Guides, regions and fences.
  8. Checks already run. Which ones, with which settings.

In the display, a selected macro shows its pins and the lines to the objects it connects to. These are flight lines. They show which objects connect, and by how many connections. That is what you need to judge macro direction. They are straight lines, so they say nothing about the route a wire will take. Section 3 teaches how to read them, step by step.

Mentor's tip

Read before you touch. Ten minutes spent reading an inherited floorplan often saves an hour, because the oddest feature is usually deliberate.

3  Requirements and connectivity

Every floorplan answer starts as a question that someone else owns. How large may the block be? Which edge do the signals use? Which blocks talk to which? If you have not collected those answers, the macro arrangement becomes a matter of taste. This section collects them for one invented design that the rest of the chapter reuses.

3.1  What must be known first

Collect these before moving anything. Each has an owner, and a guess is not an answer.

3.2  The running design

The whole chapter uses one invented block called stream_acc. It is not the tiny demo_top used in Design Data Preparation, Import, Sanity Checks and Export. Every number is invented for teaching. Nothing comes from a real netlist or library. Its facts are in Table 5 and Table 6.

Table 5 The running design, stream_acc: cells and macros (all values invented)
ItemValue
Standard-cell area0.3916 mm²
Hard macro u_buf_aRAM, 420 × 300 µm
Hard macro u_buf_bRAM, 420 × 300 µm
Hard macro u_coefROM, 240 × 160 µm
Macro pin sideEast edge at the default orientation (R0)
Core sitecore_site, 0.2 × 1.4 µm
Routing track pitch0.2 µm, both directions
Table 6 The running design, placeholders and interfaces (all values invented)
ItemValue
Halo (placeholder)10 µm on every side
Core margin (placeholder)40 µm on every side
Input interface in_*64 pins, to enter on the left edge
Output interface out_*64 pins, to leave on the right edge
Configuration interface cfg_*24 pins, on the top edge
Single pinsclk and rst_n on the bottom edge, irq on the top edge

The block is a small streaming accumulator. Data arrives on in_* and passes through input registers. It then goes into one of two RAM buffers, u_buf_a or u_buf_b. The two take turns, so that one fills while the other is read. The input registers reach u_buf_b through the logic block, so its 96 nets are all counted as logic-to-RAM. Logic combines the buffered data with coefficients from the ROM u_coef. The result leaves on out_*. The cfg_* pins load settings into configuration registers. Those registers feed the logic. The parts and their net counts are drawn in Figure 4.

The connection counts in Table 7 matter most for macro placement.

Table 7 Connection counts of the running design
ConnectionNetsWhat it tells us
in_* pins to input registers64The left edge needs a clear approach
Logic and input registers to u_buf_a (coarse level)96Heavy, so the RAM wants to be near the logic
Logic to u_buf_b96Heavy, same reasoning
Logic to u_coef40Lighter, but each read is time-critical
Logic to out_* pins64The right edge needs a clear approach
cfg_* pins to configuration registers24Light, top edge
Configuration registers to logic32Light, no edge needed
u_buf_a to u_buf_b0No reason to put them together
The running design: parts and connections
Block view of stream_acc with net counts
The running design: parts and connections
Figure 4 Block view of stream_acc with the net counts between its parts. The register banks are drawn as flip-flop symbols clocked by clk; the dashed outline is the coarse-level group of logic and input registers. rst_n (bottom edge) is not drawn. All values are invented.

What to notice: Both RAMs and the ROM talk mostly to the logic, not to each other. The input and output interfaces sit on opposite edges, so the logic wants to lie between them.

3.3  Read the connections with flight lines

A flight line is a straight line the display draws between two connected objects. It shows that they connect and how many nets join them. It is not a wire. Use the steps below on any macro, in this order.

  1. Select one macro or module. Open the Floorplan view and select u_buf_a. Its pins and its flight lines appear.
  2. Find the pin bank. Note which edge carries the pins. At R0 the bank is on the east edge.
  3. Follow the lines to the destinations. Read the connection count on each line. Do not judge by how long the line looks. A long line with 2 nets matters less than a short line with 96.
  4. Set the hierarchy level. A coarse view can hide the real destination. One line to a big module may be three different blocks. Show a finer level until each line ends at something you can name.
  5. Compare relationships. Which counts go to logic, which to I/O ports, which to other macros? The macro belongs next to the largest count that it can reach.
  6. Try the legal orientations. Turn the macro and watch where the pin bank lands. Aim the bank at the open space that leads to its destinations. Only turn a macro to an orientation the library allows.
  7. Check the candidate afterwards. Flight lines choose candidates. Placement and a global-routing estimate (Section 13) test them.

At the coarse level the input registers sit inside the logic block. The dashed outline in Figure 4 marks that coarse group. So the figure shows one 96-net link to u_buf_a. Steps 3 and 4 for our running design are in Figure 5. Step 6 is in Figure 6. Why step 7 is needed is in Figure 7.

Flight lines from a selected macro
A schematic tool view, not a screenshot: u_buf_a selected (420 × 300 µm)
Flight lines from a selected macro
Figure 5 The same 96 nets of u_buf_a, shown at two hierarchy levels. Counts are invented, and no arrowheads are drawn because a flight line has no direction.

What to notice: At the coarse level one line carries 96 nets. At the finer level the same nets split into 40 to the input registers and 56 to the logic. The count on a line, not its length, tells you which destination matters.

The same macro in two orientations
A schematic tool view: u_buf_a, 420 × 300 µm in both panels
The same macro in two orientations
Figure 6 u_buf_a at R0 and at MY. The macro outline, its position and the logic did not change; only the pin bank moved.

What to notice: At R0 the pin bank faces the logic, so the flight lines are short. At MY the bank faces the die edge, and the same lines cross the macro, so routes must wrap around it. MY is legal only if the macro provider allows it.

A flight line is not a route
Same endpoints S and T in all three panels; lengths in µm, invented
A flight line is not a route
Figure 7 Three views between the same two endpoints, with the same obstruction. All lengths are invented.

What to notice: The straight line is 316 µm and ignores the obstruction. A simple Manhattan path is 400 µm and would cross the obstruction. The routed detour is 560 µm, which is 560 / 316 = 1.77, so 77% longer than the line.

What the lines do not tell you:

Common beginner mistake

Treating a flight line as a route. The line is a straight segment between two objects. It shows that objects connect, and by how many nets. It does not show where a wire can go, how many wires fit, or how long a route will be.

The same information is available as text. Use it when you need a record.

INSPECTION - CONNECTIVITY REPORTS TO FILES
innovus> report_obj_connectivity -insts u_buf_a \
    -file conn_u_buf_a.rpt ;# what u_buf_a connects to, to a file
innovus> report_obj_connectivity -insts u_coef -to_ports \
    -file conn_u_coef_ports.rpt ;# which ports u_coef reaches, to its own file

The block below is a neutral teaching table. It shows what such a report must let you read. It is not the tool's format.

ILLUSTRATIVE OUTPUT - NEUTRAL TEACHING TABLE, NOT THE TOOL FORMAT
object    connects to   nets   direction
u_buf_a   logic           96   both
u_buf_a   in_* pins        0   -
u_coef    logic           40   both
u_coef    cfg_* pins       0   -

3.4  Compare two candidate arrangements

We compare two arrangements of the macros inside a 1000 × 1000 µm core. The core's lower-left corner is at (40, 40). Coordinates in Table 8 are lower-left corners in die coordinates, in µm. Later sections create and check these same positions.

Table 8 Two candidate macro arrangements
Candidateu_buf_au_buf_bu_coef
P, stacked on the left edge(40, 40), R0(40, 340), MY(40, 640), R0
C, around a clear left band(100, 90), R0(100, 690), R0(590, 800), MY

R0 leaves a macro's pins on its east edge. MY mirrors the macro about a vertical axis, so its pins move to the west edge.

Figure 8 draws both candidates to scale.

Two candidate arrangements
The same core, macros and logic centroid in two arrangements
Two candidate arrangements
Figure 8 Candidates P and C in the 1000 × 1000 µm core, drawn to scale. The green dot is the assumed logic centroid at (640, 500).

What to notice: In P, the macros wall off the left edge where in_* must enter, u_buf_a and u_buf_b touch, and u_buf_b faces away from the logic. In C, the left band stays open, each RAM has room on both sides, and each macro's pin edge is the one nearest the logic centroid.

To compare them without pretending to route, use a crude indicator:

  1. For each macro, take the midpoint of the edge that carries its pins.
  2. Measure the Manhattan distance (horizontal plus vertical distance) to an assumed logic centroid at (640, 500).
  3. Multiply by the number of nets.

The centroid is a guess. We use the same one for both candidates, so only the macro positions differ.

Formula: weighted distance = nets × (|x − 640| + |y − 500|), in net·µm.

Table 9 Weighted distance, candidate C (calculated)
CandidateMacroNetsPin-edge midpoint (µm)Distance (µm)Weighted (net·µm)
Cu_buf_a96(520, 240)38036,480
Cu_buf_b96(520, 840)46044,160
Cu_coef40(590, 880)43017,200
Ctotal97,840
Table 10 Weighted distance, candidate P (calculated)
CandidateMacroNetsPin-edge midpoint (µm)Distance (µm)Weighted (net·µm)
Pu_buf_a96(460, 190)49047,040
Pu_buf_b96(40, 490)61058,560
Pu_coef40(280, 720)58023,200
Ptotal128,800

P scores 128,800 / 97,840 = 1.32 times C's score (32% higher). The biggest single cause is that u_buf_b faces west in P.

What the evidence shows, and what it does not
Acceptance decision

Carry C forward. C is the starting candidate for the rest of the chapter. P is kept because Sections 8 and 9 use it as the problem case. Neither is called best. A floorplan stays a candidate until placement evidence supports it.

4  Pre-floorplan readiness gate

Floorplanning on top of a bad database wastes the time you spend on it. This gate asks a short list of questions. Each has named evidence and a clear condition to stop. It reuses the identity checks made at import instead of repeating them.

4.1  What the gate is, and what it is not

The gate asks whether the database is fit to accept a floorplan. It is not a timing check, and it does not need the design to be placed.

Each row below ends in one of three results: met, blocks (stop until it is fixed), or not needed yet (with the later section that needs it).

Every row except Views is mandatory. A mandatory row must be met before sizing. A mandatory check that applies cannot be skipped quietly.

4.2  The gate table

The table is split in two so that the text stays readable. The purpose and command of each check are in Table 11. Its evidence and stop condition are in Table 12.

Table 11 Readiness gate, part 1: purpose and command
CheckPurposeCommand or observation
IdentityThe right design is loadeddbGet top.name, top.numInsts
Import and restore logThe load had no hidden failureRead the log
Physical libraryEvery cell has a usable footprintcheckDesign -⁠physicalLibrary
Macro inventoryWe know every macro and its statusdbGet top.insts.cell.subClass block -⁠p2, or the helper macro_inventory
Standard-cell areaSizing has a number with unitsreport_area
Site and gridRows will use the intended siteLibrary site; get_snap_grid_info
RequirementsDecisions have an ownerThe plan document
Views presentTiming evidence in Section 13 is meaningfulThe view check made at import
Table 12 Readiness gate, part 2: evidence, stop condition and owner
CheckEvidenceBlocks whenOwner
IdentitySame top and count as the import baselineDifferent top or countImporter
LogNo errors; warnings explainedUnexplained errorImporter
Physical libraryReport shows no missing or malformed cellAny finding not explained by the library ownerLibrary team
Macro inventoryCount equals the macro list in the planMissing or extra macroBlock owner
Standard-cell areaOne area figure, units knownNo figure, or units unknownBlock owner
Site and gridSite name and size match the planWrong or missing siteLibrary team
RequirementsArea target, pin sides and macro rules written downAny of them unknownChip integrator
ViewsViews exist and were compared at importNot needed yet; required before any timing claim in Section 13Importer

A row with no evidence is open. It is not "assumed fine".

4.3  Check the physical library

Check the physical library before you make any floorplan decision. It is the one gate row that no earlier chapter ran for this purpose.

INSPECTION - PHYSICAL LIBRARY CHECK, TEXT REPORT ONLY
innovus> checkDesign -physicalLibrary -noHtml \
    -outfile pre_fp_physlib.rpt ;# check the physical library, text report to a file

The report layout varies, so the block below is a neutral teaching table, not the tool's format.

ILLUSTRATIVE OUTPUT - NEUTRAL TEACHING TABLE, NOT THE TOOL FORMAT
finding                          count   action
cell with no LEF                     0   none needed
cell with missing dimensions         0   none needed
pin with missing direction           0   none needed
pin with missing geometry            0   none needed
size not a site multiple             0   none needed
macro without full obstruction       0   none needed
What the evidence shows, and what it does not

4.4  The macro inventory

We need every macro, its master cell, and whether it is placed. To list the hard-macro instances, use dbGet top.insts.cell.subClass block -⁠p2. Check each instance's name, master cell, placement status and box. The optional helper macro_inventory prints one line per macro (see Optional teaching helpers (Section 17)).

Treat "none found", "unplaced" and "could not be read" as three different outcomes. For our design the result at this stage is:

ILLUSTRATIVE OUTPUT - MACRO INVENTORY BEFORE PLACEMENT (INVENTED)
instance cell     status    box
u_buf_a  RAM_A    unplaced  n/a: unplaced
u_buf_b  RAM_A    unplaced  n/a: unplaced
u_coef   ROM_C    unplaced  n/a: unplaced

Three macros, all unplaced, as the plan says. That is the right starting state. A script must keep three answers apart: no macros found, macro unplaced (no box yet), and box could not be read. None of them is a zero.

4.5  Standard-cell area

Sizing needs a number with units.

INSPECTION - CELL AREA BY TYPE
innovus> report_area -detail -out_file pre_fp_area.rpt ;# area by cell type, to a file
Stop here if

Stop if the area cannot be obtained, the units are unknown, or the macro count is not what the plan states. Do not size a core from a remembered number.

4.6  The gate record

When every row has its evidence, write the record. Table 13 is invented.

Table 13 Gate record for stream_acc (illustrative)
CheckResult for stream_accResult
Identitystream_acc, 196,214 instances, same as the baselineMet
LogNo errors; two warnings, explained in the import notesMet
Physical libraryNo finding reportedMet
MacrosThree, all unplaced, as plannedMet
Standard-cell area0.3916 mm², library units confirmedMet
Site and gridcore_site, 0.2 × 1.4 µmMet
RequirementsPin sides and area target stated by the chip integratorMet
ViewsPresent; required before any timing claim in Section 13Not needed yet
Acceptance decision

Gate result: proceed to sizing. Every geometry row is met, and the views row is not needed until Section 13. The unplaced cells and macros are expected.

5  Estimate area and choose initial geometry

The first size you pick sets the density of everything that follows. If it is too small, placement packs cells until wires cannot get through. If it is too large, every net is longer than it needs to be.

The method matters more than the number. Write down the inputs, and state which area each ratio divides by. Show the arithmetic, so that someone else can redo it.

5.1  Two ways to arrive at a size

Both lead to the same question: how much of the core is taken, and what does that ratio mean? That question has several answers.

5.2  State which area you divide by

"Utilization" is not one number. Before you compare two values, write down the areas included in each formula. The running design has the areas in Table 14.

Table 14 Areas of the running design
QuantityValueHow it is found
Standard cells0.3916 mm²report_area (Section 4)
Macros0.2904 mm²420 × 300 + 420 × 300 + 240 × 160 = 290,400 µm²
Halo area0.0380 mm²See below
Core1.0000 mm²1000 × 1000 µm

The halo area is the ring of width h = 10 µm around each macro. For a macro w wide and H high, the ring is (w + 2h)(H + 2h) − w × H.

The sum is 38,000 µm² = 0.0380 mm². A 10 µm halo is a width. The 0.0380 mm² is the area it takes.

This chapter uses four area ratios, listed in Table 15. Each one answers a different question.

Table 15 Four area ratios
NameFormulaWhat it measuresIncludes halo?
D1, core utilization(cells + macros + halo) / coreHow full the core is, counting halo room as takenYes
D2, row density(cells + macros) / coreCells and macros against the whole coreNo
D3, cell densitycells / (core − macros)Cells against what the macros leave overNo
D4, free-area densitycells / (core − macros − halo)Cells against the free area after macros and halosYes

Substituting the values, all in mm², gives Table 16.

Table 16 The four ratios for the running design (calculated)
RatioSubstitutedResult
D1(0.3916 + 0.2904 + 0.0380) / 1.000072.0%
D2(0.3916 + 0.2904) / 1.000068.2%
D30.3916 / (1.0000 − 0.2904)55.2%
D40.3916 / (1.0000 − 0.2904 − 0.0380)58.3%

The same floorplan is "72%", "68%", "55%" or "58%" full, depending on who asks. None is wrong. Each answers a different question. The optional check below runs the same arithmetic in plain Tcl, at the % prompt of tclsh.

PLAIN TCL - THE FOUR RATIOS (RUNS IN TCLSH, NO INNOVUS NEEDED)
% set std 0.3916 ;# declared standard-cell area, mm2 (invented)
% set macro 0.2904 ;# declared macro area, mm2
% set halo 0.0380 ;# declared halo area, mm2
% set core 1.0000 ;# declared core area, mm2
# D1 and D2 share the core as denominator but include different areas.
# D3 and D4 divide by the area that the macros leave free.
% puts [format "D1 = %.4f" [expr {($std+$macro+$halo)/$core}]] ;# core utilization
% puts [format "D2 = %.4f" [expr {($std+$macro)/$core}]] ;# row density
% puts [format "D3 = %.4f" [expr {$std/($core-$macro)}]] ;# cell density
% puts [format "D4 = %.4f" [expr {$std/($core-$macro-$halo)}]] ;# free-area density
CALCULATED EXAMPLE OUTPUT - TCLSH RESULT FOR THE INVENTED INPUTS
D1 = 0.7200
D2 = 0.6820
D3 = 0.5519
D4 = 0.5831
An unresolved difference

The tool reports its own figures too. checkFPlan -⁠reportUtil prints target utilization (TU) and effective utilization (EU) for the design, and for fences and regions.

Treat TU and EU as the tool's numbers and D1 to D4 as yours. Do not mix them.

Common beginner mistake

Quoting one number for all purposes. "We are at 70%" is not a statement until the areas are named. Two people can agree on the figure and still mean areas that differ by a third.

5.3  No universal percentage

No density suits every design. The right target depends on routing resources, macro pin density, the power grid and timing pressure. It also depends on how much later stages will add. Use the history of similar blocks in the same technology, the chip plan, and the evidence from Section 13. A target taken from a book is a starting guess.

The standard-cell area you sized from is also a lower bound. After floorplanning, the flow adds buffers, repeaters, clock cells, tap cells and later fillers. The room for them must come from the density you choose now. That is a judgment, not a rule, so keep the number visible and revisit it.

5.4  From a target to a size

With a target D1 of 72%, the core area is the sum of the three areas divided by 0.72:

core area = 0.7200 mm² / 0.72 = 1.0000 mm² = 1,000,000 µm².

The shape then follows from the aspect ratio, which is height divided by width. A ratio of 1.0 is square, and 2.0 is twice as tall as wide.

Candidate C stacks two RAMs with their halos and leaves a 300 µm band for pins. It needs a core at least 2 × (300 + 2 × 10) + 300 = 940 µm tall. Three shapes with the same 1,000,000 µm² area are compared in Table 17 and drawn in Figure 9.

Table 17 Three core shapes with the same area
Aspect ratioCore (µm)Die with 40 µm margins (µm)Height needed: 940 µmResult
1.01000 × 10001080 × 10801000 ≥ 940Height ok, 60 µm spare
0.641250 × 8001330 × 880800 < 940Short by 140 µm
1.5625800 × 1250880 × 13301250 ≥ 940Height ok, 310 µm spare
Area budget and three aspect ratios
Core area 1,000,000 µm² at D1 = 0.72
Area budget and three aspect ratios
Figure 9 The area the core must hold (a proportion bar, not to scale with the shapes), and three core shapes with the same area, drawn to one scale. Values are invented.

What to notice: All three shapes hold the same area. Only the square and the tall shape reach the dashed 940 µm line. The wide shape cannot hold the two stacked RAMs and the pin band.

What the evidence shows, and what it does not
Acceptance decision

Initial geometry: a square core of 1000 × 1000 µm, with a placeholder margin of 40 µm on every side. That gives a die of 1080 × 1080 µm. The inputs are declared, the areas are named, and the shape was tested against the arrangement it must hold. The target density stays open to revision after Section 13.

Figure 10 shows the requested outline with its three boxes.

Die, I/O box, core and margins
The requested outline of the running design
Die, I/O box, core and margins
Figure 10 The requested outline of stream_acc. The margin is drawn wider than to scale so that it is visible.

What to notice: The core is 1000 × 1000 µm. The 40 µm margin on each side brings the die to 1080 × 1080 µm. With no pad ring, the I/O box is drawn on the die edge. In a pad-ring design it sits inside.

6  Create and inspect the initial floorplan

Now we change the design for the first time. The aim is a floorplan whose outline you can read back and check. Its differences from what you asked for must be visible.

Every modifying example in this chapter follows the same five steps:

These are steps 2 and 4 to 7 of the loop in Section 1.5. Steps 1 and 3 are the prose before each block.

6.1  A. Check what is already there

The starting state is the import geometry from Section 1: a core of 1200 × 700 µm, which is too small. Record it, together with the placement grid.

INSPECTION - RECORD THE STARTING STATE
innovus> dbGet top.fplan.coreBox ;# record the core box before any change
innovus> get_snap_grid_info -type placement -origin -pitch_x \
    -pitch_y ;# record the placement grid: origin, x pitch, y pitch
innovus> defOut -floorplan stream_acc_fp0.def ;# write current geometry as DEF text

6.2  B. Create the core and rows

MODIFIES THE DESIGN - CREATE THE CORE AND ROWS
# Core 1000 x 1000 um, 40 um from the die edge on all sides.
innovus> floorPlan -site core_site -s {1000 1000 40 40 40 40} \
    -coreMarginsBy die ;# create the floorplan

6.3  C. Read back the result

INSPECTION - READ BACK THE NEW OUTLINE
innovus> dbGet top.fplan.coreBox ;# read back the core box
innovus> defOut -floorplan stream_acc_fp1.def ;# write the new geometry as DEF text

Compare the request with what came back, as in Table 18. A short helper, compare_box, is in Optional teaching helpers (Section 17). Reading the two boxes by eye also works.

Table 18 Request versus read-back
ItemRequestedWhat you read backSame?
Core box (µm)40 40 1040 1040dbGet top.fplan.coreBoxCompare each of the four numbers
Die (µm)0 0 1080 1080The displayCompare
RowsRows of core_site across the coreThe ROW lines in the DEF file, and the displayCount, read the first and last row

Now the rows. The core is 1000 µm tall and a row is 1.4 µm high, so 1000 / 1.4 = 714.29. Only 714 whole rows fit, and they cover 714 × 1.4 = 999.6 µm.

This chapter does not settle how floorPlan treats the 0.4 µm remainder, so do not assume. Read the actual core box and the actual row extents. Note which of them differs from the request. Whatever the tool did, the lesson is the same. The requested value is not the effective value until you have read it back.

LINUX TERMINAL - COUNT AND SHOW THE ROWS
$ grep -c "^ *ROW " stream_acc_fp1.def # count the ROW statements in the record
$ grep "^ *ROW " stream_acc_fp1.def | head -n 2 # show the first two rows

DEF row syntax is outside this chapter, so confirm the line layout against the DEF format your tools write. The next block is invented and shows one possible outcome. The numbers assume 1000 database units per µm, so 40000 means 40 µm.

ILLUSTRATIVE OUTPUT - ONE POSSIBLE OUTCOME (INVENTED)
714
ROW core_row_0 core_site 40000 40000 N DO 5000 BY 1 STEP 200 0 ;
ROW core_row_1 core_site 40000 41400 FS DO 5000 BY 1 STEP 200 0 ;

The orientation alternates between N and FS, which Section 7 explains. A count of 714 is what whole-row arithmetic predicts. However, a row count alone does not prove the rows are right. Check the extents too.

6.4  D. Check for problems

First, record the settings that the checks will use. A restored session does not necessarily have the defaults.

INSPECTION - RECORD THE CHECK SETTINGS
innovus> getFPlanMode -checkTypes ;# the check types checkFPlan will run
innovus> getFPlanMode -narrowChannelThreshold ;# used only if that type is on
innovus> getFPlanMode -snapBlockGrid ;# the grid macros snap to
innovus> getFPlanMode -snapCoreGrid ;# the grid the core snaps to

Write the printed values next to every report you keep. A report is only reproducible together with the settings that produced it. Now run the checks.

INSPECTION - FIRST FLOORPLAN CHECKS
innovus> checkFPlan -outFile fp1_check.rpt -reportUtil ;# check; details and utilization
innovus> checkDesign -floorplan -noHtml \
    -outfile fp1_checkdesign.rpt ;# floorplan-related data, text only

6.5  E. Decide what to do next

Table 19 collects the before, requested and read-back states.

Table 19 State after the first floorplan
ItemBeforeRequestedRead back
Core box (µm)10 10 1210 71040 40 1040 1040Compare with the request
Die (µm)not recorded0 0 1080 1080Compare with the request
Rowsimport defaultwhole rows of 1.4 µmCount and extents in the DEF record
Unplaced pinsreportedreportedExpected until Section 11
What the evidence shows, and what it does not

7  Legal rows, sites and grids

Standard cells can only sit on legal sites, in legal orientations, on legal grids. Rows make a floorplan a place where cells can go. If the rows or grids are wrong, nothing downstream corrects them silently. The checks then complain in ways that are hard to read, unless you know why the rule exists.

7.1  Site, row and orientation

The three rows and their shared rails are drawn in Figure 11, at the end of this subsection.

floorPlan has a -⁠flip option that says which bottom rows flip.

The default is not stated here, so read the result. The first two ROW lines of the DEF record in Section 6 show the pattern you actually got.

checkFPlan can check that a row's orientation is correct against the site's symmetry definition. It also flags a missing Y symmetry on the core site in the technology LEF. If the LEF says nothing about symmetry, the tool cannot know that a mirrored row is legal.

Rows, sites and orientation
Three rows, bottom to top; site 0.2 wide × 1.4 high
Rows, sites and orientation
Figure 11 Three rows of sites with alternating orientation and the rails they share. Not to scale.

What to notice: Row 0 is R0 (N), row 1 is MX (FS), row 2 is R0 again. VDD and VSS rails fall between rows, so each inner rail serves two rows. The pin mark sits next to VSS in every row, so the row 1 cell is upside down.

7.2  The grids

Several grids exist, and each constrains different objects. Table 20 lists them with the query for each.

Table 20 The grids and how to query them
GridWhat sits on itHow to query
Manufacturing gridAll geometry in the layoutget_snap_grid_info -⁠type manufacturing
Placement gridStandard cell originsget_snap_grid_info -⁠type placement
Instance gridInstance originsget_snap_grid_info -⁠type inst
Layer-track gridRouting tracks of a layerget_snap_grid_info -⁠type layertrack
User-defined gridWhatever you setget_snap_grid_info -⁠type userdefine
FinFET gridsObjects in FinFET technologiesfinfetInst, finfetManufacturing, finfetPlacement

setFPlanMode takes -⁠snapBlockGrid, -⁠snapCoreGrid, -⁠snapDieGrid, -⁠snapIoGrid and related options. They choose which grid each kind of object snaps to. They matter when a macro's pins must line up with the routing grid. checkFPlan verifies macro pins only when the block grid is the layer-track grid.

Figure 12 shows what snapping does to one requested coordinate.

Grids and snapping
One requested coordinate on two different grids
Grids and snapping
Figure 12 A coordinate requested off-grid and the grid point it snaps to. Not to scale.

What to notice: Snapping moves an object by at most half a pitch, toward the nearest grid point. On the site grid of the running design, 90.0 becomes 90.4. The same request lands unchanged on a coarser grid of pitch 2.0.

7.3  Snapping, worked by hand

placeInstance snaps an instance to the site whose lower-left corner is nearest to the requested location. The rule is:

new value = origin + round((request − origin) / pitch) × pitch.

Our grid origin is (40, 40), the site is 0.2 µm wide and the row is 1.4 µm high. The rule is worked for candidate C in Table 21.

Table 21 Snapping candidate C by hand (calculated)
MacroRequest (µm)Axis(request − 40) / pitchRoundedSnapped (µm)
u_buf_a100, 90x60 / 0.2 = 300.0300100.0
u_buf_a100, 90y50 / 1.4 = 35.713690.4
u_buf_b100, 690y650 / 1.4 = 464.29464689.6
u_coef590, 800x550 / 0.2 = 2750.02750590.0
u_coef590, 800y760 / 1.4 = 542.86543800.2

The x requests already sit on the 0.2 µm grid. The y requests move by up to 0.7 µm, because 1.4 does not divide the distance from the core origin evenly. So the placed macro is not exactly where we ask. Halos in Section 9 should have room for the shift. The helper snap in Optional teaching helpers (Section 17) repeats this arithmetic.

This shows only the rule for this grid. It does not show that macros snap to this grid in your installation. Macros may follow -⁠snapBlockGrid, which is a separate choice. So always read the placed location back, as Section 8 does.

The same family of commands can snap objects after the fact.

Use the report first. Snap only if the report finds something.

7.4  Editing rows, and when not to

Table 22 lists the commands that edit rows.

Table 22 Row-editing commands
CommandWhat it doesUse only if
createRowAdds rows of a named site, optionally in an area, with spacing and flip optionsYou need rows the floorplan did not make
cutRowCuts rows that intersect macros and placement blockages by default, or in a given areaMacros or blockages are placed and rows must not run under them
deleteRowRemoves rows by name, site, selection or allYou are rebuilding rows on purpose
initCoreRowRegenerates rows from the current row parametersA parameter changed and rows must follow
setFPlanRowSpacingAndTypeSets a standard row spacing for every row or every other rowThe technology demands spaced rows

Manual row edits may be lost when floorPlan, resizeFloorplan or initCoreRow regenerates the rows. So make row decisions after the outline is final. Do not repair rows by hand if the cause is a wrong parameter.

Common beginner mistake

Fixing a row problem with row edits. A mirrored row that fails the orientation check rarely means a missing row. It usually points to the site definition or the -⁠flip choice. Deleting and recreating rows hides the cause. The edit is also lost the next time floorPlan runs.

7.5  Conditional: vertical, multiple-height and hybrid rows

These are advanced topics. Skip them unless your technology needs them.

Vertical rows

Rows can run vertically in a beta feature that a global variable switches on. In that mode createRow, cutRow and stretchRows are not available. Vertical rows are not placed inside power domains. Do not use it for a first floorplan.

Multiple-height rows

The LEF may define sites that are whole multiples of the single height. An example is a triple-height site of 86.4 µm against a 28.8 µm single height. When the netlist uses them, rows for them are generated automatically. Non-integer multiple-height rows exist only inside power domains, and each power domain holds one such height. If cells fail the site-multiple check, check the site definitions first.

Hybrid rows

Hybrid rows follow a row pattern defined in the LEF. They are set up with setFPlanMode -⁠defaultRowPatternSite and related options for the first and last row index. Edge row constraints control the row height multiples at the boundary. They need a technology that defines a row pattern, and they are outside a first pass.

Stop here if

Stop if cells fail the site-multiple check, or the site has no Y symmetry in the technology LEF while rows alternate. Stop too if the grid information does not match the plan. These are library or technology questions, not floorplan edits.

8  Plan and position macros

Hard macros are the largest objects and the least forgiving. They cannot be reshaped. They block cells and most routing, and their pins sit on fixed edges. Where a macro goes, and which way it faces, decides how many wires have to detour around it. A good macro arrangement is the cheapest congestion fix there is. A poor one is the most expensive to repair later.

8.1  What we are trying to achieve

  1. Each macro's pins face the logic and ports it talks to most.
  2. The edges where signals enter or leave stay approachable.
  3. Macros do not overlap each other, the core edge or reserved space.
  4. Every macro has a deliberate status, so later tools do not move it by accident.
  5. The result sits on the grid it will be judged against.

8.2  What must be known first

From Section 3: the pin side of each macro at R0, the net counts, and the pin edges of the block. From the macro provider: which orientations are legal. Many macros allow only a few. Mirroring or rotating one that does not allow it is not a design choice. If you do not know, ask before you place.

8.3  Orientation, with one worked rule

A macro in the running design has its pins on the east edge at R0. Some orientations mirror the macro, and one turns it by half a turn. Where the pin side ends up for each is in Table 23.

Table 23 Where an east-pin macro's pins go
OrientationWhat happensPin side for an east-pin macro
R0As deliveredEast
MYMirrored about a vertical axis (left and right swap)West
MXMirrored about a horizontal axis (top and bottom swap)East, upside-down
R180Turned by half a turnWest, upside-down

The names R90, R270, MX90 and MY90 also exist. They turn the pin side by a quarter turn. They apply only if the macro allows them, so look at the display after using one.

The rule to remember: MY and R180 move east pins to the west. MX keeps them east, but swaps which pin is on top. Whether top-to-bottom pin order matters depends on the connection. That is why you look at the flight lines after every change. Figure 13 draws all four.

Orientation and the pin bank
One macro, 420 × 300 µm, in four orientations (plan view)
Orientation and the pin bank
Figure 13 One macro in four orientations. The pin bank is drawn as small squares, and the red corner shows where the original lower-left corner lands.

What to notice: R0 keeps the pin bank on the east edge. MY and R180 move it to the west edge. MX keeps it east and swaps top and bottom. Which of these are legal is a macro-library decision, not a floorplan choice.

8.4  Status: who may move a macro afterwards

Table 24 lists the placement status values and who may move an instance with each.

Table 24 Placement status values
StatusMeaning
unplacedNo location
placedHas a location. Automatic tools and interactive commands may move it
softFixedGlobal placement will not move it. Legalization of detail placement may, and optimization may upsize it
fixedHas a location. Automatic tools will not move it. Interactive commands can
coverHas a location. Neither automatic tools nor interactive commands can move it

placeInstance gives the instance the status fixed unless you pass -⁠placed or -⁠softFixed. The command snaps the instance to the nearest site. It takes the lower-left corner of the placed box as its location.

It does not check legality. The instance can overlap other boxes and can sit inside blockages, so check afterwards. check_design -⁠type place also reports macros that are not fixed. A macro that is not fixed can be moved by placement. So fix the macros before placement runs, once you are satisfied with them.

8.5  A trial arrangement: candidate P

We begin with the arrangement that is quick to type and poor to live with: P from Section 3.

A. Check what is already there. We expect three macros, all unplaced. The inventory (the optional helper macro_inventory) looks like this.

ILLUSTRATIVE OUTPUT - MACRO INVENTORY BEFORE TRIAL P (INVENTED)
instance cell     status    box
u_buf_a  RAM_A    unplaced  n/a: unplaced
u_buf_b  RAM_A    unplaced  n/a: unplaced
u_coef   ROM_C    unplaced  n/a: unplaced

B. Place the macros for trial P.

MODIFIES THE DESIGN - TRIAL P, MACROS STACKED ON THE LEFT EDGE
innovus> placeInstance u_buf_a 40 40 R0 -placed ;# movable, pins east
innovus> placeInstance u_buf_b 40 340 MY -placed ;# movable, mirrored: pins west
innovus> placeInstance u_coef 40 640 R0 -placed ;# movable, pins east

C. Read back the result. Read the boxes from the inventory, and ask the tool which blocks are off the grid.

INSPECTION - BLOCKS OFF THE SNAP GRID
innovus> reportUnsnapBlocks ;# blocks off the grid defined by the snap preferences
ILLUSTRATIVE OUTPUT - INVENTORY AFTER TRIAL P, ONE POSSIBLE OUTCOME
instance cell     status   box (um)
u_buf_a  RAM_A    placed   40.0  40.0  460.0 340.0
u_buf_b  RAM_A    placed   40.0 339.6  460.0 639.6
u_coef   ROM_C    placed   40.0 640.6  280.0 800.6

D. Check for problems.

INSPECTION - PLACEMENT AND FLOORPLAN CHECKS FOR TRIAL P
innovus> checkDesign -place -noHtml -outfile trialP_place.rpt ;# placement data, text
innovus> checkFPlan -outFile trialP_fplan.rpt ;# floorplan, check types in force

E. Decide what to do next. The place where the two RAMs meet is magnified in Figure 14. The figure also separates the two problems that P shows.

The overlap is an actual violation, so it must be repaired, not noted. Knowing that snapping may have caused it does not make it acceptable. Repairing the overlap would still leave the arrangement poor.

Two different problems appear in P, and they need different treatment.

No geometric check reports "this macro faces the wrong way" or "the input edge is blocked". Only a person who reads the pin sides and the connections sees those problems. A clean or nearly clean check is a statement about consistency, not about quality.

Two problems in candidate P
The 0.4 µm overlap, magnified, and the two kinds of orientation problem
Two problems in candidate P
Figure 14 Where u_buf_a and u_buf_b meet in candidate P, with the overlap drawn much taller than to scale, beside the two different problems that P shows.

What to notice: The overlap is a geometry problem that a check reports. The orientation of u_buf_b is a different problem. If MY is illegal, a check can flag it. If MY is legal, only the flight lines show the poor access.

8.6  The revised arrangement: candidate C

We move to C. The macros are movable, so placeInstance can place them again.

MODIFIES THE DESIGN - CANDIDATE C, RAMS AROUND A CLEAR LEFT BAND
innovus> placeInstance u_buf_a 100 90 R0 -placed ;# lower RAM, pins east
innovus> placeInstance u_buf_b 100 690 R0 -placed ;# upper RAM, pins east
innovus> placeInstance u_coef 590 800 MY -placed ;# ROM mirrored: pins face west

By the snapping rule of Section 7, the x values stay and the y values become 90.4, 689.6 and 800.2 µm. A possible read-back:

ILLUSTRATIVE OUTPUT - INVENTORY AFTER CANDIDATE C, ONE POSSIBLE OUTCOME
instance cell     status   box (um)
u_buf_a  RAM_A    placed   100.0  90.4  520.0 390.4
u_buf_b  RAM_A    placed   100.0 689.6  520.0 989.6
u_coef   ROM_C    placed   590.0 800.2  830.0 960.2

The gap between u_buf_b and u_coef is 70 µm (590 − 520). The two RAMs are 689.6 − 390.4 = 299.2 µm apart, not the 300 µm we asked for. Rerun the checks of step D on this arrangement. They should report no overlaps and no instance outside the core.

Now fix the macros, so that placement cannot move them, and confirm that every macro changed.

MODIFIES THE DESIGN - FIX EVERY HARD MACRO
innovus> setInstancePlacementStatus -allHardMacros -status fixed ;# all macros fixed

8.7  Rows under macros

Rows still run under the macros. cutRow with no object argument cuts the rows that intersect macros and placement blockages. Cells inside a cut row are unplaced unless -⁠keepCell is given, and there are none yet. The effect on one macro is in Figure 15, after the commands.

MODIFIES THE DESIGN - CUT ROWS UNDER THE MACROS
innovus> cutRow ;# cut the rows that run through the macros
innovus> defOut -floorplan stream_acc_fp3.def ;# new record, to compare with fp1
Rows before and after cutting
The same macro, 420 × 300 µm, in the same place; row height not to scale
Rows before and after cutting
Figure 15 The left panel shows abutting rows running under the macro. The right panel shows the rows cut exactly at its edges.

What to notice: Cutting changes the rows, not the macro. Each of the four rows that crossed the macro becomes two pieces, so 8 segments become 12. A rise in the count alone does not prove the cut is right.

Common beginner mistake

Cutting rows before the macros are final. A cut is a record of where the macros were. Move a macro afterwards and the old cut stays behind. Cut once, when the arrangement has settled. Or delete and recreate the rows with initCoreRow, remembering that manual edits may not survive other floorplan commands.

What the evidence shows, and what it does not
Not covered here: automatic macro placement and legalization

set_macro_place_constraint with refine_macro_place legalizes macros against halo, blockage and spacing constraints. checkMacroLLOnTrack checks that macro lower-left corners sit on routing-track intersections. They suit larger macro counts. The manual path above teaches the reasoning they automate.

9  Reserve channels, halos and blockages

Between and around the macros there is free space. What you put into it decides whether wires and cells use it well. Five different things are called halo, blockage or channel, and they are easy to confuse. Each blocks something different. This section separates them. It then shows why reserving space is not the same as having enough routing room.

9.1  Five things, five meanings

Table 25 separates the five.

Table 25 Halos, blockages and channels
ThingWhat creates itWhat it blocksAttached to
Placement haloaddHaloToBlockBlocks and standard cells within the halo distanceA macro; moves with it
Routing haloaddRoutingHaloSignal routing on chosen layers, treated as very high costA macro
Placement blockagecreatePlaceBlockageCell placement, by typeAn area
Routing blockagecreateRouteBlkRouting on the listed layersAn area
ChannelNothing creates itNothingThe free gap between objects

Notes on the table:

Read the table by asking what each one is for.

Figure 16 shows the same two macros in three views.

Gap, halos and a layer-specific blockage
The same two macros, 70 µm apart; lengths in µm, invented, not to scale
Gap, halos and a layer-specific blockage
Figure 16 The same two macros, with their facing pins, in three views: the bare gap, the placement halos, and a routing blockage on one layer.

What to notice: Placement halos keep cells out of 10 µm beside each macro, so wires can reach the pins; tracks still cross the halos. The 50 µm left over can still hold cells and wires. A routing blockage on one layer removes only that layer's tracks. Gap width and track supply are different measures, so a width alone never says how many wires fit.

9.2  Four channel measures

When someone says "the channel is 50 µm wide", ask which measure. Four different quantities are in use, listed in Table 26, and they do not share a unit.

Table 26 Four channel measures
MeasureWhat it isUnitExample
Physical gapMacro edge to macro edgeµm70
Gap outside the placement halosThe gap minus both placement halos. Cells stay out of the halos. The remaining gap can hold cells unless another constraint excludes themµm50
Screening widthWhat report_narrow_channel measures. By default the objects are the core, macros, macro halos and hard blockages, so halos count as wallsµm50
Routing supplyHow many wires fit on each routing layer, after pin escape, power stripes and rulestracks per layerNot known at floorplan time

The first three are lengths. The last one is a count, and it is what routing needs. No floorplan check measures it.

9.3  Placement blockage types

Table 27 lists what each placement blockage type allows.

Table 27 Placement blockage types
TypeWhat it allows
hard (default)Neither standard cells nor macros
softOnly buffers, inverters, isolation cells, clock gates, tie cells and level shifters
partialCells up to the density given with -⁠density, in steps of 5 from 5 to 100 percent
macroOnlyKeeps macros out and lets standard cells in as if there were no blockage

The last type is spelled macroOnly in some places and macro_only in others. Use the tool's own help to confirm the spelling in your installation.

9.4  Avoid double counting

Space can be reserved by a halo, a blockage and the gap itself at once. If you add them up carelessly, the same area is subtracted several times. Candidate P shows it. Its halo boxes are each macro grown by 10 µm on every side, at the requested positions. They are listed in Table 28 and drawn in Figure 17.

Table 28 Candidate P macros and halo boxes
BoxCorners (µm)Area (µm²)
Macro A(40, 40) to (460, 340)126,000
Macro B(40, 340) to (460, 640)126,000
Halo box A(30, 30) to (470, 350)140,800
Halo box B(30, 330) to (470, 650)140,800

Rule. When you subtract reserved space, work with the union of the regions. Or use individual regions only where they do not overlap. The helpers overlap and grow in Optional teaching helpers (Section 17) reproduce these numbers.

Overlapping reservations
The two halo boxes of candidate P at the requested positions
Overlapping reservations
Figure 17 The two halo boxes of candidate P, with the macros and the core edge, drawn to scale. Areas in µm².

What to notice: The halo boxes overlap each other and reach into the neighboring macro, and part of each lies outside the core. Adding the two 140,800 µm² boxes counts the overlap twice and counts area that is not core. Use the union, clipped to the core.

9.5  A halo does not show that the channel is wide enough

A halo says "keep cells out". It does not say "wires fit". Whether the free channel carries the wires that must cross it is a counting question. Here is a toy version for the channel between u_buf_b and u_coef in candidate C. It is a planning approximation, not a router result.

Placement halos keep cells out. They do not by themselves stop wires. So the first row of each pair in Table 29 uses the full physical gap.

The second row is a cautious case: 20 µm of the gap is unusable for routing, for any reason. A routing blockage, a pin-escape area or power stripes could cause it. A placement halo does not create that loss. A routing halo is a cost, not a wall, so it does not remove tracks either. The second row is an assumption you would have to justify.

Table 29 Toy channel count for u_buf_b to u_coef (calculated)
Pitch (µm)Width used (µm)Tracks per layerSupply (2 layers × 0.5)DemandResult
0.270 (full gap)350350136Fits
0.250 (20 µm unusable)250250136Fits
0.470 (full gap)175175136Fits
0.450 (20 µm unusable)125125136Does not fit

The width needed is 136 × pitch / (2 × 0.5). At 0.2 µm that is 27.2 µm, and at 0.4 µm it is 54.4 µm.

Common beginner mistake

Treating the halo as the channel width. "We have a 10 µm halo on every side" says where cells stay out. It does not say how wide the usable channel is, or how many wires fit. The halo is a reservation. The channel is what you measure, and its capacity is a count of tracks.

9.6  Add placement halos

A. Check what is already there. The macros are placed and fixed, and no halo exists. We screen with a width of 65 µm, deliberately above any requirement, so that every candidate channel is listed.

INSPECTION - SCREEN FOR NARROW CHANNELS BEFORE HALOS
# Keep the returned channel boxes in a variable.
innovus> set before [report_narrow_channel -width 65 -direction x \
    -quiet] ;# horizontal channels narrower than 65 um
innovus> puts "channels before halos: {$before}" ;# an empty answer shows as {}

B. Add placement halos.

MODIFIES THE DESIGN - PLACEMENT HALOS ON EVERY HARD MACRO
innovus> addHaloToBlock 10 10 10 10 -allMacro ;# 10 um halo on all four sides

C. Read back the result.

INSPECTION - REPEAT THE SAME SCREEN AFTER HALOS
innovus> set after [report_narrow_channel -width 65 -direction x \
    -quiet] ;# same screen, now with halos
innovus> puts "channels after halos: {$after}" ;# print what came back
ILLUSTRATIVE OUTPUT - NEUTRAL TEACHING TABLE, NOT THE TOOL FORMAT
channel                      before halos          after halos
left strip beside u_buf_a    width 60  listed      width 50  listed
left strip beside u_buf_b    width 60  listed      width 50  listed
u_buf_b to u_coef            width 70  not listed  width 50  listed

D. Check for problems. The halos are now floorplan objects, and an overlapping halo can matter. Run checkFPlan and checkDesign -⁠place again, with the recorded settings.

E. Decide what to do next. The halos created no violation. However, they made the middle channel appear in the screening list, because halos count as walls in that screen.

Acceptance decision

Accept the 10 µm halos as a starting reservation. The reason is the channel count, not the halo itself. The value stays a placeholder until the macro provider's keep-out is checked and the trial of Section 13 is read.

9.7  Placement blockage, routing blockage and routing halo

These three are listed as commands, with what to check before using each. The examples use the running design only to show the syntax.

MODIFIES THE DESIGN - BLOCKAGES AND A ROUTING HALO (SYNTAX EXAMPLES)
# Cap standard-cell density at 30 percent in the strip left of u_buf_a.
innovus> createPlaceBlockage -type partial -density 30 \
    -box {40 90.4 90 390.4} ;# partial placement blockage
# Keep signal routing out of one layer over the same strip (LEF layer name).
innovus> createRouteBlk -box {40 90.4 90 390.4} -layers metal3 ;# routing blockage
# Discourage long signal routes beside the ROM, on the layers its pins use.
innovus> addRoutingHalo -inst u_coef -space {5 5 5 5} -bottom auto \
    -top auto ;# routing halo around u_coef
Stop here if

Stop if a channel that carries many nets is narrower than the requirement. Stop too if a halo, blockage and gap together leave less room than the toy count says is needed. Change the arrangement, not the number.

10  Module constraints (conditional)

Sometimes a group of logic should live in a particular place. A configuration block might need to sit near the pins it serves. A module might need to stay out of another module's area. Module constraints say so. They are optional, and they add rules the placer must satisfy. So use them when you have a reason you can state.

This section is conditional. A design with no placement preference needs none of it. It is not about structured data paths, which this chapter does not cover.

10.1  What can be constrained

Two kinds of object can take a constraint:

10.2  The constraint types

Table 30 lists the types. In the running design, the configuration registers form one module, u_cfg. Figure 18 draws that module under each constraint type.

Table 30 Module constraint types
TypeBehaviorCommand
NoneThe object is unconstrained–
GuideSoft. Preplaced. Snaps to a row vertically and to the M2 (metal 2) pitch horizontally by defaultcreateGuide
FenceHard. Only the object's own instances may be inside, and others are excludedcreateFence
RegionLike a fence, except that instances of other modules may also be insidecreateRegion
Soft guideNo fixed location; the placer clusters the objectcreateSoftGuide

The creation commands are used after importing the design. unplaceGuide removes guides, fences and regions. A hierarchical instance declared as a partition becomes a fence.

Guide, fence, region and soft guide
One module, u_cfg, under each constraint
Guide, fence, region and soft guide
Figure 18 One module u_cfg under each constraint, with the area it claims. Not to scale.

What to notice: The guide is a suggestion: other cells enter and one u_cfg cell has left. The fence is a wall. The region lets other logic in. The soft guide has no box at all, only a pull toward the module's own cells.

10.3  Before you start

10.4  Fit before you fence

A fence or region holds a fixed area. Whether it holds the object depends on the ratio of the object's area to the fence area.

Table 31 is a planning calculation of your own, not the tool's. Module u_cfg holds 9,000 µm² of standard cells (invented), and the blockage area is invented too. Utilization has no unit: it is an area divided by an area.

Table 31 Does u_cfg fit its fence? (calculated)
CaseFence area (µm²)Blockage (µm²)TU = 9,000 / fenceEU = 9,000 / (fence − blockage)Reading
roomy30,40000.2960.296Comfortable
with blockage30,4006,0000.2960.369Comfortable
tight8,00001.1251.125EU above 1.0: placement turns it into a guide

EU here is a simplified reading. The tool's own accounting also includes partition cuts, and it is not updated automatically. checkFPlan -⁠reportUtil reports utilization for the design and for fences and regions. It shows no utilization row for a soft guide, so do not plan around one. For a guide, use the planning calculation above.

10.5  Create a guide for u_cfg

The configuration registers belong near the cfg_* pins on the top edge. We reserve the corner to the right of the ROM, clear of the ROM halo, which ends at x = 840 µm.

A. Check what is already there.

INSPECTION - QUERY THE MODULE BEFORE CONSTRAINING IT
innovus> selectInst u_cfg ;# select the module
innovus> queryFPlanObject ;# print the properties of the selection
innovus> deselectAll ;# clear the selection afterwards

B. Create the guide.

MODIFIES THE DESIGN - A GUIDE IN THE TOP-RIGHT CORNER
innovus> createGuide u_cfg 850 880 1040 1040 ;# guide box: llx lly urx ury, in um

C. Read back the result. Repeat step A, and look at the display. The guide appears as an outline in the corner. The queryFPlanObject printout should now show the constraint.

D. Check for problems. Run the floorplan check with the settings you recorded in Section 6.

INSPECTION - FLOORPLAN CHECK AFTER THE GUIDE
innovus> checkFPlan -outFile guide_check.rpt ;# check types already in force

A guide is soft. A fence check type would test fences, so a clean fence result says little about a guide. If you decide to change the check types, remember that setFPlanMode -⁠checkTypes sets the list. It does not add to it. Read the current list first with getFPlanMode -⁠checkTypes. Write the full list you want, and put the old list back afterwards.

E. Decide what to do next. Compare the read-back with the plan. The guide exists, it sits in the corner, and the box matches. Then test the guide size.

What the evidence shows, and what it does not
Fence and region groups

Region groups can cause overlaps that cannot be corrected. Prefer a guide or a fence unless a region is needed.

Stop here if

Stop if you cannot say why the module needs a place. A constraint with no reason is a rule that the placer must obey and that someone must maintain.

11  Floorplan-level I/O

The pins or pads of a block are where its signals enter and leave. Their positions pull the logic toward them, and set the paths signals follow across macros. They must also stay out of the way of the power grid.

You do not need a perfect pin plan at floorplan time. You do need to decide which side each interface uses, and whether its pins can physically sit there.

11.1  Two different situations

Table 32 separates a block with pins from a chip with pad cells.

Table 32 Block pins versus pad cells
Block with pinsChip with pad cells
What carries the signalA metal pin shape on the block boundaryAn I/O cell (pad) that connects to the outside
Where it sitsOn the die edge, on a routing layerIn I/O rows or an I/O ring between the die edge and the core
Typical ownerThe block teamThe chip integrator
This chapterThe running design, in fullA conditional sidebar

stream_acc is a block, so its interfaces are pins.

11.2  What to decide, and from what

For each interface the plan needs a side, a stretch of that side, a layer, a spacing and an order. The inputs are:

Table 33 is the plan for the running design.

Table 33 Pin plan for the running design
InterfacePinsSideStretch (invented, µm)Reason
in_*64Lefty from 410 to 670Opens onto the clear left band of candidate C
out_*64Righty from 100 to 900Logic lies against the right edge
cfg_*24Topx from 860 to 1030Beside the u_cfg guide
clk, rst_n2Bottom–Single pins
irq1Top–Single pin

Pin order. Decide the order along each stretch. For in_*, we choose in_0 to in_63 from bottom to top. Do not trust the order in which a query happens to list the names. Build the list yourself, in the order you want, and read the positions back.

11.3  Do the pins fit?

A pin needs a legal position: on a track, away from other pins and from blockages. Dividing the stretch by the pin count gives a rough budget, as in Table 34. It is not the real spacing.

Table 34 Rough pin budget per stretch (calculated)
GroupPinsStretch (µm)Rough budget: length / pins (µm)Nominal adjacent spacing: length / (pins − 1) (µm)
in_*64410 to 670 = 2604.064.13
out_*64100 to 900 = 80012.5012.70
cfg_*24860 to 1030 = 1707.087.39

If both end pins sit on the ends of the stretch, there are (pins − 1) gaps. So the last column is the nominal spacing between neighbors. The real spacing depends on the track origin and on whether the end tracks are used. The pin shapes and spacing rules matter too.

At a 0.2 µm track pitch these stretches hold roughly 1300, 4000 and 850 track positions. That is far more than the pins. So the plan is not obviously impossible. That is all this arithmetic can say. The tool decides the exact positions, and checkPinAssignment judges them.

The calculation does not show that the pins have clear approach routes. It also does not show that wires leaving them avoid the halos and channels of Section 9. The plan is drawn on candidate C in Figure 19.

Pin planning for the running design
Interface sides and stretches on candidate C; block pins, no pad ring
Pin planning for the running design
Figure 19 Interface sides, stretches (µm) and the macros that border them, drawn to scale. The inset shows a chip with a pad ring for comparison.

What to notice: in_* enters through the open band, not against a macro. out_* has the longest stretch because the logic is nearest that edge. cfg_* sits beside the guide of u_cfg. This block has no pad ring.

Pin pitch and pin clearance are different numbers. Four pins have three center-to-center intervals. Each interval minus the pin width is the edge clearance, as Figure 20 shows.

Four pins, three intervals
Pin width 0.2 µm, pitch 0.8 µm (invented)
Four pins, three intervals
Figure 20 Pitch is measured center to center. Edge clearance is measured between neighboring pin edges. Invented 0.2 µm pin width and 0.8 µm pitch.

What to notice: n pins give n − 1 intervals, so the spacing arithmetic above divides by (pins − 1). A pitch that meets a track rule can still leave too little clearance if the pin is wide.

11.4  Place the input pins

A. Check what is already there. Build the ordered list of input pin names. Then compare it with the top-level ports the design actually has, so that a wrong name is caught before editPin runs. The helper names_missing is defined in Optional teaching helpers (Section 17). Finally, report floorplan data, including unplaced pins.

INSPECTION - BUILD AND VERIFY THE INPUT PIN LIST
innovus> set in_pins {} ;# start an empty list
innovus> for {set i 0} {$i < 64} {incr i} { lappend in_pins in_$i } ;# in_0 ... in_63
innovus> set ports [dbGet top.terms.name] ;# the real top-level port names
innovus> set bad [names_missing $in_pins $ports] ;# wanted names that are not ports
innovus> puts "input names that are not ports: [llength $bad] $bad" ;# must print 0
innovus> checkDesign -floorplan -noHtml \
    -outfile pins_before.rpt ;# floorplan data, including unplaced I/O pins

B. Place the pins.

MODIFIES THE DESIGN - SPREAD THE INPUT PINS ON THE LEFT EDGE
innovus> editPin -pin $in_pins -side LEFT -layer metal4 -spreadType RANGE \
    -start {0 410} -end {0 670} ;# 64 pins evenly from y = 410 to 670 um

C. Read back the result. Report floorplan data again, to a second file. Compare the counts and positions with the first. This is a partial state: only the in_* group is placed, so the report still lists the other 91 pins as unplaced.

INSPECTION - FLOORPLAN DATA AFTER THE FIRST GROUP
innovus> checkDesign -floorplan -noHtml \
    -outfile pins_after.rpt ;# report floorplan data again, to a second file

D. Check for problems.

INSPECTION - CHECK THE GENERATED PINS
innovus> checkPinAssignment -outFile pins_check.rpt ;# layer, track, spacing, size

11.5  Close every group

The input group is one of five. The others need the same steps, and the chapter does not leave them open. Build each list, check it against the ports with names_missing, then place it. The layer names are placeholders to take from your technology.

MODIFIES THE DESIGN - PLACE THE OTHER FOUR GROUPS
# $out_pins and $cfg_pins are built like $in_pins.
innovus> editPin -pin $out_pins -side RIGHT -layer metal4 -spreadType RANGE \
    -start {1080 100} -end {1080 900} ;# outputs, right edge, y = 100 to 900 um
innovus> editPin -pin $cfg_pins -side TOP -layer metal5 -spreadType RANGE \
    -start {860 1080} -end {1030 1080} ;# config pins, top edge, x = 860 to 1030 um
innovus> editPin -pin {clk rst_n} -side BOTTOM -layer metal5 \
    -spreadType CENTER ;# clock and reset, centered on the bottom edge
innovus> editPin -pin irq -side TOP -layer metal5 -spreadType CENTER ;# irq, top center

Now every group is placed, so run the checks again. Evidence from before this point is a partial state and does not count.

INSPECTION - FINAL PIN EVIDENCE, AFTER ALL FIVE GROUPS
innovus> checkDesign -floorplan -noHtml -outfile pins_final.rpt ;# unplaced count
innovus> checkPinAssignment -outFile pins_final_check.rpt ;# pin legality

Then read each group back from those two reports. The block below is invented. It shows the state the handoff requires.

ILLUSTRATIVE OUTPUT - NEUTRAL TEACHING TABLE, NOT THE TOOL FORMAT
group      expected  placed  position check (um)
in_*             64      64  read back, within y 410-670
out_*            64      64  read back, within y 100-900
cfg_*            24      24  read back, within x 860-1030
clk,rst_n         2       2  read back, bottom edge
irq               1       1  read back, top edge
total unplaced I/O pins: 0 (was 155 before any pin was placed)
checkPinAssignment violations: 0

After the first group alone, the same count would have read 155 − 64 = 91 unplaced. That is a normal partial state, not a fault. 155 is every port of the block: 64 + 64 + 24 + 3. Keep the partial reports and the final reports as separate files. Show only the final ones as acceptance evidence.

What the evidence shows, and what it does not
Common beginner mistake

Treating "unplaced I/O pins" as a failure too early. It is a normal entry in the check until every group is placed. A report that says it halfway through is expected. A report that still says it at the end blocks the handoff.

11.6  Conditional: pad cells and I/O rows

A chip with pad cells uses an I/O row flow that is off by default.

The flow needs an I/O site and a PAD class in the LEF. The gap between die and core must exceed the largest I/O site. Otherwise a warning is issued and no I/O rows are made. Innovus does not enlarge the core or die for you.

These commands change the geometry heavily and depend on cell data that this chapter does not have. So none of them is used on the running design. If you meet a pad flow, check the die-to-core gap first. Then check the pad cells' sites, then the order in the I/O file.

Stop here if

Stop if an interface has no side agreed with the chip integrator, or the stretch you plan cannot hold its pins. Pin sides are an agreement between teams. Changing one later moves other teams' work.

12  First-pass post-floorplan checks

Before anyone builds on a floorplan, a short set of checks should confirm that it is geometrically consistent. This section sets out which check answers which question, and how to capture its output. It shows how to sort each finding, and what to do next. It also keeps the checks in their place: they test consistency, not quality.

12.1  Three levels of checking

The tool has many check families. They include bus guide, routing grid, placement, pins, power domains, partition clone alignment, feedthrough insertion and narrow channel. We cover the ones that apply to a flat block.

12.2  The checking matrix

Table 35 lists each check, the question it answers and what it does not test. Figure 21 then shows four common violations.

Table 35 The checking matrix
CheckQuestion it answersNeedsDoes not test
checkFPlan (basic)Is the floorplan data consistent?A floorplanQuality, congestion, timing
checkFPlan -⁠reportUtilWhat utilization does the tool compute?A floorplanWhether the target is right
checkDesign -⁠floorplanOff-grid tracks, instances off row sites, unplaced pins, off-grid pre-routesA floorplanPlacement quality
checkDesign -⁠placeInstances outside the core, overlaps, overlaps with blockagesPlaced instancesWhether the placement is good
check_design -⁠type placeAre the macros fixed before placement?MacrosWhere they are
report_narrow_channelWhich gaps are narrower than a widthA width you chooseWhether the gap is enough
checkFPlanSpace -⁠trackUtilEstimated minimum channel width against actual, for given track utilizationTechnology data and track valuesReal routing
reportUnsnapBlocksBlocks off the snap gridSnap preferencesAnything else
checkPinAssignmentAre pins on valid layers, tracks and spacingsPlaced pinsPin placement quality

Four kinds of violation come up again and again in a floorplan. Learn the picture in Figure 21 and the check that reports each one.

Four kinds of violation
Schematic examples; each panel names the check that reports it
Four kinds of violation
Figure 21 An overlap, a macro outside the core, an unplaced pin and an off-track pin, each with the check that reports it. Schematic examples, not tool output.

What to notice: Each violation has its own report. A clean result from one check says nothing about the other three, and a check that did not run says nothing at all. A violation is repaired and rechecked, not explained away.

12.3  Record the settings first

The setFPlanMode -⁠checkTypes setting controls what checkFPlan does. The default is basic. Other types include fence, macroPin, narrowChannel, place, powerDomain, blockOnly and all. Two conditions matter.

A check type that is switched on but cannot run does not give a clean result. It gives no result.

A restored session does not necessarily have the defaults. So read the settings that affect the checks before you run them.

INSPECTION - SETTINGS THAT AFFECT THE CHECKS
innovus> getFPlanMode -checkTypes ;# which check types checkFPlan will run
innovus> getFPlanMode -narrowChannelThreshold ;# which narrow-channel threshold is set
innovus> getFPlanMode -snapBlockGrid ;# grid that blocks snap to
innovus> getFPlanMode -snapCoreGrid ;# grid that the core snaps to
innovus> getFPlanMode -snapDieGrid ;# grid that the die snaps to
innovus> getFPlanMode -snapIoGrid ;# grid that I/O snaps to

Write the printed values next to every report. setFPlanMode -⁠checkTypes with a new list replaces the list. It does not append. So if you change it, write the whole list you want, and put the old list back when you are done. Do not reset the snap settings to an assumed default. Put back what you recorded.

12.4  Capture the output correctly

The commands do not share an output convention, as Table 36 shows. The spelling differs even between neighbors.

Table 36 How to capture each check's output
CommandHow to captureSpelling to watch
checkFPlan-⁠outFile file, for the detailed informationCapital F
checkDesign-⁠noHtml -⁠outfile file, for text. Without -⁠noHtml, an HTML and a text report are written under default names-⁠outfile is allowed only with -⁠noHtml
checkFPlanSpace-⁠outfile fileLower-case f
report_narrow_channelThe channel boxes are the return value. -⁠quiet hides the printed listCapture with set, then puts it
report_obj_connectivity-⁠file file; the default is the top name plus .tmcrpt-⁠file
Anything without a file optionredirect file {command}Braces around the command

Messages also go to the session log, which you already keep. A file that exists is not necessarily complete. So look at its end, and note its time, before relying on it.

12.5  Sort each finding

A finding names something. Your job is to put it in a class, and each class has a different next step, as Table 37 shows. Knowing why a finding exists does not make it acceptable.

Table 37 The five classes of finding
ClassWhat it meansWhat you do
Expected, temporaryTrue now, and a named later step closes itWrite down the closing step. Recheck at that step
Nonblocking observationA fact that breaks no rule, with a stated reasonWrite the reason and owner. Revisit when the evidence changes
Actual violationA rule is brokenRepair, then rerun the same check
Approved waiverA rule is broken on purposeNeeds an owner, a reason, a scope and an approval. A waiver is a decision, not a note
Unresolved or not runThe check could not run, or the cause is unknownInvestigate. If an input is missing, stop. Do not count it as a pass

A mandatory input that is missing, such as a library or a requirement, blocks the gate. Recording that it is missing is not enough. The same holds for a mandatory check that did not run. Only an optional assessment may be recorded as NOT RUN. Timing, when clocks or constraints are not yet available, is the example. Then make no timing claim. Figure 22 turns the table into a flow.

From a finding to a decision
Each finding goes into one of five classes; only some may pass the gate
From a finding to a decision
Figure 22 Each finding goes into one of five classes. Only some may pass the gate. An optional assessment that did not run is recorded as NOT RUN with its consequence.

What to notice: A violation is repaired, not explained away. A waiver needs an owner and a reason. A check that did not run is not a pass. Only expected conditions with a closing step, justified observations and approved waivers may travel forward.

The block below is a neutral teaching illustration, not the tool's format. The findings are invented, and they come from different moments, shown in the last column.

ILLUSTRATIVE OUTPUT - NEUTRAL TEACHING TABLE, NOT THE TOOL FORMAT
id  finding                        where          stage
1   unplaced I/O pins: 91          top ports      after in_* group
2   macro overlap: 1 (0.4 um)      u_buf_a/b      after Section 8, cand. P
3   channels under 65 um: 3        x channels     after Section 9, cand. C
    (50 um each)
4   macroPin check                 NOT RUN        grid not layer-track

Table 38 sorts them.

Table 38 The four findings, classified
IdClassReadingNext step
1Expected, temporaryFour of five pin groups are still openClosing step: "Close every group" in Section 11. Recheck there
2Actual violationAn overlap is a violation whatever its cause. Here the 0.4 µm comes from rounding to the grid in the invented example. The stored and requested edges in Section 8 show it. Do not guess the cause from the size aloneRepair by moving to candidate C, or by leaving a gap of at least one grid step. Rerun checkDesign -⁠place
3Nonblocking observationThree channels, 50 µm wide outside the halos. 65 µm is an example screening threshold, not a project rule. The toy count of Section 9 needs about 27 µmRecord the reason and the owner. Revisit with Section 13
4Unresolved (NOT RUN)The type cannot verify, so there is no result. This is a mandatory check, so it is not a passEither set the block grid to the layer-track grid, with the library owner's agreement, and run it. Or obtain an approved waiver. Until then, the item is open

12.6  Before and after, for the running design

The same checks on both candidates show how little they tell you about the choice. Table 39 compares them.

Table 39 The checks on candidates P and C
QuestionCandidate PCandidate C
Instance outside the core?NoneNone
Macro overlap?One, 0.4 µm, if Section 8 rounding appliesNone
Channels under 65 µm?Not meaningful: the RAMs touchThree, 50 µm each outside the halos
Clear approach for in_*?No, and no check says soYes
u_buf_b faces its logic?No, and no check says soYes

The two rows in bold matter most, and no check on the list tests them. They come from reading, from the connectivity of Section 3, and from the trial of Section 13.

12.7  The decision

Acceptance decision: pass, repair, investigate or stop
What the evidence shows, and what it does not

13  Try placement and a rough routing check, then improve the floorplan

A floorplan can pass every check of Section 12 and still be unusable. Two macros can sit exactly where no wire can pass between them, with no rule broken. The cheapest time to learn this is now, before power planning and clocking are built on top of it.

Sections 5 to 12 asked whether the floorplan is consistent with itself. This section asks a different question: can the rest of the flow work with it? No geometric check can answer that. A trial placement and a rough global route can give a first hint, and a hint is all they give.

13.1  The questions, in order

  1. What are we trying to achieve? A first, rough answer to one question. Does this arrangement place and route sensibly? It is a feedback signal, not a result.
  2. What must be known first? The geometry has passed Section 12. A full design checkpoint exists (see below), so we can come back. Power-grid construction has not been done here. A later stage that reserves tracks for power will change the picture.
  3. What do we inspect? Congestion, density, channel supply and, only if the inputs support it, timing.
  4. What do we decide? Accept the floorplan, or adjust it locally (Section 9). Or change its size or shape (Section 14), or revisit Sections 3, 5 or 8.
  5. When do we stop? When the evidence is not meaningful. A missing clock, an absent view or a library without models makes timing numbers empty. An empty report is not a good report.

Figure 23 shows the loop.

The trial feedback loop
Estimates only; an invented flow
The trial feedback loop
Figure 23 A trial placement and a rough global route produce evidence. The evidence returns to one of four decisions, or the floorplan is accepted.

What to notice: The loop does not end in a pass. It ends in a decision, and every route back names the section where that decision was made. The dashed box lists things this trial does not include.

13.2  What each command does, and does not answer

Their reports are for a person to read. None returns a verdict. The placement and congestion commands are in Table 40. The channel and timing commands are in Table 41.

Table 40 Trial commands and what they answer: placement and congestion
CommandQuestion it answersWhat it needs firstWhat it does not answer
place_designWhere would the standard cells go in this floorplan?A loaded floorplanWhether the result is good enough to keep
earlyGlobalRouteRoughly where would wires go, and how crowded is it?PlacementWhether detailed routing will succeed. It is a global-routing estimate, and its routes are not guaranteed clean
reportCongestionHow much overflow, and where are the hotspots?A route estimate. Run the route step firstWhy the overflow exists
reportDensityMapWhere is placement dense?PlacementWhether the density is a problem for routing
Table 41 Trial commands and what they answer: channels and timing
CommandQuestion it answersWhat it needs firstWhat it does not answer
adjustFPlanChannel -⁠reportOnlyWhich channels are short of track supply, and by how much?Placement and early global routeWhat to do about a channel you may not widen
timeDesign -⁠prePlaceA baseline before placement. It ignores the net load while building the timing graphClocks, constraints and modelsAnything about wires from the trial placement
timeDesign -⁠preCTSA timing view after placement, before clock tree synthesis (CTS). It runs early global route, default extraction and timing analysisPlacement, clocks, constraints, views and modelsWhether timing closes. Clocks are treated as ideal in this mode

Two timing modes, two different questions. Do not read a -⁠prePlace result as "timing with the trial wires". It was made without any net load.

13.3  What place_design actually does

place_design is not a command that only writes positions.

So the result depends on settings you did not give to the command. Record them before you run it.

INSPECTION - RECORD THE SETTINGS PLACE_DESIGN WILL USE
innovus> getPlaceMode -place_global_timing_effort ;# record this placement setting
innovus> getPlaceMode -place_global_reorder_scan ;# record the scan-reorder setting
innovus> getAnalysisMode -clockPropagation ;# record the clock propagation setting
innovus> getAnalysisMode -checkType ;# record the analysis check type
innovus> getExtractRCMode -effortLevel ;# record the extraction effort
innovus> getRouteMode -earlyGlobalEffortLevel ;# record the early global route effort

Write the printed values with the reports. Add the optimization settings your flow uses (getOptMode with the parameter names you care about). Without them nobody can reproduce, or fairly compare, the trial.

Common beginner mistake

Reading a clean report as a good floorplan. A congestion report says what the estimate found, under the placement it was given. A different placement of the same floorplan gives a different report. Keep the settings next to the numbers.

13.4  Run a trial placement and a rough route

A. Check what is already there, and protect the starting point. Candidate C passed Section 12 except finding 4, the macroPin check. That finding stays open and recorded. It must be closed before handoff, by running the check on the layer-track grid or by an approved waiver. No standard cell is placed, so a placement-based report has nothing to read yet. Confirm that all three macros are fixed (the inventory of Section 8). Then save a full design checkpoint before the trial.

WRITES FILES - SAVE THE WAY BACK BEFORE THE TRIAL
innovus> saveDesign fp_before_trial.enc ;# complete checkpoint; this is the way back
innovus> saveFPlan fp_before_trial.fp ;# floorplan objects, a second smaller record

B. Place and estimate routes.

MODIFIES THE DESIGN - TRIAL PLACEMENT AND EARLY GLOBAL ROUTE
innovus> place_design ;# place the standard cells in the current floorplan
innovus> earlyGlobalRoute ;# estimate global routes for congestion and parasitics

C. Read back the result. The trial in step B ran on candidate C. The candidate P column comes from a second, comparable trial. That trial applied P's arrangement to the restored fp_before_trial.enc checkpoint (Section 13.5). Both columns are invented.

INSPECTION - CONGESTION AND DENSITY REPORTS TO FILES
innovus> redirect fp_cong.rpt {reportCongestion -overflow -hotSpot} ;# summary, hotspots
innovus> redirect fp_dens.rpt {reportDensityMap} ;# density map; default threshold 0.75
ILLUSTRATIVE OUTPUT - NEUTRAL TEACHING TABLE, NOT THE TOOL FORMAT
                          candidate P            candidate C
overflow (H / V)          high / high            low / low
largest hotspot score     reported high          below 100
where it sits             left band, near in_*   none large
bins above density 0.75   clustered at macros    spread, few

A dense region and a congested region are different things. Density counts cell area in a bin. Congestion compares the wires the router wants with the tracks available. Figure 24 shows the difference.

Density versus congestion
The same floorplan, two readings; illustrative values, not tool output
Density versus congestion
Figure 24 The same floorplan read two ways: cell density per bin (left) and routing demand over supply per bin (right). Illustrative, not tool-generated.

What to notice: The bins beside the macros are dense (0.82) yet within supply (10/20). The channel bin between the macros has moderate density (0.55) yet overflows (40/30). Read both reports before concluding.

D. Check for problems. The trial moved standard cells, so the geometric checks that look at placement must run again. A core boundary that did not change does not mean the placement state did not change.

INSPECTION - PLACEMENT CHECKS AFTER THE TRIAL
innovus> checkDesign -place -noHtml -outfile trial_place.rpt ;# outside core, overlaps
innovus> check_design -type place ;# are the macros still fixed?
innovus> checkFPlan -outFile trial_fplan.rpt ;# floorplan, recorded check types

The clocks, constraints, views and libraries may have been confirmed at import and in Section 4. If so, you may also read timing with timeDesign -⁠preCTS. If they were not, mark the timing step NOT RUN, and make no timing statement. A missing timing input is not a zero or a pass.

E. Decide what to do next. The table is invented, but the reasoning is the point.

13.5  A second trial is a new run

Reading the same reports again from the same database is not another trial. Running a report twice gives the same numbers. A meaningful comparison needs a new placement. In words, the sequence is:

  1. Restore the pre-trial checkpoint, in a fresh session, so both trials start from the same state.
  2. Change one thing: a placement setting, a halo, or the arrangement.
  3. Record the new settings (the six get commands above).
  4. Run place_design and earlyGlobalRoute again.
  5. Run the same reports and the same placement checks.
  6. Compare the two sets of numbers, each next to its own settings.

If the picture holds across two comparable trials, you can trust it a little more. One run is one sample.

13.6  Channel supply and demand

The channel report is the nearest thing to a floorplan-specific answer, because it speaks about the gaps between objects. It reports the congestion in each channel, the targeted adjustment, and the final adjustment.

INSPECTION - CHANNEL CONGESTION WITHOUT CHANGING THE FLOORPLAN
innovus> adjustFPlanChannel -reportOnly -report fp_chan.rpt ;# report, do not adjust
ILLUSTRATIVE OUTPUT - NEUTRAL TEACHING TABLE, NOT THE TOOL FORMAT
channel  between               demand / supply  direction
c1       u_buf_a and core      22 / 20          vertical
c2       u_buf_a and u_buf_b   14 / 18          horizontal
c3       u_buf_b and u_coef    40 / 30          vertical
c4       u_coef and core        8 / 0           vertical

The percentage is demand divided by supply. Table 42 works it for the invented rows.

Table 42 Reading the channel ratios (calculated from invented rows)
ChannelDemandSupplyRatioReading
c1222022 / 20 = 110%Short of supply
c2141814 / 18 = 78%Within supply
c3403040 / 30 = 133%Short of supply
c480undefinedNo supply at all. Not zero percent, not a pass

A channel at 110% may be a real problem, or a hot spot in the estimate. The demand comes from the router's estimate under one placement.

Now apply the acceptance box below to candidate C. Channels c1 and c3 fall short for a local cause, so adjust them (Section 9). Channel c4 has no supply at all, so investigate it before any other change. In this invented example a routing blockage and the power-stripe reservation cover that strip.

Acceptance decision: accept, adjust, resize or return
What the evidence shows, and what it does not

14  Advanced refinement (conditional)

Everything in this section is optional. Come here when Section 13 has told you what is wrong, and Sections 8 and 9 are not enough. Each topic starts with the problem it solves, so that you do not use a tool just because it exists.

Mentor's tip

Read each topic's last line first. If it does not describe your situation, skip it. The basic path of this chapter does not depend on anything below.

14.1  Relative floorplanning: keep relationships when sizes change

The problem. In Section 8 we placed macros at absolute coordinates. If the core grows by 40 µm, every coordinate must be redone by hand. A relative floorplan records a relationship instead: "this object is 300 µm above that one, left edges aligned". The command captures the placement relationship of objects independently of their coordinates. Figure 25 shows one such relationship.

Relative floorplanning
One relationship between two macros, before and after the core grows
Relative floorplanning
Figure 25 A relationship between two macros is stored as edges and an offset, then reapplied when the core changes. Not to scale.

What to notice: The circled numbers are edge indices, counted from the lower-left corner, clockwise: even indices are vertical edges, odd ones horizontal. The 300 offset and the aligned left edges survive the change of core size.

Edge numbering. Edges are numbered 0, 1, 2, 3 and so on, from the lower-left corner, clockwise. For a plain rectangle, 0 is the left edge, 1 the top, 2 the right and 3 the bottom. An even number is a vertical edge and an odd number a horizontal one. The offset between edges is signed.

Stack u_buf_b on u_buf_a

A. Check what is already there. Read the placed boxes with the macro inventory. Write the relative-floorplan section to a file, to see whether any relationship exists.

WRITES FILES - EXPORT THE RELATIVE FLOORPLAN SECTION
innovus> writeFPlanScript -fileName rel_before.tcl \
    -sections relativefplan ;# write only the relative floorplan section

Where to find the result. The file rel_before.tcl. An empty section and a failed write are different findings, so look at the file and at the log.

B. Create the relationship.

MODIFIES THE DESIGN - U_BUF_B 300 UM ABOVE U_BUF_A, LEFT EDGES ALIGNED
innovus> create_relative_floorplan -place u_buf_b -ref_type object -ref u_buf_a \
    -horizontal_edge_separate {1 300 3} \
    -vertical_edge_separate {0 0 0} ;# record the relationship and place the target

C. Read back the result. Read the macro boxes again, and write the section again.

WRITES FILES - EXPORT THE SECTION AGAIN
innovus> writeFPlanScript -fileName rel_after.tcl \
    -sections relativefplan ;# the same section, to a second file
LINUX TERMINAL - SHOW WHAT CHANGED
$ diff rel_before.tcl rel_after.tcl # lines that appeared in the exported section

D. Check for problems. Run the geometric checks of Section 12 again, with the recorded settings. A relationship does not guarantee legality. The resulting box may sit off the grid or overlap a halo.

E. Decide what to do next. Success has three parts. The box moved or did not, the section holds the relationship, and the checks are clean.

Common beginner mistake

Using a relationship to avoid thinking. A relationship keeps two objects apart by a number. It does not know why the number was chosen. When you resize the core, check that 300 µm still leaves what the connectivity of Section 3 wanted.

Use this when the floorplan will change size more than once and you want the macro relationships to survive. Skip it when the floorplan is fixed by the chip plan.

14.2  Resize: change the floorplan and keep its shape

The problem. Section 13 says the core is a little too small or too large. We want to change the size without redoing Section 8. resizeFloorplan resizes the floorplan while keeping the relative locations of the existing objects. Typical uses are to reduce the die on a finished floorplan, or to expand or shrink it based on full-chip placement results.

There are three modes, each set with setResizeFPlanMode:

A shift-based shrink of candidate C is drawn in Figure 26, using the snapped values worked out below.

Resize before and after
Candidate C, core only, shrunk by 49.6 µm in x and 40.5 µm in y
Resize before and after
Figure 26 The running design's macros in a core shrunk by a shift-based resize, with every macro kept inside the core. Objects beyond each resize line shift; the others stay. Drawn to scale; the resize lines are assumed.

What to notice: Only the gaps that contain a resize line change. Both RAMs keep their 420 × 300 µm size and u_coef keeps 240 × 160 µm. u_coef moved left and down; u_buf_b moved down; u_buf_a did not move. The band between the RAMs falls from 300 to about 259 µm, below what the plan assumed; step E must catch this.

The snapping rule changes your number

-⁠snapToTrack is true by default. A resize value is snapped to a multiple of the metal pitch. The x value snaps to the first vertical layer pitch, and the y value to the first horizontal layer pitch. For example, a request of 8 becomes 7.84 for a pitch of 1.568. Our invented pitches of 1.6 µm (x) and 1.5 µm (y) are used in Table 43.

Table 43 Snapping the resize request (calculated)
RequestPitch (µm)Request / pitchRoundedSnapped (µm)
50 in x1.631.253149.6
40 in y1.526.672740.5

Assume, for this arithmetic only, that the snapped values shrink the core. Whether the core or the die changes is not certain, so read the outline back. Then:

A shrink of about 5% in x and 4% in y raises D1 by 7 points, from 72% to 79%. Whether 79% is acceptable is judged against the evidence of Section 13 and the target you set in Section 5.

Shrink by a small amount

A. Check what is already there, and protect the starting point.

INSPECTION - READ THE RESIZE SETTINGS
innovus> getResizeFPlanMode ;# defaults and user changes are both reported
WRITES FILES - CHECKPOINT BEFORE THE RESIZE
innovus> saveDesign fp_before_resize.enc ;# a known starting point for the change

Where to find the result. getResizeFPlanMode reports each parameter with its current value, its type and whether you set it. With -⁠quiet it returns a Tcl list only. Without arguments it covers all parameters.

B. Resize the floorplan.

MODIFIES THE DESIGN - SHRINK THE FLOORPLAN
# Keep halos intact, keep I/O pins proportionally spaced, snap to track.
innovus> setResizeFPlanMode -honorHalo true -ioProportional true \
    -snapToTrack true ;# resize settings
innovus> resizeFloorplan -xSize -50 -ySize -40 ;# shrink 50 um in x, 40 um in y

C. Read back the result.

INSPECTION - READ BACK THE RESIZED OUTLINE
innovus> defOut -floorplan fp_after_resize.def ;# the outline as DEF text
innovus> dbGet top.fplan.coreBox ;# the core box
innovus> checkDesign -floorplan -noHtml \
    -outfile resize_check.rpt ;# floorplan data, including pins, after the move

Read the macro boxes with the inventory too.

D. Check for problems. Run checkFPlan and checkDesign -⁠floorplan with the recorded settings, as in Section 12. After a resize, three things can go wrong that a basic check also catches:

E. Decide what to do next. Compare the new outline, the macro boxes and the pin positions with the old ones. The macros keep their sizes, and the gaps change only where the resize line was. Here the band between u_buf_a and u_buf_b drops from 299.2 to about 258.7 µm. That is below the 300 µm assumed in Section 5, so decide whether it is acceptable or move the resize line. If a channel that was acceptable in Section 13 is now narrower, the resize did not honor your intent. Go back to the checkpoint and use a resize line.

Use this when the floorplan is right in shape and wrong in size. Skip it when the problem is the arrangement, not the size.

14.3  Technology specifics: grids that come from the library

Some technologies define grids that are stricter than rows and sites. Some technologies need FinFET grid support. If the technology LEF defines a fin pitch, the tool sets the placement grid from it by default. Every placeable object (I/O pads, macros and standard-cell rows) must then be on that grid. Its height must also be a multiple of the pitch.

The running design is not described as a FinFET design, so there is no fin-grid example. If your technology has one, list the fin grid among the grids of Section 7, and rerun the checks of Section 12.

14.4  Unified floorplan constraints: rules, checked and fixed

The problem. A project may hold rules that a floorplan must meet: spacing, density, halo and area rules, among others. Unified floorplan constraints (UFC) define such rules in a file. The tool checks them, reports violations with rule names and severities, and fixes some of them automatically. The usage model has four steps:

  1. Load the design.
  2. Create a UFC file.
  3. Run check_ufc.
  4. Fix reported violations with fix_floorplan.
INSPECTION - CHECK THE FLOORPLAN AGAINST A RULES FILE
innovus> check_ufc project_rules.ufc -report_file ufc_report.rpt \
    -report_unplaced_block ;# check the rules; summary to a file
MODIFIES THE DESIGN - FIX WHAT THE RULES SAY CAN BE FIXED
innovus> fix_floorplan -file project_rules.ufc -type ufc \
    -report_file ufc_fix.rpt ;# fix from the same rules file

A UFC file's syntax is outside this chapter, and no example rule is given. Read the rule syntax with your project's own rule set.

What the evidence shows, and what it does not

15  Final acceptance, saving and handoff

The next stage will use the floorplan as an input and will not question it. An off-grid macro, a missing halo or a skipped check may travel forward. It will then be found later, at a higher price, by a person who does not know where it came from.

A floorplan is not finished when you stop editing it. It is finished when someone else, or you next week, can pick it up and know three things. They must know exactly what was accepted, on what evidence, and what was left open.

15.1  Final acceptance: the exit gate

Run the full set of checks once, with the settings recorded, and read them against the entry gate of Section 4. The exit gate has three kinds of evidence, listed in Table 44.

Table 44 The three kinds of exit-gate evidence
KindSourceQuestion
GeometriccheckFPlan, checkDesign -⁠floorplan, checkDesign -⁠place, checkPinAssignment; checkFPlanSpace if your flow uses it (listed in Section 12, not demonstrated here)Is the floorplan consistent?
TrialThe Section 13 reportsDid the estimate show a problem?
DecisionThe notes from Sections 5 to 11Is every open item recorded with an owner?

The first two are evidence. The third is a record. A floorplan with clean checks and no record of its open items is not ready.

Every finding must be in a class from Section 12. The gate passes only if all of these hold:

An optional assessment that was not run is recorded as NOT RUN, with its consequence. Timing without clocks and constraints is the example, and then no timing claim is made.

Table 45 maps each item that leaves the floorplan stage to the evidence that backs it.

Table 45 Handoff evidence map (names invented)
ItemCarried byEvidence that countsDoes not show
Accepted checkpointsaveDesignFresh-session restore, external files reachable, objects matchState outside what was compared
Floorplan filesaveFPlanDestination loads it with its prerequisites; objects matchCompleteness of a file that exists
Readable scriptwriteFPlanScriptdiff exit status 0 on the sections comparedHalos, special routing, timing
Check reports-⁠outfile, redirectSettings recorded; each mandatory check said it ranQuality or feasibility
Feasibility reportsredirectSettings recorded next to the numbers; one placementRouting success, timing closure
Decisions and gapsNotes, Sections 3 to 11An owner named for each open itemThat it is the right floorplan

Left open on purpose: whether the floorplan is the right one, whether it routes, and whether timing closes. No file in this table proves those. A readable file proves only that a file was written. The evidence that counts is that the destination can load it, and that the relevant objects match.

15.2  Two things people call "saved"

They answer different questions. One transfers a floorplan between designs or versions. The other returns a whole session to a point.

15.3  saveFPlan and loadFPlan

WRITES FILES - WRITE THE FLOORPLAN FILE
innovus> saveFPlan fp_accepted ;# the command adds the extension .fp
MODIFIES THE DESIGN - READ A FLOORPLAN FILE BACK (REPLACES THE FLOORPLAN)
innovus> loadFPlan fp_accepted.fp ;# only in an initialized design; replaces it all

15.4  writeFPlanScript: a file you can read

WRITES FILES - EXPORT THE FLOORPLAN AS READABLE TCL
innovus> writeFPlanScript -fileName fp_accepted.tcl -legacy ;# whole floorplan as Tcl
Common beginner mistake

Handing over a floorplan file without the design behind it. A .fp file refers to instance names. Loaded into a netlist where the names differ, it either fails or places the wrong objects. Record the netlist version it was saved against.

15.5  saveDesign and restoreDesign

The save works as in Design Data Preparation, Import, Sanity Checks and Export. We repeat only what the floorplan stage adds.

What goes in the accepted checkpoint. This chapter's policy is that the accepted checkpoint contains the accepted floorplan and no trial placement. The trial of Section 13 wrote cell positions and route estimates into the database. So take the accepted checkpoint from a state that has none of them:

  1. Run restoreDesign fp_before_trial.enc.dat stream_acc in a fresh session.
  2. Apply the decisions the trial led to, for example a changed halo.
  3. Repeat the checks of Section 12, and save from there.

If your project decides to carry the trial state forward, label that checkpoint as such. Record the settings that produced it.

WRITES FILES - READABLE RECORD, THEN THE ACCEPTED CHECKPOINT
innovus> writeFPlanScript -fileName fp_saved.tcl -legacy ;# readable floorplan record
innovus> saveDesign fp_accepted.enc ;# the accepted checkpoint

15.6  Compare the saved state with the restored state

A file that is readable or dated does not show that the floorplan is portable. Portability is shown by two things together:

A restored top name and core box alone do not show that the whole floorplan came back. So compare a small fingerprint, saved before and read after the restore. Table 46 lists it.

Table 46 The restore fingerprint
PropertyWhere the saved value comes fromWhere the restored value comes fromMatch?
Top name and instance countdbGet top.name, top.numInstsThe same commandsSame values
Core boxdbGet top.fplan.coreBoxThe same commandSame numbers
Rows and sitewriteFPlanScript sections boundary and rowThe same section after the restorediff exit status 0
Macros: name, master, box, orientationThe macro inventory, and section blocksThe samediff exit status 0
Macro statusThe macro inventoryThe sameAll fixed
Pins: count, unplaced count, positionscheckDesign -⁠floorplan, section pinsThe sameZero unplaced, same positions
Placement and routing blockagesSections placeBlockages and routeBlockagesThe samediff exit status 0
HalosThe halo of each macro, read separately in the display. No export section is established to cover halosThe sameSame size on every side of every macro
Module constraintsSection constraintsThe samediff exit status 0
Inputs the checkpoint refers toThe list of library, view and constraint filesReachable from the restoring sessionAll found
ChecksThe Section 12 reports with their settingsThe same checks rerunSame findings
WRITES FILES - READ BACK IN THE FRESH SESSION, AFTER RESTOREDESIGN
# Read the restore log first, then:
innovus> dbGet top.name ;# restored top name
innovus> dbGet top.fplan.coreBox ;# restored core box
innovus> writeFPlanScript -fileName fp_restored.tcl -legacy ;# same record, new name
LINUX TERMINAL - COMPARE THE TWO READABLE RECORDS
$ diff fp_saved.tcl fp_restored.tcl ; echo "diff exit status: $?" # compare files

Restoring a checkpoint and transferring a floorplan are different operations. Each has its own prerequisites and its own proof, as Figure 27 shows.

Full restore versus floorplan transfer
Two ways to move a floorplan; each needs prerequisites and its own proof
Full restore versus floorplan transfer
Figure 27 Two ways to move a floorplan, each with what the destination needs and how to verify it.

What to notice: Restore needs the checkpoint and every external file it references, in a fresh session. Transfer needs an initialized design with matching instance names. Neither is proven by a file existing.

15.7  DEF, as a second view

defOut -⁠floorplan writes the floorplan as DEF text. We used it in Section 6 to read geometry. It is a useful second view for a person. It does not replace either save above. DEF syntax is outside this chapter, so we do not list line-by-line meanings.

15.8  What the handoff package contains

Table 47 lists the handoff package.

Table 47 The handoff package
ItemWhyProduced by
Accepted checkpoint, with no trial stateThe full statesaveDesign
Floorplan fileThe objects, portablesaveFPlan
Readable scriptReview copy and comparison basewriteFPlanScript
Check reports with their settingsEvidence that the checks ranSection 12
Trial reports and settingsEvidence of the trial viewSection 13
Decisions, waivers, open items (owners)What was chosen, what remainsNotes, Sections 3 to 11
References to inputsLibraries, views, constraints neededThe import record
Unverified listWhat we could not confirmSection 16
Acceptance decision
What the evidence shows, and what it does not

16  Troubleshooting: common mistakes and how to catch them

This section collects what to do when a step goes wrong, and what this chapter could not confirm. Start from what you see. Each symptom below has likely causes to test and the evidence to look at first. It also has the fix to make if the evidence supports a cause. A cause stays a hypothesis until the evidence agrees with it.

16.1  Rows and grids

Table 48 Troubleshooting rows and grids
SymptomLikely cause, and where to look firstFix, then recheck
No rows, or fewer than expectedCore smaller than a row; wrong site name; rows removed by cuts. Look first: defOut -⁠floorplan, read the ROW linesCorrect the site or the size and recreate. Recheck: checkFPlan
Row count differs from the calculationHeight is not a whole number of rows; the leftover is handled in a way you did not expect. Look first: compare core height with the row heightUse a height that is a whole number of rows, or read the actual remainder back. Recheck: checkDesign -⁠floorplan
Instance not on a row siteCoordinate off the site grid; a different snap grid applied. Look first: reportUnsnapBlocks, or checkDesign -⁠floorplanPick a coordinate on the grid, or accept the snapped value after a read-back. Recheck: the same check
Macro pins off trackBlock grid is not the layer-track grid; the pin check did not run. Look first: getFPlanMode -⁠checkTypes and the block-grid settingSet the grid from a library fact, with the library owner. No result is not a pass. Recheck: checkFPlan

16.2  Macros, channels and halos

Table 49 Troubleshooting macros, channels and halos
SymptomLikely cause, and where to look firstFix, then recheck
Macros overlap by a small amountRounding to a grid; a typing error; a halo or blockage mismatch. The size alone does not tell. Look first: requested and stored boxes (compare_box, macro_inventory)Correct the typing error, or leave a gap of at least one grid step if rounding caused it. Recheck: checkFPlan and checkDesign -⁠place
Narrow channel listedThe physical gap is small; halos take part of it; the threshold is only a screen. Look first: set r [report_narrow_channel -⁠width 65 -⁠direction x -⁠quiet], then puts $rCompare the gap with the project requirement. Widen it, or accept it with a note. Recheck: report_narrow_channel again
Channel congested in Section 13Too few tracks between objects; blockages on the layer; pin access; an estimate artifact. Look first: adjustFPlanChannel -⁠reportOnly, blockages by layerMove a macro, resize, or revisit the arrangement. Reduce a halo only if no pin access or provider clearance needs it. Recheck: place and reportCongestion again
Hotspot on the input sideMacros crowd the pin band; pin placement or access; blockages; another constraint. Look first: reportCongestion -⁠hotSpot, pin positions, macro boxesChange only what the evidence points at. Go back to Section 8 if the arrangement is the cause. Recheck: repeat Section 13

16.3  Pins, checks and records

Table 50 Troubleshooting pins, checks and records
SymptomLikely cause, and where to look firstFix, then recheck
Pins unplacedPin step not done; names do not match the ports; the constraint misses them. Look first: checkDesign -⁠floorplan, names_missingExpected before Section 11, a finding after it. Place the pins and check names, layer, side and range. Recheck: the same checks
Pin on a wrong layer or off trackThe layer or range request is wrong; track origin; pin size. Look first: checkPinAssignment -⁠outFileCorrect the request the report names. Recheck: the check again
A fence or guide is ignoredThe object type or hierarchy is not as assumed. Look first: queryFPlanObject, then checkFPlanRecreate it with the right object and size. Recheck: the same check
A check printed nothingThe type is off; a prerequisite is missing; the output went elsewhere. Look first: getFPlanMode -⁠checkTypes, and the end of the report fileSilence is not a pass. Switch the type on and set its prerequisite. Recheck: look for the line that says it ran
Resize gave another valueSnapping to the track pitch, if the difference is below one pitch. Look first: getResizeFPlanModeUse the rounded value in the plan. Recheck: read the box back
Restore differs from the saveA different software release; moved inputs; an edited folder; a format-only difference. Look first: the restore log, the diff exit status, the box read-backRestore in a fresh session with the saving release, then redo the Section 15 comparison. Recheck: the fingerprint table

A finding you cannot classify is not accepted. Stop and ask the owner of the input.

16.4  How each claim in this chapter was established

Table 51 names the five kinds of claim and where each appears.

Table 51 Evidence classes used in this chapter
ClassMeaningIn this chapter
Checked without runningSyntax and options checked without running the tool; confirm with -⁠help in your installationThe commands and their effects
CalculatedPlain Tcl with declared inputs, run in a plain interpreterThe calculations and the helpers. They test arithmetic and control flow only
IllustrativeInvented values or drawings that show how to read evidenceThe report tables and the schematic figures, labeled as not tool output
JudgmentA choice that depends on the projectDensities, halo sizes, channel needs
Run in InnovusA licensed tool ran and was readNone

16.5  What this chapter could not confirm

Each item in Table 52 is a gap that could not be settled without running the tool. Confirm each with -⁠help in your installation. The chapter did not fill any of them with invented syntax.

Table 52 What could not be confirmed, and how the chapter handled it
GapHow the chapter handled it
Database attributes for the die box, I/O box, rows and halosNo verified query. The chapter uses the display, DEF text, writeFPlanScript -⁠sections and the check reports
DEF row syntaxNot explained line by line
Report formats of report_obj_connectivity and the checksNeutral teaching tables are used
Flight-line menu path and controlsView → Set Preference → Flightline is the expected path; confirm it in your installation. No Tcl enabling command is given
Whether the halo is inside the core-size formulaBoth readings are stated. The density discussion names which is used
macroOnly versus macro_onlyBoth names are given, with the advice to check the tool's own help
Whether placeInstance snaps macros to the site grid or the block gridBoth outcomes are shown. The read-back decides
Row remainder behavior of floorPlanNot settled. Read the core box and row extents back
-⁠level of report_obj_connectivityNot interpreted. Read the report file
Offset sign of create_relative_floorplanInferred from one example. Confirm by read-back
Whether the resize applies to the core or the dieStated as an assumption in the calculation
Which properties writeFPlanScript leaves out, and whether any export section covers halosThe accepted checkpoint is saveDesign. Halos are checked separately
Differences in your installationNot checked. Use the tool's own help
A licensed Innovus runNone. Every command was checked without running the tool

17  Optional teaching helpers

Nothing in the main lesson needs these. They exist so that you can read a database answer as numbers without a failed read turning into a zero.

17.1  Read a box, and compare two boxes

box_of accepts one box, or a list that holds one box. It checks that it received four finite numbers, with the lower corner below and left of the upper corner. Infinity (Inf, -⁠Inf) and not-a-number (NaN) are numbers to Tcl, so the helper tests for them explicitly. It does not know whether the box came from a die, a core or a macro. The database's "nothing found" answer, 0x0, is rejected.

FILE - fp_helpers.tcl, PART 1: BOX_OF (TCLSH)
# Return four numbers {llx lly urx ury}, or raise an error.
proc box_of {value} {
    if {[llength $value] == 1} { set value [lindex $value 0] }
    if {[llength $value] != 4} { return -code error "not a box: $value" }
    foreach v $value {
        if {![string is double -strict $v]} {
            return -code error "not a number: $v"
        }
        if {!($v == $v) || abs($v) == Inf} {
            return -code error "not finite: $v"
        }
    }
    lassign $value llx lly urx ury
    if {$llx >= $urx || $lly >= $ury} {
        return -code error "corners not ordered: $value"
    }
    return $value
}

The tests below feed box_of one good box and nine bad answers.

FILE - fp_helpers.tcl, PART 1 (CONTINUED): TESTS FOR BOX_OF (TCLSH)
puts "wrapped : [box_of {{10.0 10.0 1210.0 710.0}}]"
puts "bare    : [box_of {10.0 10.0 1210.0 710.0}]"
# Print "ok", or the error message, for one test input.
# Named try_box, not try: Tcl 8.6 already has a built-in try command.
proc try_box {label v} {
    set bad [catch {box_of $v} m]
    puts [format "%-8s: %s" $label [expr {$bad ? "err: $m" : "ok"}]]
}
try_box empty   0x0
try_box flipped {5 5 1 1}
try_box badword {1 1 x 9}
try_box short   {1 1 9}
try_box blank   {}
try_box Inf     {0 0 Inf 10}
try_box InfY    {0 0 10 Inf}
try_box -Inf    {-Inf 0 10 10}
try_box NaN     {0 0 NaN 10}
CALCULATED EXAMPLE OUTPUT - TCLSH RESULT FOR THE INVENTED INPUTS
wrapped : 10.0 10.0 1210.0 710.0
bare    : 10.0 10.0 1210.0 710.0
empty   : err: not a box: 0x0
flipped : err: corners not ordered: 5 5 1 1
badword : err: not a number: x
short   : err: not a box: 1 1 9
blank   : err: not a box:
Inf     : err: not finite: Inf
InfY    : err: not finite: Inf
-Inf    : err: not finite: -Inf
NaN     : err: not finite: NaN

compare_box reports the difference between a requested box and a box read back.

FILE - fp_helpers.tcl, PART 2: COMPARE_BOX (TCLSH)
# Compare a requested box with the box that was read back.
proc compare_box {requested actual {tol 0.001}} {
    if {[catch {box_of $actual} act]} {
        return "could not be read ($act)"
    }
    set diffs {}
    foreach n {llx lly urx ury} r $requested a $act {
        set d [expr {$a - $r}]
        if {abs($d) > $tol} { lappend diffs [format "%s %+.3f" $n $d] }
    }
    if {[llength $diffs] == 0} { return "matches within $tol" }
    return "differs: [join $diffs {, }]"
}

Three test cases: a match, a 0.4 µm difference and a failed read.

FILE - fp_helpers.tcl, PART 2 (CONTINUED): TESTS FOR COMPARE_BOX (TCLSH)
set req {40 40 1040 1040}
puts "case 1: [compare_box $req {{40.0 40.0 1040.0 1040.0}}]"
puts "case 2: [compare_box $req {{40.0 40.0 1040.0 1039.6}}]"
puts "case 3: [compare_box $req 0x0]"
CALCULATED EXAMPLE OUTPUT - TCLSH RESULT FOR THE INVENTED INPUTS
case 1: matches within 0.001
case 2: differs: ury -0.400
case 3: could not be read (not a box: 0x0)

17.2  List the macros

This helper needs box_of. It selects instances whose master-cell subclass is block. It says none found, n/a: unplaced and could not be read in separate words, because they mean different things. It runs only inside Innovus.

FILE - fp_helpers.tcl, PART 3: MACRO_INVENTORY (INSIDE INNOVUS)
# Needs box_of. Prints one line per hard macro.
proc macro_inventory {} {
    set ptrs [dbGet top.insts.cell.subClass block -p2]
    if {$ptrs eq "0x0"} {
        puts "macros: none found"
        return 0
    }
    foreach p $ptrs {
        set stat [dbGet $p.pStatus]
        if {$stat eq "unplaced"} {
            set box "n/a: unplaced"
        } elseif {[catch {box_of [dbGet $p.box]} box]} {
            set box "could not be read"
        }
        puts [format "%-8s %-8s %-9s %s" \
            [dbGet $p.name] [dbGet $p.cell.name] $stat $box]
    }
    return [llength $ptrs]
}
macro_inventory

The helper compares the status with the word unplaced. Check on the first run that your installation prints that word.

17.3  Snap a value to a grid

FILE - fp_helpers.tcl, PART 4: SNAP AND ITS TESTS (TCLSH)
# new value = origin + round((request - origin) / pitch) * pitch
proc snap {v origin pitch} {
    set steps [expr {round(($v - $origin) / $pitch)}]
    return [expr {$origin + $steps * $pitch}]
}
# Rows of the snapping table in Section 7: axis, request, pitch (origin 40).
set cases {x 100 0.2 y 90 1.4 y 690 1.4 x 590 0.2 y 800 1.4}
foreach {axis req pitch} $cases {
    puts [format "%s %5.1f -> %6.1f" $axis $req [snap $req 40 $pitch]]
}
CALCULATED EXAMPLE OUTPUT - TCLSH RESULT FOR THE INVENTED INPUTS
x 100.0 ->  100.0
y  90.0 ->   90.4
y 690.0 ->  689.6
x 590.0 ->  590.0
y 800.0 ->  800.2

Print with format, and compare with a tolerance, as compare_box does. Decimal results can carry rounding noise.

17.4  Overlap and growth of boxes

FILE - fp_helpers.tcl, PART 5: OVERLAP AND GROW (TCLSH)
# Overlap area of two boxes {llx lly urx ury}. Zero if they do not meet.
proc overlap {a b} {
    lassign $a ax1 ay1 ax2 ay2
    lassign $b bx1 by1 bx2 by2
    set w [expr {min($ax2, $bx2) - max($ax1, $bx1)}]
    set h [expr {min($ay2, $by2) - max($ay1, $by1)}]
    if {$w <= 0 || $h <= 0} { return 0.0 }
    return [expr {double($w) * $h}]
}
# Grow a box by d on every side.
proc grow {box d} {
    lassign $box x1 y1 x2 y2
    return [list [expr {$x1 - $d}] [expr {$y1 - $d}] \
                 [expr {$x2 + $d}] [expr {$y2 + $d}]]
}
FILE - fp_helpers.tcl, PART 6: THE CANDIDATE P CASE (TCLSH)
# Candidate P, requested positions, 10 um halo on each macro.
set a {40 40 460 340}
set b {40 340 460 640}
set core {40 40 1040 1040}
set ha [grow $a 10]
set hb [grow $b 10]
puts "halo boxes overlap  : [overlap $ha $hb] um2"
puts "halo A into macro B : [overlap $ha $b] um2"
foreach {n box} [list A $ha B $hb] {
    lassign $box x1 y1 x2 y2
    set whole [expr {double($x2 - $x1) * ($y2 - $y1)}]
    set inside [overlap $box $core]
    puts [format "halo box %s: %.0f total, %.0f outside the core" \
        $n $whole [expr {$whole - $inside}]]
}
CALCULATED EXAMPLE OUTPUT - TCLSH RESULT FOR THE INVENTED INPUTS
halo boxes overlap  : 8800.0 um2
halo A into macro B : 4200.0 um2
halo box A: 140800 total, 7500 outside the core
halo box B: 140800 total, 3200 outside the core

17.5  Pick pins by prefix, and find missing names

FILE - fp_helpers.tcl, PART 7: PINS_WITH_PREFIX AND NAMES_MISSING (TCLSH)
# Keep the names that start with a prefix. 0x0 means nothing was found.
proc pins_with_prefix {names prefix} {
    if {$names eq "0x0"} { return {} }
    set out {}
    foreach n $names {
        if {[string first $prefix $n] == 0} { lappend out $n }
    }
    return $out
}
# Return the wanted names that are not in the actual list.
# 0x0 means the database found nothing.
proc names_missing {wanted actual} {
    if {$actual eq "0x0"} { set actual {} }
    set out {}
    foreach n $wanted {
        if {[lsearch -exact $actual $n] < 0} { lappend out $n }
    }
    return $out
}
puts "found   : [pins_with_prefix {in_0 in_1 out_0 clk in_2} in_]"
puts "none    : {[pins_with_prefix {out_0 clk} in_]}"
puts "nothing : {[pins_with_prefix 0x0 in_]}"
puts "missing : [names_missing {in_0 in_1 in_9} {in_0 in_1 clk}]"
puts "all gone: [names_missing {in_0 in_1} 0x0]"
CALCULATED EXAMPLE OUTPUT - TCLSH RESULT FOR THE INVENTED INPUTS
found   : in_0 in_1 in_2
none    : {}
nothing : {}
missing : in_9
all gone: in_0 in_1

18  Interview preparation

Beginner
Q1. What does a clean floorplan check prove?

It proves geometric consistency under the recorded settings, and nothing more.

What is being tested: whether you separate consistency from quality.
Beginner
Q2. You asked for 1000 × 1000 µm and got a 1080 × 1080 µm die. What happened?

You used the core form, floorPlan -⁠s, with 40 µm margins; the die is the core plus the margins.

What is being tested: whether you know the die, I/O box and core are three different boxes.
Intermediate
Q3. A colleague says "we are at 70%". Why is that not yet a statement?

Because utilization depends on which areas are in the numerator and the denominator.

What is being tested: whether you name the denominator of a density.
Beginner
Q4. What does a flight line tell you, and what does it not?

It shows that two objects connect and by how many nets; it is not a wire.

What is being tested: whether you use flight lines to choose candidates, not to judge them.
Intermediate
Q5. You placed a RAM at y = 340 µm and read back 339.6 µm. Why, and why does it matter?

placeInstance snapped it to the nearest site on the 1.4 µm row grid from origin 40.

What is being tested: whether you read placed locations back instead of trusting the request.
Advanced
Q6. Candidate P passes the checks except for a small overlap. Why is it still rejected?

Because its real problems are ones no geometric check reports.

What is being tested: whether you judge arrangements from connectivity, not from a clean report.
Intermediate
Q7. How do a placement halo, a routing halo, a routing blockage and a channel differ?

They block different things, and only the channel is measured rather than created.

What is being tested: whether you can name what each reservation blocks.
Advanced
Q8. A channel carries 136 nets on two layers. The pitch is 0.4 µm and only 50 µm is usable. What do you conclude and do?

Supply is 50 / 0.4 × 2 × 0.5 = 125 tracks, below the demand of 136, so it does not fit.

What is being tested: whether you treat channel capacity as a count of tracks, not a width.
Intermediate
Q9. What happens to a fence whose effective utilization reaches 100%?

Placement changes it into a guide, so a tight fence quietly stops being a fence.

What is being tested: whether you size a fence before creating it.
Beginner
Q10. Why build the pin list in a loop instead of passing a wildcard to editPin?

Because editPin -⁠pin does not support wildcards, and you need a known order and verified names.

What is being tested: whether you verify names before a modifying command.
Intermediate
Q11. A floorplan check printed nothing. Did it pass?

No. Silence is not a pass. Find the line that says the check ran, then read its findings.

What is being tested: whether you record the check settings next to every report.
Advanced
Q12. Why save a checkpoint before the trial placement, and why not hand off the trial state?

The trial writes cell positions, optimization changes and route estimates into the database.

What is being tested: whether you keep trial data out of the accepted floorplan.
Advanced
Q13. How do you prove that a saved floorplan is portable?

Restore it in a fresh session and compare a fingerprint, reading diff by its exit status.

What is being tested: whether you know the four facts: save attempted, save completed, restore completed, state equivalent.

19  Chapter close

Compact glossary

Table 53 Compact glossary, part 1: objects and space
TermMeaning
DieThe outer boundary of the chip or block, for example 1080 × 1080 µm
CoreThe region inside the die that holds rows and standard cells, for example 1000 × 1000 µm
I/O boxThe I/O boundary. When pads are used, they sit in the margin between it and the core
SiteThe smallest legal standard-cell footprint, for example 0.2 × 1.4 µm
RowA strip of sites; neighboring rows are mirrored (N and FS, or R0 and MX)
MacroA large block with fixed internal layout, such as a 420 × 300 µm RAM
Placement haloA keep-out around a macro for cells; it moves with the macro
Routing haloA high routing cost beside a macro on chosen layers; a cost, not a wall
Placement blockageAn area reserved from cells: hard, soft, partial or macroOnly
Routing blockageAn area where the listed routing layers are reserved
ChannelThe free gap between objects; you measure it, you do not draw it
Routing supplyHow many wires fit on each layer in a channel; a count of tracks
Table 54 Compact glossary, part 2: numbers, states and records
TermMeaning
Flight lineA straight display line showing that two objects connect, and by how many nets
Aspect ratioCore height divided by width; 1.0 is square
D1 (core utilization)(cells + macros + halo) / core; 72% for the running design
TU and EUThe tool's target and effective utilization; EU also counts blockages and cuts
SnappingMoving a coordinate to the nearest grid point, by at most half a pitch
OrientationR0, MX, MY, R180 and others; it moves the pin bank, not the outline
Placement statusunplaced, placed, softFixed, fixed or cover: who may move an instance
Guide, fence, regionSoft suggestion, hard wall, and shared area for a module or group
OverflowRouting demand above track supply in a bin or channel
Checkpoint and floorplan fileThe whole database (saveDesign, restoreDesign) versus floorplan objects only (saveFPlan, loadFPlan)
FingerprintA small set of properties compared before a save and after a restore

One-page summary

Purpose. This chapter takes the accepted database from import and turns it into a floorplan you can defend. It covers boundaries, rows, macros, channels, blockages, module regions and pins. They are checked for consistency and given a first look at feasibility. Figure 1 is the same story as a picture.

Workflow map.

  1. Entry gate, then requirements and connectivity.
  2. Area and geometry, then create and inspect.
  3. Rows, sites and grids, then macros.
  4. Channels, halos and blockages, then module constraints if needed.
  5. Pins, then the first checks.
  6. Trial placement and refinement.
  7. Acceptance, save and handoff.

Key concepts.

Common mistakes.

Acceptance questions.

  1. Is every mandatory input present, and every omitted optional item recorded with its consequence?
  2. Is the core derived from a stated density, with every area named?
  3. Do rows, sites and grids match the library facts?
  4. Does each macro face its logic, with access on the needed sides?
  5. Is every channel compared with a requirement?
  6. Did each mandatory check run, with settings recorded, and rerun after the last pin group?
  7. Was the trial picture confirmed by a second, comparable trial (Section 13.5)?
  8. Did a fresh restore reproduce the recorded facts, with halos checked separately and diff read by exit status?

Where the next chapter goes, and why

This chapter reserved room for the power grid but did not build it. The trial placement also ran without any power stripes, so its congestion picture is optimistic.

Power Planning builds the rings and stripes in the room this floorplan left. That room lies in the core margin, beside the macros and in the channels. It comes next because the grid takes routing tracks. Every channel count and congestion reading from this chapter must be read again once the grid exists. It starts from the accepted checkpoint you saved in Section 15. It uses the same habit: inspect, change, read back, check, decide.

One-page command cheat sheet

Commands in the form used throughout this chapter. Each card stands alone, so read its prerequisite first. None was run in Innovus.

CARD 1 - CREATE THE FLOORPLAN (SECTION 6)
# Prerequisite: design restored, site name known from the library.
innovus> floorPlan -site core_site -s {1000 1000 40 40 40 40} \
    -coreMarginsBy die ;# core 1000 x 1000, 40 um margins from the die
# Then: read the boxes back and run the first checks.
innovus> checkFPlan -outFile fp1_check.rpt -reportUtil ;# check, with utilization
CARD 2 - PLACE A MACRO (SECTION 8)
# Prerequisite: grids known (Section 7). y = 90.4 is on the 1.4 um row grid.
innovus> placeInstance u_buf_a 100 90.4 R0 -placed ;# movable, pins east
# Then: read the location back (macro_inventory).
CARD 3 - SCREEN A CHANNEL (SECTION 9)
# Prerequisite: macros placed. 65 um is an example threshold only.
innovus> set r [report_narrow_channel -width 65 -direction x -quiet] ;# capture
innovus> puts $r ;# print the channel boxes
# Then: compare each gap with the project requirement.
CARD 4 - PLACE ONE PIN GROUP (SECTION 11)
# Prerequisite: names are real ports (dbGet top.terms.name).
innovus> editPin -pin {clk rst_n} -side BOTTOM -layer metal5 \
    -spreadType CENTER ;# clock and reset, bottom center
# Then: after ALL groups are placed, rerun the pin checks.
innovus> checkPinAssignment -outFile pins_check.rpt ;# pin legality
CARD 5 - TRIAL PLACEMENT (SECTION 13)
# Prerequisite: macros fixed and the Section 12 checks read.
innovus> saveDesign fp_before_trial.enc ;# the way back
innovus> place_design ;# trial placement
innovus> earlyGlobalRoute ;# rough route for the congestion reports
# Then: the design changed. Restore before the next trial.
CARD 6 - ACCEPT AND RECORD (SECTION 15)
# Prerequisite: no trial state; mandatory inputs and checks done.
innovus> saveDesign fp_accepted.enc ;# accepted checkpoint
innovus> saveFPlan fp_accepted ;# floorplan file, .fp added
# Then: restore fresh, compare the fingerprint, check halos separately.

Rules: inspect first. A silent check is not a pass. Restore before you call a handoff verified.