The quality of the generated random numbers has been verified with the "dieharder" random number test suite.
134 karma · joined March 28, 2021
The quality of the generated random numbers has been verified with the "dieharder" random number test suite.
The fingerprint is defined by the FPGA's semiconductor characteristics. The same bitstream will lead to different fingerprints when programmed to different FPGAs of the same type.
The whole design is written in platform-independent VHDL. No device-specific macros, primitives or attributes are used at all so the design can be implemented on any FPGA (tested on Intel, Lattice and (in-progress) Xilinx). (the "platform-agnostic" concept/technique was taken from the NEPORV32 TRNG -> https://github.com/stnolting/neorv32)
A few bits of the raw fingerprint from the module are quite noisy, so a software post-processing is required. I have implemented a simple "averaging" mechanism here. Error correction codes might be much better - but I am still fighting with the theory behind them ;)
I have tested the design on several FPGAs with promising results (see GitHub page). However, I still need to do more long-time testing to ensure stability of the fingerprint.
Feedback is highly appreciated!
The base core has 32 GPIOs (32xinput + 32xoutput) and no DMA. If you need a DMA or more GPIOs you can attach them to the Wishbone/Axi interface.
I like that it is written in VHDL and provides an all-in-one package: cpu, soc and software
The SoC includes internal memories/caches together with common peripherals like timers, serial interfaces, Wishbone/AXI-connectivity, GPIO/PWM, a TRNG and even a dedicated Neopixel LED interface.
Written in platform-independent VHDL
Tested on Lattice, Intel and Xilinx FPGAs
Full-blown data sheet
Doxagen-based documentation of the software-framework (including FreeRTOS port)
BSD 3-clause license