Building an Artificial Brain: A Bit of a Twist

By Max Maxfield |
In my previous Bodacious Brain blog, I discussed how this project first saw the light of day. Needing a home for my brain (you know what I mean), I acquired a 25" tall domed glass cylinder with an internal diameter a tad over 9".



In my previous Bodacious Brain blog, I discussed how this project first saw the light of day. Needing a home for my brain (you know what I mean), I acquired a 25" tall domed glass cylinder with an internal diameter a tad over 9".

As you may recall, we are planning on filling this cylinder with layers of "neurons" in the form of small round circuit boards, each carrying a processing element and a tri-colored LED.

Furthermore, we've decided that each neuron layer will be presented as some number of concentric rings (our initial implementation will support three rings). Each neuron will be able to communicate (receive and transmit signals) with the neurons on either side in the same ring. Each neuron will also be able to communicate with the corresponding neuron on its adjacent inner ring, and also with the two corresponding neurons on its adjacent outer ring. We also decided that each transmit-receive connection pair will employ two wires. A bird's eye view of the inter-neuron signals for a single layer is shown below (click here to see a full-size version of this image).


The circle denotes the 9” diameter working area inside the glass cylinder. The thin green rectangles symbolize edge-wise views of the neuron circuit boards. The pink "mushrooms" represent 8mm tri-colored LEDs presented in traditional lead-through-hole (LTH) packages. The neuron boards will be air-wired (fly-wired) to each other so -- as much as possible -- they will appear to be floating in the air.

Note that each neuron will also receive a signal from the corresponding neuron in the layer below, and it will transmit a signal to the corresponding neuron in the layer above, but these signals aren’t represented in the diagram above.

Each neuron will be running the same program, and we will be experimenting with different software prototypes to determine what we believe to be the best option, but you know how it is -- no matter how confident you are that you've made the right decisions, you invariably need to change something downstream. Thus, one of the things we want is the ability to re-program all of the neurons forming the brain after the whole thing has been constructed.

With regard to the neural processing elements, we're currently working with GPAK5 chips from Silego. The easiest way to think about the GPAK5 is as being teeny-tiny (2mm x 3mm) mixed-signal FPGA-type device.

Noodling over the neurons

OK, let's take this step-by-step. The GPAK5 is a 20-pin device that can operate on anything from 1.8V to 5V (we'll be using 5V for our logic because that's what I grew up with as a lad). In addition to its 5V and 0V pins, the GPAK5 has 18 general-purpose input/outputs (GPIOs). Two of these GPIOs can be used as an I2C bus, thereby allowing the GPAK to be reprogramed on-the-fly. Since we intend to use this functionality, we are therefore left with only 16 GPIOs to play with.

In addition to the pins on the device, we also need to determine how many vias are required on the periphery of the circuit board to support power, ground, I2C, and inter-neuron communication. So, how many pins and vias will we need?


Phew, we've managed to squeeze everything in with one pin to spare! As you'll see in a little while, the reason we've allocated two vias each to the 5V and 0V signals is that this is going to make wiring everything up a lot easier in the future; the same reasoning applies to the doubling up of the two I2C signal vias. Although the tri-colored LED requires three of the GPAK5's pins, it doesn’t consume any of the peripheral vias because it's local to the neuron. Last, but not least, we have six inputs from other neurons (DI0 to DI5) and six outputs to other neurons (DO0 to DO5).

Based on our newfound knowledge regarding the number of peripheral vias, our next task is to determine the diameter of our neuron circuit board. From the above, we know that we need 20 vias. Purely for sentimental reasons (and because a larger pitch will make things easier for me to solder), I decided to use a traditional 0.1" pitch. Furthermore, rather than simply have the 20 vias arranged shoulder-to-shoulder in a circle, I decided to add small spacers (gaps) between functional via groups.  As we can see below, the way I've grouped things means we end up needing 10 spacers, each having a 0.05" pitch, which is equivalent to an additional 5 vias. This means we now have 25 total vias, or 50 "half vias," so there will be 360°/50 = 7.2° separation per half via. The remaining calculations proceed as follows:

