在第 1个缓冲周期,将输入的数据流缓存到“ 数据缓冲模块在第在第
来自:http://comm.chinaaet.com/adi/blogdetail/22896.html
先简单说一下乒乓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运算来说已经足够。
图1 传统的双RAM操作框图
但是,采用传统的双RAM块进行操作时也会存在一定的缺陷,比如,采用两块RAM会占用比较大的面积,这对集成电路的小型化发展带来不利,所以,考虑以上原因,现利用一块RAM完成双RAM乒乓操作的功能。将原来的两个RAM块合成一块,大小变为128*16bit,前64个数据存入地址为0-63的单元里,后64个数据存入64-127的单元中。结构如下图所示。
图2 一片RAM实现双RAM乒乓操作结构图
下图是利用ISE软件仿真的逻辑功能图
图3 功能仿真图
如上图所示,写地址线的操作只受输入数据的影响,而读地址线则受输入数据个数的影响,当第64个数据到来时,读地址线便从0变到63,并且将64个数据全部送入FFT处理器时,FFT处理器便在系统时钟下进行工作,当写地址线变到0时,便对64-127单元里的数据进行操作,如此循环,便实现一片RAM的双RAM乒乓操作功能。
整理来自:时间的诗
我的理解:最近项目用到FIFO对数据的处理,主要是因为输入的数据为慢时钟,数据处理为快时钟,通过检测FIFO内wr_cnt的数值决定是否读取FIFO内部的数据,在此应用中,FIFO就起到了快慢时钟交换数据的接口,当然,这也是RAM和FIFO最多的应用场景,可以用在快慢时钟的差异,也可以用在位宽的差异,起到了缓冲的作用,让处理速度更快的等待数据准备好后再运算,其实想想FPGA的应用无非就是数据处理,所有的控制就是为了让数据更舒服地在正确的时刻达到正确的地方,这个时刻就是时序,这个地方就是HDMI、UART等外部端口。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!