闲庭信步使用图像验证平台加速FPGA的开发:第八课——图像数据的行缓存

(本系列只需要modelsim即可完成数字图像的处理,每个工程都搭建了全自动化的仿真环境,只需要双击文件就可以完成整个的仿真,大大降低了初学者的门槛!!!!如需要该系列的工程文件请关注知识星球:成工fpga,关注即送200GB学习资料,链接已置顶!)

前面的分析大家应该都能理解,只要是涉及到算子的图像的操作,不过是插值还是滤波,都需要NxN区域的图像数据进行处理,比如常见的3x3,5x5和7x7等。

对于软件开发人员,数据都是存在数组或者队列中,随便取就可以,想取哪个就取那个。但是对于FPGA的硬件开发来说,事情要远远复杂的多

图像的数据是一个像素点一个像素点产生的,反应在时序上就是在场同步,行同步,数据有效等信号的控制下图像数据有序的进入FPGA,并不是同一个时间点所有的数据都进入了FPGA。而我们又不可能缓存所有的图像数据,原因是图像一秒就是数十帧,以800x480图像为例,一帧图像的大小就是800x480x8,一秒图像数据就是800x480x8x帧率,这个数据量是很大的,而FPGA的缓存又是有限的。

在这种情况下,FPGA就是对图像的数据按行进行流水缓存,对于3x3的因子,缓存相邻的3行数据即可。如下所示,也就先缓存第一行的数据,再缓存第二行的数据,再缓存第三行的数据,再缓存第四行的的数据.....如果使用3x3的因子,那第一个处理的数据应该是第1行的第1个数据,此时需要缓存到第2行的第2列,所以3x3的因子,数据的缓存延时了1行再加上1个像素;同理,5x5的因子,数据的缓存会造成2行加2个像素的延时

其实数据的缓存还有一个问题,对于3x3的因子,处理的第一个数据是第1行的第1个数据,其实第0行的数据根本没有处理,其实不光是第一行,图像的外围一圈的像素点都没有进行处理。而对于5x5的因子,处理的第一个数据是第2行的第2个数据,图像的外围两圈的像素点都没有进行处理。当然我们也可以对外圈的像素点进行特殊的处理,但是非常的麻烦。最简单的方法是在图片的外圈补0,3x3的因子,补一圈0,5x5的因子,补两圈0。如下所示,这样就能保证每个像素可以按照相同的方式就像处理。至于如何补零,需要对缓存ram进行灵活的处理。

缓存RAM可以直接使用Xilinx自带的IP核,但是如果我们使用了Xilinx的IP核,modelsim就要使用Xilinx的仿真库,存在的问题是仿真库比较大,而且每个人的Xilinx版本可能还不一致,就会造成FPGA的仿真可能跑不起来。考虑到通用性,我们直接写一个双口RAM文件bram_sdp2,直接对数组进行操作

有了双口RAM,那我们就可以对图像的数据进行缓存,我们先完成3行数据的缓存,在src文件下新建cache文件夹,新建data_cache.sv文件,例化了3个双口BRAM_SDP2

通过控制RAM的读写可以巧妙的完成补零。

还有一个问题,就是3行数据缓存后,图像的处理要延时了一行,而图像有效信号active无法按行进行延时,所以要在最后一行再新生成一个图像数据有效信号active信号,如下所示。

sel_cnt信号用来指示最新需要缓存数据的行数,而start信号用来指示数据开始处理的行数。

最后根据sel_cnt信号读出行缓存的数据(最新的行直接读输入数据即可)。

行缓存处理除了一行的延时外,还有3个时钟周期的延时,把场同步,行同步,数据有效信号延时3个时钟周期即可。

最后将3x3的因子数据输出即可。

有了data_cache.sv模块,后续3x3因子的处理就变得非常的简单,不用花费精力在图像数据的缓存上,直接对图像的数据进行处理即可,我们下节课就能见识到。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/88405.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/88405.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

经典排序算法

