/lipsi

Lipsi: Probably the Smallest Processor in the World

Primary LanguageScalaOtherNOASSERTION

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