Awesome
Lipsi: Probably the Smallest Processor in the World
This repository contains the source code of Lipsi and supports following paper:
Martin Schoeberl, Lipsi: Probably the Smallest Processor in the World, Architecture of Computing Systems -- ARCS 2018, Springer International Publishing, 2018, 18-30
While research on high-performance processors is important, it is also interesting to explore processor architectures at the other end of the spectrum: tiny processor cores for auxiliary tasks. While it is common to implement small circuits for auxiliary duties, such as a serial port, in dedicated hardware, usually as a state machine or a combination of communicating state machines, these functionalities may also be implemented by a small processor. In this paper we present Lipsi a very tiny processor to enable implementing classic finite state machine logic in software without overhead.
Lipsi is probably the smallest processor around. Possible evaluations of Lipsi: (1) an implementation of a serial port completely in software; (2) as Lipsi is so small we can explore a massive parallel multicore processor consisting of more than 100 Lipsi cores in a low-cost FPGA (with simple point-to-point connections between cores).
Lipsi is written in Chisel and contains: (1) the hardware description, (2) an assembler, (3) a software simulator, and (4) testers for individual testing and for co-simulation, all written in Chisel/Scala and combined in a single program. Chisel made it possible that the design of all of the above took less than 14 hours.
Tapeout
The Lipsi processor is beeing taped out with Tiny Tapeout. See a rendering of the actual GDS II file.
Getting Started
You need sbt
and a JVM
installed. Scala and Chisel are downloaded when
first used.
A plain
make
runs the default program as a test. The wave form can then be viewed with:
make wave
The default program can be overwritten with the variable APP
:
make APP=asm/immop.asm
Lipsi executing the embedded hello world program, blinking and counting LEDs, can be generated as follows:
make hw APP=asm/blink.asm
The project contains a Quartus project in folder quartus
.
All test cases are run with:
make test-all
The SW simulator of Lipsi is run with:
make sim
The co-simulation (for all tests) with the processor description in hardware and the SW simulator are run with:
make test-cosim
Folder asm
contains various assembler program. E.g., echo.asm
reads the keys from
the FPGA board, adds 1, and puts out the result on the LEDs (on the DE2-115).
Default IO devices are an 8-bit input port connected to the keys and 8-bit output
port connected to the LEDs
To build a 432 cores manycore version of Lipsi, change the value many
to
val many = true
in LipsiTop
. The cores are then connected in a pipeline.
The echo.asm
program can be used to execute 432 additions and show the result
on the LEDs.
As usual, have fun and feedback is appreciated,
Martin