flowchart LR RTL[RTL Design] --> SYN[Synthesis] SYN --> NET[Netlist] NET --> GLB[Global Placement] GLB --> LEG[Legalization] LEG --> DET[Detailed Placement] DET --> ROU[Routing] ROU --> STA[Timing Closure] style RTL fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style SYN fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style NET fill:#ffcdd2,stroke:#c62828,stroke-width:3px,color:#2e3440 style GLB fill:#e3f2fd,stroke:#1565c0,stroke-width:3px,color:#2e3440 style LEG fill:#e3f2fd,stroke:#1565c0,stroke-width:3px,color:#2e3440 style DET fill:#e3f2fd,stroke:#1565c0,stroke-width:3px,color:#2e3440 style ROU fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440 style STA fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440
flowchart LR M1["module a ๐ ฐ๏ธ"] --> S1 M1 --> S2 M2["module b ๐ ฐ๏ธ"] --> S2 M2 --> S3 M3["module c ๐ ฐ๏ธ"] --> S1 M3 --> S3 S1["slot 1 ๐ ฑ๏ธ"] S2["slot 2 ๐ ฑ๏ธ"] S3["slot 3 ๐ ฑ๏ธ"] style M1 fill:#ffcdd2,stroke:#c62828,stroke-width:3px,color:#2e3440 style M2 fill:#ffcdd2,stroke:#c62828,stroke-width:3px,color:#2e3440 style M3 fill:#ffcdd2,stroke:#c62828,stroke-width:3px,color:#2e3440 style S1 fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440 style S2 fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440 style S3 fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440
flowchart LR A["Initial Placement ๐ฒ"] --> B{optimize loop} B -->|x-axis| C["howard(x) โ legalize(y) โ pads"] C -->|y-axis| D["howard(y) โ legalize(x) โ pads"] D --> E{worst improved?} E -->|Yes โ | F["commit, snapshot"] F --> B E -->|No โ| G["restore last snapshot ๐ธ"] G --> H["io_assign"] H --> I[End] style A fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style B fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style C fill:#e3f2fd,stroke:#1565c0,stroke-width:3px,color:#2e3440 style D fill:#e3f2fd,stroke:#1565c0,stroke-width:3px,color:#2e3440 style E fill:#ffcdd2,stroke:#c62828,stroke-width:3px,color:#2e3440 style F fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440 style G fill:#f3e5f5,stroke:#7b1fa2,stroke-width:3px,color:#2e3440 style H fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440
graph TD subgraph sibling libraries NX[netlistx] DG[digraphx] PD[physdes] MW[mywheel] end NNS["nnsplace"] NNS --> NX NNS --> DG NNS --> PD NNS --> MW NNS --> PY["nnsplace.placement.py"] NNS --> CFG["nnsplace.placement_cfg.py"] style NX fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440 style DG fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440 style PD fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440 style MW fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440 style NNS fill:#e3f2fd,stroke:#1565c0,stroke-width:3px,color:#2e3440 style PY fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style CFG fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440
flowchart LR A[NnsPlacer] --> B[PlacerState ๐ธ] A --> C["Legalizer ๐งฉ"] A --> D[_HowardsCost ๐] C --> E[LocalWindowLegalizer] C --> F[GlobalSlotLegalizer] style A fill:#e3f2fd,stroke:#1565c0,stroke-width:3px,color:#2e3440 style B fill:#f3e5f5,stroke:#7b1fa2,stroke-width:3px,color:#2e3440 style C fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#2e3440 style D fill:#f3e5f5,stroke:#7b1fa2,stroke-width:3px,color:#2e3440 style E fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440 style F fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px,color:#2e3440