Making an Evolvable Motherboard
Cautionary Note: This page assumes that the reader is familiar with the Evolvable Motherboard Publications on this website.
A typical system for carrying out hardware evolution using the evolvable motherboard comprises the following components:
![]() |
| Figure 1: The principle components required for hardware evolution |
The circuitry and discussions on this page are confined to PCs, however there is no reason why Macs or any other type of computer should not be used.
Configuring the motherboard
The motherboard is configured using 12 Chip Select lines (to access individual switch banks) and 10 address/data lines (to configure individual switches). There are two ways of acheiving this:
The first method is cheap and simple, but slow. The second is slightly more involved, but well worthwhile since the motherboard can then be configured much faster by direct writes to the PC's output ports. The schematics, software and explanation of an example ISA interface can be found at the bottom of this page.
Building an Evolvable Motherboard
I am making all the schematics, PCB files, and software necessary to make and use the Evolvable Motherboard available for download at no charge! All I ask is that you acknowledge or reference me in any publications for which you have used the motherboard. If you prefer not to make it from scratch, I can supply a double sided, through-plated PCB into which you just have to solder the components. At present the PCBs are quite expensive, since I only had a small quantity made. If you know a friendly PCB-manufacturer or have access to etching equipment, you may want to make it yourself. The PCB was designed so that all the component pins are routed on the solder side. Therefore, if you don't have access to the equipment necessary for through-plating, you can still construct a working board by soldering pins through the vias. Beware though - there are about 1500 of them!
Once you have constructed your motherboard, you will need to build the daughterboards containing whatever components you want to use as evolutionary building blocks. These are easy to build - just solder a 16-way connector onto some stripboard, and wire your components accordingly. Of the 16 connections, eight connect to the switch matrix, and the remaining ones are: Digital power (5V, 0V); Analogue power (+V,Gnd,-V); and three independant control lines which can be used however you need (eg. for digital potentiometers; eeproms etc.).
Power Considerations
The interconnection architecture of the motherboard allows virtually any combination of component connection, including shorting Positive to Negative. This is not a problem if you keep the voltage to your evolving circuit below 3.0V. If you wish to use a greater voltage than this you will need to write some software filter to prevent such shorts being configured.
Software
At the lowest level, configuring the motherboard can be a series of writes to the interface card (Addresses 300H and 301H for the example ISA Card). If you are configuring at this level you will need a datasheet for the crosspoint switch chips used.. However, this can be a pain, so I've written configuration code in C and Visual Basic, which you can either copy or use as a guide. At the bottom of the page is some higher level software - a virtual motherboard. This is written exclusively in Visual Basic 5.0 (because Visual C's too difficult). The software gives a graphical representation of the motherboard, reflecting the configuration. I intend to make a .DLL of it so Visual C programmers can use it too, but don't hold your breath waiting. Also in the near future are a simple editor to translate from Evolvable Motherboard configurations to conventional schematic diagrams, and a utility to save as a PSPICE Netlist to carry out extrinsic hardware evolution.
Taking Measurements
The method for measuring a circuit's fitness is highly dependent on the type of task: if you are evolving a digital circuit, then the printer port or some other parallel I/O card may suffice. If you are after analogue voltages, you could use the joystick port, but only with very low frequency signals. When it comes to higher frequency analogue signals, you need a good data acquisition card, such as Amplicon's PC30 series. Such cards generally come with a variety of DOS and Windows software, so there shouldn't be any problems writing code. A word of advice though. The A/D inputs of most cards are high impedance and require a fairly low impedance to drive them (<1k ohm). You could acheive this by placing a 1k resistor between the output of your circuit and ground, but this will almost certainly end up in that resistor being used by evolution as part of the solution. This isn't usually a problem, but if the extra resistor conflicts with what you want evolution to acheive, then you need to buffer your chosen output(s) as shown:
![]() |
||
Two Methods of matching evolved circuit
output impedance to A/D input
|
| Disclaimer: The Evolvable Motherboard was designed as part of an ongoing research project and is not intended to be a commercial product. I take no responsibility whatsoever for mistakes in any schematics, hardware or software provided, or any injury or loss as a result of their use. |