When you think of a CNC controller you probably think of a PC with a parallel port or some microcontroller-based solution like a Smoothie Board. [Mhouse1] has a different idea: use FPGAs as CNC controllers.
FPGAs inherently handle things in parallel, so processing G code, computing curves and accelerations, and driving multiple stepper motors at one time would not be an issue at all for an FPGA. Most computer-based designs will have slight delays when trying to drive everything at once and this introduces some mechanical jitter. Even worse jitter occurs when you have an old PC trying to run everything when some other task takes over the CPU.
In all fairness, [Mhouse1’s] design does include an Altera CPU on the FPGA to handle some tasks that CPUs are good at, but the FPGA allows the design to create I/O devices specifically for the task at hand. The CPU is also running an RTOS (MicroC OS II) and a Python GUI that runs on a controlling PC.
There’s an older article about using an FPGA to control a CNC machine that has a lot of good information about designing such a beast, if you are interested. However, that design is a lot less ambitious than this one. [Mhouse1] wants the controller to be machine agnostic, and he’s demonstrated it on a cheap DVD-based laser cutter as well as a modified Shapeoko machine.
If you want an introduction to FPGAs, you might want to get started with our tutorial on cheap FPGA development. Or, you can learn a lot with just your Web browser.