Skip to main content

Module fanout

Module fanout 

Source
Expand description

fanout — the pit-of-success primitive for antenna-safe wide selects.

A wide mux/select driven by ONE bit is a met1-antenna hazard on an ASIC: that single select net must fan out across the FULL datapath (every mux bit it gates), and a long, high-fan-out wire is exactly the metal-1 area-ratio violation antenna checks flag. The GPU’s SequentialFma datapath (gpu_simt_rtl) solved this for its per-cycle conditional-add partial product sel ? data : 0 by SLICING it: emit slice (* keep *) copies of the select bit, each ANDing its OWN width / slice-bit group of the data wire, so NO net’s fan-out exceeds width / slice. Every copy equals the same one bit, so the concatenation is bit-for-bit the original select — the value is unchanged; only the physical fan-out is bounded.

That is a GENERAL principle, not a GPU quirk: any wide mux/select driven by a single bit should route it through bounded_fanout_select so its fan-out is structurally bounded by width / slice and a met1 antenna is impossible by construction, no diode insertion needed. The slice knob trades wires for fan-out: smaller slice = each copy gates FEWER bits = lower fan-out = less antenna, at the cost of MORE (* keep *) copies; larger slice = the reverse.

Functions§

bounded_fanout_select
Emit a fan-out-bounded image of the one-bit select sel_expr ? data_wire : 0 over width bits, sliced into slice groups.