Back to Interview Prep

Tcl Reference Guide: Part 2 — Floorplanning Commands

May 25, 2026 HDL2Chips Team Tcl Reference

Part 2 of the Tcl command reference covering Floorplanning commands used to define chip dimensions, core area, placement rows, routing tracks, and keepout regions. Floorplanning sets the physical canvas for all downstream P&R steps.

The complete physical design flow follows this order:

  • Design & Database Setup
  • Floorplanning
  • Power Planning
  • Placement
  • Clock Tree Synthesis
  • Routing
  • Optimization
  • Signoff & Reports

Quick Reference: Floorplanning Commands for EDA Tools

Floorplanning defines the chip's physical dimensions, core area, IO pin locations, and row/track structures. A good floorplan sets the foundation for routability, timing, and power closure.

CommandDescription
initialize_floorplanInitializes the floorplan with default settings
create_floorplanCreates a floorplan with core utilization, aspect ratio, and row configuration
set_floorplan_modeSets floorplan mode (e.g., manual, auto)
set_die_areaDefines the die/core boundary coordinates
set_core_areaSets the core area (where standard cells are placed)
set_aspect_ratioSets the core height-to-width ratio
set_siteSelects the placement site (e.g., unit-size cell footprint)
set_row_siteSets the row site for placement rows
create_rowsCreates standard cell placement rows
delete_rowsRemoves existing placement rows
set_row_optionsConfigures row creation options (spacing, orientation)
set_track_patternDefines the routing track pattern for each metal layer
create_trackCreates individual routing tracks
set_boundarySets physical boundary for a region or block
create_keepout_marginReserves a margin around objects where cells cannot be placed
create_keepoutCreates a keepout area blocking placement or routing
report_floorplanReports current floorplan configuration and statistics
check_floorplanValidates the floorplan for DRC violations and issues

Typical Floorplan Setup Script

# === Typical Floorplan Creation Flow ===
initialize_floorplan
set_die_area   {0 0 2000 2000}
set_core_area  {200 200 1800 1800}
set_aspect_ratio 1.0
set_site       "core_site"
create_rows    -site core_site -spacing 0.5
set_track_pattern -layers {M1 M2} -width 0.1 -spacing 0.1
create_keepout -area {500 500 600 600} -type placement
report_floorplan > reports/floorplan.rpt
check_floorplan

Command Deep-Dive: Understanding Each Command

initialize_floorplan Initializes the floorplan with default settings

What it is: initialize_floorplan sets up the floorplan with a default configuration based on the design size and technology. It automatically estimates core area, creates initial rows, and sets up basic tracks. This is the quick-start command for floorplanning when you do not need custom dimensions.

Where we use it: Used at the beginning of the floorplanning stage to get a baseline floorplan. It is common in rapid prototyping or when exploring die area options. For production designs engineers typically use create_floorplan with explicit parameters instead.

Syntax: initialize_floorplan [-core_utilization <ratio>] [-aspect_ratio <ratio>]

# Initialize with auto-estimated dimensions
initialize_floorplan

# Initialize with target utilization
initialize_floorplan -utilization 0.7

# Initialize with aspect ratio
initialize_floorplan -aspect_ratio 1.0 -utilization 0.7
create_floorplan Creates a floorplan with explicit parameters

What it is: create_floorplan generates a floorplan with precise control over core dimensions, utilization, row height, and aspect ratio. Unlike initialize_floorplan, this command accepts explicit parameters giving you full control over the physical canvas.

Where we use it: This is the standard floorplan creation command for production flows. You specify the die size, core utilization, and row configuration and the tool creates the floorplan accordingly. It is typically followed by set_die_area or set_core_area for fine tuning.

Syntax: create_floorplan -core_utilization <ratio> -aspect_ratio <ratio> -row_config <config>

# Create floorplan with core utilization
create_floorplan -utilization 0.7 -aspect_ratio 1.0

# Create floorplan with specific core dimensions
create_floorplan -core_die_ratio 0.8 -row_height 0.5

# Create with double-back rows for better density
create_floorplan -utilization 0.75 -flip_row first
set_die_area Defines the die boundary coordinates

What it is: set_die_area sets the exact coordinates of the die (chip boundary) in microns. The die area includes both the core area and the I/O ring. These coordinates define where the chip ends and nothing can be placed outside this boundary.

Where we use it: After creating the floorplan you refine the die area to match the package requirements. The die size is determined by the number of I/O pads, core area needed for standard cells, and any additional margin for seal rings or scribe lines.

Syntax: set_die_area -x_0 <value> -y_0 <value> -x_1 <value> -y_1 <value>

# Set die area with lower-left and upper-right coordinates
set_die_area {0 0 2000 2000}

# Set die area with core area padding
set_die_area {0 0 2000 2000} -core_margin {50 50 50 50}

# Adjust die area for I/O ring width
set_die_area {0 0 2000 2000} -io_ring_width 30
set_core_area Sets the core area for standard cell placement

What it is: set_core_area defines the rectangular region within the die where standard cells and blocks are placed. The core area excludes the I/O ring, corner pads, and any peripheral margin. It is the usable area for logic.

Where we use it: After setting the die area you define the core boundaries. The core area must be inside the die area with sufficient margin for I/O cells. The core size directly impacts standard cell density and routing feasibility.

