fpga 图像缓存方案讨论

fpga存储图像方案讨论

本文不讨论片上ram 以及sram存储,在此进讨论基于sdram存储的情况,在此sdram指 sdr sdram ,ddr sdram , ddr2  sdram ,ddr3  sdram等。

(——不用对这些sdram感到惧怕,在quartus中都可以生成他们的IP核,而对用户侧的接口都是avalon接口的——)

1.一般存储方法采用乒乓操作

过程:

(1)假设两个bank,当进来第一幅图像的时候,存到第二个bank,然后启动乒乓操作,此时开始向bank1 写数据,读取bank2的数据;

(2)此时有三种情况,bank1的图像写完了,bank2还在读,请看(3);bank1中的图像没写完,但是bank2中的图像已经读完了,请看(4);刚好同时完成请看(5)

(3)此时产生bank1中图像已经写完,置位标志wr1_fin_flag,然后等待读完成切换bank,在此期间来的写数据统统丢弃,但是下一次写数据需要同步处理,等一帧图像的开始才能写bank。一幅图像的起始来临后才能进行写操作。

(4)此时已经读完bank2的数据了,但是还在写bank1,因此此时执行的操作是读取bank2的数据,然后接着向bank1写数据,直到bank1中的数据已经写完了,然后置位wr1_fin_flag,然后等待读结束信号,若在等待过程中又来了新的数据,而此时还在读取bank2,那样应该丢弃该帧数据,直到读结束后,方可切换bank。所以在这种操作模式下,也是有丢弃数据的风险的。

(5)那样的话速率一致,直接切换bank即可。

2.采用存取至少三幅来保存图像

过程:首先进来的图像先写到第一个地址区,然后启动读。然后向第二个地址区写数据,然后读取第一个地址区的数据,此时由于速率不同也会产生相应的三种情况,当写速率大于读速率,请看(1),当写速率小于读速率请看(2),当读写速率相同,请看(3)

(1)写完了第二个地址区,然后现在还在读取第一个地址区,那么接着写第三个地址区,然后接着读,那么当写完第三个地址区后,此时可能还在读第一个地址区或者第二个地址区,若读第一个地址区,那么应该丢帧,直到读切换到第二个地址区才能向第一个地址区写数据;如果已经切换到第二个地址区,那么可以向第一个地址区写数据了,那么在写完第一个地址之后,继续判断下一个地址区有没有读完,若没有读完,则丢帧等待,若已经读完了,那么可以向下一个地址区写数据了,那么总结一下规律:当写完一个地址去后,判断当前地址区是否已经读完,然后要不要丢帧就已经决定了,而此时来的数据应该丢弃,当写完一个地址区,拉高flag写,若此时读标志为低表示还在读取要写的下一个区域,因此等待,等到读flag拉高,然后切换,此时有新的图像过来,则写,而读下一个区域。

(2)当读完了第一个地址区,然后发现还在写第二个地址区,那么此时应该在读第一个地址区,直到写地址三区,然后在切换到读地址二区,由于读的速率比较快,那么读完一帧数据后只可能在等待新的数据写完了一帧,然后立马读取新的一幅图像,这样的话,是不会产生丢帧的,而在实际情况下,若能做到不丢帧,那么也是比较好的。总结一下判断条件:读完一帧数据后,拉高标志,此时若写的标志为低,那么依次读取该地址区的数据,等到写完了下一个地址区,然后切换。

(3)这样的话,从理论上,总是间隔一个地址区,是最稳定的情况了。

综上所述:采用乒乓操作即使在读速率大于写速率的情况下,还是会丢帧的,而采用方法2的话,则不会丢帧,表述可能不清晰。。见谅。

原文地址:https://www.cnblogs.com/cofin/p/10198293.html

时间: 2024-10-14 18:37:02

fpga 图像缓存方案讨论的相关文章

一个轻客户端,多语言支持,去中心化,自动负载,可扩展的实时数据写服务的实现方案讨论

背景 背景是设计一个实时数据接入的模块,负责接收客户端的实时数据写入(如日志流,点击流),数据支持直接下沉到HBase上(后续提供HBase上的查询),或先持久化到Kafka里,方便后续进行一些计算和处理,再下沉到文件系统或做别的输出. 在设计中,对于客户端和服务端有这么些目标. 客户端需要支持多语言(Java,C++),做得尽量轻量级,只要连上服务端的ip:port,以RPC的形式调用简单的write就可以把数据写出去.客户端不承担任何逻辑的处理,服务端的负载均衡对客户端是透明的. 服务端想要

h.264参考图像列表、解码图像缓存

