通信人家园
标题:
CPLD在线加载技术浅谈
[查看完整版帖子]
[打印本页]
时间:
2010-9-23 23:32
作者:
h99110501
标题:
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/4B
分别与
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
是一样的,都是在片内集成了一个存储单元。
附件:
时间:
2010-9-25 10:58
作者:
els99
不错的东东,楼主辛苦
时间:
2020-1-7 15:18
作者:
xiaoxiaohe99
支持分享
通信人家园 (https://www.txrjy.com/)
Powered by C114