社区导航

 

搜索
查看: 13508|回复: 15

[讨论] sdram中如何实现双缓冲

[复制链接]

324

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2010-4-24 09:31 | 显示全部楼层 |阅读模式
在视频图像处理中,大家一般都是用双缓冲方式,即采用乒乓方式,一个buffer用于接收并处理数据,另一个buffer用于做显示器的扫描缓冲, 等第一个buffer准备好数据,两个buffer对调。 现在的问题是: 这样的系统中要是用两片sdram还是用一片? 我感觉大部分系统都只用一片sdram,如果这样, 怎样使两个buffer独立操作互不影响? sdram只有一片,每一个时刻只能对sdram的一个单元操作呀。 这个问题困扰我很久,不知道大家是怎么做的。
此帖出自FPGA/CPLD论坛


8910

TA的帖子

0

TA的资源

五彩晶圆(高级)

Rank: 9Rank: 9Rank: 9

发表于 2010-4-24 15:42 | 显示全部楼层

回复楼上

这个问题比较麻烦,一般都是用FIFO做缓冲的
一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!


回复

使用道具 举报

324

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2010-4-26 10:09 | 显示全部楼层
fifo大小有限,不够存放一帧数据的啊,何况还要双缓冲


回复

使用道具 举报

989

TA的帖子

0

TA的资源

五彩晶圆(高级)

Rank: 9Rank: 9Rank: 9

发表于 2010-4-26 10:41 | 显示全部楼层

回复 板凳 wonderglass 的帖子

SDRAM可以定义地址的高位为两个buffer,低位为buffer地址吧


回复

使用道具 举报

324

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2010-4-26 16:43 | 显示全部楼层
原帖由 小志 于 2010-4-26 10:41 发表
SDRAM可以定义地址的高位为两个buffer,低位为buffer地址吧


那还是没法对两个buffer同时操作啊。 我在准备下一帧数据时就没法扫描显示器,在扫面显示器时就没法准备下一帧数据,这样双缓冲不就失去意义了吗


回复

使用道具 举报

752

TA的帖子

0

TA的资源

纯净的硅(高级)

Rank: 6Rank: 6

荣誉会员勋章

发表于 2010-4-26 16:54 | 显示全部楼层
视频图像双缓冲,很少有人只用一片SDRAM的。
假设只用一片SDRAM,你可以这么想,在同一时刻,对第一个blank写数据,对第二个布兰科读数据。可在一个时刻,数据、地址线没有办法同时传送两组数据。所以只用一片SDRAM应该不行。


回复

使用道具 举报

787

TA的帖子

0

TA的资源

纯净的硅(高级)

Rank: 6Rank: 6

荣誉会员勋章

发表于 2010-4-26 16:55 | 显示全部楼层

必须用大容量ram的fpga才能实现fifo

cpld用8倍频也行。
我搞这个多半年才搞定。


回复

使用道具 举报

8910

TA的帖子

0

TA的资源

五彩晶圆(高级)

Rank: 9Rank: 9Rank: 9

发表于 2010-4-26 16:55 | 显示全部楼层
用外部SRAM做FIFO罗,容量也很大的。用SDRAM做双FIFO少见,我没看见有人这样做。
一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!


回复

使用道具 举报

8910

TA的帖子

0

TA的资源

五彩晶圆(高级)

Rank: 9Rank: 9Rank: 9

发表于 2010-4-26 17:02 | 显示全部楼层

基于FPGA 的视频图像采集系统的设计与实现

1、引言

  高速视频图像的采集、存储以及处理被越来越广泛的应用于国民经济的各个部门,特别是嵌入式图像处理系统在工业控制、智能交通管理、安检等领域有着广泛的应用。其中采用FPGA作为视频图像采集及处理系统的控制芯片,并采用高速数字信号处理芯片DSP作为运算核心并辅助以存储芯片的系统是一种典型的设计方式。一个稳定、实时、高速的前端图像采集及存储模块是这种图像处理系统的一个重要的组成部分。本文将重点描述图像采集模块的设计与实现。在设计中广泛采用了FPGA设计中的乒乓转换思想,保证了高速信号流的不间断传输,同时充分利用同步有限状态机(FSM)产生精确的时序,控制系统内部各个操作过程。

