This week was more general as I was mainly trying to optimize all the modules I did so far, cleaning codes and git. From notable things, I managed to cut the number of LUTs in ECDSA module from last week’s 2200 to 1601 while the number of slice registers went up by only 100 from 1200 to 1298. That makes a huge difference! Escpecially that, this can be used to speed up the multiplier 4 times (and basically the whole module).

Another improvement was made in SHA1. Not only number of utilized LUTs and slice registers went down from 984 to 727 and 583 to 541 respectively but also the whole design works better as it is now completely independent of when the new data comes (it can operate as long as there is something in a buffer-like memory). I have to admit though, that in case of SHA1 I was able to improve few things not because I came up with a new brilliant idea, but simply because it was my first project and now I knew how to do it better/properly.

Also ARC4 received some upgrades however those are purely based on a trade off so depending on situation one of two versions has to be chosen. By introducing another 64×32 RAM piece, module can now start encryption immediately after receiving first part of data. (all RAM used is a dual port asynchronous memory with only one port capable of writing, so in order to avoid access collisions in the previous solution data was gathered first, then encrypted and written back to the same memory).

And now, the season finale of Radek’s internship. Watch him in his final battle against hardware…