Get the source.
Our devices are open source hardware and software. In fact, we go great lengths to apply the open source principles at every level possible, and is best known for the Milkymist system-on-chip (SoC) which is among the first commercialized system-on-chip designs with free HDL source code. As a result, several Milkymist technologies have even been reused in applications unrelated to video synthesis.
Milkymist SoC
The Milkymist system-on-chip uses the LatticeMico32 (LM32) core as a general purpose processor. It is a RISC 32-bit big endian CPU without a memory management unit (MMU). It is supported by the GCC compiler and can run RTEMS and uClinux. There is also an experimental back-end for LLVM targeting this microprocessor.
The LM32 microprocessor is assisted by a texture mapping unit and a programmable floating point VLIW coprocessor which are used by the Flickernoise video synthesis software. It is also surrounded by various peripheral cores to support every I/O device of the Milkymist One. The system-on-chip interconnect uses three bridged buses and mixes the Wishbone protocol with two custom protocols used for configuration registers and high performance DMA with the SDRAM.
The architecture of the Milkymist system-on-chip is largely documented in the project founder’s Master thesis report. Most components of the system-on-chip, except the LatticeMico32 core, were custom developed and placed under the GNU GPL license.
The QEMU emulator can be used to run and debug Milkymist SoC binaries on another computer.
Milkymist One
The detailed technical specifications of the Milkymist One are as follows:
- Multi-standard video input (PAL/SECAM/NTSC)
- Two DMX512 (RS485) ports
- MIDI IN and MIDI OUT ports
- SVGA output, 24bpp, up to 140 MHz pixel clock (about 1280×1024)
- AC97 audio
- XC6SLX45 Spartan-6 FPGA supporting the open source Milkymist SoC
- 128MB 32-bit DDR400 SDRAM
- 32MB parallel flash
- 10/100 Ethernet
- Memory card
- Two USB host connectors
- RC-5 compatible infrared receiver
- RS232 debug port
Following the open source principles that guide the project, the design files of the printed circuit board and the CAD files of the case were released under the Creative Commons Attribution-Share Alike license.
Flickernoise
Flickernoise is the video synthesis software that runs on the Milkymist One. It is heavily inspired by MilkDrop and uses a similar, and largely compatible, scripting language to define and program the visual effects. However, while MilkDrop is designed to run automatically in a music player, Flickernoise puts the accent on the interactivity of the visuals and live performance uses. The software supports the programming of visual effects that transform a live video stream coming from a camera connected to the Milkymist One, as well as input from OpenSoundControl, DMX512 and MIDI controllers.
Flickernoise runs on the RTEMS real-time operating system, and uses many POSIX software libraries that were ported to this operating system such as libpng, libjpeg, jbig2dec, openjpeg, Freetype, MuPDF and liblo for OpenSoundControl support. The streamlined hardware platform along with the use of a real-time operating system allows the system to have a lower response time than an equivalent PC based setup.
Flickernoise is also free software, released under the GNU GPL.
Software libraries
The task of developing Flickernoise was made much easier thanks to these software packages:
- The RTEMS real-time operating system.
- The YAFFS flash filesystem (modified version here).
- The libpng, libjpeg, openjpeg and jbig2dec image decompression libraries.
- The freetype font rendering system.
- The MuPDF library for the online help system.
- MTK, a modified version of the Genode FX embedded GUI toolkit, which provides all the elements for common user interaction (windows, buttons, etc.).
- liboscparse, a variant of liblo, for OpenSoundControl communications.
Resources
- Github organization page
- Issue tracker
- Wiki
- Mailing list
- IRC: #milkymist on Freenode