2、系统设计思想

  基于FPGA芯片的高速、高集成度、编程灵活等优点,采用硬件描述语言VerilogHDL[5]进行编程设计,可以方便的实现数据流的不间断采集;同时将所需要的图像数据进行存储,并辅助DSP芯片将图像数据传输至DSP进行算法级处理,根据不同的需要在DSP内移植不同的算法,可以灵活的实现各种图像识别、处理等功能。本嵌入式系统采用Altera Cyclone FPGA器件作为控制核心[2],对实时的视频图像进行捕捉,提取其有限帧图像作为处理对象进行存储及处理,整个系统的设计框图如图1。



图1 系统设计框图 

  系统共有4个部分组成:1.A/D转换部分2.图像存储部分,采用双SRAM作为存储器件3.系统控制部分,采用Cyclone系列FPGA作为控制核心4.图像处理部分,采用双DSP作为图像数据处理核心。其中前三部分是本论文重点描述部分。A/D转换部分作为前端负责图像数据采集及模数变换,本系统采用PHILIPS公司的视频解码芯片SAA7113H来完成。存储部分采用高速SRAM,其读写周期可达到10ns[4]。考虑到外部视频数据的高速及不间断性,采用双SRAM作为存储器件,并采用乒乓控制的思想,通过FPGA的编程控制,使其进行交替的数据读写,保证数据的完整性和不间断性。图像数据处理的核心采用TI公司的TMS320C6000系列DSP芯片,通过移植不同的算法,实现对不同图像数据的处理。具有很大的灵活性和可操作性。系统的控制部分负责整个系统的数据分配、控制信号的建立与数据传输等工作,本模块与其它四个模块相连接,控制前端的数据采集,将数据进行存储,同时响应DSP的读写信号,将数据传输至DSP进行后期处理,在处理完毕以后将所期望的结果数据传输至终端PC从而完成整个操作过程。本系统采用AlteraCyclone系列FPGA。设计过程中主要采用乒乓控制思想来完成数据流不间断的采集与传输。

3、FPGA控制模块的设计与实现

  根据系统所要实现的功能以及系统的运行过程,并考虑到本系统涉及众多芯片的协调工作,在设计过程中将FPGA控制模块分为5个部分,其编程结构如图2所示.这5个部分分别是1.AD接口部分A/D Interface 2.数据暂存部分FIFO 3.DSP接口部分DSP Interface 4.核心控制部分ControlCore 5.负责发送处理结果部分UART。



图2 FPGA编程结构框图

3.1 A/D Interface.

  A/D Interface模块是用来和外部视频解码芯片SAA7113H相连,其输入信号是SAA7113H芯片输出的场同步信号VS、行同步信号HS、8位数字图像信号VPO、数据同步时钟LLCLK[5]。此模块根据输入的行场同步信号,对有效视频图像数据进行采集。其中A/D芯片SAA7113H输出数据,每采集一帧图像都是分两场采集,采用VRLN=1模式,第一场的有效数据是从第23行开始到第309行结束。第二场有效数据从第336行开始到622行结束[5]。采用全彩色图像信号每行数据容量1440x8bit。当行参考信号和场参考信号同时处于有效状态时,数据线将在LLCLK的同步下传入8位图像数据[5],在输入数据有效阶段此模块输出FIFO写控制信号WrP;在行消隐以及场消隐期间,禁止数据写入FIFO。

3.2 FIFO

  在系统运行过程中,前端数据的采集需要跨越两个时钟域,一个是外部的视频图像数据同步时钟LLCLK在本系统中是27MHZ,另一个时钟是FPGA的运行时钟可达到100MHZ以上,所以我们设计了两个FIFO作为数据的缓存。这两个FIFO有以下几个作用:一是数据缓存.二是时钟隔离,因为数据跨越时钟域进行传输的时候会出现亚稳态[7],因此用双时钟异步FIFO将数据进行读写隔离,保证数据的稳定性。三是双FIFO可以实现乒乓操作,保证数据不间断的进行采集。FIFO输出空满信号给内部控制模块,内部控制模块根据这两个信号对两个FIFO进行读取操作。

