CPLD在线加载技术浅谈
在讨论CPLD在线加载技术之前,先来说下CPLD和FPGA两种逻辑器件的差异。
CPLD是complex programmable logic device的缩写,中文意思是:“复杂可编程逻辑设备” ;FPGA是Field Programmable Gate Array,中文意思是:“现场可编程门阵列” 。虽然它们都是可编程的ASIC,有很多共同点,但是由于在结构上的本质差异,具有各自的特点,在用途上也有很大的差异。
1).CPLD主要是基于EEPROM或FLASH存储器的编程方式,编程次数可达1万次以上,该编程方式的优点是系统断电后编程信息不会丢失,所以,CPLD启动速度非常快,基本上上电就可以工作。而FPGA大部分是基于SRAM编程的,编程信息在系统掉电时会丢失,每次上电时,都需要从器件外部的FLASH或EEPROM中存储的编程数据重现写入内部的SRAM中。其有点是可以任意次编程,缺点是启动速度慢,需要CPU先启动,然后在CPU的控制下给FPGA加载编程信息。
2).CPLD内部乘法器资源丰富,比较适合完成各种算法和组合逻辑,通常用来扩展CPU的I/O
接口。而FPGA内部触发器资源丰富,更适合用于时序逻辑设计,通常用来模拟各种高速总线接口转换。
3).CPLD通过修改具有固定内连电路的逻辑功能来编程,而FPGA是要通过改变内部连线的布线来编程;FPGA可在逻辑门下编程,而CPLD是在逻辑块下编程。CPLD的连续式布线结构决定了它的时序延迟是均匀可预测的,而FPGA的分段式布线结构决定了其延迟是不可预测的。
4).FPGA的集成度比CPLD高,具有更复杂的布线结构和逻辑实现功能;CPLD的功耗比FPGA大,而且集成度越高越明显;CPLD的保密性好,FPGA的保密性差。
随着FPGA技术的发展,未来的单板只要CPU+FPGA,另加一些外围器件就可以搞定了(FPGA可以模拟大部分专用IC器件),真正实现硬件的软件化。现在有些FPGA厂商已经开始讲CPU嵌入到FPGA中(包括CS51核、RAM核、DSP等),这样一来的话,简单的单板上连CPU都可以省去,只要一片FPGA加少量的外围器件就可以搞定了。
目前主流的FPGA/CPLD厂商有:Altera, Xilinx, Lattice三家。
好,现在言归正传,探讨下CPLD的在线加载方式。
早期的CPLD是基于宏单元结构的,从外部加载逻辑时,CPLD的I/O口会进入三态状态,影响CPLD的正常工作。那么,如何才能做到在不影响CPLD正常工作的情况下更改CPLD里的逻辑呢?答案是CPLD逻辑在线加载技术。
在线代码运行器在很多场景下都需要这样的技术,比如某个骨干网或核心网的某个节点设备需要升级CPLD逻辑来规避某个BUG,当然,这些设备上运行的正常业务是不能暂停的,否则会导致大范围的网络中断,这是运营商所不能接受的,当然了,也不可能去现场用JTAG工具对CPLD进行升级,太麻烦了。可行的方法是通过串口或USB接口来给CPLD升级,最好的方法是通过以太网接口来给CPLD升级,此方法可以远程操作,不需要去现场,非常方便。不管是通过串口、USB还是以太网,这些升级方式都有一个共同点,那就是都要通过CPU中转,也就是先讲逻辑代码先通过与CPU连接的串口、USB口或以太网口写到CPU小系统的内存中去,然后再在CPU的控制下,将逻辑代码从内存写到CPLD中去。
前面已经讲了,对普通CPLD进行逻辑升级时会使CPLD的I/O口进入三态状态(不管是通过JTAG工具加载还是CPU加载),从而影响正常业务。看来,传统的CPLD由于其自身的结构
原因,是无法做到在线加载的!
针对日益增长的CPLD在线加载需求,主流CPLD厂商推出了支持在线加载的新型CPLD芯片。
新型CPLD芯片采用FLASH+FPGA逻辑单元结构。(传统的CPLD是基于宏单元的结构,内部没有存储单元,存储不了代码,新型CPLD内部有FLASH存储单元,可以存储代码),如下图所示。
JTAG 1149.1是IEEE制定的JTAG原始标准,IEEE 1532是一个符合IEEE1149.1标准的超级,用来对在线系统配置,主要用于对闪存、嵌入式控制器的存储器、复杂可编程逻辑器件(CPLD)和FPGA来进行编程。
新型CPLD芯片有两种加载方式。
1).将编程文件直接加载到片上FLASH和用户逻辑中,这种方式与片外加载方式一样,加载逻辑的时候,所有I/O口会进入三态。
2).另外一种方法是首先将编程文件加载到CPLD的片上FLASH,这个过程不影响CPLD正常工作,之后通过指令或重新上电的方式将FLASH中的逻辑激活到用户逻辑。逻辑激活所需的时间非常短,只需要几毫秒,甚至有些CPLD在激活过程中能指定用于I/O口的输出电平,从而不影响正常工作。
关于CPLD在线加载的硬件设计方案,目前流行的做法是JTAG二选一兼容设计,即在默认状态下将CPLD连接到JTAG链上,此时可利用外部JTAG控制器对CPLD进行加载,需要在线升级时,通过指令将JTAG链路切换到CPU的I/O或扩展I/O上,通过CPU的I/O端口模拟的JTAG主控制器对CPLD进行加载,电路图如下所示。
方案一:
该方案使用一片二选一CMOS器件74HC157,通过使能管脚A/~B来控制输出,当使能管脚接高电平时,1A/2A/3A/4A分别与1Y/2Y/3Y/4Y连接;当使能管脚接低电平时,1B/2B/3B/4
B分别与1Y/2Y/3Y/4Y连接。本设计中,使能管脚通过VCC上拉到高电平,即默认状态下,CPLD是与板内的JTAG链连接,可以通过板外的JTAG控制器对CPLD进行逻辑加载。当需要对CPLD进行在线加载时,可通过指令将74HC157的使能管脚驱动为低电平,此时,CPU的I/O或其扩展的I/O与CPLD直接连接(此时CPLD从板上JTAG链中断开),可直接通过I/O模拟出来的JTAG总线对CPLD进行逻辑加载。方案一目前已被申请专利。
方案二:
方案二与方案一类似,也是使用二选一CMOS器件74HC157,与方案一不同的是,它不是直接通过CPU的I/O端口来模拟JTAG主控制器来对CPLD进行加载的,而是使用CPLD自身的I/O端口来模拟JTAG主控制器来给自己加载。电路原理请参照方案一的分析。
目前不仅有支持在线加载的CPLD器件,也有支持在线加载功能的FPGA器件,例如LATTICE公司的Lattice XP, Lattice XP2两个系列的FPGA。其内部结构原理跟在线加载功能的CPLD是一样的,都是在片内集成了一个存储单元。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论