云途TRNG外设介绍
GaoSheng Lv4

本文简要介绍一下云途TRNG外设(True Random Number Generator (TRNG)真随机数生成器
TRNG 包含一个环形振荡器、一个随机位收集器、一个时钟监控器和一个故障检测器。
图片1

环形振荡器(Ring OSC)是一个随机噪声源。它对环境噪声如温度、电压、电磁干扰和其他噪声源敏感。这些噪声会对环形振荡器的输出时钟频率造成轻微、连续和随机的改变。每个振荡器时钟周期的各种变化很小, 但在功能时钟的某个周期后采样的环形振荡器时钟周期计数每次都不同。
随机位收集器包含一个定时器和一个计数器。定时器由 SDCTL[ENT_DLY] 配置并由功能时钟驱动。启用定时器后,计数器复位并开始计数,当定时器达到 SDCTL[ENT_DLY] 时,计数器的 bit0 将被采样。采样的位将被移位到随机数据移位寄存器
故障检测器提供了几个统计测试来生成熵:
图片2
该模块的大致工作流程如下:
通过1-bit采样从熵源逐位提取随机数据。
数据经过后处理后,存入该移位寄存器。
当寄存器填满256位时,置标志位。

该外设实际使用起来也非常的直观符合直觉
TRNG_DRV_Init模块初始化
TRNG_DRV_GetStatus查询状态
TRNG_DRV_Get_Ent读取随机数结果
图片3

Time = 1/slow bus * ent_dly * samp_size
例如当前芯片为 YTM32B1ME05,slow bus 时钟为 40MHz,ent_dly 设置为 0xA00,sample size 默认设置为 0x200
则 Time = 1 / 40M * 0xA00 * 0x200 = 32.768ms
图片4

补充一个之前在网络上看到的一个比较有趣的问题:
有网友发现他的Manjaro偶尔会出现不能开机。是熵不够导致不能开机,这个时候可以在开机等待时候随意敲击键盘或者移动鼠标来获得足够的熵
图片5
https://blog.csdn.net/CHAOS_ORDER/article/details/117928473

图片6
https://bbs.archlinux.org/viewtopic.php?id=248035&utm_source=chatgpt.com

本站由 提供部署服务