闲庭信步使用图像验证平台加速FPGA的开发:第十六课——图像五行缓存的FPGA实现

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

前面我们实现了图像三行数据的缓存,文件是data_cache.sv,有了这个文件,处理起来3x3的各种算子都不在话下。那现在问题来了,对于5x5的算子,使用data_cache.sv就不可以了。其实这都不是事,既然有了开发data_cache.sv的经验,那就稍微修改一下,新建一个data_cache5.sv的文件,能支持5x5即可。

下面详细说明一下数据缓存的方法,由于要缓存5行图像的数据,那就要有5个ram,分别是ram0-ram4。行计数器从0-4反复的计数,方便数据的存取;需要的5x5的区域像素存在chnl0-chnl4中,chnl0-chn4都是5字节长度的,chnl0存放第0行的5个像素数据,chnl1存放第1行的5个像素数据,chnl2存放第2行的5个像素数据,chnl3存放第3行的5个像素数据,chnl4存放第4行的5个像素数据。

设计要点就是当前行的数据一定是5x5的最后一行,所以直接给到chnl4即可。每一行都是1个ram在写,4个ram在读,由于5个ram是循环读写的,可以根据行计数器确定这5个ram中数据的排列顺序,比如行计数为0时,ram1存放的是第0行数据,ram2存放的是第1行数据,ram3存放的是第2行数据,ram4存放的是第3行数据,ram0存放的是第4行数据。

还有一个问题就是5x5的行缓存,图像外围要补两圈的0才能让所有5x5因子的计算一致。前两行补零是通过先缓2行图像数据再读数来实现的,这时候还有两个ram没有写进数据,就可以读出来两行的0;最后两行的补零是通过增加两行的数据有效信号来实现的,新增加的两行写0,就可以实现最后两行都是0而前两列和后两列的补零是通过将数据读有效信号打两拍作为输出有效信号来实现的,每行的像素数据是通过左移位进入chnl0-chnl4的,由于行信号延时了两拍,输出信号有效时,已经有3个数据缓存到chnl0-chnl4,chnl0-chnl4的高16位还是0,这样就可以实现前两列的0,而后两列直接通过延时的两拍有效信号来实现。

解释起来可能不太清晰,我们直接在代码中讲解。在\src\cache文件夹下新建data_cache5.sv文件,考虑到通用,文件采用参数化设计的思路。而且5x5因子输出25个图像数据变量有些多,直接使用数组输出。

相关的变量的位宽也使用参数来定义。

通过组合逻辑实现ram读写相关信号和输出信号,场同步和行同步信号不仅延时四个时钟周期,还要多延时两行

实现列数和行数的计数,其中156-166行主要实现增加两个数据行有效active信号

数据行有效信号的延时打拍,用于数据的读取和列补零;新增加的两行数据直接给0,实现新增的最后两行数据是0。

如下实现了行计数从0-4的功能,start信号用来控制先缓存两行数据在读数据,主要用来实现前两行的补零。

以第一行数据的缓存为例,根据行号sel_cnt来确定需要读取哪个ram的数据,最后260行的active_d0=0,而 active_d1和active_d2还拉高时补最后两列的0。

最后一行数据的读写和前四行不太一样,直接读当前的图像数据即可。

最后例化五个ram即可。

同样,成工也把三行缓存的data_cache.sv模块修改成了data_cache3.sv,也是加入了对于的参数。

在top文件中,例化了rgb2ycbcr模块和data_cache5模块。

在tb_image_sim文件中的第二个initial块中,进行相关的图像读取和存储的操作。

双击sim文件夹下的top_tb.bat文件,完成系统的自动化仿真。

可以加入相关的波形查看。如下是先缓存两行数据再开始读数操作。

我们看一下读取的第一个数组数据,前两行和前两列都加上了0。

再看看最后的增加了两个active信号,此时数据是0。

而输出的最后一个数组数据,最后两行和两列都是0。

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

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

相关文章

头文件与源文件及区别

使用场景上的区别头文件:变量的声明,函数的声明,宏的定义,类的定义等。 源文件:变量的定义。函数的定义实现,类成员函数的定义实现等。这样方便于我们去管理、规划,更重要的是避免了重定义的问题…

图机器学习(4)——图机器学习与嵌入算法

图机器学习(4)——图机器学习与嵌入算法0. 前言1. 图机器学习1.1 机器学习基本原理1.2 图机器学习的独特优势2. 广义图嵌入问题3. 图嵌入算法分类小结0. 前言 机器学习是人工智能的一个重要分支,它致力于让系统能够从数据中自主学习并持续优…

网络基础10--ACL与包过滤

