×
嵌入式 > 技术百科 > 详情

500MHz数据流高速存储的设计与实现

发布时间:2023-10-31 发布时间:
|

引言

在高速数据采集系统中,有两个关键的技术问题:一是信号的高速A/D变换,主要涉及到采用高速的A/D转换器对模拟信号进行变换,所选择的A/D、时钟质量以及PCB的设计等都对其有重要影响;另一个就是变换后的数据的高速缓存和提取,这个问题主要是解决如何在不同的应用场合选择合适的数据高速存储方案,来实现相对高的性价比。实际上,这两个问题是密切相关的。 随着近年来半导体集成电路技术的不断发展,NS、Atmel等公司都开发出了采样速度在1GS/S以上的ADC,如NS公司的ADC08D1000和Atmel公司的AT84AD001,它们都可以实现2GS/S采样率的拼合,转换后的数据经过内部降速后都是500MHz。可见,实现500MHz数据流的高速缓存设计对1GS/S和2GS/S以及更高速的数据采集系统是十分有用的。

高速缓存的方案

通常构成高速缓存的方案有三种: 1. FIFO(先进先出)方式:其特点是它有两个数据端口,数据从一端输入,从另一端输出,且先进的数据先流出。FIFO只有数据线而没有地址线,可以同时进行一端的写操作和另一端的读操作,数据在其中顺序移动,因而能够达到很高的传输速度和效率。其缺点是只能进行顺序读写,而且大容量的FIFO比较昂贵,只适合小存储深度的场合。2. 双口RAM方式:其特点是在同一个芯片里的同一个存储单元具有相同的两套寻址机构和输入输出机构,可以通过两个端口对芯片中的任何一个地址做非同步的读和写操作。双口RAM也能达到很高的传输速度,并且具有随机存取的优点,但缺点是大容量的高速双口RAM很难得且价格昂贵。 3 .高速SRAM切换方式:高速SRAM只有一套数据、地址和控制总线,可通过三态缓冲门分别接到A/D转换器和DSP上。当A/D采样时,SRAM由三态门切换到A/D转换器一侧,以使采样数据写入其中。当A/D采样结束后,SRAM再由三态门切换到DSP一侧以便DSP进行读写。该存储方案最大的特点是SRAM可随机存取,不足之处在于切换控制电路比较复杂 。

高速缓存的实现

综合考虑上述三种高速缓存方案的性能、价格和实现的方便性,并结合自身的系统设计,笔者选用第一 种方案(即FIFO方式)来构成A/D采 样高速缓存。考虑到整个采集系统的要求和结构,系统将FIFO设置在FPGA内部,触发、缓存控制时序以及系统的其他控制也都设计在FPGA内部。这就使整个系统成本低廉、便于实现。高速数据采集系统中的高速缓存电路 主要由四部分组成:LVDS转TTL模块、存储降速模块、内部FIFO以及高速缓存控制。由于一般高速A/D转换后 的数据流都是LVDS输出,因此在送入FPGA缓存前需要将数据流转换成TTL电平。另外,几乎所有低成本FPGA的内部RAM都不能工作在500MHz这么高的频率上,所以在数据存入FIFO之前必须对数据流进行降速处理。 本文将介绍采用Xilinx公司的低端产品Spartan-3A进行高速缓存电路的设计。采用Xilinx公司Spartan-3A进行设计有几个方面的优势:第一,采用LVDS输出的A/D需要在接收端放置100Ω的端接电阻,而Spar tan-3A器件内部具有端接电阻,这就可以避免布板时放置短接电阻带来的困难。第二,PCB设计时,差分布线经常会遇到连线有交叉的情况,这时通常要添加过孔才能布线。而Spartan-3A器件的差分对引脚的正负在PCB布板时可以进行交换,然后在FPGA内部设计时再设置相应的反相,从而给PCB设计带来方便。第三,Spartan-3A器件的I/O引脚可以进行时延设置,这样可以方便地设置高速数据线,从而降低了数据线走等长线的要求。下面将针对这几点对整个数据采集的存储设计进行说明。

基本结构

采用Spartan-3A器件中的IP核IBUFDS可以很容易地实现LVDS-TTL接收模块。

根据所用的器件速度的不同,Spartan-3A器件内部的块RAM的最高速度可达280MHz到320MHz,显然这个速度的高速数据流是不能直接进入FIFO进行缓存的。Spartan-3A器件提供了免费的IDDR模块,可以方便地对输入的高速数据流进行降速处理,使数据流满足FPGA内部RAM的工作频率的要求。

