FPGA实战开发-基于DDR的图像缓存(下)

news2024/11/24 13:11:05

文章目录

    • 概要
    • 整体架构流程
    • 技术名词解释
    • 技术细节
    • 小结

概要

例如:

基于米联科的学习资料,分享和学习同步,欢迎大家一起探讨。

整体架构流程

提示:这里可以添加技术整体架构

例如:

      image_data_gen产生了测试图片,之后进入过W0 FIFO进行视频缓存。每次缓存1024个像素,就往通过FDMA往DDR里面搬运数据。另外VS信号经过滤波采集后用于启动一次写状态机。同理对于图像的输出部分采用HDMI输出,用Vga_lcd_driver产生输出的时序。视频经过R0 FIFO缓存后输出。R0 FIFO也是每次缓存1024个像素数据。 

技术名词解释

FIFO: First in, First out

代表先进的数据先出 ,后进的数据后出。

DMA:全称Direct Memory Access,即直接存储器访问。DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实现和完成的。DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场过程,通过硬件为RAM和IO设备开辟一条直接传输数据的通道,使得CPU的效率大大提高。

技术细节

提示:这里可以添加技术细节

//--------一帧图像写入DDR------------

 always @(posedge ui_clk) begin

    if(!ui_rstn)begin

        W_MS <= S_IDLE;

        W0_addr <= 21'd0;

        pkg_wr_areq <= 1'd0;

        W0_FIFO_Rst <= 1'b1;

        W0_fcnt <= 0;

        W0_bcnt <= 0;

        W0_s_rdy <= 1'b0;

        W0_Fbuf <= 7'd0;

    end

    else begin

      case(W_MS)

       S_IDLE:begin

          W0_addr <= 21'd0;

          W0_fcnt <= 0;

          W0_bcnt <= 11'd0;

          W0_s_rdy <= 1'b1;

          if(W0_FS) W_MS <= S_RST;

       end

       S_RST:begin

           W0_s_rdy <= 1'b0;  

          if(W0_fcnt > 8'd30 ) W_MS <= S_DATA1;

          W0_FIFO_Rst <= (W0_fcnt < 8'd20);

          W0_fcnt <= W0_fcnt +1'd1;

        end          

        S_DATA1:begin

            if(W0_bcnt == BURST_TIMES) begin

                if(W0_Fbuf == FBUF_SIZE)

                    W0_Fbuf <= 7'd0;

                 else

                    W0_Fbuf <= W0_Fbuf + 1'b1;

                 W_MS <= S_IDLE;

            end

            else if(W0_REQ) begin

                W0_fcnt <=0;

                pkg_wr_areq <= 1'b1;

                W_MS <= S_DATA2;  

            end           

         end

         S_DATA2:begin

            pkg_wr_areq <= 1'b0;

            if(pkg_wr_last)begin

                W_MS <= S_DATA1;

                W0_bcnt <= W0_bcnt + 1'd1;

                W0_addr <= W0_addr + BURST_SIZE;

            end

         end

       endcase

    end

 end

//--------一帧图像读出DDR------------

 always @(posedge ui_clk) begin

   if(!ui_rstn)begin

       R_MS <= S_IDLE;

       R0_addr <= 21'd0;

       pkg_rd_areq <= 1'd0;

       R0_fcnt <=0;

       R0_bcnt <=0;

       R0_FIFO_Rst <= 1'b1;

       R0_s_rdy <= 1'b0;

       R0_Fbuf <= 7'd0;       

   end

   else begin

     case(R_MS)

       S_IDLE:begin

         R0_addr <= 21'd0;

         R0_fcnt <=0;

         R0_bcnt <=0;

         R0_s_rdy <= 1'b1;

         if(R0_FS) R_MS <= S_RST;

       end

       S_RST:begin

         R0_s_rdy <= 1'b0;

         if(R0_fcnt > 8'd30 ) R_MS <= S_DATA1;

         R0_FIFO_Rst <= (R0_fcnt < 8'd20);

         R0_fcnt <= R0_fcnt + 1'd1;

       end  

       S_DATA1:begin

           if(R0_bcnt == BURST_TIMES ) begin

               R_MS <= S_IDLE;

               if(W0_Fbuf == 7'd0)

                    R0_Fbuf <= FBUF_SIZE;

                else

                    R0_Fbuf <= W0_Fbuf - 1'b1;   

           end

           else if(R0_REQ) begin

               pkg_rd_areq <= 1'b1;

               R_MS <= S_DATA2;  

           end           

        end

        S_DATA2:begin

           pkg_rd_areq <= 1'b0;   

           if(pkg_rd_last)begin

               R_MS <= S_DATA1;

               R0_bcnt <= R0_bcnt + 1'd1;

               R0_addr <= R0_addr + BURST_SIZE;

           end

        end

      endcase

   end

end

 always@(posedge ui_clk)

 begin     

     W0_REQ    <= (W0_rcnt    >= PKG_SIZE);

     R0_REQ    <= (R0_wcnt    <= PKG_SIZE);

 end

上面两端代码,分别表示帧写入和帧写出DDR的代码

截取上面完整代码中部分代码如下:可以看到控制高地址,轻松完成缓存地址切换。

assign pkg_wr_addr = {W0_Fbuf,W0_addr}+ADDR_OFFSET;

assgin pkg_rd_addr ={R0_Fbuf,R0_addr}+ADDR_OFFSET;

小结

提示:这里可以添加总结

例如:

本文主要基于FDMA的ddr图像缓存做了设计。

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

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

相关文章

1.1 C++友元函数与友元类

C友元 C中的友元&#xff08;friend&#xff09;是一种特殊的关系&#xff0c;它允许一个非成员函数或非当前类的成员函数访问一个类的私有成员。 具体来说&#xff0c;友元可以是一个函数、一个类或一个整个命名空间。 友元的声明通常在类定义中&#xff0c;它们可以被用来…

100G中长距离光模块,你选对了吗?

随着数据中心的快速发展&#xff0c;100G SR4支持的距离太短且成本又过高&#xff0c;在这种情况下&#xff0c;市场迎来了100G中长距离的解决方案&#xff1a;100G CWDM4和100G PSM4。对于100G中长距离方案选择也是各有千秋&#xff0c;下面就跟着小易来了解如何选择才是最合适…

idea中的快捷键大全, idea常用快捷键

文章目录 前言常用快捷键查找及修改快捷键根据快捷键名称查询根据快捷键查询修改快捷键 快捷键含义Alt/&#xff08;代码提示&#xff09;Ctrl/&#xff08;注释当前行&#xff09;CtrlF&#xff08;在当前文件中搜索&#xff09;CtrlShiftF&#xff08;全局搜索&#xff09;Ct…

自定义View中构造函数相关问题

目录 自定义View时&#xff0c;一个构造函数都不写&#xff0c;行不行&#xff1f;自定义View必须写构造函数&#xff0c;带几个参数&#xff1f; 自定义View时&#xff0c;一个构造函数都不写&#xff0c;行不行&#xff1f; 不行。 编译通不过。会提示&#xff1a; 为什么…

分布式系统概念和设计——复制技术

分布式系统概念和设计 复制 分布式系统中&#xff0c;复制是提高可用性和容错的关键技术。数据复制的技术&#xff0c;在多个计算机中维护数据的副本。复制是一种增强服务的技术。进行复制的动机包括改善服务性能&#xff0c;提高可用性&#xff0c;增强容错能力。 增强性能&…

遥感影像/无人机航片的空间分辨率GSD计算推导

遥感影像/无人机航片的空间分辨率GSD计算推导 参考资料1 参考资料2-地面分辨率&#xff0c;空间分辨率(GSD为地面采样间隔) GSD&#xff1a;无人机/遥感卫星的空间分辨率&#xff0c;指航片/遥感影像一个像素点代表的空间距离。 IFoV&#xff1a;单个像素代表的空间范围。 幅…

STM32开发——感应垃圾桶(舵机、超声波测距、振动检测)

目录 1.项目需求 2.sg90舵机介绍及实战 3.声波测距 4.感应垃圾桶 4.1GPIO口设置 4.2代码实现 1.项目需求 检测靠近时&#xff0c;垃圾桶自动开盖并伴随滴一声&#xff0c;2秒后关盖发生震动时&#xff0c;垃圾桶自动开盖并伴随滴一声&#xff0c;2秒后关盖按下按键时&…

ChatGPT 使用 拓展资料:吴恩达大咖 Building Systems with the ChatGPT API 输出检查

ChatGPT 使用 拓展资料:吴恩达大咖 Building Systems with the ChatGPT API 输出检查 在本视频中,将重点检查系统生成的输出。在向用户展示输出之前检查输出对于确保质量非常重要,提供给他们的响应的相关性和安全性,或者使用自动化或学习如何使用Moderation API。 Moderati…

labview 多位组合成1个字、1个字拆成多位

如果你需要将多位组合成1个字&#xff0c;以及将1个字拆成多位&#xff0c;本文能给你帮助。 在文章最后有下载链接&#xff08;labview 2018平台写的&#xff09; 1.多个布尔量和数字的转换 1.1多个布尔量转换为数字 图1-前面板(多个布尔量转换为数字) …

阿里巴巴内网开源的SpringCloudAlibaba笔记,把微服务玩的出神入化

SpringCloud Alibaba 为什么会出现&#xff1f; Spring Cloud Netflix 项目进入维护模式&#xff0c;Spring Cloud Netflix 将不再开发新的组件&#xff0c;我们知道 Spring Cloud 版本迭代算是比较快的&#xff0c;因而出现了很多中岛的 ISSUE 都来不及 Fix 就又推另一个 Rel…

做开发5年,这8个高效开发好习惯我悟了

优秀的Web开发人员工作效率更高&#xff0c;因为他们拥有丰富的经验和良好的习惯。工作多年&#xff0c;我有一些自己了解的习惯分享给大家&#xff0c;都曾让我受益&#xff0c;做开发5年了&#xff0c;今天来跟大家分享一下我的感想。✍&#x1f3fb; 首先&#xff0c;很多人…

CTFHub | php://input

0x00 前言 CTFHub 专注网络安全、信息安全、白帽子技术的在线学习&#xff0c;实训平台。提供优质的赛事及学习服务&#xff0c;拥有完善的题目环境及配套 writeup &#xff0c;降低 CTF 学习入门门槛&#xff0c;快速帮助选手成长&#xff0c;跟随主流比赛潮流。 0x01 题目描述…

Goby 漏洞更新|用友GRP-U8 软件 U8AppProxy 任意文件上传漏洞

漏洞名称&#xff1a;用友GRP-U8 软件 U8AppProxy 任意文件上传漏洞 English Name&#xff1a;yongyou GRP-U8 U8AppProxy Arbitrary file upload vulnerability CVSS core: 9.0 影响资产数&#xff1a;1308 漏洞描述&#xff1a; 用友GRP-U8管理软件是用友公司专注于国家…

上海性能测试平均年薪30W+,5分钟看明白你和30W的差距在哪?

性能测试是测试行业中颇具技术含量的工作&#xff0c;不仅要求工程师对系统进行一系列复杂的需求分析&#xff0c;制定完善的测试计划&#xff0c;设计出贴近实际用户使用场景的测试用例&#xff0c;还要把握系统性能变化趋势&#xff0c;给出专业的优化建议&#xff0c;帮助开…

Linux防火墙学习笔记4

iptables表的概念&#xff1a; 每个规则链上都设置了一串规则&#xff0c;我们就可以把不同的规则链组合成能够完成某一个特定功集合分类&#xff0c;而这个集合分类我们就称为表&#xff0c;iptables中共有5张表&#xff0c;学习iptables就是要搞明白每种表的作用。 filter&…

【C++初阶】初识模板

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

vue-router的实现原理hash/history、导航守卫、导航解析流程

文章目录 一、SPA与前端路由二、vue-router实现原理&#xff08;模式&#xff09;hash模式history模式 三、vue-router中的route和router四、vue-router有哪几种导航守卫全局守卫路由独享的守卫路由组件内的守卫 vue-router完整的导航解析流程 一、SPA与前端路由 前端路由本质是…

3年经验面试20K+测试岗,看到这样的面试题我懵了....

我要跳槽&#xff01;我是着急忙慌的准备简历——3年软件测试经验&#xff0c;可独立测试大型产品项目&#xff0c;熟悉项目测试流程...薪资要求&#xff1f;3年测试经验起码能要个20K吧 我加班肝了一页半简历&#xff0c;投出去一周&#xff0c;面试电话倒是不少&#xff0c;…

【Web服务应用】Tomcat部署与优化

Tomcat部署 一、Tomcat简介二、tomcat组件2.1核心组件2.2Tomcat功能组件2.3Tomcat 请求过程 三、部署Tomcat服务3.1Tomcat虚拟主机配置 四、Tomcat多实例部署五、tomcat优化5.1tomcat服务优化5.2JVM的优化5.3内核的优化 一、Tomcat简介 一款 java 开发的开源的 Web 应用服务程序…

8.面向对象编程(中级部分)|Java学习笔记

文章目录 IDEA介绍包注意事项和使用细节包的三大作用包的本质分析&#xff08;原理&#xff09; 访问修饰符面向对象编程三大特征封装封装的理解和好处封装的实现步骤&#xff08;三步&#xff09; 继承继承的深入讨论/细节问题继承的本质分析super关键字super 给编程带来的便利…