Building Blocks: Wires

Building Blocks: Wires

Our vision for the GoL computer is one similar to real computers.  That is, it’s built from logic gates, has memory, adders, clocks, etc., and is programmed in a format comparable to real assembly language.  Just like regular computers, we have to start from the basics: wires and logic gates.  The first task is to find implementations of those simple components in metapixels.

The order in which I present the various building blocks is a combination of discovery order,  relevance, and complexity.

Wire

There’s actually a couple different options as far as wire goes.  You can see some options in this simulation.

some wires and a clock

We chose the 3-wide wire, with electron tails 2 blocks behind, which is shown on the top row.  There are some other variations on electron which are shown in the second row.  The third row shows a type of  2-wide wire (discovered later) which has some inherit side-to-side flexibility.  This 2-wide wire ends up being useful only as a single “module” within a larger wire, to help squeeze around an obstacle.  The 3-wide wire is superior, in my opinion, because it is uniform (can take on any length) and handles 90 degree turns better.  The electron as shown in the first row is the kind that arises most naturally in various circuits, such as the clock at the bottom.  Care must be taken, however, to ensure that the tails are properly formed, since several logic gates malfunction if the tails are incorrect.  Furthermore, a sporadic signal in the wire can end up reverberating to both ends.

There are probably other potential designs for a wire, using other metapixel rules or other arrangements, but I believe the B1/S and B2/S combination is one of the most useful.   For comparison, wireworld electrons are B12/S (but have a third “dying” state).

Corners

I made some mention of corners in the last post, but here are some more variations:

Three types of corner. Each corner has identical delay.

The best kind of corner is one whose delay we can ignore, meaning that we do not have to count the number of corners to calculate the time it takes for a signal to travel down a long wire.  Each corner above follows the correct Manhattan-distance-based timing, so they will all be compatible with each other and with any other circuits that obey Manhattan distance (which is not a give-in with a Moore neighborhood).

  1. The most common corner used in our designs is the one in the top-left and bottom-right of the animation.
  2. The corner in the top-right has the advantage of being narrower on one side, but is likewise wider on the others.
  3. The corner in the bottom left is the widest, which can be both an advantage and disadvantage.

Wire Splits

One important rule to keep in mind is that “something cannot be created from nothing,” when it comes to our CA, at least.  The only way to generate an electron is if we already had one.  The only way to increase our total electron count is through wire splitters.

The corners listed above can be converted into wire splitters, quite conveniently actually.   The first corner can be transformed into a 2-way wire split (turning left and right).  The second can be transformed to a 2-way turn-or-go-straight split.  The third one can be converted into any kind of 2- or 3-way split.

4 of the 5 most common splits. Missing is the third configuration of the bottom two splits. Note the slight but important modification to the top-right split.

Wire Crossing

Wire crossings allow signals to pass directly through each other.  Since we are limited to a 2D world, a compact wire crossing is one of the most important building blocks.  The discovery of the wire crossing actually came after a couple of the more simple logic gates.  After the team did a decent amount of trial-and-error, El’endia found the wire crossing below.  He introduced the B12/S1 rule, shown in red, as the fourth (and currently last) type of metapixel in our project.

First-discovered wire crossing.

I figured out a slightly more compact version, but so far I’ve never actually used it in bigger circuits:

Slightly more compact, but probably has no real advantage.

There is also a parallel wire crossing.  After one notable almost-correct attempt, it turns out I only needed to make a minor modification.  El’endia gets credit for this design.

Parallel wire crossing.

Rarely in actual circuitry are parallel wires this close together, so the circuit will probably involve diagonal wiring to bring them together.

Diagonal Wire

Diagonal wire is wire that shifts to the side as it travels forward,  which enables the wire to cut corners if need be.

Diangonal wiring.

Or, less practically (requiring larger distances between electrons and dependent on the exact distance):

Small diagonal wiring.

Delay Wire

Also of importance is delay wire, which is wire that slows down the passage of electrons.  Delay wire is classified by its length and delay (how long it is versus how long electrons take to flow through it).  The only useful generic delay wire I’m currently aware of is this 4:3 wire by El’endia:

4:3 delay wire

I have built some delay wire modules of the sizes 22:11 and 33:11 for our project.  The use-cases and reasoning behind those sizes will be explained later.

22:11 delay wire
33:11 delay wire

Leave a Reply

Your email address will not be published. Required fields are marked *

www.000webhost.com