0 引言
为了尽快将专用电路投放市场,SoC片上系统设计制造中普遍采用IP(Intellectual Property)核技术,由各个IP核组成高度集成的SoC片上系统。由于集成的数字电路中仅有最顶层的输入输出引脚与外界相连,IP核内部逻辑信号、IP核模块之间的连接信号以及电路中的竞争冒险的测试无从下手,这些都给SoC以及IP核的测试带来了挑战。随着片上系统设计的日趋复杂化,设计的测试验证工作越发繁重,使用传统的基于模拟的方法对其进行验证已经不能满足设计需要。可以说SoC以及IP核的测试验证成为了SoC技术发展的瓶颈,人们正在寻求其他的设计验证技术。其中较为理想的测试方法,就是在核的设计同时考虑并采取相关的测试设计,方便核的后端测试。本文以曼彻斯特编码器、译码器IP核的测试设计为例,讨论了IP核的内建自测试(BIST)方法。
1 测试原理
IP核的测试旨在探测IP核的功能和时序错误,以便对IP核进一步修改,从而提高产品的可靠性。IP核的测试原理就是对IP核采用访问、控制、隔离等手段,从核的输入端施加需要的测试激励信号,并从核的输出端得到测试响应,比较其结果与预期的结果之间的差异。[1]
1.1 内建自测试 (BIST)原理
IP核的测试可以通过内建自测试方法得到解决,IP核的内建自测试思想就是IP核提供自我测试的能力。通过IP核内的测试外壳(wrapper),外界可以控制启动BIST和切换到正常的工作模式,见图1-1。
图 1-1 内建自测试原理图
1.2 内建自测试外壳
在IP核的设计之中就设计IP核的内建自测试外壳(wrapper),可以提高IP核的可测试性,但同时在电路实现上却增加了电路的面积。通常因外加测试外壳IP核的面积额外开销在500门以上,所以应该在IP核的可测试性和其面积中找到恰当的结合点。测试外壳内部大多采用边界扫描模块或多路选择器、移位寄存器等逻辑电路。测试外壳起到了测试的隔离、控制、访问等作用。
2 IP核内建自测试(BIST)的设计实现
曼彻斯特编码在通信中广泛应用,对其硬件实现的编码译码器电路IP核的测试中我们采用了内建自测试(BIST)方法,下面讨论它的具体实现。
2.1 面向测试的IP核设计
为提高IP核的可测试性,应该在设计IP核同时考虑到测试方面的具体措施以便增加其可测试性。内建自测试方法普遍采用了测试外壳wrapper。在IP核的设计上,设计功能模块的同时,用硬件描述语言编写相关的测试电路逻辑。
2.1.1 测试隔离外壳设计
通过对IP核的隔离,用户可以分别测试各个IP模块而不受其相邻核的干扰。隔离设计主要策略就是隔离开核的输入端或者输出端,或者输入输出同时隔离[1]。通常采用可控制的多路选择器以及寄存器电路实现相关隔离,如图 2-1详细介绍了输入输出隔离装置。
图 2-1 IP核的测试隔离
通过测试访问控制模块,可以控制输入输出寄存器,将曼彻斯特编码器与译码器相隔离,可单独测试译码器而不受编码器影响。通过简单的输入输出寄存器电路,实现了测试的可控制性。
2.1.2 循环自测试的设计实现
既然曼彻斯特编码器、译码器IP核相互之间有所关联,我们就可以考虑其自检测性。可以采用一个测试外壳,控制常态和测试态之间的转换,从而测试编码器译码器IP核。具体方案如下:
1. 正常工作状态下,曼彻斯特编码器输入NRZ非归零码,经过曼彻斯特编码器IP核转换为曼彻斯特编码输出;曼彻斯特译码器IP核模块接受外部曼彻斯特码输入,经过译码IP核,转化为非归零码。
2. 测试状态下,曼彻斯特编码器输入来自测试外壳(wrapper)的测试向量,经过编码后输出到测试控制逻辑,并不向外输出,而是输入到曼彻斯特译码器的IP核,输出NRZ码到测试逻辑中待检验。
3. 内建自测试(BIST)外壳控制正常工作状态与测试状态的切换,将编码数据引入译码器,并且控制测试向量的产生,在译码输出端检测输出是否与期望的逻辑相同。
这些自测试的相关策略逻辑都是在IP核的设计之中考虑的,由硬件描述语言将IP核的功能模块与测试外壳一同编写。测试策略如图2-2中所示,编码器输出与译码器输入之间的多路选通逻辑由测试外壳的测试访问控制部分控制,它决定曼彻斯特码的走向,从而实现控制测试态与常态的转换。
图 2-2 内建自测试(BIST)全策略
2.2 内建自测试(BIST)的实现
图2-2显示了内建自测试(BIST)的全策略。通过隔离逻辑,可以控制输入输出寄存器,将某一模块的输入输出隔离开,不影响相邻模块的测试;通过控制逻辑,可选择常态模式与内建自测试状态的切换;通过访问逻辑,产生输入的测试向量以及接受输出的测试响应,并在访问模块中分析。内建自测试(BIST)的测试外壳用硬件描述语言编写,以模式选择控制逻辑模块的VHDL语言描述为例,实现图2-3所示的逻辑功能,见如下代码:
图 2-3 模式选择控制模块内部逻辑
ENTITY modesel IS
PORT(
MS : IN STD_LOGIC; --模式选择,MS=1时为测试态
TESTIN : IN STD_LOGIC_VECTOR (7 DOWNTO 0); --测试向量/常态曼彻斯特码输入
MCIN : IN STD_LOGIC_VECTOR (7 DOWNTO 0); --常态外部曼彻斯特编码输入
NRZOUT : OUT STD_LOGIC_VECTOR (7 DOWNTO 0);--非归零码输出
MCOUT : OUT STD_LOGIC_VECTOR (7 DOWNTO 0));--常态曼彻斯特编码输出
END modesel;
ARCHITECTURE arch_modes OF modesel IS
SIGNAL INTD : STD_LOGIC_VECTOR (7 DOWNTO 0); --内部信号,测试向量
BEGIN
PROCESS(TESTIN,MS) --输出选择,测试态输出
BEGIN
IF MS='1' THEN
INTD<=TESTIN;
ELSE
INTD<=(OTHERS=>'Z'); --常态输出高阻
END IF;
END PROCESS;
PROCESS(TESTIN,MS) --输出选择,常态输出
BEGIN
IF MS='0' THEN
MCOUT<=TESTIN;
ELSE
MCOUT<=(OTHERS=>'Z'); --测试态输出高阻
END IF;
END PROCESS;
NRZOUT<=INTD WHEN MS='1' ELSE --输入选择,测试态输入INTD
MCIN WHEN MS='0' ELSE --常态输入MCIN
(OTHERS=>'Z');
END ARCHITECTURE ; -- [2]
MS为模式选择,当MS=1时为测试态,MS=0为常态。内部逻辑OUTSEL模块输出选通门电路在MS=1时输入的测试向量由INTD输出;MS=0时由MCOUT输出片外。逻辑INSEL模块输入选通门电路在MS=1时输入测试向量信号INTD;MS=0时由外部输入曼彻斯特码。此逻辑实现了测试模式与正常工作模式之间的切换,电路简单,便于实现。
3 结论
通过IP核的内建自测试外壳wrapper的设计,测试外壳输入测试向量,对输出的测试响应分析,实现了IP核的测试。其测试效果明显,错误覆盖率也很好,同时实现电路简单,便于操作控制。内建自测试BIST方法可广泛用于IP核以及SoC的测试之中。对此方法,有如下结论:
oIP核的测试可考虑用BIST方法;
o可测试性必须在IP核的设计之中予以考虑;
oIP核测试成功的关键在于在设计IP核同时用硬件描述语言描述相关的测试逻辑。