<?xml version="1.0" encoding="gbk"?> <rss version="2.0"><channel> <title>定阅帖子更新</title> <link>http://www.broadkey.com.cn/XML.ASP</link><description>TEAM Board - 意得法电子</description> <copyright>TEAM 2.0.5 Release</copyright><generator>TEAM Board by TEAM5.Cn Studio</generator> <ttl>30</ttl><item><link>http://www.broadkey.com.cn/Thread.asp?tid=96 </link><title>基于边界扫描技术的数字系统测试研究</title><author>nicky</author><pubDate>2009-11-27 12:29:24</pubDate><description><![CDATA[当今，微电子技术已经进入超大规模集成电路(VLSI)时代。随着芯片电路的小型化及表面封装技术(SMT)和电路板组装技术的发展，使得传统测试技术面临着巨大的挑战。在这种情况下，为了提高电路和系统的可测试性，联合测试行动小组(JTAG)于1987年提出了一种新的电路板测试方法--边界扫描测试，并于1990年被IEEE接纳，形成了IEEE1149．1标准，也称为JTAG标准[1]。这种技术以全新的&quot;虚拟探针&quot;代替传统的&quot;物理探针&quot;来提高电路和系统的可测性。由于JTAG标准的通用性很好，现在许多IC公司都提供了支持边界扫描机制的IC芯片，甚至部分FPGA和CPLD芯片也采用了这一技术。 <br />
<br />
　　本文介绍支持JTAG标准的IC芯片结构，并以Xilinx公司的两块xc9572_pc84芯片为例，探讨并利用边界扫描技术控制IC芯片处于某种特定功能模式的方法，并且针对IC芯片某种特定的功能模式设计该芯片的JTAG控制器。 <br />
<br />
1支持JTAG标准的IC芯片结构 <br />
<br />
　　边界扫描技术的核心就是在IC芯片的输入输出引脚与内核电路之间设置边界扫描结构。JTAG标准定义了一个4-wire串行总线[2]，通过这四条测试线访问边界扫描单元，可以达到测试芯片内核与外围电路的目的。图1示出了支持JTAG标准的IC芯片结构。图中，扫描结构由测试存取通道(TAP)、边界扫描寄存器(BSR)、TAP控制器、指令寄存器(IR)和辅助寄存器等组成。 <br />
<br />
<br />
<p align="center"><img src="http://www.gd-emb.org/UserFiles/17834/1(72).jpg" width="300" height="274" alt="" /></p>
<p>1．1 TAP <br />
<br />
　　TAP是由4-wire串行测试线组成的测试存取通道，JTAG标准定义的所有操作都由这四条测试线来控制。这四条测试线分别是：测试时钟输入线(TCK)，测试方式选择输入线(TMS)，测试数据输入线(TDI)，测试数据输出线(TDO)。 <br />
<br />
1．2 TAP控制器 <br />
<br />
　　TAP控制器是边界扫描测试的核心控制器，具有一个16状态的有限状态机。它与TCK信号同步工作，并响应TMS信号。在TCK信号和TMS信号的控制下，TAP控制器可以选择使用指令寄存器扫描还是数据寄存器扫描，以及选择用于控制边界扫描测试的各个状态。图2描述了TAP控制器的状态转换全过程[3]。 <br />
<br />
　　无论当前状态如何，只要TMS保持5个TCK时钟为高电平，TAP控制器都会回到Test_Logic_Reset状态，使测试电路不影响IC芯片本身的正常逻辑。需要测试时，TAP控制器跳出该状态，选择数据寄存器扫描(Select_DR_Scan)或选择指令寄存器扫描(Select_IR_Scan)进入图2的各个状态。一个标准的测试过程如下：TAP控制器在Capture_IR状态捕获指令信息，经过Shift_IR状态移入新指令，新指令经过Update_IR状态成为当前指令；紧接着，当前指令在Select_DR_Scan状态选择相应的测试数据寄存器，在Capture_DR状态捕获前一测试向量的响应向量，在Shift_DR状态移出该响应向量，同时移入下一测试向量，在Update_DR状态将新的测试量并行加载到相应的串行数据通道，直到移入最后一个测试向量为止。其中，Pause_DR状态和Pause_IR状态暂停数据移位状态；而四个Exit状态是不稳定状态，它们为状态转换提供灵活性。</p>
<p align="center"><img src="http://www.gd-emb.org/UserFiles/17834/2(69).jpg" alt="" /></p>
<p>1．3 BSR <br />
<br />
　　BSR是边界扫描技术的核心，它构成边界扫描链，其中的每一个边界扫描单元(BSC)都是由触发器Q、多路选择开关mux组成。图3示出了JTAP标准中BC_1类型的BSC的结构[3]。</p>
<p align="center"><img src="http://www.gd-emb.org/UserFiles/17834/3(58).jpg" alt="" /></p>
<p>　　在图3中，SI为BSC的串行输入端，连接上一个器件(BSC)的串行输出端SO，依次相连便构成边界扫描链。该扫描链的首端接TDI引脚，末端接TDO引脚。当MODE为0时，芯片工作在正常模式下。当芯片工作在测试模式时，测试数据在移位信号(SHIFT=1)的控制下，通过SI端进入到多路选择器1(MUX1)中，通过SO端进入下一个BSC的SI端；当芯片工作在捕获方式时(SHIFT=0)，触发器Q1将捕获BSR并行输入端(DI)的数据，送入SO端，在扫描链中传递捕获的数据，并在TDO回收数据，以此来检测故障的存在并且定位故障所在的位置。当MODE为1时，芯片工作在更新方式下，Q1中的数据在更新信号(UPDATE)的作用下，进入到多路选择器2(MUX2)中，通过BSR的并行输出端(D0)进入芯片的内核中。 <br />
<br />
1．4 IR <br />
<br />
　　IR是向各个数据寄存器发出各种操作码并确定其工作方式的指令寄存器，图4示出了一种IR单元的结构[4]。由图4可以看出，IR单元是由一个触发器Q1和一个锁存器Q2构成的。CAPTURE DATE信号控制IR装载指令，SHIRFT IR信号控制指令在IR中的移位；CLK IR信号是从TCK获得的时钟信号，用于为BSR的捕获操作、移位操作提供时钟信号。UPDATE IR信号用于将当前指令装入锁存器Q2，以决定将要执行的操作模式和将要用到的测试数据寄存器的类别。</p>
<p align="center"><img src="http://www.gd-emb.org/UserFiles/17834/4(44).jpg" alt="" /></p>
<p>1．5辅助寄存器 <br />
<br />
　　辅助寄存器包括器件标志寄存器和旁路寄存器，器件标志寄存器用于存储器件制造商、器件序列号和器件版本号等信息，借助它可以辨别板上器件的制造商，还可以通过它检测是否已将正确的器件安装在电路板的正确位置上。旁路寄存器用于将边界扫描单元直接旁路，把扫描数据直接传递给下一个扫描器件。 <br />
<br />
2基于边界扫描技术的数字系统测试 <br />
<br />
　　基于边界扫描技术的数字系统测试包括两个方面，一是对IC芯片电路功能测试及系统互连测试；二是利用边界扫描技术控制IC芯片处于某种特定的功能模式，以方便电路系统的设计和调试。本文主要论述后者。 <br />
<br />
2．1测试系统组成 <br />
<br />
　　测试系统由主机(PC机)、测试仪和PCB实验板组成，测试仪通过标准口(RS232)与PC机连接，通过串行标准信号电缆与PCB板上的测试存取通道相连，如图5所示。</p>
<p align="center"><img src="http://www.gd-emb.org/UserFiles/17834/5(32).jpg" alt="" /></p>
<p>　　PCB板由Xilinx公司的两块xc9572 pc84芯片互连组成，芯片符合IEEE1149．1的JTAG接口标准，具有84个外部引脚、4个JTAG引脚、5个Vcc引脚、6个Vss引脚、69个双向数据输入／输出引脚，xc9572系列芯片未实现异步复位信号引脚TRST，电缆不需要提供这一信号线。该器件的边界扫描寄存器由216个边界扫描单元组成，其中9个单元是内部属性的单元，其余207个单元组成69组边界扫描单元组[5]。 <br />
<br />
2．2设计分析与实现 <br />
<br />
2．2．1设计内容与分析 <br />
<br />
　　在图5所示的测试系统中，要求两片IC芯片分别实现不同功能的数据处理。为了对存储器实现分时访问，可以设定其中的一片xc9572_pc84芯片(IC2)受到另一片xc9572_pc84芯片(IC1)的控制，使IC2进入高阻模式(高阻模式是JTAG标准中推荐的任选模式之一)，用以对存储器的访问屏蔽一段时间，此时受控芯片E2的所有输出管脚都将处于浮空状态即高阻态。 <br />
<br />
　　从图2描述的TAP控制器的状态机可知，通过改变IC芯片自身的输入输出状态，就可以进行边界扫描测试或利用JTAG接口使IC芯片处于某个特定的功能模式。 <br />
<br />
　　支持JTAG标准的芯片都附有特定的BSDL(Boundary Scan Description Language)描述文件[3]。BSDL语言是硬件描述语言(VHDL)的一个子集。它对该芯片的边界扫描特性进行描述，用来沟通厂商、用户与测试工具之间的联系，为自动测试图形生成工具、检测特定的电路板提供相关的信息；在BSDL文件的支持下可生成由JYAG标准定义的测试逻辑。BSDL文件可与软件工具结合起来，用于测试生成、结果分析和故障诊断。 <br />
<br />
　　通过对xc9572 pc84芯片的BSDL部分文件[6]的分析可知：</p>
<p align="center"><img src="http://www.gd-emb.org/UserFiles/17834/6(15).jpg" alt="" /></p>
<p>　　通过该部分代码可得出，控制该芯片进入高阻模式需要写入指令寄存器的控制码为11111100。此时应选择旁路寄存器将边界扫描寄存单元旁路，以使扫描数据直接传递给下一个扫描器件。 <br />
<br />
2．2．2设计实现 <br />
<br />
　　根据上面的分析可以得出，要使芯片从正常工作模式下受控进入JTAG高阻状态需要经过以下五个步骤： <br />
<br />
① 复位。由于Xilinx 9572_pc84芯片不具备TRST管脚，而且芯片正常工作时TMS持续为高电平，所以控制器进入复位状态需要使TMS端接收低电平信号，控制TAP控制器完成复位操作。 <br />
<br />
②进入Shift_IR状态。由TAP控制器状态机可以看出，当持续5个TCK上升沿使TMS端接收到01100时，则进入Shift_IR状态。 <br />
<br />
③将指令码写入指令寄存器。在Shift_IR状态，通过TDI将高阻状态指令码11111100写入指令寄存器，需要5个TCK周期，此时TMS需保持4个周期低电平。 <br />
<br />
④进入Exit1_IR状态。在Shift_IR状态的第5个TCK的上升沿，使TMS=1，进入Exit1_IR状态。 <br />
<br />
⑤进入Update_IR状态。在进入Exit1_IR状态后，使TMS=1，进入Update_IR状态。此时芯片进入高阻状态。 <br />
<br />
　　按照上述步骤，采用数字系统中状态机的设计思想[5]，用VHDL语言编写出相应的功能块，控制xc9572_pc84芯片(IC2)进入JTAG高阻状态(限于篇幅，VHDL源程序未列出)，就可以进行边界扫描测试了。将VHDL源程序经过编译、仿真后可得到如图6所示的JTAG控制时序波形图。</p>
<p align="center"><img src="http://new.gd-emb.org/UserFiles/17834/7(10).jpg" alt="" /></p>
<p>　　JTAG测试技术是一种新的测试技术，这种技术是建立在具有JTAG标准接口的芯片之上的。由于这种芯片内置一些预先定义好的功能模式，所以可以通过边界扫描通道使芯片处于某个特定的功能模式，以提高系统控制的灵活性并便于系统设计。本文通过设计实例，详细介绍了利用边界扫描技术控制IC芯片处于高阻模式的思路和方法，并且通过实验实现，达到了预期目标。基于边界扫描技术的测试机制在产品全寿命周期的不同阶段都可以共享，因此利用边界扫描技术可以方便地对电路系统进行调试、测试，显著地降低了产品的开发周期和费用。</p>
<div style="float: right" align="right">&nbsp;</div>
<p><span class="bold">边界扫描结构的FPGA实现</span></p>
<div class="t_msgfont">
<p>&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a1">摘&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 要：本文利用Altera公司的FPGA和EDA工具MAX+plusⅡ和实现了基本的边界扫描结构电路，利用此设计可以满足数字电路系统可测性设计和在系统配置(In-System Configuration)的要求。</p>
<p>关键词：边界扫描 ；现场可编程门阵列 ；可测性设计</p>
<p>引言</p>
<p>芯片封装技术的发展，特别是表面贴装技术(SMT)的发展给传统针床测试带来很多困难。为了解决传统测试方法中存在的物理探针不可达等问题,联合测试行动小组(JTAG)提出了边界扫描体系结构,后来成为IEEE1149.1标准。利用边界扫描技术,可以对大规模数字集成电路芯片、多芯片模块和由数字集成电路芯片组成的印制电路板进行测试。边界扫描体系结构的可扩展性也使得边界扫描技术得到了很大的扩充，出现了包括IEEE1149.4、IEEE1149.5、IEEE1149.6在内的新的测试标准。同时，许多器件厂商也扩展了它的功能，使其支持在系统配置，成为IEEE1532标准。</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a"><span style="font-size: 14pt"><img border="0" align="left" src="http://bbs.ee365.cn/picture20070307/1173252935.jpg" alt="" /></span></p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a"><span style="color: #ff6600; font-size: 14pt">图<span> 1 </span>边界扫描的基本结构</span></p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a"><span style="color: #ff6600; font-size: 14pt">图<span>2 TAP</span>控制器仿真图</span></p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p style="margin: 0cm 0cm 0pt" class="a"><span style="color: #ff6600; font-size: 14pt">图3 访问标识寄存器的仿真图</span></p>
<p>边界扫描的基本结构</p>
<p>根据IEEE1149.1标准，边界扫描的基本结构如图1所示，包括以下几个部分：</p>
<p style="margin: 0cm 0cm 0pt" class="a">&nbsp;</p>
<p>测试访问接口(TAP)：包含TDI(测试数据输入)、TDO(测试数据输出)、TMS(测试方式选择)和TCK(测试时钟)4个必须的信号引脚，以及一个可选的信号引脚TRST(测试复位)，所有边界扫描操作均通过上述５个信号进行控制；</p>
<p>TAP控制器：接收TMS和TCK信号，控制TDI到TDO的测试数据通过的路径，并控制各寄存器按要求捕获或更新数据；</p>
<p style="margin: 0cm 0cm 0pt" class="a"><span style="color: #ff6600; font-size: 14pt"><span><img border="0" align="left" src="http://bbs.ee365.cn/picture20070307/1173252937.jpg" alt="" /></span></span></p>
<p>指令寄存器：锁存当前操作的指令代码；</p>
<p>边界扫描寄存器：器件的每一个输入、输出引脚都有一个边界扫描单元(BSC：Boundary Scan Cell)用于锁存输入信号或者施加预定的信号；</p>
<p>旁路寄存器：可将边界扫描寄存器旁路，直接将TDI的输入数据传到TDO口输出。</p>
<p>除上述单元外，边界扫描结构还可以包括器件厂商自己定义的用于实现其他功能的数据寄存器,比如器件标识寄存器等。</p>
<p style="margin: 0cm 0cm 0pt" class="a"><span style="color: #ff6600; font-size: 14pt"><span><img border="0" align="left" src="http://bbs.ee365.cn/picture20070307/1173252936.jpg" alt="" /></span></span></p>
<p>边界扫描结构在可测试性技术中的应用</p>
<p>边界扫描机制提供了一种完整的、标准化的可测试性设计方法。自从边界扫描标准出现以来,市场上支持边界扫描机制的芯片及设计开发软件与日俱增,其应用越来越广泛，成为了第三代可测试性技术的主流。在利用FPGA进行SoC设计时，整个系统和单独模块的可测试性是必须要考虑的问题，边界扫描结构的可扩展性为其提供了良好的解决方案。为了达到可测试性设计的要求，可以在设计中加入独立的边界扫描结构，插入数据扫描链，这样就可以通过TAP接口方便地进行测试和调试工作。不过，由于FPGA芯片本身的边界扫描结构的功能在芯片生产出来之后就已经确定了，因此设计人员不能按照自己的要求利用该资源，故在设计中加入的边界扫描结构需要自己设计实现，并且需要占用FPGA芯片的资源，这一点是需要注意的。</p>
<p>边界扫描结构的FPGA实现</p>
<p>TAP控制器的设计</p>
<p>IEEE1149.1标准对于TAP控制器的功能结构作了明确的定义。TAP控制器由TAP状态机和TAP控制信号产生电路两个部分组成。状态机共有16个状态(见表1)。TAP状态机在测试时钟TCK的上升沿根据测试方式选择信号TMS改变状态，同时产生TAP控制信号用于控制数据寄存器(旁路寄存器、器件标识寄存器、边界扫描寄存器等)的动作。TAP控制信号包括：</p>
<p>Reset ：边界扫描结构的复位信号；</p>
<p>Select ：TDO输出选择信号，控制是测试指令输出还是测试数据输出；</p>
<p>Enable ：输出TDO使能信号；</p>
<p>Shift IR ：指令寄存器移位使能信号；</p>
<p>Clock IR ：指令寄存器移位时钟；&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>Update IR ：指令寄存器单元的数据更新信号；</p>
<p>Shift DR ：数据寄存器移位使能信号；</p>
<p>Clock DR ：数据寄存器移位时钟；</p>
<p>Update DR ：数据寄存器单元的数据更新信号。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>根据IEEE1149.1标准可以利用VHDL硬件描述语言来实现TAP控制器状态机的功能。</p>
<p>测试指令集的设计</p>
<p>边界扫描结构的工作方式由测试指令来控制，IEEE1149.1标准中强制定义了以下３条指令：</p>
<p>Bypass指令：选择旁路寄存器在TDI与TDO之间的连接，从而缩短扫描链的长度；</p>
<p>Extest指令：选择BSC链在TDI与TDO之间的连接，同时输出端口上的BSC加载预置的数据，输入端口的BSC获取输入信号；</p>
<p>Sample指令：选择边界扫描单元链在TDI与TDO之间的连接，同时获取当前输入输出端口的数据，保存在BSC中。</p>
<p>除了强制指令以外，还有一些可选的指令，同时器件厂商也可以定义自己的私有指令。在本文的设计中加入了可选指令IDcode用于读出器件标识寄存器内的标识码，各指令的编码如表2所示。</p>
<p>寄存器设计</p>
<p>边界扫描中的寄存器包括旁路寄存器、指令寄存器、器件标识寄存器和边界扫描单元寄存器链，这些寄存器可以用通用的移位寄存器实现。本文设计的器件标识代码为10000001，边界扫描单元寄存器的长度为16位，与标准不同的是，这里的边界扫描单元寄存器并没有和器件的输入输出引脚相连。旁路寄存器为D触发器，其它的寄存器长度为8位。在设计中需要注意的是IEEE1149.1要求TDI的数据在TCK上升沿移进，TDO的数据在TCK的下降沿移出，同时数据的最后一位须在Exit1-DR状态移出。</p>
<p>仿真结果</p>
<p>本文在Altera的FLEX10k10 FPGA上实现了上述的基本边界扫描结构，TAP控制器的功能仿真如图2所示，通过接口读出器件标识寄存器里的代码(10000001)过程的时序仿真如图3所示。从图3可以看出，state 处于状态2 时，TDO的数据在TCK的下降沿移出，输出数据为10000001，整个过程满足设计要求。</p>
<p>结语</p>
<p>IEEE1149.1标准定义了一种功能可扩展的边界扫描结构，通过它可以访问和控制芯片内部的数据，从而实现电路测试等功能。随着电子设计技术的发展，SOC的可测性设计必将得到广泛的关注，通过在设计中添加边界扫描结构电路，可以方便地对设计中的关键数据进行监测和对系统进行编程、配置与调试。可以预见，嵌入式边界扫描结构将会在FPGA数字电路设计中得到广泛的应用</p>
</div>]]></description></item></channel></rss>