摘要:介绍了换体dma高速数据采集电路原理及其cpld实现。用cpld设计双端口ram缓存、控制译码、时序逻辑电路,很好地解决了电路元件所占体积大、电路复杂、不能实现在线升级等问题,大大提高了系统的整体性能。
关键词:换体dma cpld 双端口ram 在线升级
在许多仪器和控制系统中,高速数据采集电路是必不可少的,也是经常需要解决的问题。数据采集电路设计方法很多,但往往离不开a/d转换电路、数据缓存电路、控制逻辑电路、地址发生器、址译码电路等。而数据缓存、控制逻辑、地址译码等电路通常是由ram芯片、与非门、触发器、缓冲/驱动器等构成,导致数据采集电路复杂、芯片繁多,特别是硬件的固定使得采集系统在线升级几乎不可能。很多情况下只有重新设计电路和印刷板,重新焊接和调试,造成开发周期长、成本大大增高。复杂可编程逻辑器件cpld的应用,为这些问题的解决提供了一种好的办法。利用cpld芯片本身集成的上万个逻辑门和eab,把数据采集电路中的数据缓存、地址发生器、控制译码等电路全部集成进一片cpld芯片中,大大减小了系统的体积,降低了成本,提高了可靠性。同时,cpld可由软件实现逻辑重构,而且可实现在系统中编程(isp)以及有众多功能强大的eda软件的支持,使得系统具有升级容易、开发周期短等优点。在数据采集有电路中,采用换体dma技术不但大大地提高了数据采集的速度,而且弥补了数据采集中可能丢失数据的缺陷。
1 换体dma数据采集电路原理
系统原理框图如图1所示。在时序电路的控制下,模拟输入开关将多达16路(单端输入)或8路(差分输入)的模拟输入信号经多路开关送至放大器的输入端,放大后由内含采样/保持电路的模数转换器ad774b转换成数字量,转换完的数字量经时序电路的控制写入两个存储体的一个(例如存储体0)中。每个存储体有4kb的容量,但实际使用中存储容量可设定为小于4kb。当计数到设定的存储空量后,控制电路产生换体信号,后续的a/d转换数据自动地存入另一个存储体(存储体1)。同时控制电路向主机发出dma请求信号,主机响应请求后在时序电路配合下,从已存储规定数据的存储体(存储体0)中读入所存的数据。这样存储体0和存储体1交替存取,直到规定的换体次数计完为止。
数据采集电路中,时序控制电路、地址发生器、多路控制驱动器等芯片众多,占用了大部分体积,逻辑时序复杂。用cpld实现这些电路则显得简单明了,如图2所示。图2中地址发生器、双端口ram、时序控制等电路都可以用hdl语言或原理图,或是两者结合来实现,使电路开发简单、灵活、方便。 2 采用cpld实现换体dma
cpld的开发必须经过前期的逻辑设计、前仿真、后仿真、目标代码下载及在调试等过程,该设计过程是借助altera公司的eda软件maxplus ii 10.1来实现的。maxplus ii支持原理图输入、hdl语言输入、设计波形输入等。本设计则是将原理图和hdl语言输入相结合,这样既可以加快开发速度,又不失灵活性。本电路设计所用的cpld芯片一flex10k30e。它是altera公司1995年把eab与逻辑阵列块相结合的产品,增加了许多flex10ka、b系列没有的新特点;flex10k30e内有30000个逻辑门,247576个ram位,支持3.3v、5v多种电源,速度等级高。
2.1 数据缓存——双端口ram
双端口ram的核心是存储器阵列,它的读与写相互独立,有各自的时钟线、地址总线、数据总线和使能端。在数据采集时,数据进入存储器进行缓存,同时cpu可以从缓存中取出数据读进计算机内存。在传统的双ram换体方案中要实现换体,存储器芯片必须使用偶数片来交互存储;当a/d数据位数超过8位时,需要另加芯片来存储高于8位的数据。在cpld中设计双端口ram模块不但实现了双ram换体功能,而且使缓存ram的数据位数、存储量大小可以根据需要任意配置。
如上所述,在cpld中设计双端口ram,可以有两种方式:原理图输入和hdl语言输入。本设计采用的是maxplus ii库中的lpm_ram_dp宏,原理图如图3所示。
在lpm_ram_dp宏中总共有10个可配置参数。通常情况下,只配置lpm_width(数据宽度)、lpm_widthad(地址总线宽度)、use_eab(是否使用嵌入式阵列块eab)三个参数。在本设计中,ad774b的数据宽度是12位,转换速度为8微秒,所以配置了lpm_width=12,lpm_widthad=10(缓存容量为1k),use_eab=on。对于缓存的大小,可以在调试过程中根据具体采集速度和缓存要求进行在线调整,而不影响其他逻辑电路。
图3 lpm_ram_dp模块中rdaddress、rden、rdclock、rdclken、q分别为读端的地址线、使能端、时钟线、时钟使能和数据线;data、wraddress为写端的数据总线和地址总线。图3的双端口ram模块并没有busy端,当写地址和读地址相同时,数据位冲突,读写不能正常工作。在实际工作中,这种问题是不应该出现的。结合本系统的具体需要,在此引入了存储器分而概念,即把1k字节的双端ram分为2页,每页512字节,分别为读缓存页和写缓存页,两者相互交换。当采集数据量达到512字节时,系统马上申请dma传送,把刚转换完的第一页中的512字节数据送给计算机,传送结束后等待下一次dma申请;与此同时,a/d继续工作,转换的数据放在第2页0~511地址中。任何时候读写都分别在不同的页工作,从而有效地避免了数据冲突,但又不影响数据传输速度。具体的分页控制主要由地址发生器设计确定。
2.2 分页地址发生器
分页地址发生器不但要产生双端口ram的读写地址,而且还要为缓存器分页;页写满时,还要提供dma传输申请信号。为了增强灵活性,读写地址发生器由vhdl语言编程集中在一个模块实现,部分程序如下:
signal wtmp:integer range 0 to 1023;
signal rtmp:integer range 0 to 1023;
signal page:intefer range 0 to 1;
if(wclk'event and wclk='1')then
if(wtmp>1023)then wtmp<=0;
else wtmp<=wtmp+1; --wtpm为写地址值
end if;
if(0=
else page<=1; --0代表第0页
end if; --1代表第一页
if(twmp=512 and wtmp=1023)then page_full<='1';
else page_full<='0'; --page-full为页写满标志,同时为dma传送申请信号
end if;
end if;
if(page=0)then rtmp<=0; --不同的页置不同的数据读地址初始值
else if(page=1)then rtmp<=512;
end if;
if(rclk'event and rclk='1')then
if(en='1' and rtmp<1024)then rtmp<=rtmp+1;
end if; --rtmp为读地址值
end if;
代码经过编译生成的原理框图如图3的add_cre-ate模块。在图形输入编辑环境下,可以把它作为一个标准的原理图与其他模块连接;写地址时钟wck由ad774b的sts端产生,每一组数据转换结束后,地址发生器加1,读地址时钟rck由dma应答信号dack提供;page_full在0页或1页满时变为高电平,经d触发器申请dma传输,把刚满页的数据送给计算机内存。
2.3 时序逻辑电路的设计
在数据采集电路中,时序逻辑电路主要解决地址译码、时序逻辑控制、数据锁存等功能。用普通的中小规模集成电路实现,电路组成庞大;而用vhdl语言实现则简单灵活、易于更新升级。图3中的微机译码电路、数据缓冲器、d触发器等都可以在maxplus ii的图形编辑环境下,从库中直接调出。计算机在每次dma传送中都向外设输出一个应答信号dack和读允许信号ior,利用这个特点,正好把它们作为读缓存的地址时钟,即每dma传送一次,读地址为1;ad774b每转换完一组数据,在sts端输出由低电平转换为高电平,刚好给写缓存提供写地址时钟,同时经过适当延时,sts又可以送到r/c端作为a/d下一次转换的启动信号。
3 dma的应用
数据传送的查询方式和中断方式都是在cpu的控制下进行的,因而传输速度受cpu指令运行速度的限制。直接存储器存取方式,即dma方式。存储器与外设在dma控制器控制下,直接传送数据而不通过cpu,传输速率主要取决于存储存取速度。所以在dma过程中,数据传输完全由dma控制器8237a控制,不占用cpu时间。
在本换体dma高速数据采集电路中,用复杂可编程逻辑器件cpld来实现数据缓存、带分页功能的地址发生器以以复杂的逻辑和时序电路等,使得电路大大简化;同时硬件电路软件化,具有可在线更新、升级容易、保密性强等特点。本换体dma高速数据采集电路已成功地应用在生物医学仪器、核谱获取电路中。
晶圆厂调度如今非常复杂,迫切需要下一代智能软件
小蚁智能后视镜领航版评测 性价比方面的表现是无可挑剔的
OPPO发布全链路色彩管理系统详解:支持10bit图片与视频拍摄,Find X3首发搭载
夏季的到来,我们该如何保养精密光纤激光打标机
促进现代服务业转型将取决于物联网?
换体DMA高速数据采集电路原理及其CPLD实现
如何破解AI超微光摄像机高速公路补光灯光污染难题
IBM V7000存储数据恢复案例
富士康:美国首家工厂将生产平板屏幕,并不是iPhone
由Java改为 Kotlin过程中遇到的坑
基于C8051F021型单片机与PCI接口实现数据采集卡的设计
如何优化500A高压连接器的基础性能?
NI视觉开发模块加速嵌入式视觉应用的开发
GPU服务器的详细介绍和工作原理说明
英特尔Core i7-6950X评测:10核20线程的怪兽
LED驱动电路专用电解电容器详解
LoRa模块LoRa1262与LoRa1262F30的区别
机器人的广泛应用将会给社会带来更多的好处
ADI推出单芯片电能计量AFE(模拟前端)ADE7816
boost升压电路中的二极管作用