随机数发生器(TRNG)

概述
FM33A0xx使用2个Galois真随机噪声源作为真随机数种子,配合简单在线检测(32位全0全1检测)、LFSR后处理、伪随机LFSR共同组成芯片的随机数发生器。TRNG的启动测试和完整的在线测试功能需要固件实现。

随机数产生
真随机源为2个Galois环振,环振输出pin使用底层金属布线,避免被探针攻击。Galois输出在数字电路内部异或并使用系统时钟采样,然后进行LFSR后处理。LFSR后处理之前经过随机数在线检测,如果发现连续32bit全0或全1的情况,则产生TRNG失效报警中断。同时为了避免小概率的真随机数性能不良情况,另外使用一组LFSR以32’hFFFFFFFF为初始值,与后处理LFSR同步运算,并以两组LFSR按位异或后的结果作为最终的32bit随机数输出。

CRC 运算
在进行CRC运算时,两组32bit LFSR分别作为输入数据寄存器和CRC运算寄存器,一次可以运算32bit数据的CRC结果。CRC运算前CPU需查询当前LFSR是否被占用,如LFSR空闲,方可以使用CRC功能。
CPU一旦启动CRC运算,LFSR自动置为复位值,随后进行32bit运算,运算结束后清除CRC启动寄存器,不产生中断;软件启动CRC后应连续查询启动寄存器状态,直到运算结束后再读取结果。

CRC多项式:
CRC32=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+X0
软件操作流程:
⚫ 查询lfsr_busy,确认LFSR不在运行中
⚫ 将待运算数据写入CRCDATA0~3
⚫ 置位CRC_EN
⚫ 查询并等待CRC_EN被清零
⚫ 从LFSROUT0~3读出运算结果

猜你喜欢

转载自blog.csdn.net/qq_43359615/article/details/130450207