当前位置: 首页 > news >正文

FPGA使用MIG调用SODIMM内存条接口教程,提供vivado工程源码和技术支持

目录

  • 1、前言
    • 免责声明
  • 2、SODIMM内存条简介
  • 3、设计思路框架
    • 视频输入
    • 视频缓存
    • MIG配置调用SODIMM内存条
    • VGA时序
    • 视频输出
  • 4、vivado工程详解
  • 5、上板调试验证
  • 6、福利:工程代码的获取

1、前言

FPGA应用中,数据缓存是一大重点,不管是图像处理还是AD采集亦或是PCIE等等,都需要缓存数据以作后续处理,一般的FPGA可以挂载SDRAM、DDR3、DDR4等内存颗粒作为缓存介质,但有时限于IO口、FPGA型号等原因,还需要设计SODIMM适配额外的内存条才能满足数据缓存的需求,这种需求一般用于高端项目;

本文使用Xilinx的V7 FPGA开发板NetFPGA-SUME平台作为实验板,该开发板板载2路SODIMM接口,可插入2个内存条作为缓存,该FPGA开发板可以在网上公开渠道买到;本例程使用HDMI输入视频或者内部生成的彩条视频作为视频源,将视频缓存到SODIMM内存条中做图像三帧缓存后再读出送HDMI显示,以验证FPGA对SODIMM内存条的读写是否成功,如果输出图像混乱或者质量不高,则证明读写有误,反之则成功;本博客详细描述了FPGA使用SODIMM内存条接口的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

本工程及其源码即有自己写的一部分,也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网等等),若大佬们觉得有所冒犯,请私信批评教育;基于此,本工程及其源码仅限于读者或粉丝个人学习和研究,禁止用于商业用途,若由于读者或粉丝自身原因用于商业用途所导致的法律问题,与本博客及博主无关,请谨慎使用。。。

2、SODIMM内存条简介

SODIMM接口是比较老式的内存条接口,说他老式是对电脑主板特别是精巧型笔记本主板而言,因为SODIMM接口的体积较大,现在已经流行到了M.2接口,但对于FPGA而言,SODIMM接口并不落伍,毕竟一般而言FPGA的内存需求没有电脑那么大,加装SODIMM接口内存条已经是顶配了,关于SODIMM内存条网上有专门的讲解,我在这里就不罗嗦了,推荐一篇文章,链接如下:
点击直接前往

3、设计思路框架

设计思路框架如下:
在这里插入图片描述

视频输入

我的开发板板载一个FMC接口,我手里正好有一个HDMI输入输出的FMC转接板,其中HDMI输入接口连接了一块silcom9011芯片作为HDMI解码器,将输入的HDMI视频TMDS差分视频解码为24bit的GRB视频供FPGA使用;silcom9011芯片需要i2c配置才能使用,本例程提供verilog源码实现的i2c控制器配置silcom9011,关于silcom9011详细的配置使用,请看我往期的专门博客,地址如下:
点击直接前往
HDMI输出接口连接了一块silcom9134芯片作为HDMI编码器,将输入的24bit的GRB视频编码为TMDS差分HDMI视频输出;所以视频输入可以使用输入HDMI接口;但有的兄弟板子上也许没有HDMI输入接口,所以我专门设计了一个FPGA内部生成的动态彩条视频,用来模拟输入视频,也可以作为视频源参与测试,输入依然可以观测彩条的动态变化来验证;二者的选择通过工程源码顶层的`define COLOR_TEST来选择,选择切换逻辑如下:
在这里插入图片描述

`ifdef COLOR_TESTassign ud_w_0_ud_wclk =vout_clk       ;assign ud_w_0_ud_wde  =video_de_color ;assign ud_w_0_ud_wvs  =video_vs_color ;assign ud_w_0_ud_wdata=video_rgb_color;
`elseassign ud_w_0_ud_wclk =vin_clk ;assign ud_w_0_ud_wde  =vin_de  ;assign ud_w_0_ud_wvs  =vin_vs  ;assign ud_w_0_ud_wdata=vin_data;
`endif

如果在顶层把`define COLOR_TEST注释掉,则输入视频源为HDMI输入接口;

如果在顶层不把`define COLOR_TEST注释掉,则输入视频源为动态彩条;

动态彩条顶层模块接口如下:
在这里插入图片描述

视频缓存

使用我的经典套路FDMA完成,FDMA是专门用于各种类型数据读写DDR的控制器,用它来缓存视频也很方便,关于FDMA的专题讲解,请看我往期的专门博客,地址如下:
点击直接前往

