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:
@@ -247,8 +247,14 @@ def test_sip_view_cube_positions():
|
||||
def test_cube_view_has_all_components():
|
||||
v = _graph().cube_view
|
||||
expected = {"ucie-N", "ucie-S", "ucie-W", "ucie-E",
|
||||
"m_cpu", "hbm_ctrl", "router_mesh", "sram",
|
||||
"pe0", "pe1", "pe2", "pe3", "pe4", "pe5", "pe6", "pe7"}
|
||||
"m_cpu", "hbm_ctrl", "sram",
|
||||
"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)
|
||||
for port in ("N", "S", "E", "W"):
|
||||
for ci in range(4):
|
||||
@@ -259,17 +265,19 @@ def test_cube_view_has_all_components():
|
||||
def test_cube_view_hbm_at_center():
|
||||
v = _graph().cube_view
|
||||
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.height_mm == 14.0
|
||||
|
||||
|
||||
def test_cube_view_pe_to_router_mesh():
|
||||
"""PEs connect to router_mesh in cube view."""
|
||||
def test_cube_view_pe_to_router():
|
||||
"""PEs connect to their assigned routers in cube view."""
|
||||
v = _graph().cube_view
|
||||
ves = {(e.src, e.dst) for e in v.edges}
|
||||
for i in range(8):
|
||||
assert (f"pe{i}", "router_mesh") in ves
|
||||
pe_router_map = {"pe0": "r0c0", "pe1": "r0c1", "pe2": "r1c4", "pe3": "r1c5",
|
||||
"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 ----------------------------------------------------------------
|
||||
@@ -383,32 +391,33 @@ def test_cross_cube_path_includes_conn():
|
||||
# -- Cube view: edges ---------------------------------------------------------
|
||||
|
||||
|
||||
def test_cube_view_pe_to_router_mesh_edges():
|
||||
"""All PEs connect to router_mesh in cube view."""
|
||||
def test_cube_view_pe_to_router_edges():
|
||||
"""All PEs connect to their routers in cube view."""
|
||||
v = _graph().cube_view
|
||||
ves = {(e.src, e.dst) for e in v.edges}
|
||||
for i in range(8):
|
||||
assert (f"pe{i}", "router_mesh") in ves
|
||||
pe_router_map = {"pe0": "r0c0", "pe1": "r0c1", "pe2": "r1c4", "pe3": "r1c5",
|
||||
"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():
|
||||
v = _graph().cube_view
|
||||
assert "sram" in v.nodes
|
||||
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():
|
||||
"""Cube view: hbm_ctrl connects to router_mesh."""
|
||||
def test_cube_view_hbm_router():
|
||||
"""Cube view: PE routers connect to hbm_ctrl."""
|
||||
v = _graph().cube_view
|
||||
ves = {(e.src, e.dst) for e in v.edges}
|
||||
assert ("router_mesh", "hbm_ctrl") in ves
|
||||
assert ("hbm_ctrl", "router_mesh") in ves
|
||||
assert ("r0c0", "hbm_ctrl") in ves # PE0's router → HBM
|
||||
|
||||
|
||||
def test_cube_view_m_cpu_router_mesh():
|
||||
"""Cube view: m_cpu connects to router_mesh."""
|
||||
def test_cube_view_m_cpu_router():
|
||||
"""Cube view: m_cpu connects to its router r2c0."""
|
||||
v = _graph().cube_view
|
||||
ves = {(e.src, e.dst) for e in v.edges}
|
||||
assert ("router_mesh", "m_cpu") in ves
|
||||
assert ("m_cpu", "router_mesh") in ves
|
||||
assert ("m_cpu", "r2c0") in ves
|
||||
assert ("r2c0", "m_cpu") in ves
|
||||
|
||||
Reference in New Issue
Block a user