现在的位置: 首页CPLD介绍及应用正文

CPLD在多路高速同步数据采集系统中的应用

CPLD在多路高速同步数据采集系统中的应用

CPLD(Complex Programmable Logic Device,复杂可编程逻辑器件)是在传统的PAL、GAL基础上发展而来的,具有多种工作方式和高集成、高速、高可靠性等明显的特点,在超高速领域和实时测控方面有非常广泛的应用。与FPGA相比,CPLD比较适合计算机总线控制、地址译码、复杂状态机、定时/计数器、存储控制器等I/O密集型应用,且无须外部配置ROM、时延可预测等。目前的CPLD普遍基于E2PROM和Flash电可擦技术,可实现100次以上擦写循环。部分CPLD支持ISP编程或者配置有JTAG口,对于批量小、品种多的模板开发极为有利。而用VHDL设计的程序,借助EDA工具可以行为仿真、功能仿真和时序仿真,最后通过综合工具产生网表,下载到目标器件,从而生成硬件电路。

1 系统设计原理及框图

以Altera公司7000S系列CPLD产品之一EPM7128S-10为控制核心,控制模/数转换电路,最多可完成32路模拟数据的16位高速同步A/D转换。

图1为与A/D转换电路相关的系统外围电路框图。外部32路模拟输入通过调理电路后,CPLD控制多路切换器选通某一路信号送入A/D转换器(AD676)进行A/D转换,转换结果经过数据缓冲在合适的时候通过总线被读入处理器。一般的设计思路如下:①主处理器直接控制A/D转换电路,完成模拟输入信号的采集保持、A/D转换器的控制、通道的切换、数据的读取以及控制注入信号完成模拟通道的自检等。这种解决方案占用主处理器大量的I/O资源和处理时间,在高速采集与大计算量的时实系统中是不可取的:一方面因为处理器的I/O资源极其有限,同时又要求大量的汇编软件配合,不利于设计的移植;另一方面由于频繁地执行I/O操作完成相对定时关系,来实现高速数据采集,不利于系统调度软件的设计的其它软件模块的时实执行,由于此段I/O操作类似于原子操作,很难解决其它模块响应时间可能较长的矛盾。②采用其它廉价的从处理器,如MCS-51单片机来控制上述过程,使之与主处理器并行化。但此时从处理器与主处理器之间的高速数据实时交换就成为瓶颈,而且由于MCS-51单片机亦为软件化流程控制,存在跑飞的可能,两处理器的同步又成为新的问题。应用CPLD器件就可以很好地解决上述矛盾,实现配置随意可改写和高速硬件流控制等。随着ISP器件的发展,CPLD已经日益广泛地应用到高速数据采集系统中,但都是很考虑设计本身的容错、自检能力和使用的灵活性,不利于故障的定位和嵌入式应用的移植。本设计中采用CPLD作为A/D转换电路的控制器,和主处理器并行交互数据,很好地解决了上述矛盾。

多路模拟信号的同步采样一般有两种实现方法:一种为多个A/D转换器同时进行转换;另一种为仅有一个A/D转换器,各通道同时采样,然后分时转换。考虑到16位高速A/D转换器AD676的价格因素,采用后一种方案。AD676有三个控制信号:SAMPLE、AD-CLK、CAL。它们需要一定的时序配合才能正常工作,如图2所示。由于AD676的转换结果不具备三态输出功能,所以需增加74F574和总线进行隔离,为此配置控制信号WRAD、RDAD;同时要考虑到32路模拟信号的采样保持控制S/H、多路切换器的控制信号M1A4~M1A0,以及输入模拟信号选择M0A1~M1A0、数据准备好信号INT1等共14个。CPLD和处理器采用并行接口,因此其输入信号有:系统复位信号RST、处理器的读/写信号RD/WR、片选信号IOSTROBE、外部时钟输入CLK、辅助地址信号A20~A17和A5~A0、AD676的反馈输入BUSY,共22个输入。外加双向数据总线D07~D00。设计中没有将总线隔离器74F574集成到CPLD中,主要考虑到保留适当的I/O等资源用于系统的地址译码和其它辅助功能。地址译码等辅助模块比较简单且与特定的处理器相关,故此处不作介绍。

