Mandelbrot
Just a short note this week on a small Dazzler demo from the weekend.
Dazzler has a GPU and an FPGA. That's a lot of processing power. How best to show that in the all-important crowdfunding video? Here's what I came up with:

The FPGA is computing the Mandelbrot set and writing it into a bitmap on the GPU. The GPU renders it as a spinning cube. All the hardware is working hard to keep this running at 30 Hz -- the animated clip is here.
Computing the Mandelbrot set is described in lots of places. Every pixel is iterated until it escapes. Some pixels escape immediately (the "Cheap" pixels). The pixels in the black region never escape, so evaluation applies some cutoff and paints the non-escaped pixels in black. The boundary area is in-between - these pixels do escape, but take many iterations to do so.
Many Mandelbrot optimizations focus on the "Expensive" regions. This is a good idea when these regions cover a lot of the screen, but a lot of the time people are interested in looking at the boundary zone. Here's a closeup view where 75% of the screen is pixels in the "Medium" zone.

Unfortunately there's not much to be done for the "Medium" difficulty pixels. They need to be iterated, and each iteration costs three multiplies and a handful of additions. You need an efficient brute-force implementation, like an FPGA!
The implementation on the Spartan FPGA uses the hardware multipliers. There are 16 of these on the Spartan 6 LX9, so using them as five groups of three multipliers makes most sense. This gives five parallel Mandelbrot evaluators, all running at the Dazzler's video clock speed of 72 MHz. The worst-case evaluation time is 30 ms for computing 400x400 Mandelbrot images.
Math is done at 18-bit integer precision, because that's the width of the FPGA multipliers. This limits the zoom depth to about 1000X, plenty for a small demo like this.
Thanks for reading, I'll have more to post next week.