文章目录前言1. 排序的基本概念1.1 排序是什么?1.2 常见的排序算法概览2. 常见排序算法的实现2.1 插入排序 (Insertion Sort)2.1.1 基本思想2.1.2 直接插入排序2.1.3 希尔排序 (Shell Sort)2.2 选择排序 (Selection Sort)2.2.1 直接选择排序2.2.2 堆排序 (Heap Sort…

RabbitMQ 消息队列:从入门到Spring Boot实战

RabbitMQ 作为一款开源的、基于 AMQP(Advanced Message Queuing Protocol)协议实现的消息代理,凭借其强大的功能、灵活的路由机制以及出色的性能,在业界得到了广泛的应用。无论是处理高并发订单、异步通知、日志收集还是系统解耦&…

代账行业数字化破局:从“知道”到“做到”,三步走稳赢!

认知!降本!增收!数字化!——这不仅是口号,更是代账行业在激烈竞争和时代变化中生存发展的关键。很多代账同行其实都明白趋势,也知道大概该怎么做。但问题卡在第一步:不知道怎么开始,…

Mac 电脑crontab执行定时任务【Python 实战】

1、crontab -e 编辑定时任务列表 crontab -e查看当前定时任务列表,长按 i 编辑,编辑完之后按 esc 退出编辑,然后输入:wq 保存并提出。 如下: (base) charles@zl ~ % crontab -e58 15 * * * /Library/Frameworks/Python.framework/Versions/3.8/bin/python3 /Users/charle…

go go go 出发咯 - go web开发入门系列(三) 项目基础框架搭建与解读

go go go 出发咯 - go web开发入门系列(三) 项目基础框架搭建与解读 往期回顾 go go go 出发咯 - go web开发入门系列(一) helloworldgo go go 出发咯 - go web开发入门系列(二) Gin 框架实战指南 前言 如…

【字节跳动】数据挖掘面试题0014:SQL中count(1), count(*), count(列)区别

文章大纲SQL 中 count(1)、count(*)、count(某列) 的区别一、核心定义与行为差异二、示例说明差异三、性能差异与优化四、适用场景建议五、面试应答要点六、索引扫描与全表扫描1. 索引扫描的触发条件2. 全表扫描的适用场景3. 常见面试问题点Q1:索引扫描一定比全表扫…

Linux面试问题-软件测试

1、你在上一家公司常用的Linux命令有哪些?答:使用vim/vi编辑文件,使用cat,more,less,head查看文件,使用grep过滤日志中的error,使用ps查看进程,使用top查看实时进程,netstat查看端口…

时序数据库的存储之道:从数据特性看技术要点

时序数据的独特挑战时序数据(Time-Series Data)是指按时间顺序记录的一系列数据点,在物联网、金融、工业监控等领域无处不在。与传统数据相比,时序数据具有几个鲜明特点:时间导向性:每个数据点都带有精确的时间戳高写入量&#xf…

【vim中替换】

vim中替换1 : s/在Vim中经常高频使用到的命令:1 : s/ :s 命令的基本语法是 :[range]s/{pattern}/{string}/[flags],其中: • [range] 是可选的范围,用于指定替换的行范围。例如,% 表示全文,10,…

Qt实战:使用QSqlDatabase连接MySQL,并实现增删改查

文章目录一、创建数据表二、连接MySQL数据库三、封装成一个完整的轻量级 ORM 风格类四、实现派生具体模型类五、支持多线程连接池 ORM 事务封装一、创建数据表 数据库名: 我们先创建一个数据库,名字叫 game_db: CREATE DATABASE IF NOT E…

Python脚本保护工具库之pyarmor使用详解

概要 PyArmor是一个专门为Python代码提供加密保护的第三方库,旨在解决Python源代码易被反编译和泄露的安全问题。作为一种动态代码保护工具,PyArmor能够对Python脚本进行混淆和加密处理,有效防止源代码被恶意获取、分析或篡改。该库特别适用于商业软件开发、知识产权保护和…

仓颉编程语言:从入门到精通

为啥要瞅瞅仓颉这玩意儿? 有一说一,现在的编程语言多得跟米一样,对吧?那一门新语言想火,没点绝活儿肯定不行。仓颉(Cangjie)这哥们儿,是华为搞出来的新玩意儿,静态编译的…

线性探针是什么:是一种用于探测神经网络中特定特征的工具

线性探针是什么 线性探针是一种在机器学习和相关领域广泛应用的技术,用于评估预训练模型特征、检测数据中的特定序列等。在不同的应用场景下,线性探针有着不同的实现方式和作用: 评估预训练模型特征:在机器学习中,线性探针是一种评估预训练模型“特征迁移能力”的标准化方…

【论文阅读】Few-Shot PPG Signal Generation via Guided Diffusion Models

从少量样本数据选择到后处理的整体框架。首先,扩散模型在N样本数据集和指导下的训练。接着,模型生成一个增强的数据集,并进一步优化以提高保真度。最后,这些合成数据与少量样本训练数据集结合,用于基准模型的训练和评估。数据分布从最初的红色变为保真度增强的蓝色,这表明…

CentOS-7的“ifupdown“与Debian的“ifupdown“对比 笔记250706

CentOS-7的"ifupdown"与Debian的"ifupdown"对比 笔记250706 CentOS 7 和 Debian 的 ifupdown 工具名称相同,但在实现机制、配置文件语法和系统集成上存在显著差异。以下是核心对比分析: ⚙️ 一、核心差异概览 对比维度CentOS 7De…

架构如传承:技术长河中的可持续乐章

代码结构:协作基石 在软件开发的世界里,代码结构就如同建筑的框架,支撑着整个项目的运行。想象一下,你加入了一个新的开发团队,接手一个已经有一定规模的项目。当你打开代码库,看到的是一团乱麻般的代码&a…

Ubuntu22.04更新Openssh至9.9p2无法正常连接,报错解决

Ubuntu22.04更新Openssh至9.9p2无法正常连接,报错解决 1.报错信息如下所示ExecStart/usr/sbin/sshd -D $SSHD_OPTS (codeexited, status255/EXCEPTION)2.这通常说明 SSH 配置文件存在语法错误、缺失关键文件,或者端口被占用等问题。 3.检查配置文件是否有…

基于小程序的智能停车管理系统设计与开发

项目介绍 本课程演示的是一款基于小程序的智能停车管理系统设计与开发,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3…

多模态大语言模型arxiv论文略读(155)

Panther: Illuminate the Sight of Multimodal LLMs with Instruction-Guided Visual Prompts ➡️ 论文标题:Panther: Illuminate the Sight of Multimodal LLMs with Instruction-Guided Visual Prompts ➡️ 论文作者:Honglin Li, Yuting Gao, Chengl…

SAP ERP与Oracle EBS对比,两个ERP系统有什么区别?

据统计,2024年中国ERP软件市场规模预计突破210亿元,其中SAP和Oracle占据第一梯队,共占国内ERP市场45%以上的份额,在高端市场尤其显著。SAP和Oracle作为ERP行业的两大巨头,具体有什么区别呢?SAP是什么&#…