正如前面所提到的,对于差分对引脚正负互换了的数据,需要在FPGA内部进行反相。 之所以把反相放到降速模块之后,是因为IDDR所在的IOB模块内部不含有可反相的输入。实现反相的方法很简单,只需要把要反相的信号与1相异或就可以了。结合前面三点,下面给出了一个八位数据从接收到反相的硬件描述。这里设置了一个用来做反相的数组,从该数组就可以看出第二和第六对差分对是交换过顺序的。 parameter [7:0] SWAP_MASK----------------- = 3'b00100010; genvar i; generate for (i = 0; i <= 7; i = i + 1) begin: loop0 IBUFDS#(.IOSTANDARD("LVDS_25"), .IFD_DELAY_VALUE("0"), .DIFF_TERM("FALSE")) ibuf_d (.I(datain_p[i]), .IB(datain_n[i]), .O(rx_input[i])); IDDR2 #(.DDR_ALIGNMENT("C0")) fd_ioc(.C0(clkin), .C1(notclk), .D(rx_input[i]), .CE(1'b1), .R(1'b0), .S(1'b0), .Q0(rx_input_reg[i+7]), .Q1(rx_input_reg[i])); assign rx_input_fix[i] = rx_input_reg[i] ^ SWAP_MASK[i]; assign rx_input_fix[i+7] = rx_input_reg[i+7] ^ SWAP_MASK[i]; end endgenerate 利用Xilinx开发软件里的IP核生成器很容易就可以根据自己的需要配置好FIFO。

关键问题

一般来说,高速数据线在PCB设计时要保证走线等长,这要靠走蛇行线来保证,从而增加了设计的难度。这时,可以利用I/O引脚的延时特性来弥补数据线之间的长度差别。可调延时由初始值和可调值两部分组成,可调延时的范围为0到6ns,步进为250ps,延时部分在FPGA内部基本结构如图4所示。用它同步好高速数据流与数据同步时钟,可以满足建立时间的要求。这是十分必要的,因为时钟信号经过了全局时钟缓冲器和全局时钟布线网络,因此通过的路径往往要比数据通过的路径长。 为了实现调整数据延时,可以对固定的一个电平进行采样,然后对引脚进行延时,找到使采样结果变坏的一个较小的和一个较大的延时,取它们的平均值作为引脚的时延。

在高速采集系统中,高速采样时钟往往不容易实现方便控制。而且,由于高速A/D建立稳定的工作状态需要一段时间,改变A/D的工作状态将会影响采集的精度。为了改变系统的采样率,我们可以通过改变FIFO的写时钟来实现。 一般来说,改变FIFO的写时钟可以通过对时钟进行分频来实现,但是这种方法将引入更多的时钟域,这违背了同步设计的设计原则。可以用时钟使能的方式代替它,即在需要数据输出的时钟沿使能有效,输出数据;而不需要数据输出时使能信号无效,数据将不输出。当采用分频方式时,数据刚好在时钟的上升沿跳变,这样得到的很可能是不稳的数据。相比之下,采用时钟使能的方式时,时钟上升沿刚好在输出数据的中间位置,数据在输出之前已经完全稳定了。由此可以看出,在变采样率时,采用时钟使能的方法要比采样分频方式效果好的多,尤其是高速数据流的情况,采用分频的方法甚至完全读不到正确的数据。

进行高速设计时,需要加时序约束来控制综合实现过程,使设计满足所需的速度要求。在本设计中,给Spartan-3A器件的DCM模块的输入加周期约束,如对输入的数据同步时钟rxclk_i加周期约束:NET "rxclk_i" TNM_NET = rxclk_i; TIMESPEC TS_rxclk_i = PERIOD "rxclk_i" 4 ns; 这时,FPGA在布局布线时将会满足数据同步时钟速度达到250MHz的要求。另外,还应该对数据同步时钟加MAXSKEW约束,以保证它在芯片内所走的最长和最短路径不超过所设的延时值。例如,要使rxclk_i在芯片内所走的最长和最短路径不超过0.5ns,可以加约束: NET rxclk_i MAXSKEW = 0.5 ns; 最后,通过对所有关键的时钟加约束,保证了整个高速缓存系统的实现。

结论

该 系统采用低端的FPGA将其采样的高速数据降速并存储,解决了高速数据同DSP的工作频率之间的矛盾,满足了成本上的控制。同时,还可以根据要求对FPGA进行修改和调试,并且可以与其他模块配合完成一个完整的产品,这是一种比较理想的实时数据采集系统,满足设计要求。(邹闰平 黄建国 邱渡裕 )


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Keil5(MDK5)在调试(debug)过程中遇到的问题