赞
踩
乒乓操作是一个主要用于数据流控制的处理技巧,典型的乒乓操作如下图所示
外部输入数据流通过“输入数据选择控制”模块送入两个数据缓冲区,数据缓冲模块可以为任何存储模块,比较常用的存储单元为双口RAM(Dual RAM)、SRAM、SDRAM、FIFO等
在第一个数据缓冲周期,写“数据缓冲1”模块
在第二个数据缓冲周期,读“数据缓冲1”模块,写“数据缓冲2”模块
在第三个数据缓冲周期,写“数据缓冲1”模块,读“数据缓冲2”模块
. . . . .
这里就用到了乒乓操作完成数据的无缝缓冲和处理。乒乓操作可以通过“输入数据选择控制”和“输出数据选择控制”按节拍、相互配合地进行来回切换,将经过缓冲的数据流没有停顿的送到“后续处理”模块。
应用实例:在液晶显示使用乒乓操作可以提高图像的切换速度
对于外部接口传输的图像数据,以一帧图像为单位进行SDRAM的切换控制。当SDRAM1缓存图像数据时,液晶显示的是SDRAM2的图像数据;当SDRAM2缓存图像数据时,液晶显示的是SDRAM1的数据图像;如此反复,这样的好处在于液晶显示的图像数据瞬间切换完成,掩盖了可能比较缓慢的图像数据流变换过程
如果将乒乓操作看成一个整体的模块的话,这个模块的数据数据流和输出数据流都是连续不断,没有任何停顿,因此非常适合对输入数据进行流水线式处理。也就是在遇到输入数据存在延迟,又想排除延迟所造成的影响的时候,可以使用乒乓操作。由此也可以看出,乒乓操作常常应用于流水线式算法,完成数据的无缝缓冲与处理
乒乓操作的第二个优点是可以节约缓冲区空间。比如WCDMA基带应用中,1个帧是由15个时隙组成的,有时需要将1整帧的数据延时一个时隙后处理,比较直接的办法是将这帧数据缓存起来,然后延迟一个时隙进行处理。这时缓冲区的长度是1整帧数据长,假设数据速率是3.84Mbps,1帧长10ms,则此时需要缓冲区长度是38400位
每秒接收数据大小位3.84M,而每秒可以接收的帧数是100帧,那么缓冲区大小就是3.84M / 100 = 3480000 / 100 = 38400位
如果采用乒乓操作,只需定义两个能缓冲1个时隙的RAM(单口RAM即可)。当向一块RAM写数据的时候,从另一块RAM读数据,然后送到处理单元处理,此时每块RAM的容量仅需2560(38400 / 15)位即可,两块RAM加起来也只有5210位的容量
另外巧妙运用乒乓操作还可以达到用低速模块处理高速数据流的效果。如下图所示,数据缓冲模块采用了双口RAM,并在DPRAM后引入了一级数据预处理模块,这个数据预处理可以根据需要的各种数据运算,比如在WCDMA设计中,对输入数据流的解扩、解扰、去旋转等。假设端口A的输入数据流的速率位100Mbps,乒乓操作的缓冲周期是10ms。以下分析各个节点端口的数据速率
A端口输入数据流速率位00Mbps,在第一个缓冲周期10ms内,通过“输入数据选择单元”,从B1达到DPRAM1。B1的数据速率也是100Mbps,DPRAM1要在10ms内写入1Mb数据。同理,在第二个10ms,数据流被切换到DPRAM2,端口B2的数据速率也是100Mbps,DPRAM2在第二个10ms被写入1Mb数据。在第三个10ms,数据流又切换到DPRAM1,DPRAM1被写入1Mb数据。仔细分析就会发现第3个缓冲周期时,留给DPRAM1读取数据并送到“数据预处理模块1”的时间一共是20ms。
有的工程师困惑于 DPRAM1 的读数时间为什么是 20ms, 这个时间是这样得来的: 首先, 在在第 2 个缓冲周期向DPRAM2 写数据的 10ms 内, DPRAM1 可以进行读操作;【?????】
另外,在第一个缓冲周期的第5ms起(绝对是件为5ms时刻),DPRAM1就可以一边向500K以后的地址写数据,一边从地址0读数据,达到10ms,DPRAM1刚好写完了1Mb数据,并且读了500K数据,这个缓冲时间内DPRAM1读5ms留在第三个缓冲周期的第5ms起(绝对时间为35ms时刻),同理可以一边向500K以后的地址写数据一边从地址0读数据,又读取了5ms,所以截至DPRAM1第一个周期存入的数据被完全覆盖以前,DPRAM1最多可以读取20ms时间,而所需读取的数据为1Mb,所以端口C1的数据速率为:1Mb / 20ms = 50Mbps。因此,“数据预处理模块1”的最低数据吞吐能力也仅仅要求为50Mbps。换言之,通过乒乓操作,“数据预处理模块”的时序压力减轻了,所要求的数据处理速率仅仅为输入速率的1/2
通过乒乓操作实现低速模块处理高速数据的实质是:通过DPRAM这种缓存单元实现了数据流的串并转换,并行用“数据预处理模块1”和“数据预处理模块2”处理分流的数据,是面积与速度互换原则的体现
乒乓RAM操作的应用场合,当数据进行处理时,如果数据来的速率比较块,而处理数据的速率相对较慢,并且在进行数据处理的时候是需要先对进来的数据做一缓冲,等数据量达到一定的成都时再集中对数据继续处理,比如FFT运算就是一个典型的例子。现拿一个64点的FFT运算来举例说明:假设输入的原始数据的速率时5M,而ADI信号处理器的工作时钟为100M,而每处理一次64点的FFT运算需要30个系统时钟(系统时钟频率是数据速率的20倍),假如现在输入数据已经达到64个,则信号处理器需要进行FFT运算,当FFT运算结束时,下一个数据有可能已经过了,如果不采取缓存措施,则有可能会导致数据丢失,所以为了防止上述情况发生,可采用双RAM操作,即:用两块64个存储单元的RAM,当数据来时先对数据进行一下缓存,比如64个数据来时,先把数据缓存在第一块RAM里,当第一块RAM存储满时,这时便以系统时钟速率将第一块RAM的数据给FFT信号处理器,让其完成FFT去处,并将以后的数据缓存到第二块RAM里,由于系统时钟的速率是数据速率的20倍,当第二块RAM里的数据存储满后,FFT处理器有64*20 = 1280个系统系统时钟的工作时间,对于处理仅需94(30(FFT运算处理时间)+64(从RAM块里读出64个数据给FFT运算处理器所需的时间))个系统时钟的FFT运算来说已经足够
采用传统的双RAM块进行操作时也会存在一定的缺陷,比如,采用两块RAM会占用比较大的面积,这对集成电路的小型化发展带来不利,所以,考虑以上原因,现利用一块RAM完成双RAM乒乓操作的功能。将原来的两个RAM块合成一块,大小变为128*16bit,前64个数据存入地址为0-63的单元里,后64个数据存入64-127的单元中。
在现在的数据采集分析系统中,随着采集数据的速度剧增,每次都对这些庞大的数据量直接进行分析,这将会占用很多的CPU,使得CPU不能及时的去做其它的事情。我们可以在传输这些数据的时候提供适当的通道,建立一个缓冲电路,来实现数据流的无缝缓存和处理,提高系统的处理速度和性能。
输入输出缓存电路一般有三种结构和形式:
综上所述,乒乓缓存结构实际上相当于一个双口RAM,但它与普通的双口RAM又有所不同。普通双口RAM是单个存储体构成的IC,乒乓ram结构则由包含两个相互独立存储体的多片IC构成,从而使其在结构、速度、容量等方面具有更大的灵活性;若双口在访问同一地址时,普通双口SAM指向的必定是存储体内的同一存储单元,而乒乓ram结构则分别指向属于SRAM1和SRAM2的两个不同的存储单元,更易操作。乒乓缓存结构的上述特点决定了可以相对较便宜的高速大容量SRAM、外围逻辑器件构成比双口RAM以及高速FIFO更适合视频处理的系统所需要的缓冲存储器。
当保存数据到RAM时,在输入数据时同时要产生相应的地址,这样RAM才会把数据与地址一一对应,按顺序存取。FPGA读写控制模块需要给出两组地址线,两组输入、输出数据总线以及读、写片选等控制RAM的控制信号线,两组输入、输出数据总线以及读、写片选等控制RAM的控制信号线,分别单独的控制RAM A 和RAM B,以便输入的信号总线交替输出
为了解决共用总线时的资源冲突时,还需适当的控制两片RAM的通断。可以用一个信号控制RAM A和RAM B的切换。实际上,RAM的数据线也有两组,其工作方式和其他地址线一样。为了给数据处理模块充裕的时间读取RAM中的数据,还要对每次存入RAM中的数据做一定量的处理,选择出有用的信号
如下图,图2为乒乓RAM的模块示意图。先在时钟控制下输入两路信号,经过粗略处理,产生两路数据线和地址线,以及两个RAM模块的控制线,分别控制两个RAM的读和写,并且两个RAM的读(或者写)互锁,即一个若处于读状态,则另一个处于写状态。最后把另一个RAM保存的数据经过一个二选一模块输出,分时复用,产生在时间上连续的数据流输出
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。