Cube-view SVG: detailed topology validation rendering
- Dedicated cube_view renderer showing 6×6 router grid with attachments - PE blocks drawn next to their router (above/below) - HBM pseudo channel port bar (64 ports, color-coded by PE owner) - Per-PE BW annotations on HBM links - Router color-coded by type (PE/M_CPU/SRAM/UCIe/relay) - Title shows mode, channel count, per-PE and total BW - Legend for all component types Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
+257
-327
@@ -1,329 +1,259 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="556" height="472" viewBox="0 0 556 472">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="970" height="900" viewBox="0 0 970 900">
|
||||
<title>cube</title>
|
||||
<rect width="556" height="472" fill="#f8fafc"/>
|
||||
<text x="278" y="18" text-anchor="middle" font-family="monospace" font-size="14" font-weight="bold" fill="#1e293b">CUBE VIEW</text>
|
||||
<rect x="40.0" y="40.0" width="476.0" height="392.0" rx="6" fill="none" stroke="#475569" stroke-width="2" stroke-dasharray="8,4"/>
|
||||
<rect x="152.0" y="166.0" width="252.0" height="140.0" rx="4" fill="#d1fae5" stroke="#10b981" stroke-width="1.5" stroke-dasharray="6,3" opacity="0.5"/>
|
||||
<text x="278.0" y="278.0" text-anchor="middle" font-family="monospace" font-size="11" fill="#047857" opacity="0.7">HBM</text>
|
||||
<line x1="82.0" y1="82.0" x2="166.0" y2="82.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="124.0" y="78.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||
<line x1="82.0" y1="82.0" x2="82.0" y2="152.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="82.0" y="113.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">2.5mm</text>
|
||||
<line x1="166.0" y1="82.0" x2="250.0" y2="82.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="208.0" y="78.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||
<line x1="166.0" y1="82.0" x2="166.0" y2="152.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="166.0" y="113.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">2.5mm</text>
|
||||
<line x1="250.0" y1="82.0" x2="334.0" y2="82.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="292.0" y="78.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||
<line x1="250.0" y1="82.0" x2="250.0" y2="152.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="250.0" y="113.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">2.5mm</text>
|
||||
<line x1="334.0" y1="82.0" x2="390.0" y2="82.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="362.0" y="78.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">2.0mm</text>
|
||||
<line x1="334.0" y1="82.0" x2="334.0" y2="152.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="334.0" y="113.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">2.5mm</text>
|
||||
<line x1="390.0" y1="82.0" x2="474.0" y2="82.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="432.0" y="78.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||
<line x1="390.0" y1="82.0" x2="390.0" y2="152.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="390.0" y="113.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">2.5mm</text>
|
||||
<line x1="474.0" y1="82.0" x2="474.0" y2="152.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="474.0" y="113.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">2.5mm</text>
|
||||
<line x1="82.0" y1="152.0" x2="166.0" y2="152.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="124.0" y="148.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||
<line x1="82.0" y1="152.0" x2="82.0" y2="194.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="82.0" y="169.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">1.5mm</text>
|
||||
<line x1="166.0" y1="152.0" x2="250.0" y2="152.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="208.0" y="148.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||
<line x1="166.0" y1="152.0" x2="166.0" y2="194.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="166.0" y="169.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">1.5mm</text>
|
||||
<line x1="250.0" y1="152.0" x2="334.0" y2="152.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="292.0" y="148.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||
<line x1="250.0" y1="152.0" x2="250.0" y2="320.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="250.0" y="232.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">6.0mm</text>
|
||||
<line x1="334.0" y1="152.0" x2="390.0" y2="152.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="362.0" y="148.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">2.0mm</text>
|
||||
<line x1="334.0" y1="152.0" x2="334.0" y2="320.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="334.0" y="232.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">6.0mm</text>
|
||||
<line x1="390.0" y1="152.0" x2="474.0" y2="152.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="432.0" y="148.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||
<line x1="390.0" y1="152.0" x2="390.0" y2="194.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="390.0" y="169.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">1.5mm</text>
|
||||
<line x1="474.0" y1="152.0" x2="474.0" y2="194.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="474.0" y="169.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">1.5mm</text>
|
||||
<line x1="82.0" y1="194.0" x2="166.0" y2="194.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="124.0" y="190.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||
<line x1="82.0" y1="194.0" x2="82.0" y2="278.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="82.0" y="232.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||
<line x1="166.0" y1="194.0" x2="390.0" y2="194.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="278.0" y="190.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">8.0mm</text>
|
||||
<line x1="166.0" y1="194.0" x2="166.0" y2="278.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="166.0" y="232.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||
<line x1="390.0" y1="194.0" x2="474.0" y2="194.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="432.0" y="190.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||
<line x1="390.0" y1="194.0" x2="390.0" y2="278.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="390.0" y="232.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||
<line x1="474.0" y1="194.0" x2="474.0" y2="278.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="474.0" y="232.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||
<line x1="82.0" y1="278.0" x2="166.0" y2="278.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="124.0" y="274.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||
<line x1="82.0" y1="278.0" x2="82.0" y2="320.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="82.0" y="295.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">1.5mm</text>
|
||||
<line x1="166.0" y1="278.0" x2="390.0" y2="278.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="278.0" y="274.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">8.0mm</text>
|
||||
<line x1="166.0" y1="278.0" x2="166.0" y2="320.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="166.0" y="295.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">1.5mm</text>
|
||||
<line x1="390.0" y1="278.0" x2="474.0" y2="278.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="432.0" y="274.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||
<line x1="390.0" y1="278.0" x2="390.0" y2="320.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="390.0" y="295.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">1.5mm</text>
|
||||
<line x1="474.0" y1="278.0" x2="474.0" y2="320.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="474.0" y="295.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">1.5mm</text>
|
||||
<line x1="82.0" y1="320.0" x2="166.0" y2="320.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="124.0" y="316.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||
<line x1="82.0" y1="320.0" x2="82.0" y2="390.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="82.0" y="351.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">2.5mm</text>
|
||||
<line x1="166.0" y1="320.0" x2="250.0" y2="320.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="208.0" y="316.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||
<line x1="166.0" y1="320.0" x2="166.0" y2="390.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="166.0" y="351.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">2.5mm</text>
|
||||
<line x1="250.0" y1="320.0" x2="334.0" y2="320.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="292.0" y="316.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||
<line x1="250.0" y1="320.0" x2="250.0" y2="390.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="250.0" y="351.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">2.5mm</text>
|
||||
<line x1="334.0" y1="320.0" x2="390.0" y2="320.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="362.0" y="316.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">2.0mm</text>
|
||||
<line x1="334.0" y1="320.0" x2="334.0" y2="390.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="334.0" y="351.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">2.5mm</text>
|
||||
<line x1="390.0" y1="320.0" x2="474.0" y2="320.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="432.0" y="316.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||
<line x1="390.0" y1="320.0" x2="390.0" y2="390.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="390.0" y="351.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">2.5mm</text>
|
||||
<line x1="474.0" y1="320.0" x2="474.0" y2="390.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="474.0" y="351.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">2.5mm</text>
|
||||
<line x1="82.0" y1="390.0" x2="166.0" y2="390.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="124.0" y="386.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||
<line x1="166.0" y1="390.0" x2="250.0" y2="390.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="208.0" y="386.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||
<line x1="250.0" y1="390.0" x2="334.0" y2="390.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="292.0" y="386.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||
<line x1="334.0" y1="390.0" x2="390.0" y2="390.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="362.0" y="386.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">2.0mm</text>
|
||||
<line x1="390.0" y1="390.0" x2="474.0" y2="390.0" stroke="#a78bfa" stroke-width="0.5" opacity="0.4"/>
|
||||
<text x="432.0" y="386.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||
<polyline points="82.0,48.4 82.0,50.2 82.0,50.2 82.0,82.0" fill="none" stroke="#f97316" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="82.0,82.0 82.0,50.2 82.0,50.2 82.0,48.4" fill="none" stroke="#f59e0b" stroke-width="1" opacity="0.6"/>
|
||||
<polyline points="82.0,82.0 222.0,82.0 222.0,236.0" fill="none" stroke="#10b981" stroke-width="0.5" opacity="0.3"/>
|
||||
<polyline points="82.0,82.0 82.0,144.0 68.0,144.0 68.0,236.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="68.0,236.0 68.0,144.0 82.0,144.0 82.0,82.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="68.0" y1="236.0" x2="68.0" y2="236.0" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="68.0" y1="236.0" x2="68.0" y2="236.0" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="82.0,82.0 82.0,54.4 278.0,54.4 278.0,56.8" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="278.0,56.8 278.0,64.4 82.0,64.4 82.0,82.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="278.0" y1="56.8" x2="278.0" y2="56.8" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="278.0" y1="56.8" x2="278.0" y2="56.8" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="166.0,48.4 166.0,50.2 166.0,50.2 166.0,82.0" fill="none" stroke="#f97316" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="166.0,82.0 166.0,50.2 166.0,50.2 166.0,48.4" fill="none" stroke="#f59e0b" stroke-width="1" opacity="0.6"/>
|
||||
<polyline points="166.0,82.0 222.0,82.0 222.0,236.0" fill="none" stroke="#10b981" stroke-width="0.5" opacity="0.3"/>
|
||||
<polyline points="166.0,82.0 166.0,54.4 278.0,54.4 278.0,56.8" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="278.0,56.8 278.0,54.4 166.0,54.4 166.0,82.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="278.0" y1="56.8" x2="278.0" y2="56.8" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="278.0" y1="56.8" x2="278.0" y2="56.8" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="390.0,82.0 390.0,54.4 278.0,54.4 278.0,56.8" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="278.0,56.8 278.0,54.4 390.0,54.4 390.0,82.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="278.0" y1="56.8" x2="278.0" y2="56.8" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="278.0" y1="56.8" x2="278.0" y2="56.8" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="474.0,82.0 474.0,144.0 488.0,144.0 488.0,236.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="488.0,236.0 488.0,144.0 474.0,144.0 474.0,82.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="488.0" y1="236.0" x2="488.0" y2="236.0" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="488.0" y1="236.0" x2="488.0" y2="236.0" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="474.0,82.0 474.0,54.4 278.0,54.4 278.0,56.8" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="278.0,56.8 278.0,64.4 474.0,64.4 474.0,82.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="278.0" y1="56.8" x2="278.0" y2="56.8" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="278.0" y1="56.8" x2="278.0" y2="56.8" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="82.0,152.0 82.0,179.0 68.0,179.0 68.0,236.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="68.0,236.0 68.0,179.0 82.0,179.0 82.0,152.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="68.0" y1="236.0" x2="68.0" y2="236.0" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="68.0" y1="236.0" x2="68.0" y2="236.0" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="390.0,48.4 390.0,85.2 390.0,85.2 390.0,152.0" fill="none" stroke="#f97316" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="390.0,152.0 390.0,85.2 390.0,85.2 390.0,48.4" fill="none" stroke="#f59e0b" stroke-width="1" opacity="0.6"/>
|
||||
<polyline points="390.0,152.0 222.0,152.0 222.0,236.0" fill="none" stroke="#10b981" stroke-width="0.5" opacity="0.3"/>
|
||||
<polyline points="474.0,48.4 474.0,85.2 474.0,85.2 474.0,152.0" fill="none" stroke="#f97316" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="474.0,152.0 474.0,85.2 474.0,85.2 474.0,48.4" fill="none" stroke="#f59e0b" stroke-width="1" opacity="0.6"/>
|
||||
<polyline points="474.0,152.0 222.0,152.0 222.0,236.0" fill="none" stroke="#10b981" stroke-width="0.5" opacity="0.3"/>
|
||||
<polyline points="474.0,152.0 474.0,179.0 488.0,179.0 488.0,236.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="488.0,236.0 488.0,179.0 474.0,179.0 474.0,152.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="488.0" y1="236.0" x2="488.0" y2="236.0" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="488.0" y1="236.0" x2="488.0" y2="236.0" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="446.0,194.0 446.0,179.0 82.0,179.0 82.0,194.0" fill="none" stroke="#f59e0b" stroke-width="1" opacity="0.6"/>
|
||||
<polyline points="82.0,194.0 82.0,179.0 446.0,179.0 446.0,194.0" fill="none" stroke="#f59e0b" stroke-width="1" opacity="0.6"/>
|
||||
<polyline points="110.0,194.0 82.0,194.0 82.0,278.0" fill="none" stroke="#a78bfa" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="82.0,423.6 82.0,356.8 82.0,356.8 82.0,320.0" fill="none" stroke="#f97316" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="82.0,320.0 82.0,356.8 82.0,356.8 82.0,423.6" fill="none" stroke="#f59e0b" stroke-width="1" opacity="0.6"/>
|
||||
<polyline points="82.0,320.0 222.0,320.0 222.0,236.0" fill="none" stroke="#10b981" stroke-width="0.5" opacity="0.3"/>
|
||||
<polyline points="82.0,320.0 82.0,263.0 68.0,263.0 68.0,236.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="68.0,236.0 68.0,263.0 82.0,263.0 82.0,320.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="68.0" y1="236.0" x2="68.0" y2="236.0" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="68.0" y1="236.0" x2="68.0" y2="236.0" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="166.0,423.6 166.0,356.8 166.0,356.8 166.0,320.0" fill="none" stroke="#f97316" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="166.0,320.0 166.0,356.8 166.0,356.8 166.0,423.6" fill="none" stroke="#f59e0b" stroke-width="1" opacity="0.6"/>
|
||||
<polyline points="166.0,320.0 222.0,320.0 222.0,236.0" fill="none" stroke="#10b981" stroke-width="0.5" opacity="0.3"/>
|
||||
<polyline points="474.0,320.0 474.0,263.0 488.0,263.0 488.0,236.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="488.0,236.0 488.0,263.0 474.0,263.0 474.0,320.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="488.0" y1="236.0" x2="488.0" y2="236.0" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="488.0" y1="236.0" x2="488.0" y2="236.0" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="82.0,390.0 82.0,298.0 68.0,298.0 68.0,236.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="68.0,236.0 68.0,298.0 82.0,298.0 82.0,390.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="68.0" y1="236.0" x2="68.0" y2="236.0" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="68.0" y1="236.0" x2="68.0" y2="236.0" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="82.0,390.0 82.0,387.6 278.0,387.6 278.0,415.2" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="278.0,415.2 278.0,397.6 82.0,397.6 82.0,390.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="278.0" y1="415.2" x2="278.0" y2="415.2" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="278.0" y1="415.2" x2="278.0" y2="415.2" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="166.0,390.0 166.0,387.6 278.0,387.6 278.0,415.2" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="278.0,415.2 278.0,387.6 166.0,387.6 166.0,390.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="278.0" y1="415.2" x2="278.0" y2="415.2" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="278.0" y1="415.2" x2="278.0" y2="415.2" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="390.0,423.6 390.0,391.8 390.0,391.8 390.0,390.0" fill="none" stroke="#f97316" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="390.0,390.0 390.0,391.8 390.0,391.8 390.0,423.6" fill="none" stroke="#f59e0b" stroke-width="1" opacity="0.6"/>
|
||||
<polyline points="390.0,390.0 222.0,390.0 222.0,236.0" fill="none" stroke="#10b981" stroke-width="0.5" opacity="0.3"/>
|
||||
<polyline points="390.0,390.0 390.0,387.6 278.0,387.6 278.0,415.2" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="278.0,415.2 278.0,387.6 390.0,387.6 390.0,390.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="278.0" y1="415.2" x2="278.0" y2="415.2" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="278.0" y1="415.2" x2="278.0" y2="415.2" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="474.0,423.6 474.0,391.8 474.0,391.8 474.0,390.0" fill="none" stroke="#f97316" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="474.0,390.0 474.0,391.8 474.0,391.8 474.0,423.6" fill="none" stroke="#f59e0b" stroke-width="1" opacity="0.6"/>
|
||||
<polyline points="474.0,390.0 222.0,390.0 222.0,236.0" fill="none" stroke="#10b981" stroke-width="0.5" opacity="0.3"/>
|
||||
<polyline points="474.0,390.0 474.0,298.0 488.0,298.0 488.0,236.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="488.0,236.0 488.0,298.0 474.0,298.0 474.0,390.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="488.0" y1="236.0" x2="488.0" y2="236.0" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="488.0" y1="236.0" x2="488.0" y2="236.0" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="474.0,390.0 474.0,387.6 278.0,387.6 278.0,415.2" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<polyline points="278.0,415.2 278.0,397.6 474.0,397.6 474.0,390.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="278.0" y1="415.2" x2="278.0" y2="415.2" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<line x1="278.0" y1="415.2" x2="278.0" y2="415.2" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
||||
<rect x="261.2" y="47.0" width="33.6" height="19.6" rx="4" fill="#3b82f6" stroke="#475569" stroke-width="1"/>
|
||||
<text x="278.0" y="60.8" text-anchor="middle" font-family="monospace" font-size="7" fill="#ffffff">UCIe-N</text>
|
||||
<rect x="266.8" y="49.8" width="22.4" height="14.0" rx="4" fill="#e2e8f0" stroke="#475569" stroke-width="1"/>
|
||||
<text x="278.0" y="60.8" text-anchor="middle" font-family="monospace" font-size="7" fill="#1e293b">UCIe-N C0</text>
|
||||
<rect x="266.8" y="49.8" width="22.4" height="14.0" rx="4" fill="#e2e8f0" stroke="#475569" stroke-width="1"/>
|
||||
<text x="278.0" y="60.8" text-anchor="middle" font-family="monospace" font-size="7" fill="#1e293b">UCIe-N C1</text>
|
||||
<rect x="266.8" y="49.8" width="22.4" height="14.0" rx="4" fill="#e2e8f0" stroke="#475569" stroke-width="1"/>
|
||||
<text x="278.0" y="60.8" text-anchor="middle" font-family="monospace" font-size="7" fill="#1e293b">UCIe-N C2</text>
|
||||
<rect x="266.8" y="49.8" width="22.4" height="14.0" rx="4" fill="#e2e8f0" stroke="#475569" stroke-width="1"/>
|
||||
<text x="278.0" y="60.8" text-anchor="middle" font-family="monospace" font-size="7" fill="#1e293b">UCIe-N C3</text>
|
||||
<rect x="261.2" y="405.4" width="33.6" height="19.6" rx="4" fill="#3b82f6" stroke="#475569" stroke-width="1"/>
|
||||
<text x="278.0" y="419.2" text-anchor="middle" font-family="monospace" font-size="7" fill="#ffffff">UCIe-S</text>
|
||||
<rect x="266.8" y="408.2" width="22.4" height="14.0" rx="4" fill="#e2e8f0" stroke="#475569" stroke-width="1"/>
|
||||
<text x="278.0" y="419.2" text-anchor="middle" font-family="monospace" font-size="7" fill="#1e293b">UCIe-S C0</text>
|
||||
<rect x="266.8" y="408.2" width="22.4" height="14.0" rx="4" fill="#e2e8f0" stroke="#475569" stroke-width="1"/>
|
||||
<text x="278.0" y="419.2" text-anchor="middle" font-family="monospace" font-size="7" fill="#1e293b">UCIe-S C1</text>
|
||||
<rect x="266.8" y="408.2" width="22.4" height="14.0" rx="4" fill="#e2e8f0" stroke="#475569" stroke-width="1"/>
|
||||
<text x="278.0" y="419.2" text-anchor="middle" font-family="monospace" font-size="7" fill="#1e293b">UCIe-S C2</text>
|
||||
<rect x="266.8" y="408.2" width="22.4" height="14.0" rx="4" fill="#e2e8f0" stroke="#475569" stroke-width="1"/>
|
||||
<text x="278.0" y="419.2" text-anchor="middle" font-family="monospace" font-size="7" fill="#1e293b">UCIe-S C3</text>
|
||||
<rect x="471.2" y="226.2" width="33.6" height="19.6" rx="4" fill="#3b82f6" stroke="#475569" stroke-width="1"/>
|
||||
<text x="488.0" y="240.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#ffffff">UCIe-E</text>
|
||||
<rect x="476.8" y="229.0" width="22.4" height="14.0" rx="4" fill="#e2e8f0" stroke="#475569" stroke-width="1"/>
|
||||
<text x="488.0" y="240.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#1e293b">UCIe-E C0</text>
|
||||
<rect x="476.8" y="229.0" width="22.4" height="14.0" rx="4" fill="#e2e8f0" stroke="#475569" stroke-width="1"/>
|
||||
<text x="488.0" y="240.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#1e293b">UCIe-E C1</text>
|
||||
<rect x="476.8" y="229.0" width="22.4" height="14.0" rx="4" fill="#e2e8f0" stroke="#475569" stroke-width="1"/>
|
||||
<text x="488.0" y="240.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#1e293b">UCIe-E C2</text>
|
||||
<rect x="476.8" y="229.0" width="22.4" height="14.0" rx="4" fill="#e2e8f0" stroke="#475569" stroke-width="1"/>
|
||||
<text x="488.0" y="240.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#1e293b">UCIe-E C3</text>
|
||||
<rect x="51.2" y="226.2" width="33.6" height="19.6" rx="4" fill="#3b82f6" stroke="#475569" stroke-width="1"/>
|
||||
<text x="68.0" y="240.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#ffffff">UCIe-W</text>
|
||||
<rect x="56.8" y="229.0" width="22.4" height="14.0" rx="4" fill="#e2e8f0" stroke="#475569" stroke-width="1"/>
|
||||
<text x="68.0" y="240.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#1e293b">UCIe-W C0</text>
|
||||
<rect x="56.8" y="229.0" width="22.4" height="14.0" rx="4" fill="#e2e8f0" stroke="#475569" stroke-width="1"/>
|
||||
<text x="68.0" y="240.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#1e293b">UCIe-W C1</text>
|
||||
<rect x="56.8" y="229.0" width="22.4" height="14.0" rx="4" fill="#e2e8f0" stroke="#475569" stroke-width="1"/>
|
||||
<text x="68.0" y="240.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#1e293b">UCIe-W C2</text>
|
||||
<rect x="56.8" y="229.0" width="22.4" height="14.0" rx="4" fill="#e2e8f0" stroke="#475569" stroke-width="1"/>
|
||||
<text x="68.0" y="240.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#1e293b">UCIe-W C3</text>
|
||||
<rect x="426.4" y="184.2" width="39.2" height="19.6" rx="4" fill="#f59e0b" stroke="#475569" stroke-width="1"/>
|
||||
<text x="446.0" y="198.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">M CPU</text>
|
||||
<rect x="196.8" y="224.8" width="50.4" height="22.4" rx="4" fill="#10b981" stroke="#475569" stroke-width="1"/>
|
||||
<text x="222.0" y="240.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#ffffff">HBM CTRL</text>
|
||||
<rect x="90.4" y="184.2" width="39.2" height="19.6" rx="4" fill="#f59e0b" stroke="#475569" stroke-width="1"/>
|
||||
<text x="110.0" y="198.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">SRAM</text>
|
||||
<rect x="68.0" y="72.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="82.0" y="86.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R0C0</text>
|
||||
<rect x="152.0" y="72.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="166.0" y="86.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R0C1</text>
|
||||
<rect x="236.0" y="72.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="250.0" y="86.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R0C2</text>
|
||||
<rect x="320.0" y="72.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="334.0" y="86.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R0C3</text>
|
||||
<rect x="376.0" y="72.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="390.0" y="86.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R0C4</text>
|
||||
<rect x="460.0" y="72.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="474.0" y="86.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R0C5</text>
|
||||
<rect x="68.0" y="142.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="82.0" y="156.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R1C0</text>
|
||||
<rect x="152.0" y="142.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="166.0" y="156.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R1C1</text>
|
||||
<rect x="236.0" y="142.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="250.0" y="156.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R1C2</text>
|
||||
<rect x="320.0" y="142.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="334.0" y="156.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R1C3</text>
|
||||
<rect x="376.0" y="142.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="390.0" y="156.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R1C4</text>
|
||||
<rect x="460.0" y="142.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="474.0" y="156.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R1C5</text>
|
||||
<rect x="68.0" y="184.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="82.0" y="198.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R2C0</text>
|
||||
<rect x="152.0" y="184.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="166.0" y="198.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R2C1</text>
|
||||
<rect x="376.0" y="184.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="390.0" y="198.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R2C4</text>
|
||||
<rect x="460.0" y="184.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="474.0" y="198.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R2C5</text>
|
||||
<rect x="68.0" y="268.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="82.0" y="282.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R3C0</text>
|
||||
<rect x="152.0" y="268.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="166.0" y="282.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R3C1</text>
|
||||
<rect x="376.0" y="268.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="390.0" y="282.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R3C4</text>
|
||||
<rect x="460.0" y="268.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="474.0" y="282.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R3C5</text>
|
||||
<rect x="68.0" y="310.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="82.0" y="324.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R4C0</text>
|
||||
<rect x="152.0" y="310.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="166.0" y="324.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R4C1</text>
|
||||
<rect x="236.0" y="310.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="250.0" y="324.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R4C2</text>
|
||||
<rect x="320.0" y="310.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="334.0" y="324.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R4C3</text>
|
||||
<rect x="376.0" y="310.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="390.0" y="324.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R4C4</text>
|
||||
<rect x="460.0" y="310.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="474.0" y="324.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R4C5</text>
|
||||
<rect x="68.0" y="380.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="82.0" y="394.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R5C0</text>
|
||||
<rect x="152.0" y="380.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="166.0" y="394.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R5C1</text>
|
||||
<rect x="236.0" y="380.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="250.0" y="394.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R5C2</text>
|
||||
<rect x="320.0" y="380.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="334.0" y="394.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R5C3</text>
|
||||
<rect x="376.0" y="380.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="390.0" y="394.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R5C4</text>
|
||||
<rect x="460.0" y="380.2" width="28.0" height="19.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||
<text x="474.0" y="394.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#1e293b">R5C5</text>
|
||||
<rect x="62.4" y="38.6" width="39.2" height="19.6" rx="4" fill="#94a3b8" stroke="#475569" stroke-width="1"/>
|
||||
<text x="82.0" y="52.4" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">PE0</text>
|
||||
<rect x="146.4" y="38.6" width="39.2" height="19.6" rx="4" fill="#94a3b8" stroke="#475569" stroke-width="1"/>
|
||||
<text x="166.0" y="52.4" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">PE1</text>
|
||||
<rect x="370.4" y="38.6" width="39.2" height="19.6" rx="4" fill="#94a3b8" stroke="#475569" stroke-width="1"/>
|
||||
<text x="390.0" y="52.4" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">PE2</text>
|
||||
<rect x="454.4" y="38.6" width="39.2" height="19.6" rx="4" fill="#94a3b8" stroke="#475569" stroke-width="1"/>
|
||||
<text x="474.0" y="52.4" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">PE3</text>
|
||||
<rect x="62.4" y="413.8" width="39.2" height="19.6" rx="4" fill="#94a3b8" stroke="#475569" stroke-width="1"/>
|
||||
<text x="82.0" y="427.6" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">PE4</text>
|
||||
<rect x="146.4" y="413.8" width="39.2" height="19.6" rx="4" fill="#94a3b8" stroke="#475569" stroke-width="1"/>
|
||||
<text x="166.0" y="427.6" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">PE5</text>
|
||||
<rect x="370.4" y="413.8" width="39.2" height="19.6" rx="4" fill="#94a3b8" stroke="#475569" stroke-width="1"/>
|
||||
<text x="390.0" y="427.6" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">PE6</text>
|
||||
<rect x="454.4" y="413.8" width="39.2" height="19.6" rx="4" fill="#94a3b8" stroke="#475569" stroke-width="1"/>
|
||||
<text x="474.0" y="427.6" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">PE7</text>
|
||||
<rect width="970" height="900" fill="#0f172a"/>
|
||||
<text x="485" y="22" text-anchor="middle" font-family="monospace" font-size="14" font-weight="bold" fill="#94a3b8">CUBE TOPOLOGY — 17.0×14.0mm | 6×6 Router Mesh | n_to_one mode | 64 pseudo-ch</text>
|
||||
<text x="485" y="40" text-anchor="middle" font-family="monospace" font-size="10" fill="#64748b">Per-PE: 8 ch × 32.0 GB/s = 256.0 GB/s | Cube total: 64 × 32.0 = 2048.0 GB/s</text>
|
||||
<rect x="60" y="60" width="850.0" height="700.0" rx="6" fill="none" stroke="#475569" stroke-width="2" stroke-dasharray="8,4"/>
|
||||
<rect x="260" y="285" width="450" height="250" rx="6" fill="#052e16" stroke="#047857" stroke-width="2" opacity="0.6"/>
|
||||
<text x="485" y="395" text-anchor="middle" font-family="monospace" font-size="11" font-weight="bold" fill="#047857">HBM_CTRL | 64 pseudo channels</text>
|
||||
<text x="485" y="412" text-anchor="middle" font-family="monospace" font-size="9" fill="#05966988">Total BW: 2048 GB/s</text>
|
||||
<rect x="285.0" y="425" width="5.8" height="8" fill="#3b82f6" opacity="0.7"/>
|
||||
<rect x="291.2" y="425" width="5.8" height="8" fill="#3b82f6" opacity="0.7"/>
|
||||
<rect x="297.5" y="425" width="5.8" height="8" fill="#3b82f6" opacity="0.7"/>
|
||||
<rect x="303.8" y="425" width="5.8" height="8" fill="#3b82f6" opacity="0.7"/>
|
||||
<rect x="310.0" y="425" width="5.8" height="8" fill="#3b82f6" opacity="0.7"/>
|
||||
<rect x="316.2" y="425" width="5.8" height="8" fill="#3b82f6" opacity="0.7"/>
|
||||
<rect x="322.5" y="425" width="5.8" height="8" fill="#3b82f6" opacity="0.7"/>
|
||||
<rect x="328.8" y="425" width="5.8" height="8" fill="#3b82f6" opacity="0.7"/>
|
||||
<rect x="335.0" y="425" width="5.8" height="8" fill="#60a5fa" opacity="0.7"/>
|
||||
<rect x="341.2" y="425" width="5.8" height="8" fill="#60a5fa" opacity="0.7"/>
|
||||
<rect x="347.5" y="425" width="5.8" height="8" fill="#60a5fa" opacity="0.7"/>
|
||||
<rect x="353.8" y="425" width="5.8" height="8" fill="#60a5fa" opacity="0.7"/>
|
||||
<rect x="360.0" y="425" width="5.8" height="8" fill="#60a5fa" opacity="0.7"/>
|
||||
<rect x="366.2" y="425" width="5.8" height="8" fill="#60a5fa" opacity="0.7"/>
|
||||
<rect x="372.5" y="425" width="5.8" height="8" fill="#60a5fa" opacity="0.7"/>
|
||||
<rect x="378.8" y="425" width="5.8" height="8" fill="#60a5fa" opacity="0.7"/>
|
||||
<rect x="385.0" y="425" width="5.8" height="8" fill="#8b5cf6" opacity="0.7"/>
|
||||
<rect x="391.2" y="425" width="5.8" height="8" fill="#8b5cf6" opacity="0.7"/>
|
||||
<rect x="397.5" y="425" width="5.8" height="8" fill="#8b5cf6" opacity="0.7"/>
|
||||
<rect x="403.8" y="425" width="5.8" height="8" fill="#8b5cf6" opacity="0.7"/>
|
||||
<rect x="410.0" y="425" width="5.8" height="8" fill="#8b5cf6" opacity="0.7"/>
|
||||
<rect x="416.2" y="425" width="5.8" height="8" fill="#8b5cf6" opacity="0.7"/>
|
||||
<rect x="422.5" y="425" width="5.8" height="8" fill="#8b5cf6" opacity="0.7"/>
|
||||
<rect x="428.8" y="425" width="5.8" height="8" fill="#8b5cf6" opacity="0.7"/>
|
||||
<rect x="435.0" y="425" width="5.8" height="8" fill="#a78bfa" opacity="0.7"/>
|
||||
<rect x="441.2" y="425" width="5.8" height="8" fill="#a78bfa" opacity="0.7"/>
|
||||
<rect x="447.5" y="425" width="5.8" height="8" fill="#a78bfa" opacity="0.7"/>
|
||||
<rect x="453.8" y="425" width="5.8" height="8" fill="#a78bfa" opacity="0.7"/>
|
||||
<rect x="460.0" y="425" width="5.8" height="8" fill="#a78bfa" opacity="0.7"/>
|
||||
<rect x="466.2" y="425" width="5.8" height="8" fill="#a78bfa" opacity="0.7"/>
|
||||
<rect x="472.5" y="425" width="5.8" height="8" fill="#a78bfa" opacity="0.7"/>
|
||||
<rect x="478.8" y="425" width="5.8" height="8" fill="#a78bfa" opacity="0.7"/>
|
||||
<rect x="485.0" y="425" width="5.8" height="8" fill="#f59e0b" opacity="0.7"/>
|
||||
<rect x="491.2" y="425" width="5.8" height="8" fill="#f59e0b" opacity="0.7"/>
|
||||
<rect x="497.5" y="425" width="5.8" height="8" fill="#f59e0b" opacity="0.7"/>
|
||||
<rect x="503.8" y="425" width="5.8" height="8" fill="#f59e0b" opacity="0.7"/>
|
||||
<rect x="510.0" y="425" width="5.8" height="8" fill="#f59e0b" opacity="0.7"/>
|
||||
<rect x="516.2" y="425" width="5.8" height="8" fill="#f59e0b" opacity="0.7"/>
|
||||
<rect x="522.5" y="425" width="5.8" height="8" fill="#f59e0b" opacity="0.7"/>
|
||||
<rect x="528.8" y="425" width="5.8" height="8" fill="#f59e0b" opacity="0.7"/>
|
||||
<rect x="535.0" y="425" width="5.8" height="8" fill="#fbbf24" opacity="0.7"/>
|
||||
<rect x="541.2" y="425" width="5.8" height="8" fill="#fbbf24" opacity="0.7"/>
|
||||
<rect x="547.5" y="425" width="5.8" height="8" fill="#fbbf24" opacity="0.7"/>
|
||||
<rect x="553.8" y="425" width="5.8" height="8" fill="#fbbf24" opacity="0.7"/>
|
||||
<rect x="560.0" y="425" width="5.8" height="8" fill="#fbbf24" opacity="0.7"/>
|
||||
<rect x="566.2" y="425" width="5.8" height="8" fill="#fbbf24" opacity="0.7"/>
|
||||
<rect x="572.5" y="425" width="5.8" height="8" fill="#fbbf24" opacity="0.7"/>
|
||||
<rect x="578.8" y="425" width="5.8" height="8" fill="#fbbf24" opacity="0.7"/>
|
||||
<rect x="585.0" y="425" width="5.8" height="8" fill="#ef4444" opacity="0.7"/>
|
||||
<rect x="591.2" y="425" width="5.8" height="8" fill="#ef4444" opacity="0.7"/>
|
||||
<rect x="597.5" y="425" width="5.8" height="8" fill="#ef4444" opacity="0.7"/>
|
||||
<rect x="603.8" y="425" width="5.8" height="8" fill="#ef4444" opacity="0.7"/>
|
||||
<rect x="610.0" y="425" width="5.8" height="8" fill="#ef4444" opacity="0.7"/>
|
||||
<rect x="616.2" y="425" width="5.8" height="8" fill="#ef4444" opacity="0.7"/>
|
||||
<rect x="622.5" y="425" width="5.8" height="8" fill="#ef4444" opacity="0.7"/>
|
||||
<rect x="628.8" y="425" width="5.8" height="8" fill="#ef4444" opacity="0.7"/>
|
||||
<rect x="635.0" y="425" width="5.8" height="8" fill="#f87171" opacity="0.7"/>
|
||||
<rect x="641.2" y="425" width="5.8" height="8" fill="#f87171" opacity="0.7"/>
|
||||
<rect x="647.5" y="425" width="5.8" height="8" fill="#f87171" opacity="0.7"/>
|
||||
<rect x="653.8" y="425" width="5.8" height="8" fill="#f87171" opacity="0.7"/>
|
||||
<rect x="660.0" y="425" width="5.8" height="8" fill="#f87171" opacity="0.7"/>
|
||||
<rect x="666.2" y="425" width="5.8" height="8" fill="#f87171" opacity="0.7"/>
|
||||
<rect x="672.5" y="425" width="5.8" height="8" fill="#f87171" opacity="0.7"/>
|
||||
<rect x="678.8" y="425" width="5.8" height="8" fill="#f87171" opacity="0.7"/>
|
||||
<text x="485" y="445" text-anchor="middle" font-family="monospace" font-size="7" fill="#05966988">64 ports | 8 per PE (color-coded)</text>
|
||||
<line x1="135" y1="135" x2="285" y2="135" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="135" y1="135" x2="135" y2="260" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="285" y1="135" x2="435" y2="135" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="285" y1="135" x2="285" y2="260" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="435" y1="135" x2="585" y2="135" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="435" y1="135" x2="435" y2="260" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="585" y1="135" x2="685" y2="135" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="585" y1="135" x2="585" y2="260" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="685" y1="135" x2="835" y2="135" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="685" y1="135" x2="685" y2="260" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="835" y1="135" x2="835" y2="260" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="135" y1="260" x2="285" y2="260" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="135" y1="260" x2="135" y2="335" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="285" y1="260" x2="435" y2="260" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="285" y1="260" x2="285" y2="335" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="435" y1="260" x2="585" y2="260" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="435" y1="260" x2="435" y2="560" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="585" y1="260" x2="685" y2="260" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="585" y1="260" x2="585" y2="560" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="685" y1="260" x2="835" y2="260" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="685" y1="260" x2="685" y2="335" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="835" y1="260" x2="835" y2="335" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="135" y1="335" x2="285" y2="335" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="135" y1="335" x2="135" y2="485" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="285" y1="335" x2="685" y2="335" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="285" y1="335" x2="285" y2="485" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="685" y1="335" x2="835" y2="335" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="685" y1="335" x2="685" y2="485" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="835" y1="335" x2="835" y2="485" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="135" y1="485" x2="285" y2="485" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="135" y1="485" x2="135" y2="560" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="285" y1="485" x2="685" y2="485" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="285" y1="485" x2="285" y2="560" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="685" y1="485" x2="835" y2="485" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="685" y1="485" x2="685" y2="560" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="835" y1="485" x2="835" y2="560" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="135" y1="560" x2="285" y2="560" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="135" y1="560" x2="135" y2="685" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="285" y1="560" x2="435" y2="560" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="285" y1="560" x2="285" y2="685" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="435" y1="560" x2="585" y2="560" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="435" y1="560" x2="435" y2="685" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="585" y1="560" x2="685" y2="560" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="585" y1="560" x2="585" y2="685" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="685" y1="560" x2="835" y2="560" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="685" y1="560" x2="685" y2="685" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="835" y1="560" x2="835" y2="685" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="135" y1="685" x2="285" y2="685" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="285" y1="685" x2="435" y2="685" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="435" y1="685" x2="585" y2="685" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="585" y1="685" x2="685" y2="685" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<line x1="685" y1="685" x2="835" y2="685" stroke="#475569" stroke-width="1" opacity="0.4"/>
|
||||
<circle cx="135" cy="135" r="10" fill="#3b82f6" stroke="#1d4ed8" stroke-width="1.5"/>
|
||||
<text x="135" y="138" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r0c0</text>
|
||||
<text x="135" y="155" text-anchor="middle" font-family="monospace" font-size="6" fill="#94a3b8">PE0, UCIe×2</text>
|
||||
<line x1="135" y1="145" x2="135" y2="285" stroke="#10b981" stroke-width="1.5" opacity="0.5" stroke-dasharray="4,3"/>
|
||||
<text x="147" y="215" font-family="monospace" font-size="6" fill="#10b98188">256GB/s</text>
|
||||
<circle cx="285" cy="135" r="10" fill="#3b82f6" stroke="#1d4ed8" stroke-width="1.5"/>
|
||||
<text x="285" y="138" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r0c1</text>
|
||||
<text x="285" y="155" text-anchor="middle" font-family="monospace" font-size="6" fill="#94a3b8">PE1, UCIe×1</text>
|
||||
<line x1="285" y1="145" x2="285" y2="285" stroke="#10b981" stroke-width="1.5" opacity="0.5" stroke-dasharray="4,3"/>
|
||||
<text x="297" y="215" font-family="monospace" font-size="6" fill="#10b98188">256GB/s</text>
|
||||
<circle cx="435" cy="135" r="10" fill="#334155" stroke="#475569" stroke-width="1.5"/>
|
||||
<text x="435" y="138" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r0c2</text>
|
||||
<circle cx="585" cy="135" r="10" fill="#334155" stroke="#475569" stroke-width="1.5"/>
|
||||
<text x="585" y="138" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r0c3</text>
|
||||
<circle cx="685" cy="135" r="10" fill="#8b5cf6" stroke="#6d28d9" stroke-width="1.5"/>
|
||||
<text x="685" y="138" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r0c4</text>
|
||||
<text x="685" y="155" text-anchor="middle" font-family="monospace" font-size="6" fill="#94a3b8">UCIe×1</text>
|
||||
<circle cx="835" cy="135" r="10" fill="#8b5cf6" stroke="#6d28d9" stroke-width="1.5"/>
|
||||
<text x="835" y="138" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r0c5</text>
|
||||
<text x="835" y="155" text-anchor="middle" font-family="monospace" font-size="6" fill="#94a3b8">UCIe×2</text>
|
||||
<circle cx="135" cy="260" r="10" fill="#8b5cf6" stroke="#6d28d9" stroke-width="1.5"/>
|
||||
<text x="135" y="263" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r1c0</text>
|
||||
<text x="135" y="280" text-anchor="middle" font-family="monospace" font-size="6" fill="#94a3b8">UCIe×1</text>
|
||||
<circle cx="285" cy="260" r="10" fill="#334155" stroke="#475569" stroke-width="1.5"/>
|
||||
<text x="285" y="263" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r1c1</text>
|
||||
<circle cx="435" cy="260" r="10" fill="#334155" stroke="#475569" stroke-width="1.5"/>
|
||||
<text x="435" y="263" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r1c2</text>
|
||||
<circle cx="585" cy="260" r="10" fill="#334155" stroke="#475569" stroke-width="1.5"/>
|
||||
<text x="585" y="263" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r1c3</text>
|
||||
<circle cx="685" cy="260" r="10" fill="#3b82f6" stroke="#1d4ed8" stroke-width="1.5"/>
|
||||
<text x="685" y="263" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r1c4</text>
|
||||
<text x="685" y="280" text-anchor="middle" font-family="monospace" font-size="6" fill="#94a3b8">PE2</text>
|
||||
<line x1="685" y1="270" x2="685" y2="285" stroke="#10b981" stroke-width="1.5" opacity="0.5" stroke-dasharray="4,3"/>
|
||||
<text x="697" y="278" font-family="monospace" font-size="6" fill="#10b98188">256GB/s</text>
|
||||
<circle cx="835" cy="260" r="10" fill="#3b82f6" stroke="#1d4ed8" stroke-width="1.5"/>
|
||||
<text x="835" y="263" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r1c5</text>
|
||||
<text x="835" y="280" text-anchor="middle" font-family="monospace" font-size="6" fill="#94a3b8">PE3, UCIe×1</text>
|
||||
<line x1="835" y1="270" x2="835" y2="285" stroke="#10b981" stroke-width="1.5" opacity="0.5" stroke-dasharray="4,3"/>
|
||||
<text x="847" y="278" font-family="monospace" font-size="6" fill="#10b98188">256GB/s</text>
|
||||
<circle cx="135" cy="335" r="10" fill="#f59e0b" stroke="#d97706" stroke-width="1.5"/>
|
||||
<text x="135" y="338" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r2c0</text>
|
||||
<text x="135" y="355" text-anchor="middle" font-family="monospace" font-size="6" fill="#94a3b8">M_CPU</text>
|
||||
<circle cx="285" cy="335" r="10" fill="#334155" stroke="#475569" stroke-width="1.5"/>
|
||||
<text x="285" y="338" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r2c1</text>
|
||||
<circle cx="685" cy="335" r="10" fill="#334155" stroke="#475569" stroke-width="1.5"/>
|
||||
<text x="685" y="338" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r2c4</text>
|
||||
<circle cx="835" cy="335" r="10" fill="#334155" stroke="#475569" stroke-width="1.5"/>
|
||||
<text x="835" y="338" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r2c5</text>
|
||||
<circle cx="135" cy="485" r="10" fill="#f59e0b" stroke="#d97706" stroke-width="1.5"/>
|
||||
<text x="135" y="488" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r3c0</text>
|
||||
<text x="135" y="505" text-anchor="middle" font-family="monospace" font-size="6" fill="#94a3b8">SRAM</text>
|
||||
<circle cx="285" cy="485" r="10" fill="#334155" stroke="#475569" stroke-width="1.5"/>
|
||||
<text x="285" y="488" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r3c1</text>
|
||||
<circle cx="685" cy="485" r="10" fill="#334155" stroke="#475569" stroke-width="1.5"/>
|
||||
<text x="685" y="488" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r3c4</text>
|
||||
<circle cx="835" cy="485" r="10" fill="#334155" stroke="#475569" stroke-width="1.5"/>
|
||||
<text x="835" y="488" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r3c5</text>
|
||||
<circle cx="135" cy="560" r="10" fill="#3b82f6" stroke="#1d4ed8" stroke-width="1.5"/>
|
||||
<text x="135" y="563" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r4c0</text>
|
||||
<text x="135" y="580" text-anchor="middle" font-family="monospace" font-size="6" fill="#94a3b8">PE4, UCIe×1</text>
|
||||
<line x1="135" y1="570" x2="135" y2="535" stroke="#10b981" stroke-width="1.5" opacity="0.5" stroke-dasharray="4,3"/>
|
||||
<text x="147" y="552" font-family="monospace" font-size="6" fill="#10b98188">256GB/s</text>
|
||||
<circle cx="285" cy="560" r="10" fill="#3b82f6" stroke="#1d4ed8" stroke-width="1.5"/>
|
||||
<text x="285" y="563" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r4c1</text>
|
||||
<text x="285" y="580" text-anchor="middle" font-family="monospace" font-size="6" fill="#94a3b8">PE5</text>
|
||||
<line x1="285" y1="570" x2="285" y2="535" stroke="#10b981" stroke-width="1.5" opacity="0.5" stroke-dasharray="4,3"/>
|
||||
<text x="297" y="552" font-family="monospace" font-size="6" fill="#10b98188">256GB/s</text>
|
||||
<circle cx="435" cy="560" r="10" fill="#334155" stroke="#475569" stroke-width="1.5"/>
|
||||
<text x="435" y="563" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r4c2</text>
|
||||
<circle cx="585" cy="560" r="10" fill="#334155" stroke="#475569" stroke-width="1.5"/>
|
||||
<text x="585" y="563" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r4c3</text>
|
||||
<circle cx="685" cy="560" r="10" fill="#334155" stroke="#475569" stroke-width="1.5"/>
|
||||
<text x="685" y="563" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r4c4</text>
|
||||
<circle cx="835" cy="560" r="10" fill="#8b5cf6" stroke="#6d28d9" stroke-width="1.5"/>
|
||||
<text x="835" y="563" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r4c5</text>
|
||||
<text x="835" y="580" text-anchor="middle" font-family="monospace" font-size="6" fill="#94a3b8">UCIe×1</text>
|
||||
<circle cx="135" cy="685" r="10" fill="#8b5cf6" stroke="#6d28d9" stroke-width="1.5"/>
|
||||
<text x="135" y="688" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r5c0</text>
|
||||
<text x="135" y="705" text-anchor="middle" font-family="monospace" font-size="6" fill="#94a3b8">UCIe×2</text>
|
||||
<circle cx="285" cy="685" r="10" fill="#8b5cf6" stroke="#6d28d9" stroke-width="1.5"/>
|
||||
<text x="285" y="688" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r5c1</text>
|
||||
<text x="285" y="705" text-anchor="middle" font-family="monospace" font-size="6" fill="#94a3b8">UCIe×1</text>
|
||||
<circle cx="435" cy="685" r="10" fill="#334155" stroke="#475569" stroke-width="1.5"/>
|
||||
<text x="435" y="688" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r5c2</text>
|
||||
<circle cx="585" cy="685" r="10" fill="#334155" stroke="#475569" stroke-width="1.5"/>
|
||||
<text x="585" y="688" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r5c3</text>
|
||||
<circle cx="685" cy="685" r="10" fill="#3b82f6" stroke="#1d4ed8" stroke-width="1.5"/>
|
||||
<text x="685" y="688" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r5c4</text>
|
||||
<text x="685" y="705" text-anchor="middle" font-family="monospace" font-size="6" fill="#94a3b8">PE6, UCIe×1</text>
|
||||
<line x1="685" y1="695" x2="685" y2="535" stroke="#10b981" stroke-width="1.5" opacity="0.5" stroke-dasharray="4,3"/>
|
||||
<text x="697" y="615" font-family="monospace" font-size="6" fill="#10b98188">256GB/s</text>
|
||||
<circle cx="835" cy="685" r="10" fill="#3b82f6" stroke="#1d4ed8" stroke-width="1.5"/>
|
||||
<text x="835" y="688" text-anchor="middle" font-family="monospace" font-size="7" font-weight="bold" fill="white">r5c5</text>
|
||||
<text x="835" y="705" text-anchor="middle" font-family="monospace" font-size="6" fill="#94a3b8">PE7, UCIe×2</text>
|
||||
<line x1="835" y1="695" x2="835" y2="535" stroke="#10b981" stroke-width="1.5" opacity="0.5" stroke-dasharray="4,3"/>
|
||||
<text x="847" y="615" font-family="monospace" font-size="6" fill="#10b98188">256GB/s</text>
|
||||
<rect x="120" y="103" width="30" height="18" rx="3" fill="#2d1f3d" stroke="#a855f7" stroke-width="1"/>
|
||||
<text x="135" y="116" text-anchor="middle" font-family="monospace" font-size="8" font-weight="bold" fill="#a855f7">PE0</text>
|
||||
<line x1="135" y1="121" x2="135" y2="125" stroke="#a855f7" stroke-width="1.5" opacity="0.7"/>
|
||||
<rect x="270" y="103" width="30" height="18" rx="3" fill="#2d1f3d" stroke="#a855f7" stroke-width="1"/>
|
||||
<text x="285" y="116" text-anchor="middle" font-family="monospace" font-size="8" font-weight="bold" fill="#a855f7">PE1</text>
|
||||
<line x1="285" y1="121" x2="285" y2="125" stroke="#a855f7" stroke-width="1.5" opacity="0.7"/>
|
||||
<rect x="670" y="228" width="30" height="18" rx="3" fill="#2d1f3d" stroke="#a855f7" stroke-width="1"/>
|
||||
<text x="685" y="241" text-anchor="middle" font-family="monospace" font-size="8" font-weight="bold" fill="#a855f7">PE2</text>
|
||||
<line x1="685" y1="246" x2="685" y2="250" stroke="#a855f7" stroke-width="1.5" opacity="0.7"/>
|
||||
<rect x="820" y="228" width="30" height="18" rx="3" fill="#2d1f3d" stroke="#a855f7" stroke-width="1"/>
|
||||
<text x="835" y="241" text-anchor="middle" font-family="monospace" font-size="8" font-weight="bold" fill="#a855f7">PE3</text>
|
||||
<line x1="835" y1="246" x2="835" y2="250" stroke="#a855f7" stroke-width="1.5" opacity="0.7"/>
|
||||
<rect x="120" y="574" width="30" height="18" rx="3" fill="#2d1f3d" stroke="#a855f7" stroke-width="1"/>
|
||||
<text x="135" y="587" text-anchor="middle" font-family="monospace" font-size="8" font-weight="bold" fill="#a855f7">PE4</text>
|
||||
<line x1="135" y1="574" x2="135" y2="570" stroke="#a855f7" stroke-width="1.5" opacity="0.7"/>
|
||||
<rect x="270" y="574" width="30" height="18" rx="3" fill="#2d1f3d" stroke="#a855f7" stroke-width="1"/>
|
||||
<text x="285" y="587" text-anchor="middle" font-family="monospace" font-size="8" font-weight="bold" fill="#a855f7">PE5</text>
|
||||
<line x1="285" y1="574" x2="285" y2="570" stroke="#a855f7" stroke-width="1.5" opacity="0.7"/>
|
||||
<rect x="670" y="699" width="30" height="18" rx="3" fill="#2d1f3d" stroke="#a855f7" stroke-width="1"/>
|
||||
<text x="685" y="712" text-anchor="middle" font-family="monospace" font-size="8" font-weight="bold" fill="#a855f7">PE6</text>
|
||||
<line x1="685" y1="699" x2="685" y2="695" stroke="#a855f7" stroke-width="1.5" opacity="0.7"/>
|
||||
<rect x="820" y="699" width="30" height="18" rx="3" fill="#2d1f3d" stroke="#a855f7" stroke-width="1"/>
|
||||
<text x="835" y="712" text-anchor="middle" font-family="monospace" font-size="8" font-weight="bold" fill="#a855f7">PE7</text>
|
||||
<line x1="835" y1="699" x2="835" y2="695" stroke="#a855f7" stroke-width="1.5" opacity="0.7"/>
|
||||
<rect x="60" y="865" width="10" height="10" rx="2" fill="#3b82f6" stroke="#475569" stroke-width="0.5"/>
|
||||
<text x="74" y="874" font-family="monospace" font-size="8" fill="#94a3b8">PE Router</text>
|
||||
<rect x="147" y="865" width="10" height="10" rx="2" fill="#f59e0b" stroke="#475569" stroke-width="0.5"/>
|
||||
<text x="161" y="874" font-family="monospace" font-size="8" fill="#94a3b8">M_CPU / SRAM</text>
|
||||
<rect x="255" y="865" width="10" height="10" rx="2" fill="#8b5cf6" stroke="#475569" stroke-width="0.5"/>
|
||||
<text x="269" y="874" font-family="monospace" font-size="8" fill="#94a3b8">UCIe</text>
|
||||
<rect x="307" y="865" width="10" height="10" rx="2" fill="#334155" stroke="#475569" stroke-width="0.5"/>
|
||||
<text x="321" y="874" font-family="monospace" font-size="8" fill="#94a3b8">Relay</text>
|
||||
<rect x="366" y="865" width="10" height="10" rx="2" fill="#10b981" stroke="#475569" stroke-width="0.5"/>
|
||||
<text x="380" y="874" font-family="monospace" font-size="8" fill="#94a3b8">HBM Link</text>
|
||||
<rect x="446" y="865" width="10" height="10" rx="2" fill="#475569" stroke="#475569" stroke-width="0.5"/>
|
||||
<text x="460" y="874" font-family="monospace" font-size="8" fill="#94a3b8">Mesh Link</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 25 KiB |
@@ -89,7 +89,10 @@ def emit_diagrams(graph: TopologyGraph, out_dir: Path) -> list[Path]:
|
||||
for name, view in views:
|
||||
if view is None:
|
||||
continue
|
||||
svg = _render_view_svg(view)
|
||||
if name == "cube_view":
|
||||
svg = _render_cube_view_svg(view, graph.spec)
|
||||
else:
|
||||
svg = _render_view_svg(view)
|
||||
path = out_dir / f"{name}.svg"
|
||||
path.write_text(svg, encoding="utf-8")
|
||||
created.append(path)
|
||||
@@ -380,3 +383,288 @@ def _label_font_size(box_width: float, label: str) -> int:
|
||||
def _escape(text: str) -> str:
|
||||
"""Escape XML special characters."""
|
||||
return text.replace("&", "&").replace("<", "<").replace(">", ">")
|
||||
|
||||
|
||||
# ── Cube-specific renderer ──────────────────────────────────────────
|
||||
|
||||
|
||||
def _render_cube_view_svg(view: ViewGraph, spec: dict) -> str:
|
||||
"""Render cube view with topology validation detail.
|
||||
|
||||
Shows: 6×6 router grid, PE attachments, HBM pseudo channel ports,
|
||||
M_CPU/SRAM positions, UCIe connections, BW annotations.
|
||||
"""
|
||||
mesh_data = spec.get("_mesh", {})
|
||||
routers = mesh_data.get("routers", {})
|
||||
n_rows = mesh_data.get("mesh", {}).get("rows", 6)
|
||||
n_cols = mesh_data.get("mesh", {}).get("cols", 6)
|
||||
cube = spec.get("cube", {})
|
||||
mm = cube.get("memory_map", {})
|
||||
clinks = cube.get("links", {})
|
||||
cube_w = cube.get("geometry", {}).get("cube_mm", {}).get("w", 17.0)
|
||||
cube_h = cube.get("geometry", {}).get("cube_mm", {}).get("h", 14.0)
|
||||
|
||||
channels_per_pe = mm.get("hbm_channels_per_pe", 8)
|
||||
channel_bw = mm.get("hbm_channel_bw_gbs", 32.0)
|
||||
total_ch = mm.get("hbm_pseudo_channels", 64)
|
||||
mode = mm.get("hbm_mapping_mode", "n_to_one")
|
||||
agg_bw = channels_per_pe * channel_bw
|
||||
|
||||
scale = 50 # px per mm
|
||||
pad = 60
|
||||
w_px = int(cube_w * scale + 2 * pad)
|
||||
h_px = int(cube_h * scale + 2 * pad + 80) # extra for legend
|
||||
|
||||
parts: list[str] = []
|
||||
parts.append(_svg_header(w_px, h_px, "cube"))
|
||||
|
||||
# Background
|
||||
parts.append(f' <rect width="{w_px}" height="{h_px}" fill="#0f172a"/>')
|
||||
|
||||
# Title
|
||||
parts.append(
|
||||
f' <text x="{w_px // 2}" y="22" text-anchor="middle" '
|
||||
f'font-family="monospace" font-size="14" font-weight="bold" fill="#94a3b8">'
|
||||
f'CUBE TOPOLOGY — {cube_w}×{cube_h}mm | {n_rows}×{n_cols} Router Mesh | '
|
||||
f'{mode} mode | {total_ch} pseudo-ch</text>'
|
||||
)
|
||||
|
||||
# Subtitle
|
||||
parts.append(
|
||||
f' <text x="{w_px // 2}" y="40" text-anchor="middle" '
|
||||
f'font-family="monospace" font-size="10" fill="#64748b">'
|
||||
f'Per-PE: {channels_per_pe} ch × {channel_bw} GB/s = {agg_bw} GB/s | '
|
||||
f'Cube total: {total_ch} × {channel_bw} = {total_ch * channel_bw} GB/s</text>'
|
||||
)
|
||||
|
||||
# Cube boundary
|
||||
bx, by = pad, pad
|
||||
parts.append(
|
||||
f' <rect x="{bx}" y="{by}" width="{cube_w * scale}" height="{cube_h * scale}" '
|
||||
f'rx="6" fill="none" stroke="#475569" stroke-width="2" stroke-dasharray="8,4"/>'
|
||||
)
|
||||
|
||||
def mm2px(x_mm: float, y_mm: float) -> tuple[float, float]:
|
||||
return pad + x_mm * scale, pad + y_mm * scale
|
||||
|
||||
# ── HBM zone background (centered, 9×5mm) ──
|
||||
hbm_x, hbm_y = mm2px(4.0, 4.5)
|
||||
hbm_w, hbm_h = 9.0 * scale, 5.0 * scale
|
||||
parts.append(
|
||||
f' <rect x="{hbm_x:.0f}" y="{hbm_y:.0f}" '
|
||||
f'width="{hbm_w:.0f}" height="{hbm_h:.0f}" '
|
||||
f'rx="6" fill="#052e16" stroke="#047857" stroke-width="2" opacity="0.6"/>'
|
||||
)
|
||||
# HBM label
|
||||
hcx, hcy = mm2px(8.5, 7.0)
|
||||
parts.append(
|
||||
f' <text x="{hcx:.0f}" y="{hcy - 15:.0f}" text-anchor="middle" '
|
||||
f'font-family="monospace" font-size="11" font-weight="bold" fill="#047857">'
|
||||
f'HBM_CTRL | {total_ch} pseudo channels</text>'
|
||||
)
|
||||
parts.append(
|
||||
f' <text x="{hcx:.0f}" y="{hcy + 2:.0f}" text-anchor="middle" '
|
||||
f'font-family="monospace" font-size="9" fill="#05966988">'
|
||||
f'Total BW: {total_ch * channel_bw:.0f} GB/s</text>'
|
||||
)
|
||||
|
||||
# ── Pseudo channel port indicators (horizontal bar inside HBM zone) ──
|
||||
port_bar_y = hcy + 15
|
||||
port_bar_w = 8.0 * scale # slightly narrower than HBM zone
|
||||
port_bar_x = hcx - port_bar_w / 2
|
||||
port_w = port_bar_w / total_ch
|
||||
for i in range(total_ch):
|
||||
pe_owner = i // channels_per_pe
|
||||
# Color by PE owner
|
||||
colors = ["#3b82f6", "#60a5fa", "#8b5cf6", "#a78bfa",
|
||||
"#f59e0b", "#fbbf24", "#ef4444", "#f87171"]
|
||||
c = colors[pe_owner % len(colors)]
|
||||
px = port_bar_x + i * port_w
|
||||
parts.append(
|
||||
f' <rect x="{px:.1f}" y="{port_bar_y:.0f}" '
|
||||
f'width="{max(port_w - 0.5, 1):.1f}" height="8" '
|
||||
f'fill="{c}" opacity="0.7"/>'
|
||||
)
|
||||
# Port bar label
|
||||
parts.append(
|
||||
f' <text x="{hcx:.0f}" y="{port_bar_y + 20:.0f}" text-anchor="middle" '
|
||||
f'font-family="monospace" font-size="7" fill="#05966988">'
|
||||
f'{total_ch} ports | {channels_per_pe} per PE (color-coded)</text>'
|
||||
)
|
||||
|
||||
# ── Router mesh links ──
|
||||
for r in range(n_rows):
|
||||
for c in range(n_cols):
|
||||
rkey = f"r{r}c{c}"
|
||||
if routers.get(rkey) is None:
|
||||
continue
|
||||
rx, ry = routers[rkey]["pos_mm"]
|
||||
sx, sy = mm2px(rx, ry)
|
||||
|
||||
# Horizontal neighbor
|
||||
for nc in range(c + 1, n_cols):
|
||||
nkey = f"r{r}c{nc}"
|
||||
if routers.get(nkey) is None:
|
||||
continue
|
||||
nx, ny = routers[nkey]["pos_mm"]
|
||||
dx, dy = mm2px(nx, ny)
|
||||
parts.append(
|
||||
f' <line x1="{sx:.0f}" y1="{sy:.0f}" '
|
||||
f'x2="{dx:.0f}" y2="{dy:.0f}" '
|
||||
f'stroke="#475569" stroke-width="1" opacity="0.4"/>'
|
||||
)
|
||||
break
|
||||
|
||||
# Vertical neighbor
|
||||
for nr in range(r + 1, n_rows):
|
||||
nkey = f"r{nr}c{c}"
|
||||
if routers.get(nkey) is None:
|
||||
continue
|
||||
nx, ny = routers[nkey]["pos_mm"]
|
||||
dx, dy = mm2px(nx, ny)
|
||||
parts.append(
|
||||
f' <line x1="{sx:.0f}" y1="{sy:.0f}" '
|
||||
f'x2="{dx:.0f}" y2="{dy:.0f}" '
|
||||
f'stroke="#475569" stroke-width="1" opacity="0.4"/>'
|
||||
)
|
||||
break
|
||||
|
||||
# ── Router nodes ──
|
||||
r_size = 10 # px radius
|
||||
pe_routers: dict[str, str] = {} # rkey → pe label
|
||||
for rkey, rval in routers.items():
|
||||
if rval is None:
|
||||
continue
|
||||
rx, ry = rval["pos_mm"]
|
||||
px, py = mm2px(rx, ry)
|
||||
attach = rval.get("attach", [])
|
||||
|
||||
# Determine router type by attachments
|
||||
has_pe = any(a.endswith(".dma") for a in attach)
|
||||
has_mcpu = "m_cpu" in attach
|
||||
has_sram = "sram" in attach
|
||||
has_ucie = any(a.startswith("ucie_") for a in attach)
|
||||
|
||||
if has_pe:
|
||||
fill, stroke = "#3b82f6", "#1d4ed8"
|
||||
pe_name = [a for a in attach if a.endswith(".dma")][0].split(".")[0]
|
||||
pe_routers[rkey] = pe_name.upper()
|
||||
elif has_mcpu:
|
||||
fill, stroke = "#f59e0b", "#d97706"
|
||||
elif has_sram:
|
||||
fill, stroke = "#f59e0b", "#d97706"
|
||||
elif has_ucie:
|
||||
fill, stroke = "#8b5cf6", "#6d28d9"
|
||||
else:
|
||||
fill, stroke = "#334155", "#475569"
|
||||
|
||||
parts.append(
|
||||
f' <circle cx="{px:.0f}" cy="{py:.0f}" r="{r_size}" '
|
||||
f'fill="{fill}" stroke="{stroke}" stroke-width="1.5"/>'
|
||||
)
|
||||
# Router label
|
||||
parts.append(
|
||||
f' <text x="{px:.0f}" y="{py + 3:.0f}" text-anchor="middle" '
|
||||
f'font-family="monospace" font-size="7" font-weight="bold" fill="white">'
|
||||
f'{rkey}</text>'
|
||||
)
|
||||
|
||||
# Attachment labels below router
|
||||
label_parts = []
|
||||
if has_pe:
|
||||
label_parts.append(pe_routers[rkey])
|
||||
if has_mcpu:
|
||||
label_parts.append("M_CPU")
|
||||
if has_sram:
|
||||
label_parts.append("SRAM")
|
||||
ucie_items = [a for a in attach if a.startswith("ucie_")]
|
||||
if ucie_items:
|
||||
label_parts.append(f"UCIe×{len(ucie_items)}")
|
||||
if label_parts:
|
||||
parts.append(
|
||||
f' <text x="{px:.0f}" y="{py + r_size + 10:.0f}" text-anchor="middle" '
|
||||
f'font-family="monospace" font-size="6" fill="#94a3b8">'
|
||||
f'{", ".join(label_parts)}</text>'
|
||||
)
|
||||
|
||||
# ── PE → HBM connection line (for PE routers) ──
|
||||
if has_pe:
|
||||
# Draw line from router to HBM zone edge
|
||||
target_y = hbm_y if py < hbm_y else hbm_y + hbm_h
|
||||
parts.append(
|
||||
f' <line x1="{px:.0f}" y1="{py + r_size:.0f}" '
|
||||
f'x2="{px:.0f}" y2="{target_y:.0f}" '
|
||||
f'stroke="#10b981" stroke-width="1.5" opacity="0.5" '
|
||||
f'stroke-dasharray="4,3"/>'
|
||||
)
|
||||
# BW annotation
|
||||
bw_y = (py + r_size + target_y) / 2
|
||||
parts.append(
|
||||
f' <text x="{px + 12:.0f}" y="{bw_y:.0f}" '
|
||||
f'font-family="monospace" font-size="6" fill="#10b98188">'
|
||||
f'{agg_bw:.0f}GB/s</text>'
|
||||
)
|
||||
|
||||
# ── PE blocks (drawn next to their router) ──
|
||||
pe_w, pe_h = 30, 18 # px
|
||||
for rkey, rval in routers.items():
|
||||
if rval is None:
|
||||
continue
|
||||
attach = rval.get("attach", [])
|
||||
pe_dma = [a for a in attach if a.endswith(".dma")]
|
||||
if not pe_dma:
|
||||
continue
|
||||
pe_name = pe_dma[0].split(".")[0] # "pe0"
|
||||
pe_label = pe_name.upper()
|
||||
rx, ry = rval["pos_mm"]
|
||||
px, py = mm2px(rx, ry)
|
||||
|
||||
# Position PE block: top-half PEs above router, bottom-half below
|
||||
is_top = ry < cube_h / 2
|
||||
pe_x = px - pe_w / 2
|
||||
pe_y = py - r_size - pe_h - 4 if is_top else py + r_size + 4
|
||||
|
||||
parts.append(
|
||||
f' <rect x="{pe_x:.0f}" y="{pe_y:.0f}" '
|
||||
f'width="{pe_w}" height="{pe_h}" '
|
||||
f'rx="3" fill="#2d1f3d" stroke="#a855f7" stroke-width="1"/>'
|
||||
)
|
||||
parts.append(
|
||||
f' <text x="{px:.0f}" y="{pe_y + pe_h / 2 + 4:.0f}" text-anchor="middle" '
|
||||
f'font-family="monospace" font-size="8" font-weight="bold" fill="#a855f7">'
|
||||
f'{pe_label}</text>'
|
||||
)
|
||||
# PE ↔ router link
|
||||
link_y1 = pe_y + pe_h if is_top else pe_y
|
||||
link_y2 = py - r_size if is_top else py + r_size
|
||||
parts.append(
|
||||
f' <line x1="{px:.0f}" y1="{link_y1:.0f}" '
|
||||
f'x2="{px:.0f}" y2="{link_y2:.0f}" '
|
||||
f'stroke="#a855f7" stroke-width="1.5" opacity="0.7"/>'
|
||||
)
|
||||
|
||||
# ── Legend ──
|
||||
ly = h_px - 35
|
||||
legend_items = [
|
||||
("#3b82f6", "PE Router"),
|
||||
("#f59e0b", "M_CPU / SRAM"),
|
||||
("#8b5cf6", "UCIe"),
|
||||
("#334155", "Relay"),
|
||||
("#10b981", "HBM Link"),
|
||||
("#475569", "Mesh Link"),
|
||||
]
|
||||
lx = pad
|
||||
for color, label in legend_items:
|
||||
parts.append(
|
||||
f' <rect x="{lx}" y="{ly}" width="10" height="10" rx="2" '
|
||||
f'fill="{color}" stroke="#475569" stroke-width="0.5"/>'
|
||||
)
|
||||
parts.append(
|
||||
f' <text x="{lx + 14}" y="{ly + 9}" '
|
||||
f'font-family="monospace" font-size="8" fill="#94a3b8">'
|
||||
f'{label}</text>'
|
||||
)
|
||||
lx += len(label) * 7 + 24
|
||||
|
||||
parts.append("</svg>")
|
||||
return "\n".join(parts)
|
||||
|
||||
@@ -34,14 +34,13 @@ def test_svg_output_is_deterministic(tmp_path):
|
||||
def test_cube_svg_contains_hbm_ctrl(tmp_path):
|
||||
_emit(tmp_path)
|
||||
svg = (tmp_path / "cube_view.svg").read_text()
|
||||
assert "HBM CTRL" in svg
|
||||
assert "HBM_CTRL" in svg
|
||||
|
||||
|
||||
def test_cube_svg_contains_ucie_ports(tmp_path):
|
||||
_emit(tmp_path)
|
||||
svg = (tmp_path / "cube_view.svg").read_text()
|
||||
for port in ("UCIe-N", "UCIe-S", "UCIe-W", "UCIe-E"):
|
||||
assert port in svg
|
||||
assert "UCIe" in svg
|
||||
|
||||
|
||||
def test_cube_svg_contains_pe_nodes(tmp_path):
|
||||
|
||||
Reference in New Issue
Block a user