新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于USB2.0和DDR2 SDRAM IP核的数据采集系统设计与实现

基于USB2.0和DDR2 SDRAM IP核的数据采集系统设计与实现

作者:时间:2017-06-05来源:网络收藏

引言

随着计算机、微电子和嵌入式系统技术的发展,技术已经在生物医学、图像处理、雷达系统等众多领域得到广泛应用。本文设计的高速系统是应用于芯片现场测试的实时系统,由于被测试芯片为250 MHz 8 bit的高速AD输出, 因此, 该数据采集系统的数据采集率是2 Gbps。为了达到实时、高速、海量的数据采集, 该系统利用DDR2 SDRAM的高速数据传输能力和海量存储能力做为采集数据的缓存,然后通过具有即插即用、易扩展、传输速率较高等特点的USB2.0接口来将DDR2 SDRAM中的数据传输到计算机中进行存储和分析。

1 数据采集系统架构

该数据采集系统的总体架构由硬件部分、固件部分和计算机上的USB驱动及应用程序等几大部分组成, 本文完成了硬件和固件部分的设计。

该系统的硬件部分主要由USB2.0、DDR2SDRAM、MCU以及IF等核心模块组成, 图1所示是其系统架构图。

图1 系统总体架构图

本文引用地址:http://www.eepw.com.cn/article/201706/349123.htm

USB2.0由控制器和物理传输层组成, 其中控制器是在FPGA上实现的Faraday公司的,物理层可选用SMSC公司的GT3200芯片, 控制器与物理层芯片之间可通过标准的UTMI接口相连。

DDR2 SDRAM控制器是基于Xilinx公司提供的, 工作频率是125~266 MHz, 与SDRAM之间的接口是64 bit SODIMM笔记本内存条接口。作为数据存储的SDRAM 是Samsung 公司的M470T5663QZ3-CE6 2GB 内存条。系统的控制核心MCU采用Mentor Graphics公司的增强型8051 M8051EW,该8051核采用两个时钟周期为一个机器周期的高性能架构, 同时支持MWAIT信号来控制程序总线,从而能够支持慢速的外部程序和数据存储器。IF模块是该系统设计的关键, 它相当于DMA的功能,主要负责USB与DDR2、外部数据接口与DDR2之间的数据传输。

2 数据采集系统设计

本文中的数据采集系统采用USB2.0和DDR2SDRAM相结合的设计思路,从而打破了传统数据采集系统在实时数据采集中大容量和高速率不可兼得的瓶颈。在图1所示的系统架构的四个部分中,由于USB2.0和DDR2控制器都是IP核, 因此, 该系统设计的关键在于MCU和IF模块。

2.1 MCU的设计

MCU是数据采集系统的控制核心, 主要用于对USB2.0控制器进行配置、查询和处理USB事务, 以及解析USB设备请求, 同时,还需配置IF模块, 处理与IF模块之间的控制信号等, 因此,MCU的设计包括数据接口及控制信号的设计以及固件设计两个部分。

MCU数据总线接口包括与USB2.0控制器和与IF模块的接口,这里的USB2.0控制器和IF模块相当于外部设备挂在MCU的外部存储器总线和ESFR(外部特殊功能寄存器) 总线上。控制信号主要用于计算机上的控制台控制IF模块数据传输的开始与结束, 通常包含在USB的设备请求中。

整个固件的开发可在Keil C下完成, 并可通过JTAG进行调试。开发一般包括三部分: 一是协助USB控制器完成总线列举过程,让计算机识别USB设备; 二是通过解析自定义USB设备请求,来对采集模式、深度等进行配置, 从而控制采集的开始与结束;三是查询和处理IN、OUT事务中断, 并控制USB数据传输。

2.2 IF模块设计

IF模块负责接口的转换和数据传输的控制,其结构如图2所示。其中, usb2ddr和eoc2ddr子模块分别控制USB2.0与DDR2 SDRAM、外部采集接口与DDR2 SDRAM之间数据的上下行传输。

上下行数据传输分别由usb2ddr_ctrl 和eoc2ddr_ctrl模块中的状态机进行控制和管理。其中采集模式和深度由MCU的ESFR总线配置,而传输开始信号则使用MCU的PORT0 [0]、PORT0[1], 结束信号连接在MCU的外部中断NINT0和NINT1上,这样可使MCU能够及时响应。上行采集开始后, 首先使eoc2ddr_ctrl中的控制状态机处于写状态,并不断地比较DDR2的地址与配置深度, 直到采集完成。然后再使usb2ddr_ctrl中的控制状态机处于读状态,同样也比较地址与深度,直到数据读取完成。下行传输过程则与之相反。

图2 IF模块结构框图。

由于各个接口上数据传输的速率不同, 因此, 数据传输时, 要异步FIFO或者缓存。在本设计中, 由于各接口速率固定, 因此,可采用双端口RAM作方式以提高效率并保证数据连续, 图3所示是原理图。

