Measures to design for optimized area (minimum silicon) using architecture/RTL, synthesis, and floorplanning levers.
Area Optimization
Why area matters: As silicon real-estate is very costly and saving is directly proportional to the
company's revenue generation, a lot of emphasis is placed on designing which has optimal utilization in the area-front.
1) Architecture-level (biggest impact)
- Resource sharing / time-multiplexing: reuse ALU/multiplier across cycles instead of duplicating blocks.
- Reduce parallelism when throughput allows.
- Bit-width optimization: use only required word length (trim unused bits).
- Use memory macros: replace large flop arrays with SRAM/ROM whenever feasible.
- Simpler arithmetic: shift/add vs multiply if allowed by spec.
2) RTL / micro-architecture
- Remove redundant logic: share common sub-expressions and decodes.
- Avoid unnecessary pipelining: extra registers increase area (and clock overhead).
- FSM encoding (ASIC): binary/compact encodings typically use fewer flops than one-hot.
- Control mux growth: restructure to avoid very wide mux trees.
3) Synthesis-driven techniques
- Don’t over-constrain timing: aggressive constraints lead to upsizing/buffering → more area.
- Use low-drive cells on non-critical paths: if the path is not timing-critical, optimize the cells to use low-drive strength cells so that there will be saving in the area.
- Enable area-focused compile (tool option) and/or apply
set_max_areatargets. - Manage fanout early: high fanout nets often cause buffer insertion (area increase).
Quick win: Move non-critical logic to minimum-size / low-drive cells and relax timing where legally possible.
4) Floorplanning / physical (ASIC)
- Abut the VDD rows (clean standard-cell row strategy) to improve utilization and reduce wasted whitespace.
- Iterate floorplans: analyzing utilization numbers with multiple floor-planning versions which brings up with optimized area targets.
- Reduce congestion (better macro placement/channel sizing) to avoid late buffering and detours.
Example (typical synthesis knobs)
/* Generic (tool-dependent) examples */
# Set an area target (units depend on library)
set_max_area 0
# Use an area-focused compile (name varies by tool)
compile -area_effort high
# Ensure non-critical paths are allowed to use smaller cells
# (avoid over-aggressive timing constraints)
Best practice: optimize architecture first, then let synthesis pick smaller cells on non-critical paths, and validate with floorplan utilization.
Architecture • Synthesis • Floorplan
No comments:
Post a Comment