Syntax: set_core_area -x_0 <value> -y_0 <value> -x_1 <value> -y_1 <value>

# Set core area inside die
set_core_area {200 200 1800 1800}

# Set core with specific row height
set_core_area {200 200 1800 1800} -row_height 0.56

# Adjust core to increase utilization
set_core_area {150 150 1850 1850}
set_aspect_ratio Sets the core height-to-width ratio

What it is: set_aspect_ratio defines the ratio of core height to core width. An aspect ratio of 1.0 means a square core. Values above 1.0 create a portrait orientation (taller) while values below 1.0 create landscape (wider).

Where we use it: Used early in floorplanning to explore different die shapes. The aspect ratio affects wire lengths, routing congestion, and timing. Square floorplans generally give the best routing results while extreme aspect ratios can cause congestion in one direction.

Syntax: set_aspect_ratio <ratio>

# Square core (default for most designs)
set_aspect_ratio 1.0

# Portrait orientation (taller than wide)
set_aspect_ratio 1.5

# Landscape orientation (wider than tall)
set_aspect_ratio 0.75
set_site Selects the placement site for standard cells

What it is: set_site specifies the placement site type which is the unit-size cell footprint defined in the technology LEF. Standard cells are placed in rows aligned to this site. Common sites include core_site for core cells and io_site for I/O cells.

Where we use it: Before creating placement rows you must select the appropriate site for each region. Core standard cells use the core site (typically 1 track high) while I/O cells use a different wider site. The site choice determines row pitch and cell compatibility.

Syntax: set_site -name <site_name> -site_type <type>

# Set standard core site
set_site "core_site"

# Set site for I/O ring
set_site "io_site" -region io_ring

# List available sites
set_site -list
create_rows Creates standard cell placement rows

What it is: create_rows generates the rows where standard cells are placed. Rows span the core area horizontally (or vertically depending on orientation). Cells are placed in these rows aligned to the site grid.

Where we use it: After defining the core area and selecting the site you create rows to fill the core. The row height is determined by the site. Rows can be flipped with alternating orientation for better density and power distribution.

Syntax: create_rows -start_x <value> -start_y <value> -num_rows <n> -site <site>

# Create rows across the core area
create_rows -site core_site

# Create rows with alternating flip
create_rows -site core_site -flip first

# Create rows with specific spacing
create_rows -site core_site -spacing 0.5

# Delete and recreate rows if needed
delete_rows
create_rows -site core_site
set_track_pattern Defines routing track patterns

What it is: set_track_pattern configures the routing track grid for each metal layer. Tracks define where wires can be routed and the track pattern includes track width, spacing, offset, and direction per layer.

Where we use it: After floorplan creation you define track patterns based on the technology LEF. Lower metals (M1-M3) typically have finer tracks for local routing while upper metals have wider tracks for global routing and power delivery. Track patterns are usually fixed per technology node.

Syntax: set_track_pattern -layer <layer> -x_start <value> -x_pitch <value> -y_start <value> -y_pitch <value>

# Set tracks for lower metal layers
set_track_pattern -layers {M1 M2 M3} -width 0.1 -spacing 0.1

# Set tracks with offset for preferred direction
set_track_pattern -layers M1 -width 0.08 -spacing 0.08 -offset 0.04

# Set tracks for upper thick metals
set_track_pattern -layers {M6 M7} -width 0.4 -spacing 0.4
create_keepout Creates keepout areas blocking placement or routing

What it is: create_keepout defines regions where the tool cannot place cells or route wires. Keepouts are used to reserve space for analog blocks, sensitive circuits, antenna diodes, or future ECO changes.

Where we use it: During floorplanning you create keepouts for analog or mixed-signal blocks that need isolation, areas near high-speed I/O to reduce noise coupling, regions reserved for engineering change orders (ECO), and spaces for decoupling capacitors or special cells.

Syntax: create_keepout -area {x0 y0 x1 y1} [-type <type>]

# Keepout for placement only
create_keepout -area {500 500 600 600} -type placement

# Keepout for both placement and routing
create_keepout -area {1000 1000 1200 1200} -type all

# Keepout for routing only (e.g., sensitive net zone)
create_keepout -area {300 300 400 400} -type routing

# Keepout with margin around a macro
create_keepout -area {800 800 900 900} -type placement -margin 2.0
report_floorplan Reports floorplan status and statistics

What it is: report_floorplan prints a detailed summary of the current floorplan including die dimensions, core area, row count, track configuration, keepout regions, and utilization. It is the primary verification command for floorplan correctness.

Where we use it: After setting up the floorplan run this to verify everything looks correct. Check that the die and core areas match specifications, rows cover the core completely, and keepouts are in the right places. Also used before handing off to placement to ensure the floorplan is clean.

Syntax: report_floorplan [-verbose] [-output <file>]

# Basic floorplan report
report_floorplan > reports/floorplan.rpt

# Report with track details
report_floorplan -tracks > reports/tracks.rpt

# Report with all keepout details
report_floorplan -keepouts > reports/keepouts.rpt

# Validate floorplan
check_floorplan > reports/fp_check.rpt

Mastering these Floorplanning commands is essential for setting up the physical canvas correctly. A well-crafted floorplan prevents routing congestion, timing violations, and area issues downstream. Continue to Part 3: Power Planning Commands →