Part 1: SIMON Cipher Background

Back when I was in college in 2013, the NSA released two new block cipher implementations in a white paper that had many people scratching their heads.  They created quite a stir and their appearances seemed to coincide with my growing interest in AES and cryptography.  When it came time to propose a project for one of my FPGA graduate-level courses in Vivado HLS, the new block ciphers from the paper, SIMON and SPECK still hadn't been 'cracked' and no-one had found any backdoors.  So, they looked to be perfect candidates and I really enjoyed implementing and debugging these quick algorithms.

 

A few years later, being one of the few in my friend-group familiar with FPGAs, I was asked to help with a lab project using the Avnet Ultra96 board.  I was familiar with how to take a design from concept to RTL implementation in SystemVerilog, but finding details on how to integrate a design on a Xilinx MPSoC was a real challenge being a student outside the industry.  But with a good challenge comes the drive to overcome it and forge a path that makes it easier for others to follow.

 

Thus the idea for a useful tutorial series was born: a SIMON coprocessor in AMD Xilinx fabric, controlled by a Petalinux OS running on the attached ARM processor!