# 20161014 - Possible Directional Routing Hoplite Variant?

EDIT: One that might not deadlock...

                +------+      +------+      +------+
                |      |      |      |      |      |
                V      |      V      |      V      |
          +----[_]<---[_]<---[_]<---[_]<---[_]<---[_]<---+
          |     |      ^      |      ^      |      ^     |
          |     V      |      V      |      V      |     |
          +--->[_]--->[_]--->[_]--->[_]--->[_]--->[_]----+
                |      ^      |      ^      |      ^
                V      |      V      |      V      |
          +----[_]<---[_]<---[_]<---[_]<---[_]<---[_]<---+
          |     |      ^      |      ^      |      ^     |
          |     V      |      V      |      V      |     |
          +--->[_]--->[_]--->[_]--->[_]--->[_]--->[_]----+
                |      ^      |      ^      |      ^
                V      |      V      |      V      |
          +----[_]<---[_]<---[_]<---[_]<---[_]<---[_]<---+
          |     |      ^      |      ^      |      ^     |
          |     V      |      V      |      V      |     |
          +--->[_]--->[_]--->[_]--->[_]--->[_]--->[_]----+
                |      ^      |      ^      |      ^
                |      |      |      |      |      |
                +------+      +------+      +------+

Old post which would definitely deadlock...
Thinking about minimal grid based routing. Two things I don't like about the Hoplite,
(1.) Full chip return paths.
(2.) Route length not proportional to 2D locality.
Like the simplified router and crossbar. Wondering if there is a way to improve the routing by adjusting the fixed directions and removing the full chip return paths. Came up with this idea, but not sure if it is deadlock free yet. Likely this is well researched and has some proper name, but I'm not well learned in this area.

    +--->+--->+--->+--->+--->+--->+--->+
    ^    |    ^    |    ^    |    ^    |
    |    V    |    V    |    V    |    V
    +<---+<---+<---+<---+<---+<---+<---+
    ^    |    ^    |    ^    |    ^    |
    |    V    |    V    |    V    |    V
    +--->+--->+--->+--->+--->+--->+--->+
    ^    |    ^    |    ^    |    ^    |
    |    V    |    V    |    V    |    V
    +<---+<---+<---+<---+<---+<---+<---+
    ^    |    ^    |    ^    |    ^    |
    |    V    |    V    |    V    |    V
    +--->+--->+--->+--->+--->+--->+--->+
    ^    |    ^    |    ^    |    ^    |
    |    V    |    V    |    V    |    V
    +<---+<---+<---+<---+<---+<---+<---+

Hoplite is only right and down, with a full chip return to loop around. This is right-only on even rows, left-only on odd rows, then up-only on even columns, down-only on odd columns. Requires grid of cores to be a multiple of 2 in each dimension. Enables a message to quickly turn around.
Haven't fully thought through routing logic, but the general idea is that if a packet needs to move in a direction not supported on a row or column, it get routed on the other axis so it can switch direction.