图3 原理图。

当下行发出数据时, 从DDR2的125 M×128bit到50 M×8 bit所需要的最小深度为32×8 bit,因为从SDRAM中读数据的最大延迟是26个DDR2时钟周期(即208 ns), 而将DDR2读出的128 bit发出则需要16个时钟周期(即320 ns), 因此, 为了保证发出的数据可连续进行乒乓操作, 需要2×128bit的深度。同理,在上行数据从DDR2的125 M×128 bit到USB的30 M×32 bit则需要4×128 bit深度,因为USB时钟读完128 bit数据需要133.2 ns, 小于SDRAM 读数据延迟的208 ns, 因此, 每次从SDRAM中读2×128 bit数据时,其乒乓操作就至少需要4×128 bit深度。

3 系统的改进

本数据采集系统对传统的数据采集系统做了创新型改进。改进主要是三个方面: 一是对数据采集的深度实行可配置模式;二是在功能上不仅作为数据采集系统, 还能作为数据发生器, 即将采集到计算机上的数据通过数据采集系统发送出来;三是该数据采集系统有两种工作模式, 即普通采集模式和触发采集模式。

深度可配置增加了系统在使用过程中的灵活性。该系统除了采集数据外, 还能将数据发出来用于芯片的FPGA原型验证,从而避免了缓慢的大数据量仿真, 更增强了系统的实用性。通过ESFR配置8 bit的深度寄存器可实现以16 MByte为单位的深度调节。触发是数据采集系统不可缺少的功能, 因此,该数据采集系统分为普通采集模式和触发采集模式。触发采集模式的原理如图4所示。在触发模式中, 可将SDRAM看做一个圆形的循环存储器,触发前后的采集深度同样也可以通过ESFR配置, 从而实现触发前后的采集深度比例可调。

图4 触发实现机制原理图。

4 FPGA实现

FPGA在系统设计中具有很好的灵活性和可扩展性, 因此, FPGA是一个非常好的系统实现平台。通过对数据采集系统的资源*估,可得出如表1所列的资源占用结果。

表1 FPGA的资源占用情况。

本系统最终选择了Xilinx 公司的FPGA器件Virtex5 LX30。由于DDR2 SDRAM控制器是Xilinx公司的IP核, 故在系统的集成和实现过程中不可避免的要对原IP核进行改动, 同时,在ISE中布局布线时, 相应地要对原有UCF文件中的约束进行修改, 以满足时序要求。本系统除USB2.0的PHY和SDRAM外,其余部分均由FPGA实现, 图5所示是系统在计算机上的操作界面和实物图。

图5 操作界面和FPGA实物图。

5 结束语

本文结合USB2.0与DDR2 SDRAM的特点, 给出了可打破普通数据采集系统在实时、高速和大容量数据采集上的瓶颈的方法,并且在实用性方面进行了改进。该系统最终可在FPGA上实现,因为用FPGA实现具有极大的灵活性和可扩展性,并且在系统设计成本和快速实现上具有很好的竞争优势。目前,该数据采集系统在实际运用中效果良好。实际上, 若对采集接口稍加改进, 并将IF模块中的乒乓缓存改为异步FIFO,就能广泛地应用于各类高速系统的实时数据采集。

须注意的是,时钟速率与传输延时并没有什么关系,甚至普通的100bps时钟也会出现抖动问题。这意味着虽然FPGA供应商宣称他们的芯片具有较短的传输时间和很高的时钟速率,但抖动问题可能会严重,甚至那些没有运行在最高速率上的设计也是如此。

好在FPGA供应商已经认识到时钟抖动的影响,并在他们的芯片中提供低抖动的布线资源。这些特殊的布线能够在芯片中一个给定范围内的任何两个触发器之间提供一个确定的最大抖动。部分产品的低抖动资源覆盖了整个芯片,而其它的则可能只覆盖了FPGA逻辑块中的一个特定的行或列。对于一个需要很多不同时钟源的设计,这些低抖动FPGA是比较理想的选择。

多时钟设计的最严重问题之一是用异步时钟将两级逻辑结合在一起。由于异步时钟会产生亚稳态,从而严重降低设计性能,或完全破坏设计所能实现的功能。在触发器的时序要求产生冲突时(设置时间和保持时间)将产生亚稳态,触发器的最终输出是未知的,并使整个设计处于不确定状态。如果有一级逻辑要将数据异步地发送到另一级,图3所示的情形将不能满足触发器的设置和保持时间要求。确切地说,如果设计中含有异步逻辑将有可能会产生亚稳态。在处置异步资源时必需非常小心,因为这可能产生一些很严重的问题。

多时钟设计