一、ACL 定义与核心功能ACL(访问控制列表)是通过规则匹配实现数据包过滤或分类的核心技术,广泛应用于包过滤、NAT、QoS、路由策略等场景。其核心由规则条目组成,每条规则包含匹配条件(如源 / 目 IP、端口、协议&#x…

Web安全 - 基于 SM2/SM4 的前后端国产加解密方案详解

文章目录概述一、背景与法规要求二、算法选型三、核心流程四、前端实现要点(伪代码)五、后端实现要点(伪代码)六、公钥存储策略七、全流程示例图八、总结与最佳实践推荐概述 随着信息安全法规日益严格,如《网络安全法》《数据安全法》和等保…

ACL动态路由实验全攻略:配置与安全实战

实验拓扑图 实验需求 步骤1.按照图示配置IP地址2.按照图示区域划分配置对应的动态路由协议3.在R7上配置dhcp服务器,能够让pc可以获取IP地址4.将所有环回宣告进ospf中,将环回17宣告进rip中,将rip路由引rospf中,ospf路由引.rip中5.要…

电动汽车制动系统及其工作原理

制动系统是实现车辆减速、停车功能的重要系统。电动汽车的制动系统按照制动实现方式分为机械制动和电机再生制动,机械制动根据制动力实现方式不同又可分为液压机械制动系统、气压机械制动系统和电子机械制动系统。目前,电动汽车的制动系统实现一般为协调…

CentOS 7 Linux 离线安装 docker-compose

CentOS 7 Linux 离线安装 docker-compose 1. docker-compose 简介 1.1. docker-compose 是什么? docker-compose 是 Docker 官方提供的工具,用于定义和运行多容器 Docker 应用程序。通过一个 YAML 文件(通常为 docker-compose.yml&#xf…

排序算法实战(上)

一、引言在力扣刷题的旅程中,排序类题目是绕不开的重要板块。今天就来分享两道经典排序题——912. 排序数组和75. 颜色分类的解题思路与代码实现,带你深入理解排序算法在实际题目中的应用 。二、题目剖析与解题思路(一)912. 排序数…

python学智能算法(二十)|SVM基础概念-感知机算法及代码

引言 前序学习进程中,已经学习了超平面的基础知识,学习链接为:超平面 在此基础上,要想正确绘制超平面,还需要了解感知机的相关概念。 感知机 感知机是对生物神经网络的模拟,当输入信号达到感知机的阈值时…

操作HTML网页

一、HTML网页的介绍 HTML,即超文本标记语言(HyperText Markup Language),它不是一种编程语言,而是一种标记语言,用于描述网页的结构。HTML 通过一系列标签来定义网页中的各种元素,如文本、图片…

Django--03视图和模板

Django–03视图和模板 Part 3: Views and templates 本教程承接第二部分,我们将继续开发投票应用,重点介绍 Django 的表单处理和通用视图。 文章目录Django--03视图和模板前言概述一、编写更多视图二、编写实际执行操作的视图三、快捷方式:r…

《每日AI-人工智能-编程日报》--2025年7月15日

介绍:AI :英伟达恢复向中国销售 H20 并推出新 GPU:7 月 15 日,英伟达官宣将恢复向中国销售 H20,并推出全新的 NVIDIA RTX PRO GPU,其中 B30 性能约为 H20 的 75%,定价在 6500 至 8000 美元之间&…

C++STL-list

一.基础概念相当于数据结构里面的双向链表二.基础操作1.list对象创建1. 默认构造函数list<int> l1;2. 初始化列表list<int> l2_1 { 9,8,7,6,5 };list<int> l2_2({ 9, 8, 7, 1, 5 });3. 迭代器list <int> l3(l2_1.begin(), l2_1.end());4. 全0初始化li…

【PTA数据结构 | C语言版】字符串插入操作

本专栏持续输出数据结构题目集&#xff0c;欢迎订阅。 文章目录题目代码题目 请编写程序&#xff0c;将给定字符串 t 插入到另一个给定字符串 s 的第 pos 个字符的位置。 输入格式&#xff1a; 输入先后给出主串 s 和待插入的字符串 t&#xff0c;每个非空字符串占一行&#…

Postman + Newman + Jenkins 接口自动化测试

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 </

CAS单点登录架构详解

目录 概述核心概念 TGC (Ticket Granting Cookie)TGT (Ticket Granting Ticket)ST (Service Ticket) 架构设计 整体架构存储架构安全机制 工作流程 完整登录时序流程步骤详解 技术实现 会话管理数据同步问题最佳实践 参考资料 概述 CAS (Central Authentication Service) 是…

C++中正则表达式详解和实战示例

C 中的正则表达式&#xff08;Regular Expression&#xff09;主要通过标准库 <regex> 提供&#xff0c;能够用于字符串匹配、查找、替换、验证格式等。它在 C11 中首次引入&#xff0c;并在 C14 和 C17 中逐步完善。一、头文件和命名空间 #include <regex> #inclu…

深入解析Avro、Protobuf与JSON:序列化技术的选择与应用

在现代分布式系统和数据交换场景中&#xff0c;序列化技术是数据存储、传输和通信的核心。本文深入探讨三种主流序列化技术&#xff1a;Avro、Protobuf 和 JSON&#xff0c;从背景、特点、示例代码&#xff08;Python&#xff09;、优势及最佳实践等多个维度进行对比分析&#…

Vue 中 effectScope() 的全面解析与实战应用

一、effectScope 概述1.1 什么是 effectScopeeffectScope() 是 Vue 3.2 引入的核心 API&#xff0c;用于创建副作用作用域容器。它能够将多个响应式副作用&#xff08;如 watch、watchEffect 和 computed&#xff09;组织在一起&#xff0c;实现统一的生命周期管理。1.2 核心价…

嵌入式面试八股文(十六)·一文搞懂嵌入式常用名词IC、ASIC、CPU、MPU、MCU、SoC、SoPC、GPU、DSP

目录 1. IC&#xff08;Integrated Circuit&#xff0c;集成电路&#xff09; 2. ASIC&#xff08;Application-Specific Integrated Circuit&#xff0c;专用集成电路&#xff09; 3. CPU&#xff08;Central Processing Unit&#xff0c;中央处理器&#xff09; 4. M…