This repository contains an implementation of the PRESENT block cipher designed for Tiny Tapeout.
PRESENT is an ultra-lightweight block cipher designed for power and area-constrained environments. This implementation operates on a 64-bit plaintext block and uses an 80-bit encryption key. To map the 64-bit datapath constraints onto the 8-bit Tiny Tapeout IO protocol, the top module features a Finite State Machine (FSM) wrapped around serial shift registers to sequentially load the data and key, then extract the ciphertext upon encryption completion.
- Algorithm: PRESENT-80 (64-bit block, 80-bit key, 31 rounds).
- Target Platform: Tiny Tapeout (1x1 tile).
- Architecture: Nibble-serial datapath with a single shared S-Box for minimal area.
- IO Scheme: 8-bit parallel, sequenced over multiple clock cycles via
uio_incontrol flags.
Comprehensive testing uses cocotb.
Run the simulator tests locally by navigating to test/ and executing make.
The ASIC design is automatically built and tested using GitHub Actions with LibreLane upon committing to this repository. See the Actions tab for logs and GDS artifacts.