MIG配置调用SODIMM内存条

SODIMM内存条本质上还是DDR3颗粒,Xilinx提供专门的MIG IP核作为PHY与之交互,但MIG配置调用SODIMM内存条与传统不太一样;其中的关键点如下:
在这里插入图片描述
其他配置则根据自己的内存条型号选择即可;
我的板子内存条如下:
在这里插入图片描述

VGA时序

由于输出视频分辨率为1920x1080@60Hz;所以需要提供标准的VGA时序驱动才能形成视频流,例程提供verilog源码的VGA时序模块,改模块支持常用的7种分辨率,通过定成的宏定义修改,如下:
在这里插入图片描述
本设计使用了1080P时序;

视频输出

我的开发板板载一个FMC接口,我手里正好有一个HDMI输入输出的FMC转接板,其中HDMI输入接口连接了一块silcom9011芯片作为HDMI解码器,将输入的HDMI视频TMDS差分视频解码为24bit的GRB视频供FPGA使用;HDMI输出接口连接了一块silcom9134芯片作为HDMI编码器,将输入的24bit的GRB视频编码为TMDS差分HDMI视频输出;silcom9134芯片需要i2c配置才能使用,本例程提供verilog源码实现的i2c控制器配置silcom9134,关于silcom9134详细的配置使用,请看我往期的专门博客,地址如下:
点击直接前往

4、vivado工程详解

开发板FPGA型号:Xilinx–V7–xc7vx690tffg1761-3;
开发环境:Vivado2019.1;
输入:HDMI视频或动态彩条,分辨率1920x1080@60Hz;
输出:HDMI视频,分辨率1920x1080@60Hz;
应用:FPGA使用SODIMM内存条;
工程Block Design如下:
在这里插入图片描述
工程代码架构如下:
在这里插入图片描述
综合编译完成后的FPGA资源消耗和功耗预估如下:
在这里插入图片描述

5、上板调试验证

板子如下:
在这里插入图片描述
HDMI接口输出如下:
在这里插入图片描述
动态彩条输出如下:
在这里插入图片描述
以动态彩条输出为例,看看输出演示视频:

FPGA MIG配置SOMIDD内存条

6、福利:工程代码的获取

福利:工程代码的获取
代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
在这里插入图片描述

相关文章:

FPGA使用MIG调用SODIMM内存条接口教程,提供vivado工程源码和技术支持

目录 1、前言免责声明 2、SODIMM内存条简介3、设计思路框架视频输入视频缓存MIG配置调用SODIMM内存条VGA时序视频输出 4、vivado工程详解5、上板调试验证6、福利:工程代码的获取 1、前言 FPGA应用中,数据缓存是一大重点,不管是图像处理还是A…...

深度学习数据预处理

参考文章:深度学习中的数据预处理方法总结 在深度学习中,数据预处理(preprocessing)的重要性体现在以下几个方面: 1、数据质量: 原始数据通常包含错误、缺失值、异常值和噪声。预处理能够检测和处理这些问…...

[C++] STL_vector 迭代器失效问题

文章目录 1、前言2、情况一:底层空间改变的操作3、情况二:指定位置元素的删除操作4、g编译器对迭代器失效检测4.1 扩容4.2 erase删除任意位置(非尾删)4.3 erase尾删 5、总结 1、前言 **迭代器的主要作用就是让算法能够不用关心底…...

C语言暑假刷题冲刺篇——day5

目录 一、选择题 二、编程题 🎈个人主页:库库的里昂 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏✨收录专栏:C语言每日一练✨相关专栏:代码小游戏、C语言初阶、C语言进阶🤝希望作者…...

若依Cloud集成Flowable6.7.2

项目简介 基于若依Cloud的Jove-Fast微服务项目,集成工作流flowable(接上篇文章) 若依Cloud集成积木报表 项目地址:https://gitee.com/wxjstudy/jove-fast 后端 新建模块 目录结构如下: 引入依赖 前提:引入依赖之前先配置好maven的setting.xml &…...

