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是比较大小的函数。从字符串开始进行比较,如果两个相同位置的字符相同,那么继续往下进行比较,…...
军用加固计算机
军用加固计算机是为满足军事应用需求而设计的一种高性能、高安全性的计算机。与普通计算机相比,它具有以下特点: 加固材料:军用加固计算机通常采用钢板、铝合金等材料进行加固,能够承受较大的冲击和振动,保证在恶劣环境…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...
沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...
