Final 1x3 Router GDSII Layout - Sky130 PDK (OpenLane Flow)
NoC Router-RTL2GDSII is a fully implemented 1×3 packet router taken from Register-Transfer Level (RTL) all the way to GDSII, using the SkyWater SKY130A PDK and the OpenLane/OpenROAD digital ASIC flow.
The goal of this project is to demonstrate the complete ASIC design pipeline, including RTL architecture, functional verification, logic synthesis, physical design, and signoff.
For users new to routers and packet switching, the following video provides the foundational concept:
Khan Academy: "How the Internet Works: Routers and Packet Switching"
This design implements a 1-input, 3-output packet router. Each packet contains:
- Header - includes a 2-bit destination address
- Payload - variable-length data
- Parity byte - used for error detection
The router includes:
Manages the entire dataflow:
- Detects header
- Starts payload transfer
- Handles FIFO-full conditions
- Generates control signals for register & sync blocks
- Ensures correct parity sequencing
Handles:
- Header capture
- Payload forwarding
- Internal parity calculation
- External parity storage
- Error flag generation
- Latches destination address
- Decodes FIFO write enables
- Provides valid-out signals
- Manages inactivity-based soft reset per FIFO
Three independent FIFOs (one per output port), each implemented using:
- A developed and verified synchronous FIFO IP
- A wrapper module (
wrap_fifo) that adapts the FIFO interface to the router control logic and implements router-specific control signals
All RTL sources are under:
rtl/
├── modules/
│ ├── controller.v
│ ├── reg.v
│ ├── sync.v
│ ├── fifo.v
│ └── wrap_fifo.v
└── topmodule/
└── router.v
Key features:
- Clean hierarchy
- FIFO reused from verified IP
- Thin wrapper to adapt to router interface
- Parameterizable FIFO depth and width
Testbenches are located under:
tb/
├── modules/
└── topmodule/
└── router_tb.v
The verification flow checks:
- Header decoding
- FIFO selection
- FIFO full/empty transitions
- Payload and parity sequencing
- Soft reset timeout behavior
- End-to-end packet traversal through all three output ports
Simulations generate VCD waveforms viewable in any VCD Viewer:
router_tb.vcd
Scripts:
synth/
├── synth_router.ys
└── show_router.ys
The project uses the Sky130A PDK and the full OpenLane flow:
- Floorplanning
- Power grid generation
- Placement
- Clock Tree Synthesis
- Global & detailed routing
- RC extraction
- Timing & physical signoff
- GDSII export
gds_final/router.gds
floorplan/
routing/
signoff/
gds_final/
These include DEF, SPEF, STA reports, LVS/DRC logs, and final GDS.
- 20 ns period (50 MHz)
- No setup or hold violations
- Clean clock tree
- Stable skew and insertion delay
- All checks met
From STA power report:
- Internal: 2.01e-03 mW
- Switching: 9.42e-04 mW
- Leakage: 1.71e-08 mW
- Total power ≈ 0.439 mW
- Core Utilization: 36.29%
- Cell Count: 2,109 standard cells
- Die Area: ~0.078 mm²
- Wirelength: 71,279 units
- Vias: 17,407
- No routing violations
- DRC: 0 violations
- LVS: Clean
- STA: Passed
- Final GDSII exported successfully
NoCRouter-RTL2GDSII/
├── docs/
├── floorplan/
│ ├── router.def
├── gds_final/
│ ├── gds-1.png
│ ├── gds-2.png
│ ├── gds-3.png
│ └── router.gds
├── routing/
├── rtl/
│ ├── modules/
│ │ ├── controller.v
│ │ ├── fifo.v
│ │ ├── reg.v
│ │ ├── sync.v
│ │ └── wrap_fifo.v
│ └── topmodule/
│ └── router.v
├── signoff/
├── synth/
│ ├── show_router.ys
│ └── synth_router.ys
├── tb/
│ ├── modules/
│ └── topmodule/
│ └── router_tb.v
├── sta/
├── run_sim.sh
└── config.tcl
chmod +x run_sim.sh
./run_sim.shProduces:
router_tb.vcd
router_synth.v — synthesized netlist
router.svg — block-level schematic extracted by Yosys
Commands are referenced in comments inside run_sim.sh.
Requires Docker-based OpenLane pre-installed.
Open for educational and personal use under the MIT License
- Packet Router Overview
Covers packet routing fundamentals in computer science. - Packet Definition
Explains packet structure and networking basics. - Router 1X3-RTL Design and Verification
Initial implementation of router design and verificaiton - Design and functional verification of 1*3 router using verilog
Recent article on implementation and verification of 1X3 router using verilog
