3. 在线测试方法:启动测试、自适应比例测试、运行测试与硬件实现开销

在线测试,说白了就是让硬件随机数发生器(TRNG)在正常工作时,自己给自己做“体检”。它不像离线测试那样把数据导出来慢慢分析,而是边产生随机数边检查,一旦发现异常就立刻报警。我做过几个TRNG芯片项目,在线测试这部分往往是最后才被重视的,结果流片回来才发现面积超标或者时序跑不过——嗯,今天咱们就把这几个核心测试讲透。

3.1 启动测试(Repetition Count Test)

启动测试是最简单、最直观的在线测试方法。它的逻辑很朴素:如果连续出现太多次相同的比特值,那肯定有问题。

具体怎么做?

  • 设定一个阈值 C(比如 10 或 16)
  • 实时统计连续相同比特的个数
  • 一旦计数达到 C,触发告警

我个人习惯把 C 设成 16,因为 2^16 的误报概率已经足够低。你想想看,一个理想的均匀随机源,连续出现 16 个相同比特的概率是 2^(-15) ≈ 0.003%,基本可以忽略。

核心公式:

误报概率 P = 2^(-(C-1))

当 C=16 时,P ≈ 3.05 × 10^(-5)

我的经验: 启动测试对“卡死”故障特别敏感。我曾经遇到一个案例,TRNG的振荡环因为电源噪声被锁住了,输出全0。启动测试在16个周期内就抓住了这个故障,比任何其他测试都快。

3.2 自适应比例测试(Adaptive Proportion Test)

自适应比例测试比启动测试复杂一些。它不只看连续重复,而是检查在一个窗口内,某个特定比特模式出现的比例是否异常。

基本原理:

  • 取一个固定长度的窗口 W(比如 1024 比特)
  • 统计窗口内“1”的个数(或者某个特定模式的出现次数)
  • 如果比例偏离 50% 超过阈值,触发告警

为什么叫“自适应”?因为阈值会根据历史数据动态调整。我记得在 NIST SP 800-90B 标准里,这个测试的推荐参数是这样的:

参数 推荐值 说明
窗口大小 W 1024 比特数
告警阈值 T 655 窗口内“1”的最大允许数
误报概率 ≈ 2^(-20) 理想均匀源

注意: 自适应比例测试对“偏置”故障敏感,但对“周期性”故障不敏感。如果随机数发生器输出 01010101... 这种模式,自适应比例测试可能检测不出来,因为“1”的比例仍然是 50%。

3.3 运行测试(Run Test)

运行测试,也叫游程测试,它检查的是“连续相同比特的段”的长度分布是否正常。说白了,就是看“0的游程”和“1的游程”是不是符合随机序列的预期。

怎么做?

  1. 从数据流中提取所有游程(连续相同比特的段)
  2. 统计每个游程长度的出现次数
  3. 与理论分布做比较

举个例子,一个理想的随机序列中,长度为 L 的游程出现的概率大约是 2^(-L)。所以长度为 1 的游程应该占 50%,长度为 2 的占 25%,以此类推。

运行测试的硬件实现要点:

  • 需要一个计数器记录当前游程长度
  • 需要一个比较器检测比特翻转
  • 需要一个查找表或比较器判断长度是否异常

我曾经在项目中用运行测试抓到一个很隐蔽的故障:TRNG 的采样时钟有抖动,导致某些游程长度系统性偏长。启动测试和自适应比例测试都没发现问题,但运行测试在 100 万个样本内就报警了。

3.4 在线测试的硬件实现开销

好了,讲完三种测试方法,咱们来聊聊实际落地的问题。在线测试是要占用芯片面积的,而且会影响功耗和时序。我见过不少团队在仿真时觉得没问题,结果综合出来面积超标 30%。

三种测试的硬件开销对比:

测试类型 逻辑门数(约) 寄存器数 关键路径
启动测试 50-100 5-8 1 个比较器
自适应比例测试 500-1500 32-64 加法器 + 比较器
运行测试 300-800 16-32 计数器 + 比较器

我的建议: 如果面积预算紧张,优先实现启动测试 + 自适应比例测试。运行测试可以作为可选模块,在面积允许时再添加。三种测试一起上,覆盖率能达到 99.9% 以上。

另外,在线测试的时钟频率也很关键。如果 TRNG 的输出速率是 100 Mbps,那在线测试模块必须能在 10 ns 内完成一次检测。我习惯把在线测试的流水线深度控制在 3 级以内,否则时序容易崩。

在线测试硬件架构图 TRNG 输出 启动测试 自适应比例测试 运行测试 或门 告警输出 说明: 1. 三种测试并行工作,互不干扰 2. 任何一路测试告警,都会触发全局告警 3. 启动测试最快(1-2周期),自适应比例测试最慢(1024周期)

最后说一句,在线测试的覆盖率不是越高越好。我见过有人把阈值设得太严,结果正常工作的 TRNG 频繁误报,导致系统不断复位。嗯,这里要注意:在线测试的目标是检测“硬件故障”,不是检测“统计偏差”。把这两个概念搞混了,设计就会走偏。