51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

在半导体测试中,需要为大规模芯片生成测试向量,请介绍一种高效的测试点生成算法(如DFT中的扫描链设计或BIST算法),并分析其时间复杂度和空间复杂度。

星河电子社招难度:中等

答案

1) 【一句话结论】:在半导体大规模芯片测试中,采用内置自测试(BIST)方法,结合线性反馈移位寄存器(LFSR)生成伪随机测试向量,通过扫描链实现测试激励与响应的加载/捕获,时间复杂度O(m),空间复杂度O(n),能有效降低测试成本与复杂度。

2) 【原理/概念讲解】:BIST(Built-In Self-Test)是将测试生成与测试捕获功能内置于芯片中的技术,核心是利用LFSR(Linear Feedback Shift Register)自动产生伪随机测试序列。LFSR通过反馈多项式生成周期性序列,周期可达2ⁿ-1(n为寄存器位数),模拟随机测试向量。扫描链(Scan Chain)则作为数据传输通道,将LFSR生成的测试向量加载到芯片的测试输入端,芯片运行后,响应通过扫描链捕获并移出,无需外部测试设备。类比:LFSR像自动生成随机数的“设备”,扫描链像“数据管道”,测试时先通过管道加载测试向量,芯片运行后通过管道捕获响应,这样芯片能自我检测故障。

3) 【对比与适用场景】:

特性扫描链设计(仅测试捕获)BIST(测试生成+捕获)
测试生成方式需外部测试设备生成向量内部LFSR自动生成
测试捕获方式通过扫描链捕获响应同上
时间复杂度O(1)(加载向量时间)O(m)(m为测试向量数)
空间复杂度O(n)(扫描链寄存器)O(n)(LFSR+扫描链)
适用场景中小规模芯片,需外部测试大规模芯片(如SoC),需自测试
注意点需外部设备,测试成本高内嵌,降低测试成本,但可能增加芯片面积

4) 【示例】(伪代码):

# 初始化LFSR(n位,反馈多项式系数,如[1,0,0,1]表示x^3+x+1)
def init_lfsr(n, feedback_coeffs):
    lfsr = [0] * n
    # 设置初始值(如全1,周期最大)
    lfsr = [1] * n
    return lfsr

# 生成测试向量序列(m个向量)
def generate_test_vectors(n, m, feedback_coeffs):
    lfsr = init_lfsr(n, feedback_coeffs)
    vectors = []
    for _ in range(m):
        # 生成当前向量
        vector = lfsr.copy()
        # 更新LFSR(反馈计算)
        feedback = sum(lfsr[i] * feedback_coeffs[i+1] for i in range(n)) % 2
        lfsr = [lfsr[-1]] + lfsr[:-1]
        lfsr[0] = feedback
        vectors.append(vector)
    return vectors

# 测试流程(伪代码)
def run_bist_test(n, m, feedback_coeffs):
    vectors = generate_test_vectors(n, m, feedback_coeffs)
    # 1. 通过扫描链加载测试向量到芯片输入
    for vector in vectors:
        load_scan_chain(vector)  # 假设函数,将向量加载到扫描链
    # 2. 启动芯片运行测试
    run_chip()
    # 3. 通过扫描链捕获响应
    responses = capture_scan_chain()  # 假设函数,捕获响应
    # 4. 比较响应与预期值
    for i, resp in enumerate(responses):
        if resp != expected_responses[i]:
            mark_fault(i)
    return responses

5) 【面试口播版答案】:面试官您好,针对大规模芯片的测试向量生成,我推荐使用内置自测试(BIST)方法,核心是结合线性反馈移位寄存器(LFSR)生成伪随机测试向量,并通过扫描链实现测试激励与响应的加载/捕获。具体来说,BIST将测试生成和测试捕获功能内置于芯片中,通过LFSR自动产生测试序列,扫描链负责将测试向量加载到芯片的测试端口,运行后捕获响应并移出,这样无需外部测试设备。时间复杂度方面,生成每个测试向量是O(1),整个测试序列为O(m),m是测试向量数量;空间复杂度是O(n),n是LFSR的位数,因为寄存器规模固定。适用场景是大规模芯片,比如SoC,需要自测试以降低测试成本与复杂度。

6) 【追问清单】:

  • 问题1:LFSR的反馈多项式如何选择?
    回答要点:需选择本原多项式,保证序列周期最大(为2ⁿ-1),确保测试向量覆盖所有可能状态,提高故障检测率。
  • 问题2:扫描链的长度对测试覆盖率的影响?
    回答要点:扫描链长度越长,测试向量数量越多,测试覆盖率越高,但会增加测试时间与芯片面积;需根据芯片规模与测试需求平衡。
  • 问题3:BIST与外部测试设备相比,测试时间如何?
    回答要点:BIST内嵌于芯片,测试时间包括加载向量、运行芯片、捕获响应的时间,通常比外部测试快(无需外部设备连接时间),但可能因内嵌逻辑增加测试时间。
  • 问题4:如何处理测试中的故障检测?
    回答要点:通过捕获响应与预期值比较,若不符则标记故障位置;对于复杂故障(如桥接故障),可结合多个测试向量或增加LFSR级数提高检测率。
  • 问题5:大规模芯片中,如何优化测试向量生成效率?
    回答要点:可通过增加LFSR的级数(提高序列周期)、使用多个LFSR组合(并行生成向量)、或结合确定性测试向量(如针对关键路径),平衡随机测试与确定性测试的效率。

7) 【常见坑/雷区】:

  • 坑1:忽略LFSR的周期性,导致测试向量重复
    雷区:若反馈多项式非本原,序列周期小于2ⁿ-1,测试向量重复,无法覆盖所有故障,降低测试覆盖率。
  • 坑2:误认为BIST能检测所有故障
    雷区:BIST主要检测固定故障(Stuck-at故障),对于复杂故障(如桥接故障)检测率较低,需结合其他测试方法。
  • 坑3:时间复杂度分析错误
    雷区:错误认为生成每个测试向量需要O(n)时间,实际LFSR更新为O(1),整个测试序列为O(m),需明确区分。
  • 坑4:空间复杂度分析错误
    雷区:认为需要存储所有测试向量,实际只需LFSR寄存器(O(n)空间),无需额外存储测试向量列表。
  • 坑5:扫描链延迟对测试时间的影响
    雷区:忽略扫描链加载/捕获的延迟,导致测试时间估算不准确,实际测试时间可能比理论值长。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1