1、8.1 CPLD器件的配置与编程下载器件的配置与编程下载8.1.1 概述概述 当利用CPLD/FPGA开发系统完成数字电路 或系统的开发 设 计 并 仿 真 校 验 通 过 之 后,就 需 要 将 获 得 的CPLD/FPGA编程配置数据下载到CPLD/FPGA芯片中,以便最后获得所设计的硬件数字电路或系统,结合着用户的 设 计 需 求 进 行 电 路 功 能 的 硬 件 调 试 和 应 用。1 1器件编程分类器件编程分类 1)若按使用计算机的通信接口划分有:串口下载(BitBlaster或MasterBlaster)并口下载(ByteBlaster)USB接口下载(MasterBlaster
2、或APU)等方式。18.1 CPLD器件的配置与编程下载器件的配置与编程下载2)若按使用的CPLD/FPGA器件划分有:CPLD编程(适用于编程元件为EPROM、E2PROM和闪存的器件);FPGA下载(适用于编程元件为SDRAM的器件)。3)若按CPLD/FPGA器件在编程下载过程中的状态划分有主动配置方式:在这种配置方式下,由CPLD器件引导配置操作的过程并控制着外部存储器和初始化过程。被动配置方式:在这种配置方式下,由外部计算机或控制器(如单片机)控制配置的过程。28.1 CPLD器件的配置与编程下载器件的配置与编程下载2器件的工作状态器件的工作状态 CPLD/FPGA器件按照正常使用和
3、下载的不同过程其工作状态分为三种:1)用户状态(User mode),即电路中CPLD器件正常工作时的状态。2)配置状态(Configuration),指将编程数据装入CPLD/FPGA器件的过程,也可称之为下载状态。3)初始化状态(Initialization),此时CPLD/FPGA器件内部的各类寄存器复位,让IO引脚为使器件正常工作作好准备。38.1 CPLD器件的配置与编程下载器件的配置与编程下载8.1.2 编程下载操作步骤编程下载操作步骤 由于对Altera的CPLD/FPGA器件的编程配置操作与该公司的MAX+PLUS II开发系统密切相关,因此先介绍MAX+PLUS II的编程与
4、下载步骤。1打开编程窗口打开编程窗口 连上编程器硬件,然后在MAX+PLUS II 菜单中选择Programmer项,打开编程器窗口,如图8-1所示。48.1 CPLD器件的配置与编程下载器件的配置与编程下载图图8-1 编程界面编程界面58.1 CPLD器件的配置与编程下载器件的配置与编程下载2利用利用Altera编程器对编程器对MAX系列器件进行编程系列器件进行编程 在Option菜单内选择Hardware Setup项,然后在Hardware Type 对话框内选择设定下载电缆的类型,如果下载电缆为ByteBlaster,设定后按下OK即可;如果是BitBlaster类型还要选择相应的波特
5、率,最后按下OK按钮,如图8-2所示。图图8-2 8-2 下载电缆的选择下载电缆的选择 68.1 CPLD器件的配置与编程下载器件的配置与编程下载1)在编程器窗口中,检查所选择的编程文件和器件是否正确。在对MAX系列器件进行编程时,使用的是扩展名是.POF的文件,如果选择的编程文件不正确,可在File菜单中选择Select Programming File命令选择编程文件,如图8-3所示。图图8-3 编程文件的选择编程文件的选择78.1 CPLD器件的配置与编程下载器件的配置与编程下载2)将器件插到编程插座中。3)按下Program按钮,编程器将检查器件,并将你的项目编程到器件中,而且还将检查
6、器件中的内容是否正确。88.1 CPLD器件的配置与编程下载器件的配置与编程下载3通过通过JTAG实现在系统编程实现在系统编程 一个编程目标文件(.pof)可以通过Byteblaster电缆直接编程到器件中,如图8-4所示。图图8-4 通过通过JTAG接口对接口对CPLD进行编程进行编程98.1 CPLD器件的配置与编程下载器件的配置与编程下载1)编译一个项目,MAX+PLUS II编译器将自动产生用于MAX器件的编程目标文件。2)将Byteblaster电缆的一端与微机的并行口相连,另一端10针阴极头与装有可编程逻辑器件的PCB板上的阳极头插座相连。该PCB板还必须为Byteblaster电
7、缆提供电源。3)打开MAX+PLUS II编程器。4)在Option菜单中选择Hardware Setup命令,将出现Hardware Setup窗口。5)在下拉条中选择Byteblaster。6)指定配置时使用的并行口。7)按下OK按钮。108.1 CPLD器件的配置与编程下载器件的配置与编程下载4设置在系统多器件同时编程设置在系统多器件同时编程 1)在MAX+PLUS菜单中选择并打开Programme项,在JATG菜单中打开MultiDevice JATG Chain并选择MultiDevice JATG Chain Setup项,进行多个器件的JATG链的设置。对话框如图8-5所示。图图
8、8-5 利用利用JTAG链进行多器件同时编程链进行多器件同时编程118.1 CPLD器件的配置与编程下载器件的配置与编程下载2)按下Add按钮。3)选择Select Programming File 并选出编程文件,该框内显示你选择的编程文件。如果你使用多个器件,重复2)3)步,可确保与你电路板上的顺序相同。4)完成设置后,按下OK按钮。5)按下Program按钮,开始对JATG器件进行编程。128.1 CPLD器件的配置与编程下载器件的配置与编程下载5利用利用Byteblaster电缆配置电缆配置FLEX系列器件系列器件可以在MAX+PLUS中,通过Byteblaster电缆对多个FLEX器
9、件进行在电路配置,过程如下:1)首先编译一个项目,MAX+PLUS II编译器将自动为FLEX器件产生一个SRAM目标文件(.pof)。2)将Byteblaster电缆的一端与微机的并行口相连,另一端10针阴极头与装有可编程逻辑器件的PCB板上的阳极头插座相连。该PCB板还必须为Byteblaster电缆提供电源。3)打开MAX+PLUS II编程器窗口,在Option菜单中选择Hardware Setup命令,在该窗口中选择Byteblaster并设定相应的LPT端口。4)如果只需配置一个FLEX器件,首先检查在编程器窗口中的编程文件和器件是否正确,如果不正确,在File菜单种选择Selec
10、t Programming File命令来改变编程文件。5)如果需要配置含多个FLEX器件的FLEX链,在FLEX菜单中打开MultiDevice FLEX Chain,然后选择MultiDevice FLEX Chain SETUP。接着额按你电路板上的顺序添加FLEX编程文件。选定全部文件后,按下OK按钮。6)在编程器窗口中按下Configure按钮。138.1 CPLD器件的配置与编程下载器件的配置与编程下载8.1.3 Altera CPLD器件的配置与下载器件的配置与下载 这里以FLEX 10K系列器件为例来说明器件的配置与下载原理及方法。1配置类型配置类型(1)分类分类 在FLEX1
11、0K器件正常工作时,它的配置数据储存在片内SRAM之中。由于SRAM的易失性,所以每次加电期间,配置数据都必须重新加载。将FLEX10K分为以下4种配置方式,如表8-1所示。148.1 CPLD器件的配置与编程下载器件的配置与编程下载表表8-1 FLEX10K器件的配置方式器件的配置方式158.1 CPLD器件的配置与编程下载器件的配置与编程下载(2)配置文件大小配置文件大小 表8-2总结了各种FLEX10K器件配置文件的大小,如果要配置多个器件,则简单的将这些数据大小相加即得所需配置存储器的容量。表表8-2 FLEX10K器件配置文件的大小器件配置文件的大小168.1 CPLD器件的配置与编
12、程下载器件的配置与编程下载(3)配置中将用到的引脚配置中将用到的引脚 在介绍几种配置方式之前,有必要先介绍一下在配置过程中我们要用到的一些引脚,当然这些引脚在不同器件上的引脚号不同,但功能却是相同的。如表8-3所示。表表8-3 FLEX10K器件配置时使用的引脚说明器件配置时使用的引脚说明178.1 CPLD器件的配置与编程下载器件的配置与编程下载188.1 CPLD器件的配置与编程下载器件的配置与编程下载198.1 CPLD器件的配置与编程下载器件的配置与编程下载(4)主动串行配置或主动串行配置或EPC1配置方式配置方式 主动串行配置(AS,Active-Serial Configurati
13、on)由Altera提供的串行PROM存储芯片EPC1向FLEX10K器件输入串行位流的配置数据。如图8-7所示。图图8-7 8-7 单器件主动配制电气连线图单器件主动配制电气连线图208.1 CPLD器件的配置与编程下载器件的配置与编程下载多片FLEX10K器件的主动串行配置电路如图8-8所示。图图8-8 8-8 多器件分割配制电路多器件分割配制电路将图8-7与8-8比较可以看出,除了FLEX10K器件和EPC1级连外,其余的基本类似。218.1 CPLD器件的配置与编程下载器件的配置与编程下载(5)被动串行配置方式被动串行配置方式 在被动串行配置(PS)方式中,由BitBlaster下载电
14、缆或微处理器产生一个由低到高的跳变送到nCONFIG引脚,然后微处理器或编程硬件将配置数据送到DATA0引脚,送配置时钟到DCLK引脚,数据在DCLK的上升沿处被琐存,直至CONF_DONE变为高电平,它是先将每字节的最低位LSB送到FLEX10K器件。CONE_DONE变为高电平后,DCLK必须有多余出的10个周期来初始化该器件,器件的初始化是由下载电缆的编程适配器自动执行的,如图8-10所示。在PS方式中没有握手信号,所以,配置时钟的工作频率必须要低于10MHz。228.1 CPLD器件的配置与编程下载器件的配置与编程下载图图8-10 Bitblaster电缆电缆接口示意图接口示意图 图8
15、-11示例了利用微处理器来进行PS 方式配置,图8-12示出了利用编程硬件来进行PS方式配置。238.1 CPLD器件的配置与编程下载器件的配置与编程下载图图8-12 BitBlaster与与CPLD的接口的接口图图8-11 利用微利用微处理器进行处理器进行PS配制配制248.1 CPLD器件的配置与编程下载器件的配置与编程下载图图8-13 利用微处理器利用微处理器进行多器件配制电路进行多器件配制电路 在多器件PS方式中,第一片FLEX10K的nCEO引脚级联到下一片FLEX10K的nCE引脚。在第一个器件编程完成之后,该器件的nCEO输出由高到低使能第二个器件,一个时钟周期之内,第二个FLE
16、X10K器件开始配置,因此,对于微处理器来说,要转移的数据是透明的,如图8-13所示。258.1 CPLD器件的配置与编程下载器件的配置与编程下载(6)被动并行同步配置被动并行同步配置(PPS)方式方式 在被动并行同步配置方式中,nCONFIG引脚被智能主机控制,如微处理器等。PPS配置方式如图8-14所示。图图8-14 8-14 用微处理器进行用微处理器进行PPSPPS模式配制模式配制268.1 CPLD器件的配置与编程下载器件的配置与编程下载 PPS配置方式也可以用于配置多个FLEX 10K器件。在多器件PPS方式中,FLEX 10K器件采用级联方式进行配置。如图8-15所示。图图8-15
17、 用微处理器进行多器件用微处理器进行多器件PPS模式配制模式配制278.1 CPLD器件的配置与编程下载器件的配置与编程下载(7)被动并行异步被动并行异步(PPA)配置方式配置方式 图8-17示意了PPA配置方式,其中有一个地址解码器控制着nCS和CS引脚。该解码电路允许智能主机通过处理特殊地址来选择地址FLEX10K器件,以求简化配置过程。PPA方式同样可以用来配置多个FLEX10K器件,如图8-18所示。图图8-17 8-17 用微处理器进行用微处理器进行PPAPPA模式配制模式配制288.1 CPLD器件的配置与编程下载器件的配置与编程下载图图8-18 8-18 微处理器进行多器件微处理
18、器进行多器件PPAPPA模式配制模式配制298.1 CPLD器件的配置与编程下载器件的配置与编程下载2利用器件的利用器件的JTAG接口配置电路接口配置电路 大多数的ALTERA器件的JTAG都具有第二功 能,即除了能作为边界测试功能外还可以利用 JTAG接口进行器件编程,编程时序同样遵循 1149.1协议。一般使用TDI、TDO、TCK、TMS 共4个引脚。其中TDI是串行数据输入端,TDO是 串行数据输出端,TCLK是串行时钟,TMS是 JTAG状态机模式控制输入端。TDI、TDO、TMS 的数据在TCLK时钟的配合下,将数据串行移位 到CPLD内部JTAG移位寄存器中。308.1 CPLD
19、器件的配置与编程下载器件的配置与编程下载 如果采用Byteblaster配制电缆进行编程接口引脚的描述见表8-8和图8-21。图图8-21 Byteblaster8-21 Byteblaster配制电缆接口电路配制电缆接口电路318.1 CPLD器件的配置与编程下载器件的配置与编程下载3Byteblaster配制电缆接口电路配制电缆接口电路 以上部分内容介绍了各种配制电路与CPLD的接口及时序,一般情况下各种下载电缆可以由Altera公司或其代理商提供。但Byteblaster配制电缆内部接口电路Altera公司已经开放,如图8-21所示,图中左边标注的引脚是与PC的打印机接口对应,右边的引脚
20、分为JTAG模式和PS模式两种,可以分别与CPLD或EPC2对应的引脚相接,其中电源为5V,所有配制电阻在30至100之间选择,该电缆的使用范围为Altera所有5V、3.3V、2.5V的器件。各引脚的描述见表8-8。328.1 CPLD器件的配置与编程下载器件的配置与编程下载图8-21 Byteblaster8-21 Byteblaster配制电缆内部接口电路配制电缆内部接口电路 338.1 CPLD器件的配置与编程下载器件的配置与编程下载表表8-8 Byteblaster模式及引脚描述模式及引脚描述34 8.2 基于基于AT89S5X系列单片机的系列单片机的ISP编程编程8.2.1 ISP
21、技术简介技术简介 ISP(In-System Programming)在系统可编程,指电路板上的空白器件可以编程写入最终用户代码,而不需要从电路板上取下器件,已经编程的器件也可以用ISP方式擦除或再编程。ISP技术是未来发展方向。ISP是最先由Lattice公司提出的一种技术,是通过同步串行方式实现对其可编程逻辑器件的重配置。ISP与JTAG的接口协议很相像,只是后者形成了标准。ISP现在已经成为一种概念,它的提出改变了传统硬件系统开发的流程,大大方便了开发者,加快了开发速度。现在大多数的可编程器件(FPGA、CPLD、DSP、MCU)都支持ISP特性。单片机也不例外,Atmel公司推出的AT
22、89S系列51单片机也符合ISP特性。35 8.2 基于基于AT89S5X系列单片机的系列单片机的ISP编程编程8.2.2 基于基于ISP技术的下载电缆技术的下载电缆 要实现JTAG接口协议可以使用专用的IC,如74LVT8980、74LVT8990,它与MCU配合可以提供高速的JTAG串行访问,成本较高。下载电缆则是实现JTAG接口协议的廉价方案。它仅命名用74HC244做线路驱动,由计算机的并行端口引出I/O作为TCK、TDI、TDO、TMS等信号线。由于并口在SPP模式下共有3个端口数据输出端口、控制输出端口、状态输入端口,各种下载电缆究竟从那个端口引出JTAG信号线几乎都不相同,图8-
23、22、图8-23是两种下载电缆的原理图。36 8.2 基于基于AT89S5X系列单片机的系列单片机的ISP编程编程图图8-22 Altera官方下载电缆原理图官方下载电缆原理图37 8.2 基于基于AT89S5X系列单片机的系列单片机的ISP编程编程图图8-23 Atmel 官方下载电缆原理图官方下载电缆原理图38 8.2 基于基于AT89S5X系列单片机的系列单片机的ISP编程编程并口简介:并口简介:计算机的并行端口工作在SPP模式下,对它的控制是通过数据输出端口、控制输出端口、状态输入端口来实现的。并行口有25个引脚,其中包括8位数据线、5位状态线、4位控制线。数据端口(378H):D0D
24、7用于数据输出。状态端口(379H):*S7(Busy)、S6(nAck)、S5(PE)、S4(Select)、S3(nError)。控制端口(37AH):*C3(nSelin)、S2(nInit)、*C(AnutoFeed)、*C0(nStrobe)。(端口地址是默认的LPT1设置;*表示此引脚有反向器)表8-9为并行端口定义。对应原理图有 Altera的下载电缆:TCK、TDI、TMS、TDO分别对应D0、D6、D1、*S7;Atmel的电缆:TCK、TDI、TMS、TDO分别对应*C0、D0、*C3、S6。39 8.2 基于基于AT89S5X系列单片机的系列单片机的ISP编程编程表表8-
25、9 并行端口定义表并行端口定义表40 8.2 基于基于AT89S5X系列单片机的系列单片机的ISP编程编程8.2.3 基于基于ISP技术的下载电缆的编程实现技术的下载电缆的编程实现 用计算机控制下载电缆实现JTAG协议,就是对并口3个I/O端口的读写操作,用0-1的变化来模拟JTAG时序。在Win98和Win2000环境下读写I/O,需要驱动程序。可以使用DriverLINX Port I/O Driver(可以从WWW下载)来实现I/O端口访问。安装DLPORTIO以后,通过调用DLPORTIO.DLL动态连接库中的UCHAR DLPORT_API D1PortRead PortUchar(
26、IN ULONG Port)。VOID DLPORT_API D1PortWrite PortUchar(IN ULONG Port,IN UCHAR Value);两个函数就可以访问位于378H、379H、37AH(这是缺省的LPT1设置)的3个并口I/O端口。程序段1实现了对Altera下载电缆的一次电平赋值:41 8.2 基于基于AT89S5X系列单片机的系列单片机的ISP编程编程程序段程序段1Altera下载电缆电平赋值函数Void CAvrISPDlg:Setbit()Unsigned char value=0;If(!m_tck)value|=0 x01;If(!m_tms)val
27、ue|=0 x02;If(!m_tdi)value|=0 x40;DlPortWritePortUchar(0 x378,value);Value=DlPortReadPortUchar(0 x379);If(value&0 x80)m_tdo=0;Else m_tdo=0;通过以上程序依次改变JTAG各接口I/O的电平状态,模拟JTAG协议的时序,就可以访问支持JTAG标准的各种芯片。42 8.2 基于基于AT89S5X系列单片机的系列单片机的ISP编程编程8.2.4 ISP协议的分析与实现协议的分析与实现 对AT89S5X系列单片机ISP编程不使用JTAG协议,而使用SPI同步串行接口协议
28、,如图8-24所示。图图8-24 8-24 串行编程时序串行编程时序43 8.2 基于基于AT89S5X系列单片机的系列单片机的ISP编程编程 针对这种8位SPI接口协议,我们使用数组来模拟时序:时钟信号固定为unsigned char sck19=0,0,1,0,1,0,1,0,1,0,10,1,0,1,0,1,0,1,0,0;输出的数据信号由程序实现情况自动生成数组unsigned char mosi19;输入的数据根据读入的信号生成数组unsigned char miso19;再调用上文的Setbit()函数,依次发送19位的JTAG接口I/O状态,同时读入返回信号,即完成一次对AT89
29、S5X芯片的SPI单字节访问。在单字节访问基础上,参考Atmel公司的AT89S5X数据手册的串行编程指令表中的指令格式,就可以实现ISP了。表8-10为AT89S51串行编程指令表。44 8.2 基于基于AT89S5X系列单片机的系列单片机的ISP编程编程表表8-10 AT89S518-10 AT89S51串行编程指令集串行编程指令集45 8.2 基于基于AT89S5X系列单片机的系列单片机的ISP编程编程注:串行编程要在RST端接高电平情况实现;X表示此位关心;A11A0是要访问字节地址;D7D0是读写的数据;B1、B2是保护位;LB3LB1表示3种状态。针对AT89S51单片机,其标志字
30、节为:(00H)1EH、(02H)51H、(04)06H.程序段2将得到AT89S51单片机的标志字节。(其中SPIcomm()为SPI单字节访问函数)。46 8.2 基于基于AT89S5X系列单片机的系列单片机的ISP编程编程程序段程序段2获得AT89S51单片机标志字节的程序段CString str;for(addr=1;addr3;addr+)m_comm=0 x28;SPIcomm();m_comm=addr;SPIcomm();m_comm=0;SPIcomm();m_comm=0;SPIcomm();Str.Format(“0 x%02X”,m_dat);m_out+=str;47 8.2 基于基于AT89S5X系列单片机的系列单片机的ISP编程编程图图8-25 AT89S518-25 AT89S51串行编程硬件原理图串行编程硬件原理图48