本文以电信应用中的E3多路复用/解复用设计为例。如图4所示,多路复用器接收来自一组独立线路接口芯片的16个独立E1信道,每一个信道都工作于2.048MHz;经复用后,这些E1流组合成4个E2流,分别工作在8.0448MHz;4个E2流最后组合成一个E3流,以34.368Mbps的速率串行发送出去。在接收端执行相反的操作:解复用器从E3流提取4个E2数据流,然后从E2流提取16个E1流,最终将E1流发送到接收端的线路接口芯片。

这些E1线路接口在发送和接收时都独立工作,因此2.048MHz的时钟速率可以有+/- 20ppm的偏差。同样,因为大多数系统同时发送和接收数据,分立的多路复用器和多路解复用器将提供2个独立的E3流(发送和接收)。因此,两个34.368MHz的时钟可以存在细微的差异。

由于E2流是在芯片上产生的,这些E2多路复用器可以共享同一个8.448MHz时钟。然而,由于接收的数据速率与我们所设计的板无关(且不能假定所有E2多路复用器使用相同时钟),所以E2解复用器时钟必须能工作在略为不同的速率下。

此外,假定设计中需要一个由工作频率为1MHz的处理器控制的独立SPI(串行外围接口)总线接口,该接口用于状态和控制。这样一来,设计中总共用了32个2.048MHz时钟,5个8.448MHz时钟,2个34.368MHz时钟和一个1MHz时钟,总共多达40个时钟。

本设计中最快时钟是34.368MHz E3时钟。FPGA的最大时钟速率的确定很重要,因为设计的差异将影响到该最大值。然而,在芯片商的资料手册中常常可以看到“全局时钟设置及保持时间”和“至CLB输出的时钟”两个参数,将这两个参数的最大值相加,再增加25%就能可以得到最小时钟周期的初略值,在最大时钟速率条件下允许10%的余量,以保证过热条件下能正常工作。因此,我们设置的最小速率为40MHz,很多较新的FPGA都能够很容易地支持该频率。事实上,FPGA供应商已经推出了超过300MHz的器件。

在确定了能满足最大频率要求的FPGA后,就需要保证有足够的空间来实现你的设计。如果所选的FPGA没有足够的余量,就不能提供足够的布线资源来满足设计的时序约束。通常芯片供应商宣称的速率是最佳条件下的速率,FPGA供应商一般建议FPGA逻辑在布线功能开始明显变差以前可以用到80%。在选择FPGA器件时,建议在新的设计时最好使FPGA逻辑用到50%左右,这样就允许计算起始设计大小出现超差,以及为在设计起动后产生不可避免的设计变更留出空间。如果最终的设计只占用低于50%的资源,则可以使用同一系列中较小的FPGA以降低成本。

通过时序约束来规定慢时钟速率,从而可以改进设计中最快时钟的布线。在多路复用器例子中,如果设置FPGA布线工具SPI总线时钟为1MHz,而E3时钟为40MHz,布线工具将尽量使E3时钟的逻辑电路模块相邻布局。如果由于空间的限制而不能将全部电路布局在一起,则首先应将SPI逻辑另外布局,因为SPI逻辑可以处理更长传输延迟。所有FPGA供应商的布线工具都能规定这些较慢时钟速率。

减少时钟数量

根据市场调查,目前还没有哪个FPGA器件能够支持这种多路复用器/解复用器设计所需的40个时钟。所以,我们必须减少所需要的时钟数。

首先了解E2和E3多路复用器的时钟。前面已经分析了4个E2多路复用器工作在相同时钟下的可接受度,E3多路复用器运行于比E2时钟高得多的速率,必需使用一个不同的时钟。但是,如果我们从E3时钟中引出E2时钟是否可行呢?因为E3多路复用器要从每个E2支路得到数据,我们可以在需要E2多路复用器给我们数据时,简单地将脉冲送给每个多路复用器。我们没有去掉任何时钟,但E2时钟现在是基于E3时钟。

如果在所有的多路复用器中也使用同样的时钟,并且只使用一个使能信号来告诉E2多路复用器什么时候工作,这时会产生什么问题呢?如果E3多路复用器用34.368MHz时钟产生使能信号,在这些使能信号上的抖动不会比用在FPGA中任何其它同步逻辑更大。所以,使能信号可以使用正常(高抖动)布线资源,这样就不需要单独的8.448MHz多路复用器时钟,读取E1数据缓冲器的数据时也是一样。换言之,如果E2多路复用器需要数据,它可以激活到特定缓冲器的使能信号。到缓冲器的时钟本身能够保持E3多路复用器所用的34.368MHz时钟,如图5所示。

最后,我们检查16个从线路接口芯片输入到FPGA的E1时钟。这些时钟有会产生下面几个问题:首先,16个时钟将占用太多可用芯片时钟布线资源;其次,在同一个FPGA中使用16个异步时钟来驱动相互邻近的触发器,由于地弹、串扰和其它效应将产生噪声问题。例如,由于噪声的原因,一个正边沿触发器会在下降边沿时改变输出状态,此类问题将难以处理。



评论


相关推荐

技术专区

关闭