虽然有复位默认值,但CPLD为灵活控制多路模拟量的同步A/D转换,要求处理器正确设置两个控制参数,即进行数/模转换的模拟量通道的总个数SUM和数/模转换的初始通道号chan;然后再对CPLD写入启动A/D转换命令,这样CPLD即可脱离处理器,控制A/D转换电路。CPLD首先按照LF398的时序要求产生其所需的采样保持信号S/H完成32路模拟量的同步采样,然后按照图2所示的通常转换时序控制AD676去完成一次转换。一旦该次转换完成,使能WRAD信号,锁存转换结果到74F574,并发出数据准备好信号INT1,同时标识内部状态信号,作为中断请求通知处理器,或者供处理器查询状态。CPLD将一直等待处理器将该次转换结果取走才取消此标示信号。在CPLD等待的过程中,处理器亦可命令CPLD提前结束转换,以适应不同的应用要求。转换结果取走后,CPLD清除内部的标识信号和数据准备好信号,SUM的映像减1,若不为0,chan的映像加1,输出到M1A[4..0]去切换至下一通道,继续按照图2所示的通常转换时序工作;若为0,则该次采样转换完成,等待处理器的下一次启动信号。这样,只占用了处理器的一个中断请求资源和少数外部空间,就实现了最多至32路模拟信号的同步高速数模转换。为使设计具有一定的容错功能,在A/D转换器空闲时,处理器才可以启动A/D自校准测试,但此时CPLD应该防止处理器误启动A/D转换。当A/D转换器空闲或者A/D自校准已经结束时,处理器才可以进行A/D转换工作。同样,此时CPLD应该防止处理器误启动A/D自校准。为使CPLD能支持处理器的检错功能3,应该使CPLD以及A/D转换器的状态信息可以被处理器随时读取,以便在系统级上定位故障。同时,CPLD可以选择调理电路的模拟输入信号源,便于处理器检测调理电路。

为达到以上的功能,在设计中主要设置了四大功能模块,分别为时钟分频模块、控制译码模块、总线接口模块、状态机模块,设计原理如衅3所示。时钟分频模块用于产生AD767的转换时钟。为简化设计,达到高速和简化的目的,此模块的分频系数由设计固化。控制信号译码模块用于完成处理器对CPLD片内模块的寻址和译码,为一简单译码逻辑和触发电路。总线接口模块用于完成处理器和A/D转换控制器的数据交换;同时完成AD767的自校准信号CAL的控制,如图2所示的自校准时序。需要注意一点的是,在自校准的过程中,SAMPLE信号必须保持低电平,否则出错。状态机模块用于产生A/D转换的时序,如图2所示的通常转换时序。在转换的过程中,CAL信号必须保持低电平,否则出错;状态机模块同时完成对多路切换器的控制。图2所示的各信号的相对定时关系此处不作说明,请查阅AD676的数据手册。

为达到图2所示SAMPLE、CAL时序的相互闭锁关系,从状态机模块引出其内部状态信号到总线接口模块,一方面,状态机的状态可以随时被处理器感知;另一方面用于闭锁CAL信号,即闭锁自校准。详细地说,就是在A/D转换期间,在图2所示的通常转换时序中,从SAMPLE变高到BUSY信号再次变低以前,即使处理器再次写入了启动自校准命令,CPLD亦闭锁CAL信号的产生。为便于安全启动CAL信号,在本次转换完成或全部转换完成时,满足一定的相对时序即可启动。同理,将总线接口模块内控制CAL信号的状态机的状态引入状态机模块,用于在自校准期间,闭锁SAMPLE信号的产生,即闭锁处理器启动A/D转换的命令。这样,A/D转换控制器就具有很好的容错能力。无论何时,处理器都可以通过读取SAMPLE、CAL、BUSY、中断请求、状态机的状态,来监测CPLD、AD676等的工作和判断损坏与否。通过处理器的配合就使CPLD支持系统的在线自检,解决了以往类似设计中存在错误而处理器又无法进行故障定位的问题。

2 系统仿真和验证

以上设计用VHDL语言描述完成后,首先在ACTIVE-HDL5.1环境下进行编译、综合、适配后再时序仿真;但这只是纯逻辑验证,此时时序仿真图中没有包含任何硬件延迟信息。结果正确后,在MAX+PLUSII 10.0环境下进行编译、综合、适配后,再进行时序仿真验证。由于考虑了硬件因素,选择MAX7000S系列的EPM7128STC100-10器件后,该器件的摆率位Turbo bit必须选中,否则在高速时钟输入时,MAXPLUS的仿真结果不正确。图4即为在MAXPLUS下的时序仿真结果,模拟40 MHz的CPLD时钟输入和主处理器50ns的外部存储器访问周期,可以达到AD676的最快转换速度。实际电路也验证了这一点。

在线咨询