动态不确定性的动态S过程(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

LoadRunner操作教程

日升时奋斗,日落时自省 目录 1、Virtual User Generator (VUG) 1.1、WebTours系统 1.1.1、WebTours启动 1.1.2、WebTours配置 1.2、脚本录制 1.3、编译 1.4、脚本运行 1.5、加强脚本 1.5.1、事务插入 1.5.2、插入集合点 1.5.3、参…...

.NET Core 实现日志打印输出在控制台应用程序中

在本文中,我们将探讨如何在 .NET Core 应用程序中将日志消息输出到控制台,从而更好地了解应用程序的运行状况。 .NET Core 实现日志打印输出在控制台应用程序中 在 .NET Core 中,日志输出打印是使用 Microsoft.Extensions.Logging 命名空间…...

Nginx正向代理与反向代理及Minio反向代理实操(三)

本文是对: Nginx安装及Minio集群反向动态代理配置(二) 文的进一步完善: 多台服务器间免密登录|免密拷贝 Cenos7 搭建Minio集群部署服务器(一) Cenos7 搭建Minio集群Nginx统一访问入口|反向动态代理(二) Spring Boot 与Minio整合实现文件上传与下载(三) CentOS7的journa…...

Xmake v2.8.2 发布,官方包仓库数量突破 1k

Xmake 是一个基于 Lua 的轻量级跨平台构建工具。 它非常的轻量,没有任何依赖,因为它内置了 Lua 运行时。 它使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好&#x…...

加油站抽烟烟火智能识别算法

加油站抽烟烟火智能识别系统通过yoloopencv网络模型图像识别分析技术,加油站抽烟烟火智能识别算法识别出抽烟和燃放烟火的情况,并发出预警信号以提醒相关人员,减少火灾风险。OpenCV基于C实现,同时提供python, Ruby, Matlab等语言的…...

web前端开发中的响应式布局设计是什么意思?

响应式布局是指网页设计和开发中的一种技术方法,旨在使网页能够在不同大小的屏幕和设备上都能良好地显示和交互。这种方法使得网页可以自动适应不同的屏幕尺寸,包括桌面电脑、平板电脑和手机等。 在Web前端开发中,响应式布局通常使用CSS&…...

【LeetCode-面试经典150题-day14】

目录 19.删除链表的倒数第N个结点 82.删除排序链表中的重复元素Ⅱ 61. 旋转链表 86.分隔链表 146.LRU缓存 19.删除链表的倒数第N个结点 题意: 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 【输入样例】head [1,2,3,4,5…...

【算法系列总结之分组循环篇】

【算法系列总结之分组循环篇】 分组循环1446.连续字符1869.哪种连续子字符串更长1957.删除字符使字符串变好2038.如果相邻两个颜色均相同则删除当前颜色1759.统计同质子字符串的数目2110.股票平滑下跌阶段的数目1578.使绳子变成彩色的最短时间1839.所有元音按顺序排布的最长子字…...

汽车摩托车零部件出口管理ERP解决方案

近年来,随着全球经济的发展,人们对交通工具的需求增加,国内汽车、摩托车市场的不断扩大,以及国内制造技术的不断提高,中国汽车、摩托车零部件出口业务迎来了广阔的发展前景,带动了汽车配件和摩托车配件市场…...

NPM 管理组织包

目录 1、关于组织范围和包 1.1 管理无作用域的包 2、使用组织设置配置npm客户端 2.1 配置您的npm客户端以使用您组织的范围 为所有新包设置组织范围 为单个包设置组织范围 2.2 将默认包可见性更改为public 将单个包的包可见性设置为public 将所有包的包可见性设置为pu…...

蓝桥杯上岸每日N题 (修剪灌木)

大家好 我是寸铁 希望这篇题解对你有用,麻烦动动手指点个赞或关注,感谢您的关注 不清楚蓝桥杯考什么的点点下方👇 考点秘籍 想背纯享模版的伙伴们点点下方👇 蓝桥杯省一你一定不能错过的模板大全(第一期) 蓝桥杯省一你一定不…...

docker harbor私有库

目录 一.Harbor介绍 二.Harbor的特性 三.Harbor的构成 四.Harbor构建Docker私有仓库 4.2在Server主机上部署Harbor服务(192.168.158.25) 4.2.1 这时候这边就可以去查看192.168.158.25网页 4.3此时可真机访问serverIP 4.4通过127.0.0.1来登陆和推送镜…...

strcmp 的使用和模拟

目录 函数介绍: 头文件: 语法: 代码演示: 函数模拟: 函数介绍: strcmp是比较大小的函数。从字符串开始进行比较,如果两个相同位置的字符相同,那么继续往下进行比较,…...

军用加固计算机

军用加固计算机是为满足军事应用需求而设计的一种高性能、高安全性的计算机。与普通计算机相比,它具有以下特点: 加固材料:军用加固计算机通常采用钢板、铝合金等材料进行加固,能够承受较大的冲击和振动,保证在恶劣环境…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息&#xff0…...

C++实现分布式网络通信框架RPC(2)——rpc发布端

有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...

【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统

Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...