3.3 DSP Interface

  系统采用TI公司的TMS320C6000系列DSP作为图像处理芯片,其中利用DSP的EMIF(External Memory Interface)接口[3],将FPGA以及SRAM配置为SBSRAM(Synchronous Burst Static RAM),FPGA通过读取DSP EMIF接口的nSSADS nSSOE nSSWE EA[N+2:2] ED[31:0] 等信号,根据DSP内部的时序关系,获取DSP的读写使能信号,同时对读写地址进行适当的编码,将数据有效的写入DSP以及从DSP中读出所需要的运算结果。DSP Interface模块主要完成以下工作(1)接收SRAM满标志信号sramWrFinish,判断SRAM的控制权是否处于无效状态,即SRAM没有被控制模块所操作。然后向DSP发出中断信号dspInt,通知DSP可以进行读操作。(2)对EMIF接口信号进行采样并判断是否有读使能信号的启动。在判断DSP开始对外部数据进行读操作时将读地址输出到所要操作的SRAM地址口,同时给出SRAM的读使能信号nCE nOE,将数据从SRAM里面读出并送入DSP。(3)根据SBSRAM Write Burst by C62xx/C67xx DSP时序图,接收DSP写使能信号dspWrCmd,根据接口时序将数据从DSP读出,并进行进一步的处理。

3.4 ControlCore

  ControlCore模块是编程结构中最重要的一个控制部分,其主要负责协调输入数据的存储,以及将存储数据传输至DSP进行处理。因为涉及众多芯片的协调工作,此模块采用有限状态机(FSM)进行乒乓控制[5],其同步时钟是FPGA的运行时钟fpgaClk。与FIFO相连接的部分输入信号是FIFO的满/空信号fullp,emptyp.输出FIFO的读使能信号rdp。在此接口使用乒乓控制,如果一个FIFO写满,外部的saaInterface模块放弃这个FIFO的控制权,交由FPGA的ControlCore来进行控制,然后ControlCore对这个已经写满的FIFO进行读操作,直至这个FIFO出现空信号emptyp;如此交替操作实现输入数据的控制[7]。

  在控制FIFO的同时,此控制模块要将读出数据写入SRAM中去。因为PAL制式信号属于隔行扫描,输出数据并不是连续的图像数据,而是第一场输出奇数行数据,第二场输出偶数行数据,因此要对接收的数据进行有效的地址编码,将它们重新整合成一幅完整的图像数据。对双SRAM的控制如同双FIFO控制一样,通过获取与释放SRAM的控制权,与DSP进行交替控制SRAM。当一个SRAM写完一帧图像的时候,转而向第二个SRAM写入数据,同时向dspInterface发出满标志信号,并释放已经写满数据的SRAM的控制权,交由dspInterface模块控制。

3.5 UART

  UART 为通用异步接收/发送装置,在设计模块中用来负责和外部终端如PC进行连接,将系统处理结果等信息输出至外部设备,完成整个嵌入式系统最后一部分工作。本系统在UART接口方面采用RS232-C串口通信标准,通过FPGA内部编程,实现与PC之间通信的串口电路。另外在模块设计中,我们调用了QuartusII的Megafunction的ALTPLL模块作为单时钟输入以后的倍频以及分频器。

4、系统仿真结果

  整个编程结构在进行编译以后,共使用LE为570,占用端口114个。通过QuartusII的RTL Viewer可以观察其内部的模块分布情况,如图3所示



图3 FPGA编程结构RTL视图

  鉴于整个系统接口复杂,在系统方针过程中首先是对各个模块进行功能仿真,功能仿真无误后,然后再对各模块进行联合仿真其中包括功能仿真、综合后仿真和时序仿真。通过QuartusII的SignalTapII以及SignalProbe[2]进行测试程序能够在电路中稳定准确的运行。图4和图5分别是乒乓控制数据流向的仿真图,图6是整个编程系统的功能仿真图。



图4 乒乓控制数据流向(1)


图5 乒乓控制数据流向 (2)


图6 系统仿真图

5、结论

  系统设计过程中采用了Altera Cyclone系列的FPGA来控制系统的运行,使得系统设计便捷,整体电路时序精确,运行速度高,具有很好的实时性。在系统设计过程中还可以进一步提高FPGA内部LE的利用率,以便能够增加更加复杂的控制程序并可以增加部分图像初期处理模块,提高整个系统的运行速度。
一个为理想不懈前进的人,一个永不言败人!
http://shop57496282.taobao.com/
欢迎光临网上店铺!


回复

使用道具 举报

4

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2010-5-10 20:51 | 显示全部楼层

6713与fpga的通信

各位高手,谁有DSP6713与FPGA通过EMIF的Verilog程序啊,谢谢各位


回复

使用道具 举报

23

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2012-2-27 13:41 | 显示全部楼层

楼主求助

最近在调SDRAM,调了一个星期了。也无法实现存储,特向楼主讨教,zhoutialing@163.com 望楼主指导一番。


回复

使用道具 举报

