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是比较大小的函数。从字符串开始进行比较,如果两个相同位置的字符相同,那么继续往下进行比较,…...
军用加固计算机
军用加固计算机是为满足军事应用需求而设计的一种高性能、高安全性的计算机。与普通计算机相比,它具有以下特点: 加固材料:军用加固计算机通常采用钢板、铝合金等材料进行加固,能够承受较大的冲击和振动,保证在恶劣环境…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
