IOTA PoW needs a lot of computational power which makes sending transactions on smaller microcontrollers (like ARM) very slow. One of the main reasons is that the innerst loop of Curl-P81 can’t be computed very efficient on general purpose CPUs. Even modern CPUs with SIMD extension (like SSE or AVX) are heavily restricted when it comes to true parallel calculations.



This project is about development of a hardware accelerator for doing PoW on embedded Systems and low-end PCs efficiently.

The PiDiver archives about 15.8MH/s and it is able to do PoW faster (about x5.8) than the SSE-optimized dcurl library on a quad-core i5 PC but only needs 2W instead of 100W.

Statistically, 25% of all nonces are found within 87ms, 50% within 200ms and 75% within 422ms. That gives an average of 3.33 TX/s or 0.66 TPS (bundle with 5TX).

Comparing to an Raspberry Pi, that's a speed-up of >200.

There is a dcurl-version with FPGA extension which can be used by a modified IRI.





Current status (hardware):

- Proof-of-work FPGA on Altera DE1 FPGA board (done)

- Custom Prototype PCB (done)

- Redesign for ESD-protection and added EMI-filtering to (hopefully) pass future tests for CE certification (done)

- Planning to machine-assemble a small test-batch of 5.





Current status (software)



- major core optimizations (done)

- Moving mid-state calculation to FPGA (done)

- Integration with Roman Semko's Hercules making it possible to run a full IOTA node on Raspberry with decent hashing power :) (done 😍)

- Writing drivers for USB - so the hardware accelerator can also be used *without* Raspberry over USB. (done)



- CCurl-compatible shared library (e.g. can be used for Light Wallet or NodeJS) (done)





The project is completly open source and is licensed under MIT license.

All information (source codes, schematic, layouts, software, ...) are available for free download.





My decision for developing for Raspberry was because there are many many Raspberrys out there and IOTA could hugely benefit when they could perform IOTA PoW efficiently. In combination with Roman's Hercules this could become a great low-power full-node solution.

Moreover, the PiDiver not only can be used by Raspberry but also with lower-end PC systems (with e.g. Atom CPU) because it can directly be used with USB - so providing hardware acceleration for full-nodes with less powerfull CPU :)







*update 2018-07-20* New PiDiver PCB revision (1.2) arrived ... Hope it is the final version :)

*update 2018-07-01* PiDiver now does USB-Diving :) So it can be used without PI.

*update 2018-06-06*: Cleaned up description. Some informations got obsolete.

*update 2018-05-31*: License now MIT. Schematic, PCB, ... of prototype released.

*update 2018-05-28*: Mid-State-Calculation was ported to the FPGA (additional slower 1Bit Curl) and overall-performance was slightly improved to about 15.8MH/s.

*update 2018-05-18*: "Pi-Diver" Proto Type running fine @ 14.6MH/s :D



*update 2018-05-03*: Major core improvements boosted the speed further from 4.2MH/s to about 12MH/s. Description changed.





