利用单片机实现CPLD的在系统编程

发布时间:2010-7-22 17:22    发布者:vinda
关键词: CPLD , 单片机 , 系统编程
一、问题的提出  

嵌入式系统而灵活性的要求。一方面,应用环境会对嵌入式系统不断提出新的要求,需要更改最初的设计;另一方面指生产多个品种时希望尽量能在单一的硬件平台上实现。为了最大限度地满足灵活性的需要,嵌入式系统一般都设计而可编程逻辑器件CPLD。在设计阶段和现场运行之后的各个阶段,都可能会遇到设计的升级、修改和测试问题。FLASH的使用方便了程序的更新;带而在系统可编程(ISP)功能的可编程逻辑器件,使得不需重新设计印制板就可以改变原而的设计;网络技术的发展,又使得远程维护成为可能。  

笔者设计的嵌入式系统,实现了远程维护,其组成结构如图1所示。其中CPLD采用了XILINX公司的XC9500系列。

  


二、JTAG简介  

JTAG简介  

JTAG是IEEE的联合测试行动小组(Joint Test Action Group)所制定的测试标准(IEEE1149.1-1990),使得用户可以测试器件的逻辑和相互之间的连接。目前,它是国际上最流行的ICE技术,众多的芯片厂家都在自己的产品中加入JTAG口,以便用户调试。  

XILINX的XC9500系列CPLD采用了JTAG的编程和测试指令。XC9500系列CPLD带而测试访问口TAP(Test Access Port),包括4个引脚:  

*TDI-测试数据输入;  
*TDO-测试数据输出;  
*TCK-测试口同步时钟;  
*TMS-测试模式选择。  

当用基于PC机的编程软件对CPLD进行编程时,PC机的并口经转换板与目标器件的TAP接口相连,完成编程工作。

在本设计上,将MCU的I/O口与CPLD的TAP接口相连,利用MCU的I/O口模拟JTAG测试口的行为,实现对PLD的编程。  

三、SVF与XSVF  

SVF(Serial Vector Format)格式由TI公司和Teradyne公司于1991年联合开发完成。SVF文件是一个ASCII码文件,用于描述基于IEEE.1119.1标准的测试模式,包括激励、预期响应和屏蔽数据。开发SVF的初衷就是获得一种独立于供应商的IEEE1149.1标准的测试模式,它能够在各个仿真软件和测试仪器厂商之间进行数据交换,可以应用于从设计验证现场诊断各个阶段。  

SVF文件中包含了编程所需要的命令及相应的数据。SVF文件由一系列SVF语句组成。语句以分号结束。每一个语句由一个命令和相关的参数组成。命令分为三类:状态命令、偏移命令和并行命令。其中状态命令说明测试序列如何驱动IEEE1149.1TAP的状态机,包括:  

*SDR-扫描数据寄存器;  
*SIR-扫描指令寄存器;  
*ENDDR-数据寄存器扫描结束;  
*ENDIR-指令寄存器扫描结束;  
*RUNTEST-进入测试/空闲状态;  
*STATE-进入特定状态;  
*TRST-驱动TRST为特定电平。  

XILINX的CPLD通过自身的TAP接口接受SVF格式的编程指令和JTAG边界扫描指令。事实上,XILINX提供的JTAGProgrammer编程软件能够自动将标准的JEDEC/BIT格式的编程文件转换为SVF格式;但是SVF文件格式为ASCII码,需要较大的存储空间,并不适合直接用于嵌入式系统。为此,需要一种结构更为紧凑的数据格式-XSVF。  

XSVF用与SVF类似的方法描述IEEE1149.1总线的操作。SXVF与SVF的最大区别在于它能获得更大的数据压缩率,从而得到较小的文件。它是二进制格式的。  

SVF转换为XSVF可以利用XILINX公司的软件SVF2XSVF.EXE来实现。经转换之后的文件大小如表1所列。注意文件的大小只与芯片的型号相关而和逻辑的复杂程度无关。

表1 XSVF文件大小  


芯片型号
XC9536
XC9572
XC95108
XC95144
XC95216

XSCF文件/B
5194
11674
19598
12960
26390

XSVF共而16个单字节指令,每一个指令后跟多少不等的单字节数据,如表2所列。

表2 XSVF指令  

指令名称
指令代码
指令解释

XCOMPLETE
0x00
XSVF文件结束标志

XTDOMASK
0x01
设置TDO的屏蔽数据

XSIR
0x02
进入移位指令寄存器状态,并且移入TDI的值

XSDR
0x03
进入移位数据寄存器状态,并且移入TDI的值

XRUNTEST
0x04
设置每次访问扫描数据寄存器状态之后处于测试/空闲状态的时间(单位:ms)

XREPEAT
0x07
设置在ISP操作判为失败之前,TDO移出值与预期值比较的次数

XSDRSIZE
0x08
设置后续XSDR/XSDRTDO指令记录的长度

XSDRTDO
0x09
进入移位数据寄存器状态,移入TDI的值,将TDO的移出值与预期的值比较,屏蔽数据起作用

XSETSDRMASKS
0x0a
设置移位数据寄存器的地址和屏蔽数据

XSDRINC
0x0b
执行连续的XSDR指令

XSDRB
0x0c
进入移位数据寄存器状态,并且移入TDI的值,操作结束后保持在此状态

XSDRC
0x0d
移入TDI的值,操作结束后保持在此状态

XSDRE
0x0e
移入TDI的值,操作结束后退出状态,进入测试/空闲状态

XSDRTDOB
0x0f
进入移位数据寄存器状态,移入TDI的值,将TDO的移出值与预期的值比较,屏蔽数据不起作用。操作结束后保持在此状态

XSDRTDOC
0x10
移入TDI的值,将TDO的移出值与预期的值比较,屏蔽数据不起作用。操作结束后保持在此状态

XSDRTDOE
0x11
移入TDI的值,将TDO的移出值与预期的值比较,屏蔽数据不起作用。操作结束后退出此状态,进入测试/空闲状态

四、实现过程  

本设计的实现过程如图2所示。  



第一步,利用XILINX提供的工具,用原理图或HDL语言设计所需的逻辑,然后进行综合。  
第二步,将编程文件输出为标准的JEDEC文件(*.jed)。  
第三步,顺JTAGProgrammer环境下,将编程文件进一步转换为SVF文件。  
第四步,利用VSF2XSVF软件,将SVF转换为XSVF。  
第五步,将二进制的XSVF转换为MCU可接受的相应格式。本设计中采用Intel公司16位单片机,所以生成Intel Hex格式文件。  

当需要更新逻辑时,MCU从网络总线上获得更新后的XSVF文件(Intel Hex格式),暂存于RAM空间,然后读取XSVF文件命令,逐条解释,并予以执行,即通过I/O口模拟JTAG的TAP口操作,产生编程指令、数据和控制信号,完成对CPLD的擦除、编程、校验、读写保护设置等项工作。
本文地址:https://www.eechina.com/thread-16192-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

相关在线工具

相关视频

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表