Configure and run the ALU flow

Create the LibreLane design configuration and run a complete baseline RTL-to-GDS implementation before tuning individual stages.

Overview

LibreLane is a flow orchestrator.

Instead of manually invoking every program, you provide:

RTL
constraints
PDK choice
physical-design settings

LibreLane creates a sequence of steps and passes the design state from one tool to the next.

A configuration file is not HDL.

It describes how the EDA flow should implement the HDL.

Prerequisites

  • PDK and standard cells
  • working adder8.v
  • working alu_core.v
  • working alu_top.v
  • inside the LibreLane environment

Steps

1. Prepare the project

Your folder should look like:

asic_101_gds/
├── rtl/
│   ├── adder8.v
│   ├── alu_core.v
│   └── alu_top.v
├── screenshots/
└── config.json

2. Create config.json

Start with:

{
  "DESIGN_NAME": "alu_top",

  "VERILOG_FILES": [
    "dir::rtl/adder8.v",
    "dir::rtl/alu_core.v",
    "dir::rtl/alu_top.v"
  ],

  "CLOCK_PORT": "clk",
  "CLOCK_PERIOD": 10.0,

  "PDK": "sky130A",
  "STD_CELL_LIBRARY": "sky130_fd_sc_hd",

  "FP_SIZING": "absolute",
  "DIE_AREA": [0, 0, 150, 150],
  "CORE_AREA": [10, 10, 140, 140],

  "FP_CORE_UTIL": 35,
  "PL_TARGET_DENSITY_PCT": 45
}

3. Understand every field

DESIGN_NAME

alu_top

must match the top-level Verilog module.

VERILOG_FILES

tells synthesis which RTL files belong to the design.

CLOCK_PORT

identifies the top-level clock port.

CLOCK_PERIOD

is in nanoseconds.

10 ns = 100 MHz

The period is a constraint, not a promise.

The flow tries to produce a physical implementation that satisfies it.

PDK

selects the manufacturing-process configuration.

STD_CELL_LIBRARY

selects the standard-cell library.

FP_SIZING

set to absolute means we are explicitly choosing physical dimensions.

DIE_AREA

is the outer physical block boundary:

x0 y0 x1 y1

in micrometers.

CORE_AREA

is the region inside the die where standard-cell rows are created.

Our starting geometry is intentionally roomy because the ALU is tiny and we want enough space to clearly inspect the PDN and routing.

FP_CORE_UTIL

is still useful as an educational reference for utilization-oriented experiments, although explicit die/core geometry fixes the available physical region.

PL_TARGET_DENSITY_PCT

controls the target cell-placement density.

Do not optimize these numbers yet.

First make a baseline run.

4. Run the full flow

From the project directory:

librelane config.json

The default flow is Classic.

This is equivalent to explicitly writing:

librelane --flow Classic config.json

5. Watch the step names

You should see steps corresponding to stages such as:

Verilator lint
Yosys synthesis
pre-PNR STA
floorplan
tap/endcap insertion
PDN generation
global placement
IO placement
detailed placement
CTS
global routing
antenna checking/repair
detailed routing
RC extraction
post-PNR STA
IR-drop reporting
GDS stream-out
DRC
LVS
manufacturability checks

The exact numbering can change between releases.

The step names matter more than the numeric prefixes.

6. Find the run directory

After the run:

ls runs

A run directory will contain individual step folders.

A typical run contains:

runs/<run-tag>/
├── 01-...
├── 02-...
├── ...
├── final/
├── error.log
├── info.log
├── warning.log
└── resolved.json

7. Find the final views

find runs -path "*/final/*" -maxdepth 4 -type f | head -50

The final directory may contain:

def/
gds/
lef/
lib/
nl/
odb/
pnl/
sdc/
sdf/
spef/
spice/
metrics.csv
metrics.json

8. Open the final layout in KLayout

librelane --last-run --flow OpenInKLayout config.json

9. Open it in OpenROAD

librelane --last-run --flow OpenInOpenROAD config.json

KLayout is excellent for viewing final geometric layers.

OpenROAD is better for understanding the physical-design database, timing paths, cells, nets, congestion, and routing.

10. Save a baseline screenshot

Save:

screenshots/baseline_gds.png

Do not worry if it looks mostly like colored rectangles right now.

The next pages explain what every major structure is.

Results

You should now have your first ASIC implementation of the ALU.

Do not call the project finished merely because a .gds file exists.

You still need to understand:

  • what synthesis built
  • what the floorplan means
  • how power is delivered
  • why cells are where they are
  • how the clock is distributed
  • where routing congestion appears
  • whether timing closes
  • whether DRC/LVS/signoff checks pass

Checklist

  • Created config.json
  • Understand every configuration field
  • Full flow completed
  • Located the run directory
  • Located final GDS
  • Opened KLayout
  • Opened OpenROAD
  • Saved baseline screenshot
  • Continued to page 14

Questions? Ask in the network Discord.