Cv = Circumference of via ring 
Rv = Radius of via ring
Dn = Diameter of neuron board


Cv = 2 * Pi * Rv
Rv = Cv / (2 * Pi)


Dn = (2 * Rv) + 0.1"
Dn = (Cv / Pi) + 0.1"
Dn = (2.5" / Pi) + 0.1"
Dn = 0.9"

Now we can start to see our neuron circuit board firming up. It has an outer diameter of 0.9" and a working area with a diameter of 0.7" in the center. The tri-colored LED will be attached to four pads on the "front" of the neuron (the side facing out of the cylinder to the observer); the remaining components -- or the majority thereof -- will be mounted on the back of the board.


Next, let's consider the various peripheral signals and vias as illustrated below. I'm afraid that fully grasping the various inter-neuron connections can take a little bit of time to wrap one's brain around (no pun intended). As I mentioned earlier, we have two 5V vias and two 0V vias, because this is going to make our lives (at least, the wiring part of our lives) much easier later on. Similarly, having two SCL (I2C clock) and two SDA (I2C data) vias is going to greatly ease our wiring conundrums (click here to see a full-size version of this image).


Input DI0 comes from the neuron in the layer below (or from a primary stimulus in the case of the lowest layer), while output DO0 feeds the neuron in the layer above.

Signals DI1 and DO1 connect to the neuron to the left in this ring, while DI5 and DO5 connect to the neuron to the right. Observe that the top-bottom/input-output orientation of the inputs and outputs are "flipped" from one side of the neuron to the other (e.g., DI1 is on the top and DI5 is on the bottom), thereby facilitating the connection of adjacent neurons.

Signal pair DI3/DO3 connect to the neuron on the adjacent inner ring, while DI2/DO2 and DI4/DO4 connect to the two neurons to the left and right on the adjacent outer ring, respectively. It may be easier to visualize the way these signals work by first referring to the first picture in this column, and then considering the top-down view presented below.


The idea is that the D02/DI2 signal pair on this neuron will connect to the DI3/DO3 signals on the neuron to the left in the adjacent outer ring; similarly, the D04/DI4 signal pair on this neuron will connect to the DI3/DO3 signals on the neuron to the right in the adjacent outer ring.

Meanwhile, depending on its location in the matrix, the DI3/D03 signal pair on this neuron will be connected to either the D02/DI2 or the D04/DI4 signals on the neuron in the adjacent inner ring.

Once again, observe that the left-right/input-output orientation of the D02/DI2 and D04/DI4 signals are "flipped" with regard to the DI3/DO3 signals, thereby facilitating inter-neuron wiring.

A bit of a twist

I'll leave you to cogitate and ruminate over the preceding discussions in your own time because we have other fish to fry, as it were. The next point to ponder is how we intend to stack the layers of neurons on top of each other. Of course, we could simply place each layer directly over the one below, but that would be boring.

Remember that there are 16 neurons in the outer ring, which means each pair of adjacent neurons is separated by 360°/16 = 22.5°. So, if we assume that layer 0 at the bottom of the pile is oriented at 0°, how about we rotate layer 1 by half this amount (11.25°) as illustrated below (click here to see a full-size version of this image)?


Remember that we are calling the inner ring containing four LEDs R0, the next ring containing eight LEDs R1, and the outer ring containing sixteen LEDs R2. So, although ring R2 looks OK, it's immediately apparent that we are going to require two more layers/rotations to "fill" all of the "slots" in ring R1, and a further four layers/rotations to "fill" all of the "slots" in ring R0.

To put this another way; we will require eight layers/rotations of 11.25° to complete a 90° rotation and fill all of the slots in ring R0. We will also require an additional "capping layer" if we wish the LEDs on the topmost layer to be aligned with the LEDs on the bottommost layer. Thus, 'n' full rotations, plus a capping layer, will require (2 * n) + 1 layers.

Feel the power!

The next thing we have to consider is how we're going to power the beast. As always, there are many possibilities. One suggestion would be to have great big hairy power rails running vertically up the center of the column, to bring out horizontal feeds, and to attach the neurons like shirts hanging from a clothes rail in a bedroom closet as illustrated below.


Another alternative would be to have a larger number of thinner 5V and 0V rails running vertically throughout the column as illustrated below (click here to see a full-size version of this image). In fact, it was this scheme that inspired us to have dual 5V and 0V connections on our neurons.


One reason I think this latter scheme may be preferable is that it could add stability to the overall structure. Having said this, we're still pondering which of these power architectures will be the less visually intrusive.

Prodigious prototypes

Once again, I fear I may have waffled on too much. "No!" I hear you cry, "your writings bring a smile to my face and joy to my heart." You are very kind. You are flattering me. (Don’t stop!)

It is true to say that some of my hobby projects take an inordinate amount of time to come to completion because I tend to get distracted by new ideas ("Ooh! Shiny!"). In the case of the Bodacious Brain, however, things are racing along. This is because my chum Nathan (see my previous Bodacious Brain column) and I are constantly bouncing ideas back and forth and stimulating each other's imaginations.

Also, the engineers at Silego have become enthused by this project. Plus, my chum Duane Benson is the marketing manager at Screaming Circuits, which specializes in building complex boards with rapid turn times. This latter point is rather handy because we are hoping to have some prototype boards to take to ESC Boston at the beginning of May (just a couple of weeks away as I pen these words).

To cut a long story short, Nathan and I have been brain-stem-storming furiously; the Silego engineers have been working deep into the night, and -- just this morning -- we sent the design files for the prototype boards to Duane.

Rather than create an expensive 9" diameter board representing an entire layer, we decided to implement smaller 4.5" "quadrant" boards. We intend to provide these as kits, where each kit comprises four quadrant boards. You can connect these together to create a complete 1 x 4 layer, or you can create 2 x 2 half layers and mount one on top of the other, or you can mount all four quadrants on top of each other to implement a 1 x 4 stack. (Of course, if you happen to have more kits, you can add more layers.)

A three-dimensional rendering of what one of these quadrant boards will look like is illustrated below (click here to see a full-size version of this image).


You must admit that this really is rather tasty. We've removed as much of the board material as possible to minimize visual obstructions. The little white devices in the center of the nodes (which will equate to the neurons in the final implementation) are the LEDs. It was easier and cheaper to use these surface-mount versions for the prototype -- we'll return to the 8mm LTH versions for the full-up implementation. All of the other components are mounted under the board.

The plan is to quickly build 10 kits (40 quadrants) to make sure everything is working. We will give these kits away as part of my Bodacious Brain presentation at ESC Boston. Then, as soon as we return from ESC, we'll build the rest of the boards. I'll be offering 10 of these kits to members of the EEWeb Community to play with; I'll be talking about this more in future columns once the ESC dust has settled. Until then, I suggest you keep on returning to EEWeb to stay in touch with what's happening. In the meantime, as always, I welcome your questions and comments.

Related Articles

— Max Maxfield, Editor of All Things Fun & Interesting Go to Link

Join the Conversation!

User must log-in to comment.
  • by  Elizabeth Simon (edited)
    Instead of rotating 11.25 deg, try using 33.75 deg. This should result in your R0 ring appearing much more random. It seems to me that you are already going to have a lot of wires running around inside so from that standpoint the large power rails in the center have a certain appeal. If you need stability, the layer to layer signal wires could be made stiff enough to provide some structure. What do you plan for ground reference for your signals (other than having them all powered by the same power supply)
  • by  Max Maxfield (edited)
    "Instead of rotating 11.25 deg, try using 33.75 deg. This should result in your R0 ring appearing much more random." Ooh, Ooh, Ooh -- I never thought of that -- this makes me wonder about other rotational possibilities -- I think I might make a 9-layer mock-up out of cardboard and have a play with this -- thansk so much for the suggestion.

Add Comment

You must log-in to comment.