1.参考图像列表(reference picture list) 一般来说,h.264会把需要编码的图像分为三种类型:I.P.B,其中的B.P类型的图像由于采用了帧间编码的这种编码方式,而帧间编码又是以参考图像为基础进行的,因此需要有个参考图像列表来管理之前生成的参考图像,方便用于对当前图像进行编码. 2.解码图像缓存(decoded picture buffer) 随着图像编码的进行,(解码阶段)会不断有新的图像生成(重建图像),已解码图像会被放到解码图像缓存区中(或直接输出,这个在下面DPB

数据缓存方案

数据缓存方案 by 伍雪颖 今天考虑一个适合自己项目的缓存方案,基本都实验了下(以前一直用CoreData) 1.coredata,用MagicalRecord+Mogenerator 要建表,还要写好多解析代码,果断不用,好麻烦 2.序列化 [NSKeyedArchiver archiveRootObject:model toFile:path]; [NSKeyedUnarchiver unarchiveObjectWithFile:path]; 好方便,不过总感觉体验不好,测了下方法时间,当

硬盘缓存方案DiskLruCache源代码解析

前面研究了LruCache,它作为如今用的最多的内存缓存方案已经在非常多开源缓存框架中使用.相同的还有硬盘缓存方案也就是DiskLruCache,通常的做法就是使用内存和硬盘二级缓存. 用法 1.存储: DiskLruCache diskLruCache= open(File directory, int appVersion, int valueCount, long maxSize); DiskLruCache.Editor editor = diskLruCache.edit(key);

硬盘缓存方案DiskLruCache源码解析

前面研究了LruCache,它作为现在用的最多的内存缓存方案已经在很多开源缓存框架中使用,同样的还有硬盘缓存方案也就是DiskLruCache,通常的做法就是使用内存和硬盘二级缓存. 使用方法 1.存储: DiskLruCache diskLruCache= open(File directory, int appVersion, int valueCount, long maxSize); DiskLruCache.Editor editor = diskLruCache.edit(key);

移动应用开发(IOS/android等)中一个通用的图片缓存方案讲解(附流程图)

在移动应用开发中,我们经常会遇到从网络请求图片到设备上展示的场景. 如果每次都重复发起请求,浪费流量.浪费电量,用户体验也不佳: 将图片持久化到磁盘也不失为一种策略:但每次从文件读取图片也存在一定的io开销,就算采用此策略,我们也需要控制磁盘缓存的容量,以免占用过多系统资源. 其实没有一个方案可以说是完美的方案,只有最适合自己业务需求的方案,才可以说是一个好方案. 我们下面所讲解的方案具备很强的通用性,设计思路简单而清晰: 1.假设每个网络图片的url具有唯一性,如果网络上的图片变化了,会引起输

系统中生成编号/单号问题的实现方案讨论

应用场景 场景:对于大多数电商系统或财务系统来说,系统中的单号一般都不是从1开始的自增数字,而是一串有一定意义的字符串序列. 而往往这样的单号是要全局唯一的,不可重复. 那么,每次新增订单记录时,这个单号就要按照指定的规则来生成. 常见的订单号规则是字母前缀+日期+时间+定长的数字,如DD201610201559060001(format:XXYYYYMMDDHHmmssNNNN),PZ16102015000012(format:XXYYMMDDHHNNNNNN) 常见方案... 实现这样的场景

jQuery数据缓存方案详解:$.data()的使用

我们经常使用隐藏控件或者是js全局变量来临时存储数据,全局变量容易导致命名污染,隐藏控件导致经常读写dom浪费性能.jQuery提供了自己的数据缓存方案,能够达到和隐藏控件.全局变量相同的效果,但是jQuery实现方式更优雅.为了更好地使用jQuery数据缓存方案,我们需要掌握$.data().$.cache.$.expando.$.hasData().$.removeData(). $.hasData()用来判断某个对象是否有附加的属性,可以给任何JavaScript对象和HTMLElemen

白鹭引擎 5.2.7 新增自动合图插件、二进制和声音缓存方案功能

2018年8月13日,白鹭引擎发布5.2.7 版本.本次版本主要新增了两大功能:命令行增加自动合图插件TextureMergerPlugin,微信小游戏支持库增加二进制和声音缓存方案. 同时,本次版本还是对 5.2 版本的一次集中性缺陷修复,更新修复了大家反馈的涉及2D渲染- JavaScript.AssetsManager.微信小游戏支持库的数个BUG.在此,我们要再次特别感谢开发者们通过Egret社区.白鹭引擎小游戏开发微信群等渠道提交的BUG反馈. 5.2.7版本中新增的自动合图插件可以帮