13

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2012-2-29 14:46 | 显示全部楼层
是啊 我们现在准备做两帧图像的运算操作,但是板子内部的fifo 远远不够存储一帧的大小。惆怅。。。我这有篇基于一片SDRAM的进行乒乓操作的 文章,, 你看看:

实时视频采集系统的SDRAM控制器设计
0 引 言
    在PAL→VGA的实时视频采集系统中,由于视频数据流的数据量大、实时性要求高。需要高速大容量的存储器作为图像数据的缓存。SDRAM作数据缓存不仅具有大容量和高速度的特点,而且在价格和功耗方面也占有很大的优势。但是SDRAM控制较复杂,需要处理预充、刷新、换行等操作,因此有必要设计SDRAM控制器来完成和SDRAM的接口。并且为了保证数据流的连续性,实时视频采集系统通常采用通过对两片SDRAM的乒乓操作来完成图像数据的缓存。针对SDRAM是高速设备,工作频率上限最高可以达到166 MHz,而该系统中前端图像采集模块的像素时钟为27 MHz,后端VGA显示的像素时钟为31.5 MHz。在此介绍了一种使用1片SDRAM的不同BANK进行乒乓操作,且相对容易实现的SDRAM控制器设计方法。
1 SDRAM基本操作原理
    SDRAM的主要操作包括初始化、读写访问、刷新、激活、预充电等。以MICRON公司的MT48LC4M3282(1M×32 b×4 BANKS)为例,简要介绍一下SDRAM的操作。
    如图1所示,SDRAM的初始化操作过程如下:
    (1)在电源管脚上电(电压不得超过标称值的0.3 V)并且时钟稳定后经过200μs延迟,执行一次空操作命令(该命令在延迟周期的后期发出)且保持时钟使能信号为高;
    (2)对所有的BANK进行预充电,所有的BANK都进入空闲状态;
    (3)预充电后执行两个自动刷新命令,等待八个刷新周期完毕;
    (4)发出模式设置命令来设置模式寄存器。由于上电后模式寄存器的状态是不确定的,所以在进行SDRAM操作之前一定要先设置模式寄存器。模式寄存器设置值如图2所示。

    对SDRAM的读写访问先要以激活命令选择具体的BANK和行,地址线BA1/BA0用来选择BANK,A0~A11用来选择所要访问的行;然后发出读或写命令,地址线A0~A7用来选择所要访问的起始列。在读命令发出后,要等待一个CAS延迟时间,有效数据才会出现在数据总线上,CAS延迟时间可以设置为2或3个时钟。在写命令发出后,不需要等待CAS延迟时间有效数据会立即出现在数据总线上。对SDRAM的读写操作一般以突发模式进行,突发长度可以设置成1,2,4,8以及全页,常用的长度为8个。该系统的CAS延迟时间设置为2,突发长度为1。
    SDRAM的存储单元可以理解为一个电容,总是倾向于放电,必须有定时的刷新周期以避免数据丢失。只要保证在64 ms时间内所有有效数据行都完成刷新就可以保证数据不丢。SDRAM提供两种类型的刷新模式:自动刷新和自刷新。在该系统中,前端PAL制式信号一帧的时间为40 ms,因此SDRAM的同一地址读写操作的时间相隔为40 ms。又由于系统为实时视频采集系统,前端采集的视频数据是连续不断的,所以该系统不需要进行刷新操作即可保证数据不丢。
