graph LR V2["VdC base 2\nUQ0.32"] --> A["angle"] V3["VdC base 3\nVdC × 3^20"] --> R["radius"] V7["VdC base 7\nVdC × 7^11"] --> L["LUT + angle"] A --> C["CORDIC\ncos / sin"] R --> S["CORDIC sqrt"] L --> C C --> P["Disk / Sphere / 3-Sphere"] S --> P style V2 fill:#e3f2fd,stroke:#1565c0,color:#2e3440,stroke-width:3px style V3 fill:#e3f2fd,stroke:#1565c0,color:#2e3440,stroke-width:3px style V7 fill:#e3f2fd,stroke:#1565c0,color:#2e3440,stroke-width:3px style C fill:#c8e6c9,stroke:#2e7d32,color:#2e3440,stroke-width:3px style S fill:#c8e6c9,stroke:#2e7d32,color:#2e3440,stroke-width:3px style P fill:#fff9c4,stroke:#f57f17,color:#2e3440,stroke-width:3px
graph TD S3["sphere3_32"] --> V7["u_vdc7\nvdc_7_ilds_32"] S3 --> SP["u_sphere\nsphere_32"] S3 --> CR["u_cordic\ncordic_32"] SP --> V2["u_vdc\nvdc_32"] SP --> C3["u_circle\ncircle_3_32"] SP --> SQ["u_sqrt\ncordic_sqrt_32"] C3 --> V3["u0\nvdc_3_ilds_32"] C3 --> CR2["u1\ncordic_32"] D["disk_32"] --> C2["u_circle\ncircle_2_32"] D --> V3D["u_vdc3\nvdc_3_ilds_32"] D --> SQD["u_sqrt\ncordic_sqrt_32"] C2 --> V2D["u0\nvdc_32"] C2 --> CRD["u1\ncordic_32"] style S3 fill:#fff9c4,stroke:#f57f17,color:#2e3440,stroke-width:3px style SP fill:#c8e6c9,stroke:#2e7d32,color:#2e3440,stroke-width:3px style D fill:#c8e6c9,stroke:#2e7d32,color:#2e3440,stroke-width:3px
graph LR RTL["RTL\nrtl/*.v"] --> IV["Icarus\nmake all / all32"] RTL --> CO["cocotb 2\n9 modules"] CO --> REF["Python reference\nVdC + LUT + float math"] RTL --> YO["Yosys\nsynth/*.ys"] YO --> JS["JSON netlist\nschema check"] style RTL fill:#e3f2fd,stroke:#1565c0,color:#2e3440,stroke-width:3px style REF fill:#c8e6c9,stroke:#2e7d32,color:#2e3440,stroke-width:3px style CO fill:#fff9c4,stroke:#f57f17,color:#2e3440,stroke-width:3px