Welcome to the CPUDev Wiki! A CPU is the magic piece of rock that uses lightning to draw cats on liquid crystals.
Creating a CPU is no small feat, it requires lots of planning, understanding of digital logic and design and, above everything, patience. It's not for everyone, but there are multiple sources of motivation, including:
- Education - Some people are just curious and want to know how things work;
- Research - Some people are working on creating better, faster and more efficient ways to do what previous CPUs already can do. Or find a way to make CPUs do something entirely new;
- Acceleration - Some people like optimising software, but they will eventually hit the limits of the underlaying hardware. Their solution is to create specialised circuits to accelerate some applications or to implement some more cores on a Field Programmable Gate Array;
- Nostalgia - Some people want to create 8-bit CPUs or to replicate older microcontrollers;
- It's FUN! - It's rewarding to do something that is hard, especially when you do it well!
It's hard enough to program those, but to create your own? You will need all the help you can get, and this is where we step in. This wiki strives to gather information from all over the Internet about a variety of topics related to CPU development and design. There also is the #cpudev channel on irc.freenode.net for real-time (but still asynchronous) discussions about CPU development.
But where does one start this journey from? There are many ways to have yourself a little CPU. You can e.g. start from writing an emulator for it, then possibly implement it in a Hardware Description Language, then possibly have it functioning on a Field Programmable Gate Array. Depending on your motivation and goals (and budget), there are virtually endless possibilities.
Head to Required Knowledge to get an idea of what kind of knowledge you will most likely need during this journey.
Head to Category:Bare Bones to learn more about where and how to start.