graph LR J["JSON spec"] --> O["Lowpass oracle"] O --> E["Ellipsoid method"] E --> R["Autocorrelation r"] R --> S["Spectral factorization"] S --> H["Minimum-phase h"] H --> Q["CSD quantization"] Q --> F["Fixed-point alignment"] F --> V["Verilog RTL"] V --> T["iverilog / cocotb"]
graph TD S["Filter spec JSON"] --> P["Python CLI: fir-design"] S --> C["C++ CLI: FirDesign"] P --> A["Oracle + spectral + CSD"] C --> B["Oracle + spectral + CSD"] A --> J["Result JSON + CSD"] B --> J J --> F["One fixed-point contract"] F --> T["Transpose RTL"] F --> D["Direct RTL"] T --> V["Impulse simulation"] D --> V
graph TD U["CSD round-trip"] --> A["Fixed-point alignment"] A --> B["value == parse(csd)"] B --> C["iverilog compile"] C --> D["Impulse response"] D --> E["cocotb: transpose + direct"] E --> F["xmake test / pytest"]