Visual walkthrough — Network-on-Chip (NoC) topologies
This is the picture-story behind everything in the parent note, Network-on-Chip (NoC) topologies. Read it top to bottom; every symbol is earned before use.
Step 1 — What is a "node", a "link", and a "hop"?
WHAT. A node is one router with a core attached — draw it as a dot. A link is a wire between two dots — draw it as a line. A hop is one journey along one link. If a packet crosses 3 links to reach its destination, that trip is 3 hops.
WHY. Before we can talk about "how far" or "how much", we need the smallest countable pieces. Everything else on this page is counting dots, lines, and hops. That is the whole trick.
PICTURE. Two dots joined by one line = one hop. Add a third dot and the packet now needs 2 hops to reach the far end. The number of hops is literally the number of lines you walk over.
Step 2 — Lay out the Mesh and read off distance as "blocks walked"
WHAT. Arrange nodes on an grid: columns, rows. Every interior dot links to its 4 neighbours: North, South, East, West. No diagonal wires exist.
WHY. A chip is a flat rectangle, so a flat rectangular grid of routers is the layout that wastes the least wire. This is why the Mesh is the default. But "no diagonals" has a consequence we must measure: to go across and up, you cannot cut the corner — you walk it like city blocks.
PICTURE. Look at the red path from the bottom-left corner to the top-right corner. It steps right, right, right (across the columns) then up, up, up (up the rows). It can never go diagonally, so it always pays for both directions in full.
Step 3 — Push the two corners apart: the Mesh diameter
WHAT. The two dots that are farthest apart are opposite corners. Bottom-left is at column , row ; top-right is at column , row .
WHY. Diameter is defined as the worst case, so we must find the pair that maximises Step 2's formula. Corners maximise both and at once.
PICTURE. The amber staircase spans the full width ( columns) and full height ( rows). Count the amber steps: that count is the diameter.
For a mesh: hops — exactly matching the parent note.
Step 4 — Cut the chip in half: the Mesh bisection bandwidth
WHAT. Split the grid into two equal halves. For a square grid we can cut either way — a vertical cut (halving the columns) or a horizontal cut (halving the rows) — and count how many links the knife severs. A vertical cut severs one link per row ( of them); a horizontal cut severs one link per column ( of them). We keep whichever cut severs fewer links, because that is the true bottleneck. Each severed link carries bits per second. Multiply.
WHY. Imagine every node on one half wants to talk to a node on the other half at the same time. All that traffic must squeeze through exactly the links the cut severed. So the bisection bandwidth is the true ceiling on "everyone talks across the chip" traffic — it is the number the diameter cannot tell you. We choose the fewest-link cut because a bottleneck is defined by the tightest squeeze, not the loosest.
PICTURE. The dashed cyan vertical cut severs one horizontal link per row; the faint dashed horizontal cut severs one vertical link per column. On a square grid both sever the same count; on a tall thin grid the shorter cut wins. Each cut wire glows amber.
For a mesh with : matching the parent's worked example.
Step 5 — Change ONE rule: wrap the edges → the Torus
WHAT. Take the same mesh and add wraparound links: the leftmost column joins the rightmost, the top row joins the bottom. Now the grid is a loop in both directions.
WHY. In the mesh, corner-to-corner was expensive because you had to walk the whole width. If the far edge is now a single hop away (through the wrap), the worst case shrinks. This is the whole reason a torus exists: same layout, shorter worst path.
PICTURE. The amber wrap arrow leaps from the right edge straight back to the left edge in one hop. Suddenly the "farthest" node is only half a grid away in each direction, because you go whichever way is shorter.
For an : vs. mesh — a drop, exactly the parent's figure. Cost: those wrap wires cross the whole chip → more power, see Power Management in SoCs.
Step 6 — Change the rule harder: label nodes in binary → the Hypercube
WHAT. Give nodes binary names to ( bits). Connect two nodes if and only if their names differ in exactly one bit.
WHY. In a mesh, "distance" was blocks walked. Here distance becomes how many bits differ between two names (the Hamming distance). Since each hop flips exactly one bit, the number of hops equals the number of bits that disagree. Flipping bits is a far more powerful move than stepping one grid cell — you can jump across the whole address space.
PICTURE. Node links to , , — each neighbour is one flipped bit (the flipped bit glows amber). Reaching any node just means fixing the wrong bits one at a time.
Now the second metric — bisection. Split the names into two halves by looking at the top bit: all names starting with on the left, all names starting with on the right. The only links crossing this cut are the ones that flip that top bit — and every node has exactly one such link. So the cut severs one link per node-pair, i.e. links.
Cost. Each node needs links, so router size grows with the chip — a classic latency-vs-cost trade-off. And a cube of dimension cannot be drawn flat, so it is hard to lay out in 2D silicon.
Step 7 — Fatten the wires toward the root → the Fat-Tree
WHAT. Build a tree: leaves at the bottom are the cores, internal nodes are switches, and everything funnels up toward a single root and back down. First fix the branching factor: a ==-ary tree== means every switch has exactly children below it. So is a binary tree (2 children each), is a quad tree, and so on. This one number controls how fast the tree fans out. The second trick is that links get wider (more wires) at every level going up — level 0 links carry , level 1 carry , level 2 carry , and so on. That widening is why it is called a fat-tree.
WHY. A plain tree bottlenecks at the root: all left-to-right traffic funnels through one thin link. If instead we double the link width at each level up, the root is wide enough to carry everything — the bottleneck disappears. So the fat-tree buys uniform bandwidth by spending wires where the traffic concentrates.
PICTURE. The amber links thicken as they climb: thin at the leaves, twice as thick one level up, twice again above that, fattest at the root. A packet goes up to a common ancestor switch, then back down to its destination.
Why "up then down = " — trace it in the next picture. The height of the tree is levels: each level up multiplies how many leaves sit below by , so it takes multiplications to cover all leaves. A packet from one leaf to a distant leaf has no sideways link at the leaves — its only route is to climb to the lowest switch that is an ancestor of both leaves, then descend. In the worst case that common ancestor is the root, so the packet climbs the full levels and descends the full levels: .
Cost. Those wide root switches are huge in area and power, which is why fat-trees rule datacenters more than tiny SoCs.
Step 8 — The degenerate extreme: strip it to a loop → the Ring
WHAT. Give every node exactly 2 links, forming a single cycle. This is the minimum possible network that still connects everyone.
WHY. We include this case because it shows the failure mode: with only 2 links per node, any cut through the ring severs only 2 links, no matter how many nodes there are. The bisection bandwidth stops growing — it is stuck at a constant.
PICTURE. The dashed cut slices the ring and touches exactly 2 wires (amber), while the diameter is the long way to the opposite node — half the ring.
When 64 cores flood the network with coherence broadcasts, that flood must survive the narrowest cut — a Ring's flat chokes, while the Hypercube and Fat-Tree () breathe.
The one-picture summary
Every topology is the same dots with a different connection rule, and each rule moves the two numbers — diameter (how far, worst case) and bisection (how much, at the tightest cut).
Recall Feynman retelling — say it like you're explaining to a friend
Picture a city of routers as dots. A hop is one drive down one street. Two questions decide if the city works: "what's the longest trip anyone ever has to make?" (that's the diameter) and "if I split the city in half, how many roads carry all the cross-town traffic?" (that's the bisection bandwidth). Start with a plain grid — the mesh. No diagonal roads, so a corner-to-corner trip pays for the full width and the full height: hops. Cut it into halves and you sever one road per row (or per column, whichever is fewer), so bandwidth is roads wide. If a side has an odd number of towns, the two halves differ by one town but the cut still crosses the same number of roads — the formula doesn't budge. Now wrap the edges around — the torus — and the far edge is one hop away, halving the worst trip and doubling the cut's width (a straight knife always crosses a loop in two places). Instead of grids, name the dots in binary and connect names that differ by one bit — the hypercube — and a trip is just "fix the wrong bits one at a time", so the worst trip is only bits long, and splitting on the top bit shows roads cross the cut. Grow a tree and fatten the wires toward the root — the fat-tree — where every switch has children so the tree is levels tall; a packet climbs to a shared ancestor and comes back down, paying that height twice (), and because the wires double each level up, no level is a bottleneck, so all roads' worth of bandwidth survives. Strip everything down to a single loop — the ring — and every cut touches just 2 roads forever, so it never scales. That's the whole page: same dots, change one rule, watch diameter and bisection move.