Show individual routers in cube_view SVG, fix row Y overlap
- cube_view now renders all 32 router nodes from cube_mesh.yaml instead of collapsed "router_mesh" placeholder - Fix mesh_gen row Y position overlap (r1/r2 and r3/r4 had same Y) by adding hbm_gap spacing between PE rows and HBM zone - Add noc_router to visualizer KIND_SIZE for proper sizing - Update cube view tests for individual router nodes 339 passed Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
+251
-83
@@ -5,95 +5,201 @@
|
|||||||
<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="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"/>
|
<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>
|
<text x="278.0" y="278.0" text-anchor="middle" font-family="monospace" font-size="11" fill="#047857" opacity="0.7">HBM</text>
|
||||||
<polyline points="82.0,82.0 82.0,144.0 334.0,144.0 334.0,236.0" fill="none" stroke="#f97316" stroke-width="1" opacity="0.8"/>
|
<line x1="82.0" y1="82.0" x2="166.0" y2="82.0" stroke="#a78bfa" stroke-width="1" opacity="0.8"/>
|
||||||
<polyline points="334.0,236.0 334.0,144.0 82.0,144.0 82.0,82.0" fill="none" stroke="#f59e0b" stroke-width="1" opacity="0.6"/>
|
<text x="124.0" y="78.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||||
<polyline points="166.0,82.0 166.0,154.0 334.0,154.0 334.0,236.0" fill="none" stroke="#f97316" stroke-width="1" opacity="0.8"/>
|
<line x1="82.0" y1="82.0" x2="82.0" y2="152.0" stroke="#a78bfa" stroke-width="1" opacity="0.8"/>
|
||||||
<polyline points="334.0,236.0 334.0,144.0 166.0,144.0 166.0,82.0" fill="none" stroke="#f59e0b" stroke-width="1" opacity="0.6"/>
|
<text x="82.0" y="113.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">2.5mm</text>
|
||||||
<polyline points="390.0,82.0 390.0,164.0 334.0,164.0 334.0,236.0" fill="none" stroke="#f97316" stroke-width="1" opacity="0.8"/>
|
<line x1="166.0" y1="82.0" x2="250.0" y2="82.0" stroke="#a78bfa" stroke-width="1" opacity="0.8"/>
|
||||||
<text x="362.0" y="161.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">4.0mm 256GB/s</text>
|
<text x="208.0" y="78.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||||
<polyline points="334.0,236.0 334.0,144.0 390.0,144.0 390.0,82.0" fill="none" stroke="#f59e0b" stroke-width="1" opacity="0.6"/>
|
<line x1="166.0" y1="82.0" x2="166.0" y2="152.0" stroke="#a78bfa" stroke-width="1" opacity="0.8"/>
|
||||||
<polyline points="474.0,82.0 474.0,174.0 334.0,174.0 334.0,236.0" fill="none" stroke="#f97316" stroke-width="1" opacity="0.8"/>
|
<text x="166.0" y="113.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">2.5mm</text>
|
||||||
<text x="404.0" y="171.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">4.0mm 256GB/s</text>
|
<line x1="250.0" y1="82.0" x2="334.0" y2="82.0" stroke="#a78bfa" stroke-width="1" opacity="0.8"/>
|
||||||
<polyline points="334.0,236.0 334.0,144.0 474.0,144.0 474.0,82.0" fill="none" stroke="#f59e0b" stroke-width="1" opacity="0.6"/>
|
<text x="292.0" y="78.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||||
<polyline points="82.0,390.0 82.0,338.0 334.0,338.0 334.0,236.0" fill="none" stroke="#f97316" stroke-width="1" opacity="0.8"/>
|
<line x1="250.0" y1="82.0" x2="250.0" y2="152.0" stroke="#a78bfa" stroke-width="1" opacity="0.8"/>
|
||||||
<text x="208.0" y="335.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">4.0mm 256GB/s</text>
|
<text x="250.0" y="113.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">2.5mm</text>
|
||||||
<polyline points="334.0,236.0 334.0,298.0 82.0,298.0 82.0,390.0" fill="none" stroke="#f59e0b" stroke-width="1" opacity="0.6"/>
|
<line x1="334.0" y1="82.0" x2="390.0" y2="82.0" stroke="#a78bfa" stroke-width="1" opacity="0.8"/>
|
||||||
<polyline points="166.0,390.0 166.0,348.0 334.0,348.0 334.0,236.0" fill="none" stroke="#f97316" stroke-width="1" opacity="0.8"/>
|
<text x="362.0" y="78.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">2.0mm</text>
|
||||||
<text x="250.0" y="345.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">4.0mm 256GB/s</text>
|
<line x1="334.0" y1="82.0" x2="334.0" y2="152.0" stroke="#a78bfa" stroke-width="1" opacity="0.8"/>
|
||||||
<polyline points="334.0,236.0 334.0,298.0 166.0,298.0 166.0,390.0" fill="none" stroke="#f59e0b" stroke-width="1" opacity="0.6"/>
|
<text x="334.0" y="113.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">2.5mm</text>
|
||||||
<polyline points="390.0,390.0 390.0,358.0 334.0,358.0 334.0,236.0" fill="none" stroke="#f97316" stroke-width="1" opacity="0.8"/>
|
<line x1="390.0" y1="82.0" x2="474.0" y2="82.0" stroke="#a78bfa" stroke-width="1" opacity="0.8"/>
|
||||||
<polyline points="334.0,236.0 334.0,298.0 390.0,298.0 390.0,390.0" fill="none" stroke="#f59e0b" stroke-width="1" opacity="0.6"/>
|
<text x="432.0" y="78.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||||
<polyline points="474.0,390.0 474.0,368.0 334.0,368.0 334.0,236.0" fill="none" stroke="#f97316" stroke-width="1" opacity="0.8"/>
|
<line x1="390.0" y1="82.0" x2="390.0" y2="152.0" stroke="#a78bfa" stroke-width="1" opacity="0.8"/>
|
||||||
<polyline points="334.0,236.0 334.0,298.0 474.0,298.0 474.0,390.0" fill="none" stroke="#f59e0b" stroke-width="1" opacity="0.6"/>
|
<text x="390.0" y="113.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">2.5mm</text>
|
||||||
<line x1="334.0" y1="236.0" x2="222.0" y2="236.0" stroke="#10b981" stroke-width="1" opacity="0.8"/>
|
<line x1="474.0" y1="82.0" x2="474.0" y2="152.0" stroke="#a78bfa" stroke-width="1" opacity="0.8"/>
|
||||||
<line x1="222.0" y1="236.0" x2="334.0" y2="236.0" stroke="#10b981" stroke-width="1" opacity="0.8"/>
|
<text x="474.0" y="113.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">2.5mm</text>
|
||||||
<polyline points="446.0,194.0 446.0,200.0 334.0,200.0 334.0,236.0" fill="none" stroke="#f59e0b" stroke-width="1" opacity="0.6"/>
|
<line x1="82.0" y1="152.0" x2="166.0" y2="152.0" stroke="#a78bfa" stroke-width="1" opacity="0.8"/>
|
||||||
<polyline points="334.0,236.0 334.0,200.0 446.0,200.0 446.0,194.0" fill="none" stroke="#f59e0b" stroke-width="1" opacity="0.6"/>
|
<text x="124.0" y="148.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||||
<polyline points="334.0,236.0 110.0,236.0 110.0,194.0" fill="none" stroke="#a78bfa" stroke-width="1" opacity="0.8"/>
|
<line x1="82.0" y1="152.0" x2="82.0" y2="194.0" stroke="#a78bfa" stroke-width="1" opacity="0.8"/>
|
||||||
<polyline points="334.0,236.0 334.0,131.4 278.0,131.4 278.0,56.8" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<text x="82.0" y="169.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">1.5mm</text>
|
||||||
<line x1="278.0" y1="56.8" x2="278.0" y2="56.8" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<line x1="166.0" y1="152.0" x2="250.0" y2="152.0" stroke="#a78bfa" 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"/>
|
<text x="208.0" y="148.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||||
<polyline points="278.0,56.8 278.0,131.4 334.0,131.4 334.0,236.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<line x1="166.0" y1="152.0" x2="166.0" y2="194.0" stroke="#a78bfa" stroke-width="1" opacity="0.8"/>
|
||||||
<polyline points="334.0,236.0 334.0,131.4 278.0,131.4 278.0,56.8" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<text x="166.0" y="169.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">1.5mm</text>
|
||||||
<line x1="278.0" y1="56.8" x2="278.0" y2="56.8" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<line x1="250.0" y1="152.0" x2="334.0" y2="152.0" stroke="#a78bfa" 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"/>
|
<text x="292.0" y="148.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||||
<polyline points="278.0,56.8 278.0,141.4 334.0,141.4 334.0,236.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<line x1="250.0" y1="152.0" x2="250.0" y2="320.0" stroke="#a78bfa" stroke-width="1" opacity="0.8"/>
|
||||||
<polyline points="334.0,236.0 334.0,131.4 278.0,131.4 278.0,56.8" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<text x="250.0" y="232.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">6.0mm</text>
|
||||||
<line x1="278.0" y1="56.8" x2="278.0" y2="56.8" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<line x1="334.0" y1="152.0" x2="390.0" y2="152.0" stroke="#a78bfa" 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"/>
|
<text x="362.0" y="148.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">2.0mm</text>
|
||||||
<polyline points="278.0,56.8 278.0,151.4 334.0,151.4 334.0,236.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<line x1="334.0" y1="152.0" x2="334.0" y2="320.0" stroke="#a78bfa" stroke-width="1" opacity="0.8"/>
|
||||||
<polyline points="334.0,236.0 334.0,131.4 278.0,131.4 278.0,56.8" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<text x="334.0" y="232.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">6.0mm</text>
|
||||||
<line x1="278.0" y1="56.8" x2="278.0" y2="56.8" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<line x1="390.0" y1="152.0" x2="474.0" y2="152.0" stroke="#a78bfa" 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"/>
|
<text x="432.0" y="148.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||||
<polyline points="278.0,56.8 278.0,161.4 334.0,161.4 334.0,236.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<line x1="390.0" y1="152.0" x2="390.0" y2="194.0" stroke="#a78bfa" stroke-width="1" opacity="0.8"/>
|
||||||
<polyline points="334.0,236.0 334.0,310.6 278.0,310.6 278.0,415.2" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<text x="390.0" y="169.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">1.5mm</text>
|
||||||
<line x1="278.0" y1="415.2" x2="278.0" y2="415.2" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<line x1="474.0" y1="152.0" x2="474.0" y2="194.0" stroke="#a78bfa" 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"/>
|
<text x="474.0" y="169.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">1.5mm</text>
|
||||||
<polyline points="278.0,415.2 278.0,350.6 334.0,350.6 334.0,236.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<line x1="82.0" y1="194.0" x2="166.0" y2="194.0" stroke="#a78bfa" stroke-width="1" opacity="0.8"/>
|
||||||
<polyline points="334.0,236.0 334.0,310.6 278.0,310.6 278.0,415.2" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<text x="124.0" y="190.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||||
<line x1="278.0" y1="415.2" x2="278.0" y2="415.2" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<line x1="82.0" y1="194.0" x2="82.0" y2="278.0" stroke="#a78bfa" 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"/>
|
<text x="82.0" y="232.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||||
<polyline points="278.0,415.2 278.0,360.6 334.0,360.6 334.0,236.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<line x1="166.0" y1="194.0" x2="390.0" y2="194.0" stroke="#a78bfa" stroke-width="1" opacity="0.8"/>
|
||||||
<polyline points="334.0,236.0 334.0,310.6 278.0,310.6 278.0,415.2" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<text x="278.0" y="190.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">8.0mm</text>
|
||||||
<line x1="278.0" y1="415.2" x2="278.0" y2="415.2" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<line x1="166.0" y1="194.0" x2="166.0" y2="278.0" stroke="#a78bfa" 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"/>
|
<text x="166.0" y="232.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||||
<polyline points="278.0,415.2 278.0,370.6 334.0,370.6 334.0,236.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<line x1="390.0" y1="194.0" x2="474.0" y2="194.0" stroke="#a78bfa" stroke-width="1" opacity="0.8"/>
|
||||||
<polyline points="334.0,236.0 334.0,310.6 278.0,310.6 278.0,415.2" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<text x="432.0" y="190.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||||
<line x1="278.0" y1="415.2" x2="278.0" y2="415.2" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<line x1="390.0" y1="194.0" x2="390.0" y2="278.0" stroke="#a78bfa" 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"/>
|
<text x="390.0" y="232.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||||
<polyline points="278.0,415.2 278.0,380.6 334.0,380.6 334.0,236.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<line x1="474.0" y1="194.0" x2="474.0" y2="278.0" stroke="#a78bfa" stroke-width="1" opacity="0.8"/>
|
||||||
<polyline points="334.0,236.0 334.0,221.0 488.0,221.0 488.0,236.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<text x="474.0" y="232.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||||
<line x1="488.0" y1="236.0" x2="488.0" y2="236.0" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<line x1="82.0" y1="278.0" x2="166.0" y2="278.0" stroke="#a78bfa" 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"/>
|
<text x="124.0" y="274.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||||
<polyline points="488.0,236.0 488.0,301.0 334.0,301.0 334.0,236.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<line x1="82.0" y1="278.0" x2="82.0" y2="320.0" stroke="#a78bfa" stroke-width="1" opacity="0.8"/>
|
||||||
<polyline points="334.0,236.0 334.0,221.0 488.0,221.0 488.0,236.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<text x="82.0" y="295.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">1.5mm</text>
|
||||||
<line x1="488.0" y1="236.0" x2="488.0" y2="236.0" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<line x1="166.0" y1="278.0" x2="390.0" y2="278.0" stroke="#a78bfa" 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"/>
|
<text x="278.0" y="274.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">8.0mm</text>
|
||||||
<polyline points="488.0,236.0 488.0,311.0 334.0,311.0 334.0,236.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<line x1="166.0" y1="278.0" x2="166.0" y2="320.0" stroke="#a78bfa" stroke-width="1" opacity="0.8"/>
|
||||||
<polyline points="334.0,236.0 334.0,221.0 488.0,221.0 488.0,236.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<text x="166.0" y="295.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">1.5mm</text>
|
||||||
<line x1="488.0" y1="236.0" x2="488.0" y2="236.0" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<line x1="390.0" y1="278.0" x2="474.0" y2="278.0" stroke="#a78bfa" 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"/>
|
<text x="432.0" y="274.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">3.0mm</text>
|
||||||
<polyline points="488.0,236.0 488.0,321.0 334.0,321.0 334.0,236.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<line x1="390.0" y1="278.0" x2="390.0" y2="320.0" stroke="#a78bfa" stroke-width="1" opacity="0.8"/>
|
||||||
<polyline points="334.0,236.0 334.0,221.0 488.0,221.0 488.0,236.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<text x="390.0" y="295.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">1.5mm</text>
|
||||||
<line x1="488.0" y1="236.0" x2="488.0" y2="236.0" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<line x1="474.0" y1="278.0" x2="474.0" y2="320.0" stroke="#a78bfa" 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"/>
|
<text x="474.0" y="295.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#64748b">1.5mm</text>
|
||||||
<polyline points="488.0,236.0 488.0,331.0 334.0,331.0 334.0,236.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<line x1="82.0" y1="320.0" x2="166.0" y2="320.0" stroke="#a78bfa" stroke-width="1" opacity="0.8"/>
|
||||||
<polyline points="334.0,236.0 334.0,221.0 68.0,221.0 68.0,236.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<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="1" opacity="0.8"/>
|
||||||
|
<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="1" opacity="0.8"/>
|
||||||
|
<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="1" opacity="0.8"/>
|
||||||
|
<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="1" opacity="0.8"/>
|
||||||
|
<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="1" opacity="0.8"/>
|
||||||
|
<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="1" opacity="0.8"/>
|
||||||
|
<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="1" opacity="0.8"/>
|
||||||
|
<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="1" opacity="0.8"/>
|
||||||
|
<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="1" opacity="0.8"/>
|
||||||
|
<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="1" opacity="0.8"/>
|
||||||
|
<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="1" opacity="0.8"/>
|
||||||
|
<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="1" opacity="0.8"/>
|
||||||
|
<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="1" opacity="0.8"/>
|
||||||
|
<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="1" opacity="0.8"/>
|
||||||
|
<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="1" opacity="0.8"/>
|
||||||
|
<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,82.0 82.0,67.0 82.0,67.0 82.0,82.0" fill="none" stroke="#f97316" stroke-width="1" opacity="0.8"/>
|
||||||
|
<polyline points="82.0,82.0 82.0,67.0 82.0,67.0 82.0,82.0" 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="1" opacity="0.8"/>
|
||||||
|
<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"/>
|
||||||
<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="68.0,236.0 68.0,341.0 334.0,341.0 334.0,236.0" fill="none" 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="334.0,236.0 334.0,221.0 68.0,221.0 68.0,236.0" 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,82.0 166.0,67.0 166.0,67.0 166.0,82.0" fill="none" stroke="#f97316" stroke-width="1" opacity="0.8"/>
|
||||||
|
<polyline points="166.0,82.0 166.0,67.0 166.0,67.0 166.0,82.0" 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="1" opacity="0.8"/>
|
||||||
|
<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"/>
|
||||||
<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="68.0,236.0 68.0,351.0 334.0,351.0 334.0,236.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<polyline points="390.0,82.0 390.0,102.0 390.0,102.0 390.0,152.0" fill="none" stroke="#f97316" stroke-width="1" opacity="0.8"/>
|
||||||
<polyline points="334.0,236.0 334.0,221.0 68.0,221.0 68.0,236.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<polyline points="390.0,152.0 390.0,102.0 390.0,102.0 390.0,82.0" 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="1" opacity="0.8"/>
|
||||||
|
<polyline points="474.0,82.0 474.0,102.0 474.0,102.0 474.0,152.0" fill="none" stroke="#f97316" stroke-width="1" opacity="0.8"/>
|
||||||
|
<polyline points="474.0,152.0 474.0,102.0 474.0,102.0 474.0,82.0" 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="1" opacity="0.8"/>
|
||||||
|
<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,390.0 82.0,340.0 82.0,340.0 82.0,320.0" fill="none" stroke="#f97316" stroke-width="1" opacity="0.8"/>
|
||||||
|
<polyline points="82.0,320.0 82.0,340.0 82.0,340.0 82.0,390.0" 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="1" opacity="0.8"/>
|
||||||
|
<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"/>
|
||||||
<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="68.0,236.0 68.0,361.0 334.0,361.0 334.0,236.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<polyline points="166.0,390.0 166.0,340.0 166.0,340.0 166.0,320.0" fill="none" stroke="#f97316" stroke-width="1" opacity="0.8"/>
|
||||||
<polyline points="334.0,236.0 334.0,221.0 68.0,221.0 68.0,236.0" fill="none" stroke="#94a3b8" stroke-width="1" opacity="0.8"/>
|
<polyline points="166.0,320.0 166.0,340.0 166.0,340.0 166.0,390.0" 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="1" opacity="0.8"/>
|
||||||
|
<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"/>
|
||||||
<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="68.0,236.0 68.0,371.0 334.0,371.0 334.0,236.0" fill="none" 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,390.0 390.0,375.0 390.0,375.0 390.0,390.0" fill="none" stroke="#f97316" stroke-width="1" opacity="0.8"/>
|
||||||
|
<polyline points="390.0,390.0 390.0,375.0 390.0,375.0 390.0,390.0" 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="1" opacity="0.8"/>
|
||||||
|
<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,390.0 474.0,375.0 474.0,375.0 474.0,390.0" fill="none" stroke="#f97316" stroke-width="1" opacity="0.8"/>
|
||||||
|
<polyline points="474.0,390.0 474.0,375.0 474.0,375.0 474.0,390.0" 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="1" opacity="0.8"/>
|
||||||
|
<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="250.0" y="40.0" width="56.0" height="33.6" rx="4" fill="#3b82f6" stroke="#475569" stroke-width="1"/>
|
<rect x="250.0" y="40.0" width="56.0" height="33.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="10" fill="#ffffff">UCIe-N</text>
|
<text x="278.0" y="60.8" text-anchor="middle" font-family="monospace" font-size="10" fill="#ffffff">UCIe-N</text>
|
||||||
<rect x="250.0" y="40.0" width="56.0" height="33.6" rx="4" fill="#e2e8f0" stroke="#475569" stroke-width="1"/>
|
<rect x="250.0" y="40.0" width="56.0" height="33.6" rx="4" fill="#e2e8f0" stroke="#475569" stroke-width="1"/>
|
||||||
@@ -140,8 +246,70 @@
|
|||||||
<text x="222.0" y="240.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#ffffff">HBM CTRL</text>
|
<text x="222.0" y="240.0" text-anchor="middle" font-family="monospace" font-size="8" fill="#ffffff">HBM CTRL</text>
|
||||||
<rect x="82.0" y="177.2" width="56.0" height="33.6" rx="4" fill="#f59e0b" stroke="#475569" stroke-width="1"/>
|
<rect x="82.0" y="177.2" width="56.0" height="33.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>
|
<text x="110.0" y="198.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">SRAM</text>
|
||||||
<rect x="306.0" y="219.2" width="56.0" height="33.6" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
<rect x="65.2" y="70.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
<text x="334.0" y="240.0" text-anchor="middle" font-family="monospace" font-size="7" fill="#1e293b">ROUTER MESH</text>
|
<text x="82.0" y="86.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R0C0</text>
|
||||||
|
<rect x="149.2" y="70.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="166.0" y="86.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R0C1</text>
|
||||||
|
<rect x="233.2" y="70.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="250.0" y="86.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R0C2</text>
|
||||||
|
<rect x="317.2" y="70.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="334.0" y="86.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R0C3</text>
|
||||||
|
<rect x="373.2" y="70.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="390.0" y="86.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R0C4</text>
|
||||||
|
<rect x="457.2" y="70.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="474.0" y="86.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R0C5</text>
|
||||||
|
<rect x="65.2" y="140.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="82.0" y="156.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R1C0</text>
|
||||||
|
<rect x="149.2" y="140.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="166.0" y="156.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R1C1</text>
|
||||||
|
<rect x="233.2" y="140.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="250.0" y="156.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R1C2</text>
|
||||||
|
<rect x="317.2" y="140.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="334.0" y="156.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R1C3</text>
|
||||||
|
<rect x="373.2" y="140.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="390.0" y="156.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R1C4</text>
|
||||||
|
<rect x="457.2" y="140.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="474.0" y="156.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R1C5</text>
|
||||||
|
<rect x="65.2" y="182.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="82.0" y="198.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R2C0</text>
|
||||||
|
<rect x="149.2" y="182.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="166.0" y="198.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R2C1</text>
|
||||||
|
<rect x="373.2" y="182.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="390.0" y="198.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R2C4</text>
|
||||||
|
<rect x="457.2" y="182.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="474.0" y="198.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R2C5</text>
|
||||||
|
<rect x="65.2" y="266.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="82.0" y="282.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R3C0</text>
|
||||||
|
<rect x="149.2" y="266.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="166.0" y="282.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R3C1</text>
|
||||||
|
<rect x="373.2" y="266.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="390.0" y="282.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R3C4</text>
|
||||||
|
<rect x="457.2" y="266.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="474.0" y="282.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R3C5</text>
|
||||||
|
<rect x="65.2" y="308.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="82.0" y="324.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R4C0</text>
|
||||||
|
<rect x="149.2" y="308.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="166.0" y="324.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R4C1</text>
|
||||||
|
<rect x="233.2" y="308.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="250.0" y="324.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R4C2</text>
|
||||||
|
<rect x="317.2" y="308.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="334.0" y="324.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R4C3</text>
|
||||||
|
<rect x="373.2" y="308.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="390.0" y="324.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R4C4</text>
|
||||||
|
<rect x="457.2" y="308.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="474.0" y="324.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R4C5</text>
|
||||||
|
<rect x="65.2" y="378.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="82.0" y="394.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R5C0</text>
|
||||||
|
<rect x="149.2" y="378.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="166.0" y="394.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R5C1</text>
|
||||||
|
<rect x="233.2" y="378.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="250.0" y="394.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R5C2</text>
|
||||||
|
<rect x="317.2" y="378.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="334.0" y="394.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R5C3</text>
|
||||||
|
<rect x="373.2" y="378.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="390.0" y="394.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R5C4</text>
|
||||||
|
<rect x="457.2" y="378.8" width="33.6" height="22.4" rx="4" fill="#f97316" stroke="#475569" stroke-width="1"/>
|
||||||
|
<text x="474.0" y="394.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">R5C5</text>
|
||||||
<rect x="56.8" y="68.0" width="50.4" height="28.0" rx="4" fill="#94a3b8" stroke="#475569" stroke-width="1"/>
|
<rect x="56.8" y="68.0" width="50.4" height="28.0" rx="4" fill="#94a3b8" stroke="#475569" stroke-width="1"/>
|
||||||
<text x="82.0" y="86.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">PE0</text>
|
<text x="82.0" y="86.0" text-anchor="middle" font-family="monospace" font-size="10" fill="#1e293b">PE0</text>
|
||||||
<rect x="140.8" y="68.0" width="50.4" height="28.0" rx="4" fill="#94a3b8" stroke="#475569" stroke-width="1"/>
|
<rect x="140.8" y="68.0" width="50.4" height="28.0" rx="4" fill="#94a3b8" stroke="#475569" stroke-width="1"/>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 36 KiB |
@@ -921,21 +921,26 @@ def _build_cube_view(spec: dict) -> ViewGraph:
|
|||||||
label=name.upper().replace("_", " "),
|
label=name.upper().replace("_", " "),
|
||||||
)
|
)
|
||||||
|
|
||||||
# Router mesh representative node (collapsed for view)
|
# Load mesh data early (needed for router nodes + PE distances)
|
||||||
|
mesh_data = spec.get("_mesh", {})
|
||||||
|
|
||||||
|
# Router nodes from cube_mesh.yaml (explicit in view)
|
||||||
router_spec = cube["components"]["noc_router"]
|
router_spec = cube["components"]["noc_router"]
|
||||||
cx = cube_w / 2
|
routers = mesh_data.get("routers", {})
|
||||||
cy = cube_h / 2
|
for rkey, rval in routers.items():
|
||||||
nodes["router_mesh"] = Node(
|
if rval is None:
|
||||||
id="router_mesh", kind=router_spec["kind"], impl=router_spec["impl"],
|
continue
|
||||||
attrs=router_spec["attrs"], pos_mm=(cx + 2.0, cy),
|
rx, ry = rval["pos_mm"]
|
||||||
label="ROUTER MESH",
|
nodes[rkey] = Node(
|
||||||
|
id=rkey, kind=router_spec["kind"], impl=router_spec["impl"],
|
||||||
|
attrs=router_spec["attrs"], pos_mm=(rx, ry),
|
||||||
|
label=rkey.upper(),
|
||||||
)
|
)
|
||||||
|
|
||||||
# PEs as opaque blocks (no per-PE xbar nodes)
|
# PEs as opaque blocks
|
||||||
corners = cube["pe_layout"]["corners"]
|
corners = cube["pe_layout"]["corners"]
|
||||||
pe_per_corner = cube["pe_layout"]["pe_per_corner"]
|
pe_per_corner = cube["pe_layout"]["pe_per_corner"]
|
||||||
corner_pos = _corner_pe_positions(cube_w, cube_h)
|
corner_pos = _corner_pe_positions(cube_w, cube_h)
|
||||||
mesh_data = spec.get("_mesh", {})
|
|
||||||
pe_noc_distances = _compute_pe_noc_distances(
|
pe_noc_distances = _compute_pe_noc_distances(
|
||||||
mesh_data, corner_pos, corners, pe_per_corner,
|
mesh_data, corner_pos, corners, pe_per_corner,
|
||||||
) if mesh_data else {}
|
) if mesh_data else {}
|
||||||
@@ -950,76 +955,101 @@ def _build_cube_view(spec: dict) -> ViewGraph:
|
|||||||
attrs={"corner": corner}, pos_mm=(px, py),
|
attrs={"corner": corner}, pos_mm=(px, py),
|
||||||
label=f"PE{pe_idx}",
|
label=f"PE{pe_idx}",
|
||||||
)
|
)
|
||||||
# PE ↔ router_mesh (view representation)
|
|
||||||
pe_to_router_bw = clinks.get("pe_to_router_bw_gbs", 256.0)
|
|
||||||
view_edges.append(Edge(
|
|
||||||
src=pid, dst="router_mesh",
|
|
||||||
distance_mm=pe_noc_distances.get(pe_idx, 0.0),
|
|
||||||
bw_gbs=pe_to_router_bw,
|
|
||||||
kind="pe_to_router",
|
|
||||||
))
|
|
||||||
view_edges.append(Edge(
|
|
||||||
src="router_mesh", dst=pid,
|
|
||||||
distance_mm=clinks.get("noc_to_pe_cpu_mm", 0.0),
|
|
||||||
kind="command",
|
|
||||||
))
|
|
||||||
pe_idx += 1
|
pe_idx += 1
|
||||||
|
|
||||||
# router_mesh ↔ hbm_ctrl
|
# View edges based on cube_mesh.yaml attach (mirrors _instantiate_cube logic)
|
||||||
|
pe_to_router_bw = clinks.get("pe_to_router_bw_gbs", 256.0)
|
||||||
hbm_to_router_bw = clinks.get("hbm_to_router_bw_gbs", 256.0)
|
hbm_to_router_bw = clinks.get("hbm_to_router_bw_gbs", 256.0)
|
||||||
view_edges.append(Edge(
|
|
||||||
src="router_mesh", dst="hbm_ctrl",
|
|
||||||
distance_mm=0.0, bw_gbs=hbm_to_router_bw,
|
|
||||||
kind="router_to_hbm",
|
|
||||||
))
|
|
||||||
view_edges.append(Edge(
|
|
||||||
src="hbm_ctrl", dst="router_mesh",
|
|
||||||
distance_mm=0.0, bw_gbs=hbm_to_router_bw,
|
|
||||||
kind="hbm_to_router",
|
|
||||||
))
|
|
||||||
|
|
||||||
# router_mesh ↔ m_cpu
|
|
||||||
view_edges.append(Edge(
|
|
||||||
src="m_cpu", dst="router_mesh",
|
|
||||||
distance_mm=clinks.get("m_cpu_to_router_mm", 0.0),
|
|
||||||
kind="command",
|
|
||||||
))
|
|
||||||
view_edges.append(Edge(
|
|
||||||
src="router_mesh", dst="m_cpu",
|
|
||||||
distance_mm=clinks.get("m_cpu_to_router_mm", 0.0),
|
|
||||||
kind="command",
|
|
||||||
))
|
|
||||||
|
|
||||||
# router_mesh ↔ sram
|
|
||||||
sram_bw = clinks.get("sram_to_router_bw_gbs", 128.0)
|
sram_bw = clinks.get("sram_to_router_bw_gbs", 128.0)
|
||||||
view_edges.append(Edge(
|
|
||||||
src="router_mesh", dst="sram",
|
|
||||||
distance_mm=0.0, bw_gbs=sram_bw,
|
|
||||||
kind="router_to_sram",
|
|
||||||
))
|
|
||||||
|
|
||||||
ucie_conn_bw_v = ucie_cfg.get("per_connection_bw_gbs", 128.0)
|
ucie_conn_bw_v = ucie_cfg.get("per_connection_bw_gbs", 128.0)
|
||||||
for port in ucie_cfg["ports"]:
|
n_rows = mesh_data.get("mesh", {}).get("rows", 6)
|
||||||
for ci in range(ucie_n_conn):
|
n_cols = mesh_data.get("mesh", {}).get("cols", 6)
|
||||||
conn_id = f"ucie-{port}.conn{ci}"
|
|
||||||
|
# Router ↔ router mesh edges
|
||||||
|
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
|
||||||
|
src_pos = routers[rkey]["pos_mm"]
|
||||||
|
# Horizontal neighbor
|
||||||
|
for nc in range(c + 1, n_cols):
|
||||||
|
nkey = f"r{r}c{nc}"
|
||||||
|
if routers.get(nkey) is None:
|
||||||
|
continue
|
||||||
|
dist = abs(routers[nkey]["pos_mm"][0] - src_pos[0])
|
||||||
view_edges.append(Edge(
|
view_edges.append(Edge(
|
||||||
src="router_mesh", dst=conn_id,
|
src=rkey, dst=nkey, distance_mm=round(dist, 2),
|
||||||
distance_mm=0.0, bw_gbs=ucie_conn_bw_v,
|
kind="router_mesh",
|
||||||
kind="router_to_ucie_conn",
|
))
|
||||||
|
break
|
||||||
|
# Vertical neighbor
|
||||||
|
for nr in range(r + 1, n_rows):
|
||||||
|
nkey = f"r{nr}c{c}"
|
||||||
|
if routers.get(nkey) is None:
|
||||||
|
continue
|
||||||
|
dist = abs(routers[nkey]["pos_mm"][1] - src_pos[1])
|
||||||
|
view_edges.append(Edge(
|
||||||
|
src=rkey, dst=nkey, distance_mm=round(dist, 2),
|
||||||
|
kind="router_mesh",
|
||||||
|
))
|
||||||
|
break
|
||||||
|
|
||||||
|
# Component ↔ router edges from attach lists
|
||||||
|
for rkey, rval in routers.items():
|
||||||
|
if rval is None:
|
||||||
|
continue
|
||||||
|
for item in rval.get("attach", []):
|
||||||
|
if item.endswith(".dma"):
|
||||||
|
pe_prefix = item.rsplit(".", 1)[0]
|
||||||
|
pid = pe_prefix.replace("pe", "pe") # "pe0" → "pe0"
|
||||||
|
if pid in nodes:
|
||||||
|
view_edges.append(Edge(
|
||||||
|
src=pid, dst=rkey, distance_mm=0.0,
|
||||||
|
bw_gbs=pe_to_router_bw, kind="pe_to_router",
|
||||||
))
|
))
|
||||||
view_edges.append(Edge(
|
view_edges.append(Edge(
|
||||||
src=conn_id, dst=f"ucie-{port}",
|
src=rkey, dst=pid, distance_mm=0.0,
|
||||||
|
kind="command",
|
||||||
|
))
|
||||||
|
elif item.endswith(".hbm"):
|
||||||
|
view_edges.append(Edge(
|
||||||
|
src=rkey, dst="hbm_ctrl", distance_mm=0.0,
|
||||||
|
bw_gbs=hbm_to_router_bw, kind="router_to_hbm",
|
||||||
|
))
|
||||||
|
elif item == "m_cpu":
|
||||||
|
view_edges.append(Edge(
|
||||||
|
src="m_cpu", dst=rkey, distance_mm=0.0, kind="command",
|
||||||
|
))
|
||||||
|
view_edges.append(Edge(
|
||||||
|
src=rkey, dst="m_cpu", distance_mm=0.0, kind="command",
|
||||||
|
))
|
||||||
|
elif item == "sram":
|
||||||
|
view_edges.append(Edge(
|
||||||
|
src="sram", dst=rkey, distance_mm=0.0,
|
||||||
|
bw_gbs=sram_bw, kind="router_to_sram",
|
||||||
|
))
|
||||||
|
elif item.startswith("ucie_"):
|
||||||
|
parts = item.split(".")
|
||||||
|
direction = parts[0].replace("ucie_", "").upper()
|
||||||
|
conn_num = parts[1].replace("c", "")
|
||||||
|
conn_id = f"ucie-{direction}.conn{conn_num}"
|
||||||
|
view_edges.append(Edge(
|
||||||
|
src=rkey, dst=conn_id, distance_mm=0.0,
|
||||||
|
bw_gbs=ucie_conn_bw_v, kind="router_to_ucie_conn",
|
||||||
|
))
|
||||||
|
view_edges.append(Edge(
|
||||||
|
src=conn_id, dst=rkey, distance_mm=0.0,
|
||||||
|
bw_gbs=ucie_conn_bw_v, kind="ucie_conn_to_router",
|
||||||
|
))
|
||||||
|
view_edges.append(Edge(
|
||||||
|
src=conn_id, dst=f"ucie-{direction}",
|
||||||
distance_mm=0.0, kind="ucie_internal",
|
distance_mm=0.0, kind="ucie_internal",
|
||||||
))
|
))
|
||||||
view_edges.append(Edge(
|
view_edges.append(Edge(
|
||||||
src=f"ucie-{port}", dst=conn_id,
|
src=f"ucie-{direction}", dst=conn_id,
|
||||||
distance_mm=0.0, kind="ucie_internal",
|
distance_mm=0.0, kind="ucie_internal",
|
||||||
))
|
))
|
||||||
view_edges.append(Edge(
|
|
||||||
src=conn_id, dst="router_mesh",
|
|
||||||
distance_mm=0.0, bw_gbs=ucie_conn_bw_v,
|
|
||||||
kind="ucie_conn_to_router",
|
|
||||||
))
|
|
||||||
|
|
||||||
return ViewGraph(
|
return ViewGraph(
|
||||||
name="cube", nodes=nodes, edges=view_edges,
|
name="cube", nodes=nodes, edges=view_edges,
|
||||||
|
|||||||
@@ -111,6 +111,7 @@ def _compute_row_positions(
|
|||||||
|
|
||||||
# Top half: evenly spaced from top PE y to just above HBM zone
|
# Top half: evenly spaced from top PE y to just above HBM zone
|
||||||
top_pe_y = 1.5
|
top_pe_y = 1.5
|
||||||
|
hbm_gap = 1.5 # minimum gap between PE rows and HBM rows
|
||||||
hbm_top_y = cube_h / 2 - 1.5 # ~5.5 for h=14
|
hbm_top_y = cube_h / 2 - 1.5 # ~5.5 for h=14
|
||||||
hbm_bot_y = cube_h / 2 + 1.5 # ~8.5 for h=14
|
hbm_bot_y = cube_h / 2 + 1.5 # ~8.5 for h=14
|
||||||
bot_pe_y = cube_h - 1.5
|
bot_pe_y = cube_h - 1.5
|
||||||
@@ -119,21 +120,24 @@ def _compute_row_positions(
|
|||||||
if rows_per_half == 1:
|
if rows_per_half == 1:
|
||||||
top_rows = [top_pe_y]
|
top_rows = [top_pe_y]
|
||||||
else:
|
else:
|
||||||
step = (hbm_top_y - top_pe_y) / (rows_per_half - 1) if rows_per_half > 1 else 0
|
# End before HBM zone with gap
|
||||||
|
top_end = hbm_top_y - hbm_gap
|
||||||
|
step = (top_end - top_pe_y) / (rows_per_half - 1) if rows_per_half > 1 else 0
|
||||||
for i in range(rows_per_half):
|
for i in range(rows_per_half):
|
||||||
top_rows.append(round(top_pe_y + i * step, 1))
|
top_rows.append(round(top_pe_y + i * step, 1))
|
||||||
|
|
||||||
# HBM rows
|
# HBM rows
|
||||||
hbm_rows = [round(hbm_top_y, 1), round(hbm_bot_y, 1)]
|
hbm_rows = [round(hbm_top_y, 1), round(hbm_bot_y, 1)]
|
||||||
|
|
||||||
# Bottom half: mirror of top
|
# Bottom half: mirror of top, start after HBM zone with gap
|
||||||
bot_rows: list[float] = []
|
bot_rows: list[float] = []
|
||||||
if rows_per_half == 1:
|
if rows_per_half == 1:
|
||||||
bot_rows = [bot_pe_y]
|
bot_rows = [bot_pe_y]
|
||||||
else:
|
else:
|
||||||
step = (bot_pe_y - hbm_bot_y) / (rows_per_half - 1) if rows_per_half > 1 else 0
|
bot_start = hbm_bot_y + hbm_gap
|
||||||
|
step = (bot_pe_y - bot_start) / (rows_per_half - 1) if rows_per_half > 1 else 0
|
||||||
for i in range(rows_per_half):
|
for i in range(rows_per_half):
|
||||||
bot_rows.append(round(hbm_bot_y + i * step, 1))
|
bot_rows.append(round(bot_start + i * step, 1))
|
||||||
|
|
||||||
return top_rows + hbm_rows + bot_rows, rows_per_half
|
return top_rows + hbm_rows + bot_rows, rows_per_half
|
||||||
|
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ _KIND_SIZE: dict[str, tuple[float, float]] = {
|
|||||||
"cube": (6.0, 4.0),
|
"cube": (6.0, 4.0),
|
||||||
"iochiplet": (4.0, 1.5),
|
"iochiplet": (4.0, 1.5),
|
||||||
"switch": (5.0, 1.5),
|
"switch": (5.0, 1.5),
|
||||||
|
"noc_router": (1.2, 0.8),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -247,8 +247,14 @@ def test_sip_view_cube_positions():
|
|||||||
def test_cube_view_has_all_components():
|
def test_cube_view_has_all_components():
|
||||||
v = _graph().cube_view
|
v = _graph().cube_view
|
||||||
expected = {"ucie-N", "ucie-S", "ucie-W", "ucie-E",
|
expected = {"ucie-N", "ucie-S", "ucie-W", "ucie-E",
|
||||||
"m_cpu", "hbm_ctrl", "router_mesh", "sram",
|
"m_cpu", "hbm_ctrl", "sram",
|
||||||
"pe0", "pe1", "pe2", "pe3", "pe4", "pe5", "pe6", "pe7"}
|
"pe0", "pe1", "pe2", "pe3", "pe4", "pe5", "pe6", "pe7",
|
||||||
|
"r0c0", "r0c1", "r0c2", "r0c3", "r0c4", "r0c5",
|
||||||
|
"r1c0", "r1c1", "r1c2", "r1c3", "r1c4", "r1c5",
|
||||||
|
"r2c0", "r2c1", "r2c4", "r2c5",
|
||||||
|
"r3c0", "r3c1", "r3c4", "r3c5",
|
||||||
|
"r4c0", "r4c1", "r4c2", "r4c3", "r4c4", "r4c5",
|
||||||
|
"r5c0", "r5c1", "r5c2", "r5c3", "r5c4", "r5c5"}
|
||||||
# Add UCIe connection nodes (4 ports x 4 connections)
|
# Add UCIe connection nodes (4 ports x 4 connections)
|
||||||
for port in ("N", "S", "E", "W"):
|
for port in ("N", "S", "E", "W"):
|
||||||
for ci in range(4):
|
for ci in range(4):
|
||||||
@@ -259,17 +265,19 @@ def test_cube_view_has_all_components():
|
|||||||
def test_cube_view_hbm_at_center():
|
def test_cube_view_hbm_at_center():
|
||||||
v = _graph().cube_view
|
v = _graph().cube_view
|
||||||
assert v.nodes["hbm_ctrl"].pos_mm == (6.5, 7.0)
|
assert v.nodes["hbm_ctrl"].pos_mm == (6.5, 7.0)
|
||||||
assert v.nodes["router_mesh"].pos_mm == (10.5, 7.0)
|
assert "r0c0" in v.nodes # routers exist in cube view
|
||||||
assert v.width_mm == 17.0
|
assert v.width_mm == 17.0
|
||||||
assert v.height_mm == 14.0
|
assert v.height_mm == 14.0
|
||||||
|
|
||||||
|
|
||||||
def test_cube_view_pe_to_router_mesh():
|
def test_cube_view_pe_to_router():
|
||||||
"""PEs connect to router_mesh in cube view."""
|
"""PEs connect to their assigned routers in cube view."""
|
||||||
v = _graph().cube_view
|
v = _graph().cube_view
|
||||||
ves = {(e.src, e.dst) for e in v.edges}
|
ves = {(e.src, e.dst) for e in v.edges}
|
||||||
for i in range(8):
|
pe_router_map = {"pe0": "r0c0", "pe1": "r0c1", "pe2": "r1c4", "pe3": "r1c5",
|
||||||
assert (f"pe{i}", "router_mesh") in ves
|
"pe4": "r4c0", "pe5": "r4c1", "pe6": "r5c4", "pe7": "r5c5"}
|
||||||
|
for pe, router in pe_router_map.items():
|
||||||
|
assert (pe, router) in ves, f"{pe} should connect to {router}"
|
||||||
|
|
||||||
|
|
||||||
# -- Views: PE ----------------------------------------------------------------
|
# -- Views: PE ----------------------------------------------------------------
|
||||||
@@ -383,32 +391,33 @@ def test_cross_cube_path_includes_conn():
|
|||||||
# -- Cube view: edges ---------------------------------------------------------
|
# -- Cube view: edges ---------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
def test_cube_view_pe_to_router_mesh_edges():
|
def test_cube_view_pe_to_router_edges():
|
||||||
"""All PEs connect to router_mesh in cube view."""
|
"""All PEs connect to their routers in cube view."""
|
||||||
v = _graph().cube_view
|
v = _graph().cube_view
|
||||||
ves = {(e.src, e.dst) for e in v.edges}
|
ves = {(e.src, e.dst) for e in v.edges}
|
||||||
for i in range(8):
|
pe_router_map = {"pe0": "r0c0", "pe1": "r0c1", "pe2": "r1c4", "pe3": "r1c5",
|
||||||
assert (f"pe{i}", "router_mesh") in ves
|
"pe4": "r4c0", "pe5": "r4c1", "pe6": "r5c4", "pe7": "r5c5"}
|
||||||
|
for pe, router in pe_router_map.items():
|
||||||
|
assert (pe, router) in ves, f"{pe} should connect to {router}"
|
||||||
|
|
||||||
|
|
||||||
def test_cube_view_sram():
|
def test_cube_view_sram():
|
||||||
v = _graph().cube_view
|
v = _graph().cube_view
|
||||||
assert "sram" in v.nodes
|
assert "sram" in v.nodes
|
||||||
ves = {(e.src, e.dst) for e in v.edges}
|
ves = {(e.src, e.dst) for e in v.edges}
|
||||||
assert ("router_mesh", "sram") in ves
|
assert ("sram", "r3c0") in ves
|
||||||
|
|
||||||
|
|
||||||
def test_cube_view_hbm_router_mesh():
|
def test_cube_view_hbm_router():
|
||||||
"""Cube view: hbm_ctrl connects to router_mesh."""
|
"""Cube view: PE routers connect to hbm_ctrl."""
|
||||||
v = _graph().cube_view
|
v = _graph().cube_view
|
||||||
ves = {(e.src, e.dst) for e in v.edges}
|
ves = {(e.src, e.dst) for e in v.edges}
|
||||||
assert ("router_mesh", "hbm_ctrl") in ves
|
assert ("r0c0", "hbm_ctrl") in ves # PE0's router → HBM
|
||||||
assert ("hbm_ctrl", "router_mesh") in ves
|
|
||||||
|
|
||||||
|
|
||||||
def test_cube_view_m_cpu_router_mesh():
|
def test_cube_view_m_cpu_router():
|
||||||
"""Cube view: m_cpu connects to router_mesh."""
|
"""Cube view: m_cpu connects to its router r2c0."""
|
||||||
v = _graph().cube_view
|
v = _graph().cube_view
|
||||||
ves = {(e.src, e.dst) for e in v.edges}
|
ves = {(e.src, e.dst) for e in v.edges}
|
||||||
assert ("router_mesh", "m_cpu") in ves
|
assert ("m_cpu", "r2c0") in ves
|
||||||
assert ("m_cpu", "router_mesh") in ves
|
assert ("r2c0", "m_cpu") in ves
|
||||||
|
|||||||
Reference in New Issue
Block a user