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

发布者:平和宁静最新更新时间:2012-02-20 来源: 单片机与嵌入式系统应用 关键字:CPLD  MCU  ISP  JTAG  系统编程 手机看文章 扫描二维码
随时随地手机看文章

一、问题的提出

嵌入式系统而灵活性的要求。一方面,应用环境会对嵌入式系统不断提出新的要求,需要更改最初的设计;另一方面指生产多个品种时希望尽量能在单一的硬件平台上实现。为了最大限度地满足灵活性的需要,嵌入式系统一般都设计而可编程逻辑器件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所列。注意文件的大小只与芯片的型号相关而和逻辑的复杂程度无关。[page]

表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所示。

http://www.51kaifa.com/upload/eWebUpload/20051218171034781.gif

第一步,利用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的擦除、编程、校验、读写保护设置等项工作。

关键字:CPLD  MCU  ISP  JTAG  系统编程 引用地址:利用单片机实现CPLD的在系统编程

上一篇:时频参数测量中存储容量的压缩方法
下一篇:基于PPP协议单片机拔号上网的设计与实现

推荐阅读最新更新时间:2024-03-16 12:53

40nm快闪存储器MCU战争将开打?
锁定汽车应用市场的晶片业者都清楚知道,下一代微控制器(MCU)的战场是内建 40奈米高速存取快闪记忆体的高性能产品;而到目前为止,有两家主要关键厂商正面临战火──瑞萨电子(Renesas)的40奈米快闪记忆体技术,以及同样为40奈米的Spansion嵌入式电荷撷取(Charge Trap,eCT)技术。 现今汽车内含有数以百计的 MCU ,以监视、处理、控制诸如驾驶、转向、煞车等关键任务,也提供安全与舒适等功能。对汽车电子控制单元应用的MCU来说,具备大容量的内建快闪记忆体是很基本的,因为它们必须储存越来越大量的控制演算法与应用程式码;更重要的是晶片上快闪记忆体的速度,如果太慢,MCU的高速逻辑电路就无法充分发挥性能。
[嵌入式]
40nm快闪存储器<font color='red'>MCU</font>战争将开打?
基于CPLD单片机的任意波形发生器设计
    引言     在电子子工程设计与测试中,常常需要一些复杂的、具有特殊要求的信号,要求其波形可任意产生,频率方便可调。通常的信号产生器难以满足要求,市场上出售的任意信号产生器价格昂贵。结合实际需要,我们设计了一种 任意波形发生器 。电路设计中充分利用MATLAB的 仿真 功能,将希望得到的波形信号在MATLAB中完成信号的产生、抽样和 模数转换 ,并将得到的数字波形数据存放在数据存储器中,通过 单片机 和CPLD控制,将波形数据读出,送入后向通道进行A/D转换和放大处理后得到所需的 模拟 信号波形。利用上述方法设计的任意波形发生器,信号产生灵活方便、功能扩展灵活、信号参数可调,实现了硬件电路的软件化设计。具有电路结构简单
[测试测量]
基于<font color='red'>CPLD</font>和<font color='red'>单片机</font>的任意波形发生器设计
按时间原则控制的PLC系统编程方法研究
1 引言   plc(可编程控制器)因其操作简单、性能可靠而得到广泛使用。对于可编程控制器系统的设计来说,硬件的一个小的改动通常会导致软件的复用根本不可能,只有重新设计。plc的编程通常使用以继电器逻辑控制为基础的梯形图。目前普遍使用的梯形图程序的设计方法有组合逻辑函数法、功能转移图法、petri网分析法等[1-3]。   在生产过程自动化中,按时间原则控制的plc控制系统应用广泛,如交通灯控制系统、喷泉控制系统等。在这类时序逻辑系统中,当负载的工作时序复杂时,程序的编写比较困难。对此,本文给出了这类按时间原则控制的plc程序的编写方法,并以三菱公司fx2n系列plc为例来做详细介绍。 2 plc内部定时器   定时器在plc中相当
[嵌入式]
51单片机:比较2个有符号数的大小
题目:设内部RAM从30H,31H单元中存放有两个有符号数,试比较它们的大小,将较小的数存放在30H单元,较大的数存放在31H单元中。 理解:对于两个有符号数X,Y,不外乎有四种情况,即(正,负),(负,正),(正,正),(负,负)。所有程序里就这四种情况进行讨论就行了。下面给出程序流程图跟具体实现: 流程图有空再画了贴上来-_- /************************************************ *MCU:51 series *Compiler:Keil UV2 *Code by:晴天 **********************/ ORG 0000H LJMP MAIN ORG 0040
[单片机]
基于单片机的漏电断路器漏电保护实现方法
0 引 言 漏电保护是低压用电保护中的一项重要保护技术,作为其载体之一的漏电断路器广泛用于低压供电电网中,以防止漏电火灾和人身触电伤亡 事故的发生⋯。当前市场上的漏电断路器主要是提供对地漏电保护,且均采用断路器控制器与漏电处理模块分立的形式。分立模块与断路器控 制器之问没有任何联系,控制器对断路器的状态不能完全掌控,这样既不适应基于现场总线的断路器的开发和应用,也不符合对断路器遥测、遥信、遥控、遥调的发展要求。鉴于上述现状,本文在分析现有漏电断路器漏电处理模块的基础上,设计出一种基于单片机实时采样漏电信号并可接收上一级控制系统的参数要求,自动设置漏电流动作参数的漏电断路器漏电保护方法。 1 工作原理 现有的漏电断路器漏电处理模
[单片机]
基于<font color='red'>单片机</font>的漏电断路器漏电保护实现方法
单片机设计:软件UART的设计思想
  目前扩展串口的方法主要有以下方法, ①、采用串口扩展芯片实现,如ST16C550、ST16C554、SP2538、MAX3110等,虽然成本较高, 但系统的可靠性得到了保证,适用于数据量较大、串口需求较多的系统;②、采用分时切换的方法将一个串口扩展与多个串口设备通信,分时复用的方法成本低, 但只适用于数据量不大的场合, 并且只能由这个单片机主动和多个设备通信,实时性差;③、用软件模拟的方法扩展串口,其优势也是成本低、实时性好, 但要占用一些CPU时间。   一般的软件模拟扩展串口方法,使用1个I/O端口、1个INT外部中断和定时器,该方法扩展的串口有2个缺点,①、由于使用了INT外部中断,故只能使用2个INT外部中断扩展2个串
[单片机]
飞利浦90纳米ARM9微控制器提供高计算性能和低功耗
飞利浦电子公司日前宣布开始供应业界第一个ARM9核心的90纳米微控制器LPC3180。飞利浦这一全新的32位MCU不仅提供高效能和低功耗,也是唯一提供矢量浮点协处理器和整合的USB On-The-Go,以及在低至0.9V电压的超低功耗模式下运行能力的ARM9微控制器。飞利浦LPC3180的最高速度可达208MHz,是许多高精度应用的理想选择,例如销售点(POS)设备、医疗及工业装置、全球定位系统(GPS)和机器人等。 飞利浦半导体微控制器产品线产品创新总监Ata Khan表示:“藉由先进的90纳米工艺技术的优势,飞利浦能够开发具有高计算性能并针对低功耗运行最优化的最先进的ARM9 MCU。LPC3180推出之后,即使是低成本的电
[新品]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved