Part II Computer Science Project Ideas
If you're interested in any of these ideas, please contact Theo Markettos (atm26@cl).
Bitcoin mining with Bluespec on FPGA
Bitcoin is an upcoming crypto-currency. Bitcoins are 'mined' by calculating a large number of SHA-256 hashes. Most bitcoin mining efforts have concentrated on running on CPU or GPU, while far superior performance can be achieved with FPGAs. Bitcoin implementations and infrastructure are available on numerous platforms.
BlueSpec SystemVerilog is a high-level hardware description language (HDL) derived from Haskell, which is good for architectural exploration of different designs in a way that is awkward in Verilog. We have a naive SHA-256 implementation in Bluespec - it statically elaborates the entire hash function, which works but would run at a very slow clock if synthesised. Pipelining it could significantly increase the throughput, as could transforming the algorithm. As you synthesise and optimise it, you'll gain a deep knowledge of the timing and performance of modern hardware.
We also have Bluehive, a system containing 16 large Stratix IV FPGAs. This is larger than most previously bitcoin mining FPGA systems, and provides the opportunity for table-topping results.
This project gives the opportunity to explore architectures for high-performance hardware computation, in a fiercely competitive area.
Soundcard energy monitor
Devices to monitor domestic electricity consumption are widely available. But often they do not provide a convenient interface to extract data, nor a rapid update rate.
USB soundcards cost about $3 (for example, from DealExtreme). The line in or microphone inputs contain an analogue to digital converter with a USB output.
The project involves building a sensing coil to wrap around a single core wire carrying a current (for example, the tail to your home electricity meter). This connects to the line in or microphone input of the soundcard. Then a fast fourier transform is used on the sampled audio to extract the 50Hz (or 60Hz) harmonic, and measure its amplitude. Care is required to ensure calibration and linearity of the reading.
The current consumption can then be provided as a service to other software applications that require it (for example, logging, graphing or CPU speed control).
A second channel connected to an AC transformer (for example, a plugin wallwart as supplied with a router) might give a means to measure the voltage directly. Combining voltage and current readings provides true watt and power factor measurements.
In addition, the harmonic content of the mains could be analysed. Can noisy appliances be recognised from their power+harmonics traces?
VNC is open-source software which allows the display of one computer to be sent to another across a network, and keyboard/mouse events to be sent back. Typically this is used for remote control of desktop PCs or servers, particularly those running operating systems that don't support native remote access. However the VNC protocol is more general that allows remote display of any visual data across a network.
In particular there are some devices that have video output but no network connection. This might be hardware with a monitor output such as oscilloscopes, video recorders with on-screen controls, or 1980s 'classic' computers.
This project would be to attach a VNC interface to them. It would consist of a video capture card to digitise the video output, compression and encoding of the VNC framebuffer, and interfacing the VNC keyboard/mouse model to whatever user interface the device has.
Ideally this would run on a low-footprint platform such as the Altera FPGA boards, though a simpler version might run on a desktop PC instead. As well as the hardware aspects of the digitiser, some parts of the VNC compression might be interesting since this video stream is not the typical static desktop expected by VNC.
3D and/or multi-user printed circuit board design
Modern printed circuit boards (PCBs) are typically composed of 6 or more layers of copper separated by fibreglass backing. Often layers are connected by hidden vias which are not visible on the surface of the board. Typically design is performed using a PCB CAD package which shows a 2D representation of the board on screen with the ability to turn on and off various layers, but this does not show well the layers through which a via penetrates. One aspect of this project might be write a PCB package which is able to render the design using a 3D API (such as OpenGL) which is able to use transparency to show different layers from different angles and thus gain an idea of the internal structure of the board. It would be useful to explore whether this is a helpful visualisation. A little work in this area has been done with Lasagne though this seems to be dead. It might be sensible to adapt an existing PCB design package (such as PCB) rather than write one from scratch.
Another idea might be to use a database backend to store the design being worked on. This might provide several features not provided by traditional PCB CAD systems. Typically complex designs are worked on by many people (for example an RF specialist on high frequency analogue layout, or a low noise analogue designer on sensitive instrumentation), though the tools only allow one person to edit the design at once. A database might allow multiple users to edit a design concurrently, which would greatly increase the parallelism in the design process. A journalling database might also provide an easy way to do version control of the layout.