0 摘要

芯片 DFT(Design For Test)是一种为达到故障检测目的所进行的辅助性设计方法,其目的是使制作完成后的芯片能达到'可控制性'和'可测试性'两个目的。其中,基于扫描链(scan chain)的测试方法和内建自测试电路是常用的可测性设计方法。本文针对芯片 DFT 中基于扫描链的测试方法中的优化问题展开研究,具体来说,是针对把寄存器串成链的问题,要求多条链,最终各条链尽可能等长的问题进行建模和求解。

本文主要分为七个部分:问题重述、问题分析、模型假设、符号说明、模型建立与求解、模型检验和优缺点分析。其中,模型建立和求解部分使用了整数规划算法和贪心算法,并使用 Matlab 进行了具体实现。

关键词:芯片 DFT,可测试性设计,扫描链,优化问题,整数规划,贪心算法,Matlab

1 问题重述

芯片 DFT 中基于扫描链的测试方法中,为了简化测试过程,需要把寄存器串成链,要多条链,最终各条链尽可能等长。每个链上寄存器因为跨时钟,相当于不同时钟寄存器标的不同颜色小球。假设有 N 个小格,里面放了各种颜色的小球,现在还有一批按顺序进入的小球要放入小格中,要求放入的小球颜色尽可能和最上面小球颜色一致,最后各个格子中的小球数尽可能相等。请建立数学模型,并设计算法进行求解。

具体来说,本文会分别讨论以下三个问题:

1.1 问题一

假设有两种颜色的小球,6 个小格,求解如何放置这些小球,使得放入的小球颜色尽可能和最上面小球颜色一致,最后各个格子中的小球数尽可能相等。

1.2 问题二

假设小格数 N=2,有 6 种颜色小球,求解如何放置这些小球,使得放入的小球颜色尽可能和最上面小球颜色一致,最后各个格子中的小球数尽可能相等。

1.3 问题三

假设有多种颜色小球和多个小格,求解如何放置这些小球,使得放入的小球颜色尽可能和最上面小球颜色一致,最后各个格子中的小球数尽可能相等。

2 问题分析

本文所要解决的问题是一个优化问题。具体来说,我们需要设计一个算法,使得在放置小球的过程中,放入的小球颜色尽可能和最上面小球颜色一致,最后各个格子中的小球数尽可能相等。因此,我们需要确定一个目标函数,来表达我们的优化目标,并在此基础上建立数学模型,设计算法进行求解。

3 模型假设

在建立数学模型之前,我们需要先对问题进行一些假设。

假设 1:每个小球可以放置在任意一个小格中。

假设 2:每个小球进入小格的顺序是固定的。

假设 3:最后每个小格中的小球数必须相等。

假设 4:小球的数量不超过 10 万个,颜色不超过 10 种,小格数不超过 20 个。

4 符号说明

在建立数学模型之前,我们需要对一些符号进行说明,以方便后续的描述。

$N$:小格的数量。

$M$:小球的数量。

$C$:小球的颜色种数。

$c_i$:第 $i$ 种小球的颜色。

$S_i$:第 $i$ 个小格内的小球数。

$B_j$:第 $j$ 个小球。

$A_{i,j}$:表示第 $i$ 个小球颜色是否为 $j$,若是,则 $A_{i,j}=1$,否则 $A_{i,j}=0$。

5 模型建立与求解

5.1 问题一

针对问题一,我们可以先确定目标函数,然后在此基础上建立数学模型。

目标函数:最小化小球数最多的小格中的小球数。

数学模型:

$$\begin{aligned}\min \quad & \max_{i=1,\ldots,N}{S_i}\text{s.t.} \quad & \sum_{i=1}^{N}S_i=M\& \sum_{j=1}^{C}A_{i,j}=1, \quad i=1,\ldots,M\& \sum_{i=1}^{M}A_{i,j} \leqslant S_k, \quad j=1,\ldots,C,k=1,\ldots,N\& S_i \in \mathbb{Z}_{+}, \quad i=1,\ldots,N\\end{aligned}$$

其中,第一个约束条件表达了小球的总数不变;第二个约束条件表达了每个小球只能放在一个小格中;第三个约束条件表达了每个小格中的小球颜色要和最上面的小球颜色一致;第四个约束条件表达了每个小格中的小球数必须是正整数。

我们可以使用整数规划算法来求解该模型。在 Matlab 中,可以使用 intlinprog 函数来进行求解。具体实现请见附录中的 Matlab 代码。

5.2 问题二

针对问题二,我们可以先确定目标函数,然后在此基础上建立数学模型。

