pub fn emit_double_buffer_verilog() -> StringExpand description
Emit the ping-pong double-buffer controller: swap toggles which bank compute reads
(read_bank) vs the DMA fills (fill_bank = ~read_bank). The safety invariant
read_bank != fill_bank holds by construction (they are complements).