2 SDRAM控制器的设计实现
    在实时视频采集系统中,为了保证数据的稳定和连续性,通常采用的方法是对存储器进行乒乓操作。一般所指的乒乓操作针对两片存储器芯片,如图3所示,其原理是通过控制模块对两片存储器分别做读写操作,写存储器满时控制模块发出交换命令,切换两片存储器的操作状态。


    该系统采用的是一片SDRAM实现乒乓操作。设计时是利用SDRAM的不同BANK间的存取操作来实现乒乓操作。由于SDRAM总共有4个BANK,所以读取第一帧图像时使用SDRAM的1,2 BANK为读缓存,3,4 BANK为写缓存。第二帧图像时SDRAM的3,4 BANK切换为读缓存,1,2 BANK切换为写缓存。采用一帧图像读写完毕作为切换标志反复切换读写缓存,就充分利用SDRAM的不同BANK来实现乒乓操作。另一方面由于SDRAM的数据线和地址线只有1组,所以实际控制的时候读写操作是不能同时进行的。设计中考虑到SDRAM的工作频率与前端图像采集的像素频率以及后端VGA显示的像素频率相比要高得多,因此将读写操作利用时分的方式分开控制。所以在控制器中设计了一个指令计数器(Countcmd),通过计数的方式来切换读写操作。只要选取适当的SDRAM工作频率以及指令计数器的规定值就可以完成SDRAM读写操作的连续切换。实际设计中采用的SDRAM工作频率为100 MHz,指令计数器的规定值为240。SDRAM控制器状态转换概图如图4所示。

    SDRAM控制器的具体状态转换流程如下:首先初始化SDRAM,然后向SDRAM的1,2 BANK写入第一帧图像,当第一帧图像写入完毕后进入乒乓操作阶段。此时SDRAM的1,2 BANK为读缓存,3,4 BANK为写缓存。
    首先进入读缓存激活行,开始读操作,读操作开始的同时启动指令计数器。此时每执行一条指令(包括读指令,空操作指令,不包括预充电指令和行激活指令),指令计数器自加1,当指令计数器到达规定值时将指令计数器清0并切换到写状态。进入写状态前先判断写缓存的行激活标志,如果没有激活,先执行行激活,然后开始写操作,如果已经激活则直接开始写操作。写操作开始的同时启动指令计数器。此时和读状态时一样,每执行一条指令,指令计数器自加1,当指令计数器到达规定值时同样将指令计数器清0后切换到读状态。如此反复切换操作,直至读完一帧或者写满一帧。如果是读完一帧,则判断写缓存中一帧写满没有。如果已经写满,则进入读写BANK切换状态。如果没有,则进入写状态并不再切换读写状态,一直保持写状态直至写满一帧为止,然后进入读写BANK切换状态。如果是写满一帧,则同理于读完一帧的情况,首先判断读缓存中读完一帧没有,然后根据判断结果进行操作,最后进入读写BANK切换状态。在读写BANK切换状态中,读缓存切换为3,4 BANK,写缓存切换为1,2 BANK。反复上述操作步骤,就可以完成使用一片SDRAM不同BANK的乒乓操作。整个SDRAM控制器在Altera的QuartusⅡ7.2环境下采用Verilog设计完成,然后在ModelSim SE 6.0环境下仿真通过。随后通过Altera的QuartusⅡ7.2进行综合和布局布线,并最终在Al-teraCyclone系列FPGA芯片EP1C6Q240C8上完成。所设计的SDRAM控制器在PAL→VGA的实时视频采集系统中调试通过,能够实现图像数据的存储和读取,完全满足系统的要求。
3 结 语
    介绍在PAL→VGA的实时视频采集系统中使用SDRAM作为图像缓存的基本操作,设计一种使用1片SDRAM的不同BANK进行乒乓操作的相对容易实现的SDRAM控制器设计方法。在PAL→VGA的实时视频采集系统中,使用了所设计的SDRAM控制器,并通过硬件验证,采集得到的图像质量较好。另外,这里设计的SDRAM控制器稍加改动就可以应用到其他实时视频采集系统中去,具有很强的通用性。

点评

谢谢分享,或许用得上。  详情 回复 发表于 2013-12-6 12:27


回复

使用道具 举报

51

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2013-12-6 12:27 | 显示全部楼层

回复 12楼小霍 的帖子

谢谢分享,或许用得上。


回复

使用道具 举报

40

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2013-12-6 15:58 | 显示全部楼层
同一时刻只能对SDRAM进行一个动作,所以一片SDRAM应该不行吧。

点评

看屏幕分辨率,fps要求有多高,可以时分复用吧  详情 回复 发表于 2020-2-14 11:38


回复

使用道具 举报

51

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2013-12-6 23:45 | 显示全部楼层
再看了一遍问题。
楼主的问题在我看来是FPGA<=>SDRAM的带宽问题,为此可以考虑由SDR SDRAM升级为 DDR甚或DDR2 SDRAM,在原来相同的时间内(比如1ms),可以完成对DDR的读和写 操作。
【大概看了一下,Cyclone 2这样的FPGA 就支持DDR2了】

当然,如果读写带宽基本够,也可以多加1片SDRAM(多1个片选引脚),也能解决问题。


回复

使用道具 举报

385

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2020-2-14 11:38 | 显示全部楼层
panchhunhui 发表于 2013-12-6 15:58 同一时刻只能对SDRAM进行一个动作,所以一片SDRAM应该不行吧。

看屏幕分辨率,fps要求有多高,可以时分复用吧



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 1/4 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-4-2 10:52 , Processed in 0.459142 second(s), 19 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表