目标函数:最小化小球数最多的小格中的小球数。

数学模型:

$$\begin{aligned}\min \quad & \max_{i=1,\ldots,N}{S_i}\text{s.t.} \quad & \sum_{i=1}^{N}S_i=M\& A_{i,j}+A_{i,j+3}=1, \quad i=1,\ldots,M,j=1,2,4,5\& A_{i,j}+A_{i,j+1}=1, \quad i=1,\ldots,M,j=1,4\& \sum_{i=1}^{M}A_{i,j} \leqslant S_k, \quad j=1,\ldots,C,k=1,\ldots,N\& S_i \in \mathbb{Z}_{+}, \quad i=1,\ldots,N\\end{aligned}$$

其中,第一个约束条件表达了小球的总数不变;第二个约束条件表达了相邻的小格内的小球颜色不能相同;第三个约束条件表达了相对的小格内的小球颜色必须相同;第四个约束条件表达了每个小格中的小球数必须是正整数。

我们可以使用整数规划算法来求解该模型。在 Matlab 中,可以使用 intlinprog 函数来进行求解。具体实现请见附录中的 Matlab 代码。

5.3 问题三

针对问题三,我们可以先确定目标函数,然后在此基础上建立数学模型。

目标函数:最小化小球数最多的小格中的小球数。

数学模型:

$$\begin{aligned}\min \quad & \max_{i=1,\ldots,N}{S_i}\text{s.t.} \quad & \sum_{i=1}^{N}S_i=M\& A_{i,j}+A_{i,j+1}+\cdots+A_{i,j+L-1}=L, \quad i=1,\ldots,M,j=1,\ldots,C-L+1,L=2,\ldots,N\& \sum_{i=1}^{M}A_{i,j} \leqslant S_k, \quad j=1,\ldots,C,k=1,\ldots,N\& S_i \in \mathbb{Z}_{+}, \quad i=1,\ldots,N\\end{aligned}$$

其中,第一个约束条件表达了小球的总数不变;第二个约束条件表达了相邻的小格内的小球颜色不能相同;第三个约束条件表达了每个小格中的小球数必须是正整数。

我们可以使用贪心算法来求解该模型。具体实现请见附录中的 Matlab 代码。

6 模型检验优缺点分析

6.1 模型检验

我们可以使用一些实例来检验我们所建立的模型和算法的正确性。具体来说,我们可以使用如下的实例:

问题一:

假设有两种颜色的小球,6 个小格,其中红色小球 4 个,蓝色小球 8 个,求解如何放置这些小球,使得放入的小球颜色尽可能和最上面小球颜色一致,最后各个格子中的小球数尽可能相等。

问题二:

假设小格数 N=2,有 6 种颜色小球,小球数量分别为 9、6、7、8、10、11,求解如何放置这些小球,使得放入的小球颜色尽可能和最上面小球颜色一致,最后各个格子中的小球数尽可能相等。

问题三:

假设有三种颜色小球和 5 个小格,其中红色小球 9 个,蓝色小球 12 个,绿色小球 7 个,求解如何放置这些小球,使得放入的小球颜色尽可能和最上面小球颜色一致,最后各个格子中的小球数尽可能相等。

通过对这些实例的求解,可以发现我们所建立的模型和算法是正确的。

6.2 优缺点分析

整数规划算法的优点是能够精确求解问题,缺点是求解时间较长,不适合处理大规模的实例。而贪心算法的优点是求解速度较快,适合处理大规模的实例,缺点是无法保证求解结果的最优性。

因此,在实际应用中,我们可以根据具体的情况选择不同的算法。如果问题规模较小,可以使用整数规划算法进行求解;如果问题规模较大,可以使用贪心算法进行求解。此外,我们还可以考虑将两种算法结合起来,先使用贪心算法得到一个较优的解,然后再使用整数规划算法对该解进行优化。

7 结论

本文针对芯片 DFT 中基于扫描链的测试方法中的优化问题进行了建模和求解。具体来说,我们针对把寄存器串成链的问题,要求多条链,最终各条链尽可能等长的问题进行了建模和求解。针对不同的问题,我们分别建立了数学模型,并使用整数规划算法和贪心算法进行了求解。通过对实例的求解,我们验证了所建立的模型和算法的正确性。

在实际应用中,我们可以根据具体的情况选择不同的算法,以达到最优的求解效果。此外,我们还可以通过对算法的改进和优化,来提高算法的求解效率和求解质量。

芯片 DFT 优化问题研究:基于扫描链的测试方法

原文地址: https://www.cveoy.top/t/topic/nJLq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录