微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > FPGA和CPLD > 以FPGA为桥梁的FIFO设计方案及其应用

以FPGA为桥梁的FIFO设计方案及其应用

时间:11-08 来源:互联网 点击:
在利用DSP实现视频实时跟踪时,需要进行大量高速的图像采集。而DSP本身自带的FIFO并不足以支持系统中大量数据的暂时存储,这就要求大的中间缓存,而专用的高速FIFO芯片价格昂贵且容量受限,大大增加了商业成本,因此在实际应用中寻找FIFO代替器件是很有必要的。

1 器件选择

这里在视频信号处理系统中,将利用FPGA作为桥梁,实现对SDRAM的控制,以达到大量高速存取数据的功能。之所以选取SDRAM,主要是因为在各种随机存取器件中,SDRAM的容量较大,价格较低,且数据突发传输模式大大提高了存取速度,能够满足应用的要求。

FIFO的速度受到两个因素的限制:

(1)SDRAM的最高工作频率。SDRAM的工作频率越高,数据的传输速率就越高;

(2)SDRAM的突发长度。SDRAM的突发长度越长,对数据流的吞吐量就越大,可以从某种程度上提高数据的传输速率。

FIFO的大小由所选SDRAM芯片的容量来决定。该设计以采用MICRON公司的MT48LC4M3282(4 BANK×4M×32 b)为例,存储容量为128 Mb,数据带宽为32位,内部由4个BANK组成,每个BANK有4 096行和256列。

MT48LC4M3282的控制信号有CLK(时钟信号)、CKE(时钟使能)、CS(片选信号)、WE(写使能)、CAS(列有效)、RAS(行有效)、DQM0~DQM3(输入输出使能)。控制信号组成的常用控制命令如表1所示。



2 FIFO系统设计

FIFO系统由FGPA和SDRAM两部分组成。其中,FGPA内部包含FIFO监控器、缓冲器、SDRAM控制器三个模块。FIFO监控器的作用是将FIFO的状态转变成状态机的读、写信号。若操作为向SDRAM写数据,则在FIFO已满时,FIFO监控器送出一个信号,以阻止写操作继续向FIFO中写数据而造成溢出;若操作为向SDRAM读数据,则在缓冲器已空时,FIFO监控器送出一个信号,以阻止读操作继续从FIFO中读数据而造成无效数据的读出。FIFO的模块结构如图1所示。



在该设计中,摄像头采用640×480的屏幕分辨率,图像深度为8,每秒为25帧,图像数据量的大小为图像中像素总数与图像深度的乘积,由此可以得出每帧图像的大小为2.457 Mb,每秒钟视频产生数据的大小为61.44 Mb。因为系统向SDRAM控制器写入和读出数据的速度比较低,约为62 MHz,FPGA的外接晶振CLK为27 MHz,FPGA和SDRAM的工作时钟由锁相环4倍频后生成,即为108 MHz,所以SDRAM控制器向SDRAM写入和读出数据的速率为108 MHz,因此二者属于不同的时钟域,需要用缓冲器作为输入和输出的缓存。

SDRAM控制器的模块结构如图2所示,其中SDRAM控制器内部包括:初始化模块、模式寄存器、控制模块和状态机。SDRAM的接口设计是极其关键的,可根据SDRAM内部操作状态之间的联系,通过状态机来实现接口设计。初始化模块负责SDRAM的初始化,在上电和时钟稳定后等待100 ms,至少执行一条空操作,然后对所有页执行预充电操作,使所有页处于空闲状态,接着向各页发出两条刷新操作指令,最后发出一个模式寄存器装载命令,使SDRAM有确定的状态进行读写操作。模式寄存器可根据要求对SDRAM的突发长度、突发类型、CAS延时的时钟数、运行模式和写突发模式进行设置,确定SDRAM在读写操作时的工作状态。模式寄存器M0~M2用于规定突发长度,可以为1,2,4,8。M3用于规定突发类型,当M3=0时,突发类型是连续的;当M3=1时,突发类型是交错的。M4~M6用于规定CAS延迟的时钟周期数,可以分为1,2,3。M7,M8用于规定运行模式。M9用于规定写突发模式,当M9=0时,按实际编程的突发长度存取;当M9=1时,按单个存取单元写入,但可按实际编程的突发长度读出。



状态机是SDRAM控制器的核心控制模块,其作用主要有两个方面:其一是对各模块发出的操作请求进行仲裁,在适当的时刻作出反映,发出对SDRAM适当的控制命令;其二是协调各模块之间的时序关系,满足对SDRAM读写所必需的时序要求。状态机的状态转移如图3所示。



在模式设定之后,BANK和行地址选中需要访问数据所在的具体BANK块和行,状态机对这一行发出激活命令,从激活到读写操作需要经过一个tRCD的延时,设计中选tRCD=20 ns,而系统时钟周期为9.26 ns,所以从激活到执行读写操作之间至少需要3个时钟周期。在执行读写操作时,只要状态机通过读写命令选中数据所在行的列地址,就能达到读写具体存储单元的目的。状态机对SDRAM发出一个读命令后,需要等待一个CAS latency,然后才能读数据;而写操作是实时的,不需要延时,状态机在发出写命令后,就可以对SDRAM进行写操作。SDRAM同时只允许一行地址激活,因此在完成某BANK/ROW的读写操作后,对该BANK/ROW进行预充电,然后才能激活下一个BANK/ROW。从预充电成功到下一次激活命令成功,如果是在同一个BANK块,则需要延时tRC,如果是不同的BANK块,则需要延时tRRD。

SDRAM要求在64 ms之内对4 096行进行刷新,也就是每15.625μs刷新一行。由于系统时钟周期为9.26 ns,所以刷新模块计数达到1 685时,就需要对SDRAM发出刷新命令,保证SDRAM中的数据不丢失。将自动刷新请求设为优先请求,状态机内部有请求仲裁逻辑,当自动刷新请求和其他请求同时出现时,优先保证自动刷新请求,状态转移至刷新操作,当刷新操作结束时,重新返回空闲状态,开始响应其他请求。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top