测试
测试很重要,毋庸置疑。
=> 逻辑验证(logic verification):流片之前,检查 HDL 设计在仿真 testbench 中表现是否正确。很依赖测试工程师的经验。
=> 硅调试(silicon debugging):第一批芯片制造出来之后出问题,靠硅调试找故障原因是逻辑问题(logic bugs)还是电气故障(electrical failures)。成本很高。
Shmoo plot:改变电压,观察芯片的频率表现。正常来讲,电压越高,芯片能跑的频率越高。
- brick wall:突然 fail。原因可能是 bistable initialization。
- wall:某个电压边界后全 fail。原因可能是 charge sharing,coupling noise 或 race。
- reverse speedpath:电压升高,频率反而下降。原因可能是 leakage。
- floor:低频工作时 fail。原因可能是 leakage,charge sharing 或 race。
- finger:某些特定频率 fail。原因可能是 coupling alignment。
=> 量产测试(manufacturing test):量产阶段的测试。芯片的良率不可能是 100%,因此每颗制造出来的芯片都需要检测有无物理缺陷。通过昂贵的 manufacturing tester 进行,需要在尽量短的时间内覆盖尽量多的错误情况,合适的测试向量(
故障模型
最简单的故障模型:Stuck-At 模型,即所有故障的发生一定源于某个节点「卡在」了 0/1,即,被 GND 或 VDD 短路了。卡在 0 记作 SA0,1 记作 SA1。
两个测试原则:
- 可观测性(observability):可不可以通过外部 output pins 看到某个内部节点的值
- 可控制性(controllability):可不可以通过内部 input pins 将某个内部节点的值设为 0 或 1
组合逻辑一般比较容易观测和控制;但 FSM 就比较难了,因为测试工程师不一定知道完整的状态转移表。
测试时,最好能够找到一组最小的测试向量集,使得每个节点都能被检测到是否卡住。一组测试向量集可以检测的故障与可能出现的故障总数之比为故障覆盖率(