# Top (`controller.sv`) Source: - `rtl/systolic_gauss_jordan/controller.sv` `controller` is the top for one Gauss-Jordan run. It owns run-level timing only and delegates row feeding to `\input`. ## Function On `start_i`, the module latches the run configuration, starts the feeder, and begins a local cycle counter. During the run it optionally emits a one-cycle reduce pulse. When the configured run window completes, it pulses `done_o` and returns idle. The data path is: `controller -> \input -> trapeziod_mesh` ## Interface contract - `start_i` is single-shot while idle - `rows_i` selects how many A/B rows the feeder issues - `reduce_start_i` is the step-local cycle at which reduce is asserted - `run_cycles_i == 0` falls back to `3N + rows_i + L - 2` - `busy_o` stays high for the active run - `done_o` is a one-cycle completion pulse - `error_o` flags invalid control use such as restart-while-busy