Synthesis: turn RTL into standard cells
Synthesis converts the behavioral RTL into a gate-level network and maps that network onto cells from the Sky130 standard-cell library.
Overview
Start with RTL:
always @(posedge clk) begin
a_q <= a;
end
After synthesis, the design contains an actual library flip-flop cell.
Start with:
assign y = a ^ b;
After synthesis, the logic may become:
- XOR cells
- NAND/NOR combinations
- AOI/OAI cells
- mux cells
- some other equivalent network
Synthesis is allowed to transform logic as long as the resulting circuit is logically equivalent under the design constraints.
Three conceptual synthesis phases
RTL elaboration
→ generic Boolean/sequential network
→ technology mapping
Why your adder source may not survive literally
You chose an architecture such as:
Ripple Carry
Carry Lookahead
Carry Select
That architecture expresses your RTL intent.
Yosys and its technology-mapping passes may:
- flatten hierarchy
- propagate constants
- simplify Boolean expressions
- remove redundant logic
- remap functions
- resize/restructure logic later in PNR
Therefore:
compare the implemented results, not just the number of operators you typed.
Prerequisites
Steps
1. Locate the synthesis step
Find it without relying on a hard-coded step number:
RUN=$(ls -dt runs/* | head -1)
find "$RUN" -maxdepth 1 -type d -name '*yosys-synthesis*'
Store the directory:
SYNTH_DIR=$(find "$RUN" -maxdepth 1 -type d -name '*yosys-synthesis*' | head -1)
echo "$SYNTH_DIR"
2. Inspect synthesis output files
find "$SYNTH_DIR" -maxdepth 1 -type f -printf '%f\n' | sort
Look for:
log files
netlists
reports
state_out.json
3. Search the mapped netlist for Sky130 cells
grep -R "sky130_fd_sc_hd__" "$SYNTH_DIR" | head -40
You should see standard-cell instance names.
4. Count cell-name occurrences
This is only a rough text-level exploration, not the authoritative area report:
grep -Rho "sky130_fd_sc_hd__[A-Za-z0-9_]*" "$SYNTH_DIR" \
| sort \
| uniq -c \
| sort -nr \
| head -30
Later OpenROAD/metrics reports provide more reliable physical counts and area.
5. Find the synthesis statistics
Search:
grep -RniE "area|cells|wires|ABC|stat" "$SYNTH_DIR" | head -80
Look at the Yosys log and identify:
- number of cells
- cell types
- sequential elements
- combinational elements
- area estimate if reported
6. Compare RTL and netlist
Ask:
Can I still recognize the adder hierarchy?
Did synthesis flatten it?
What cell implements the input/output registers?
Are there explicit XOR cells?
Are there mux cells?
Were some operations combined?
7. Understand the clock before CTS
At this stage the design has clocked cells, but the physical clock tree has not been built yet.
Synthesis knows:
these flip-flops are driven by clk
It does not yet know the final physical clock-buffer locations and routed clock wires.
8. Understand area at this stage
Synthesis area is mainly:
sum of standard-cell areas
It is not final die area.
Final physical area also needs:
- whitespace
- placement rows
- tap/endcap cells
- clock buffers
- routing resources
- PDN
- physical margins
- possibly decap/filler cells
9. Save evidence
Save a short text excerpt or screenshot showing mapped Sky130 cells:
screenshots/synthesis_cells.png
Results
You should now understand the boundary:
RTL describes function
synthesis chooses a gate-level implementation
physical design assigns real positions and wires
Checklist
- Located the Yosys synthesis step
- Found a mapped netlist
- Found Sky130 standard-cell names
- Identified flip-flop cells
- Inspected synthesis statistics
- Understand why RTL architecture and final physical implementation may differ
- Continued to page 15
Questions? Ask in the network Discord.