The Oldland CPU 32-bit FPGA Core

Field Programmable Gate Arrays (FPGAs) let you program any logic you’d like onto a chip. You write your logic using a hardware description language, then flash it to the FPGA. You can even design your own processor and flash it to the chip.

That’s exactly what [jamieiles] has done with the Oldland CPU. It’s an open source 32 bit CPU core that you can synthesize for use on an FPGA. Not only can you browse through all the Verilog code in the Github repo, but there’s also a bunch of tools for working with this CPU core.

Included with the package is oldland-rtlsim, which lets you simulate the processor on a PC. The oldland-debug tool lets you connect to the processor for programming and debugging over JTAG. Finally, there’s a GNU toolchain port that lets you build C code for the device.

Going one step futher, [jamieiles] built a full SoC around the Oldland core. This has SPI, UART, timers, and more features you’d expect to find in a microcontroller. It can be flashed to the relatively cheap Terasic DE0-Nano board.

[jamieiles] has also ported u-boot to the processor, and the next thing on the list is the Linux kernel. If you’ve ever been interested in how CPUs actually work, this is a neat project to look through. If you want more open source CPU cores, check out OpenCores.

6 thoughts on “The Oldland CPU 32-bit FPGA Core

  1. “You write your logic using a hardware description language, then flash it to the FPGA”
    Well, most FPGA’s are not flashed (they don’t have flash). Majority of them are configured from an external flash/rom/micro, etc. at each power up.

    Very impressive project. Apparently you can run this at 75Mhz on a De0 Nano board. Definitely not bad for a soft 32 bit cpu. Kudos to him.

    I wish he had a blog, too. Would be nice to see the progress of it coming along.

    1. Many FPGAs/PLDs these days offer internal storage of some kind (EEPROM, NAND, etc.) that will program the SRAM shortly after power-on. And in many situations with FPGAs that have external storage, the only way it can be accessed is through the FPGA (not on JTAG chain). In this instance a stub is programmed in the FPGA, now JTAG can talk to the storage through the FPGA. Flash is also a pretty common word for “using some kind of signaling interface to write data to a non-volatile storage media.”

      So yeah, “…flash it to the FPGA” works just fine as a phrase there.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.