A simple 16-bit CPU with an integrated Keccakf1600 accelerator. My capstone project that I and a group of 4 other students worked on for the MIT Beaver Works Summer Institute program. Featured in Tiny Tapout 8. My main contribution to this project was putting together the assembler and verification.
Memory Address 769 is reserved: The Assembler does not give a warning currently!
To assemble, use custoasm with installation instructions here. We recommend installation via rust's package manager by running cargo install customasm
. You can then compile an assembly file by running customasm -o <outputfilename> <filename>
. The format for the assembly file is to add #include "x3q16_ruleset.asm"
to the top of each .asm file as well as that file which is located here. Instruction memory and General Purpose are all located in the same place. Thus, to store general values in memory, just jump to wherever you store it in memory.
Many are still a work in progress or aren't supported by the assembler
Approximately 50% of the computational time for the Kyber Algorithm is hashing needed for random number generation. The Kyber algorthm uses SHA-3 and SHAKE algorithms to generate cryptographically secure random polynomials and numbers. Both of these algorithm rely on the keccakf1600 state permutation which target to accelerate. More information on the keccak algorithm can be found here and the kyber algorithm here.
The branch keccak_integration
holds a complete state permuation accelerator however this is not included in main since it's too big to fit for tinytapeout. A smaller accelerator is currently being worked on.
Generate the binary file from test/x3q16 and load it into memory. Reset the chip and see if anything is written in memory.
Either a SPI ram chip or a MCU emulator of parallel storage with custom protocol