FPGA纯verilog实现MIPI-DSI视频编码输出,提供工程源码和技术支持

article/2025/6/24 8:25:28

目录

  • 1、前言
    • 工程概述
    • 免责声明
  • 2、相关方案推荐
    • 我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目
    • 我这里已有的 MIPI 编解码方案
  • 3、设计思路框架
    • 工程设计原理框图
    • FPGA内部彩条
    • RGB数据位宽转换
    • RGB数据缓存
    • MIPI-DSI协议层编码
    • MIPI-DPHY物理层串化
    • MIPI-LVDS显示屏
    • 工程源码架构
  • 4、工程源码1详解:Kintex7-325T版本
  • 5、工程移植说明
    • vivado版本不一致处理
    • FPGA型号不一致处理
    • 其他注意事项
  • 6、上板调试验证并演示
    • 准备工作
    • VIO解复位
    • MIPI-DSI视频编码输出演示
  • 7、工程源码获取

FPGA纯verilog实现MIPI-DSI视频编码输出,提供工程源码和技术支持

1、前言

FPGA实现MIPI视频编码现状:

MIPI视频编码分为DSI和D-PHY两大部分,其中D-PHY属于物理层,依托硬件,灵活性不高,方案不多;DSI属于协议层,依托代码,灵活性很高,方案很多;所以只要实现了D-PHY,MIPI-DSI解码其实就很灵活了;第一种D-PHY方案是使用FPGA内部资源实现,该方案优点是设计简单,缺点是硬件成本较高;第二种是使用专用的D-PHY芯片,比如MC20901,该方案优点是设计简单,缺点是硬件成本较高;本设计使用Xilinx系列FPGA纯verilog代码实现MIPI-DSI视频编码输出;

工程概述

本设计使用Xilinx 7系列FPGA纯verilog代码实现MIPI-DSI视频编码输出;首先FPGA内部生成1个1024x600的静态彩条视频作为输入源,彩条视频为Native接口;然后彩条视频送入视频位宽转换模块实现位宽转换功能,将输入的24bit像素数据转换为4路16bit像素数据,以便于后续模块生成4 Lane MIPI数据;然后4 Lane视频送入异步FIFO缓存模块,以实现数据跨时钟域转换;然后4 Lane视频送入MIPI-DSI协议层编码模块,按照DSI协议将输入的RGB视频进行编码处理,然后输出HS电路数据和LP电路数据;然后MIPI-DSI数据送入MIPI-DPHY物理层串化模块,将输入的4 Lane并行MIPI-DSI数据串化为4 Lane高速串行的差分信号,模块依托Xilinx官方的OSERDESE2和OBUFTDS实现串化和单端转差分处理;中途还要对MIPI-LVDS显示屏做初始化操作;最后MIPI-DSI编码视频直接送MIPI-LVDS显示屏显示即可;针对市场主流需求,本设计提供1套vivado工程源码,具体如下:
在这里插入图片描述
现对上述1套工程源码做如下解释,方便读者理解:

工程源码1

开发板FPGA型号为高云Kintex7-325T-xc7k325tffg900-2;首先FPGA内部生成1个1024x600的静态彩条视频作为输入源,彩条视频为Native接口;然后彩条视频送入视频位宽转换模块实现位宽转换功能,将输入的24bit像素数据转换为4路16bit像素数据,以便于后续模块生成4 Lane MIPI数据;然后4 Lane视频送入异步FIFO缓存模块,以实现数据跨时钟域转换;然后4 Lane视频送入MIPI-DSI协议层编码模块,按照DSI协议将输入的RGB视频进行编码处理,然后输出HS电路数据和LP电路数据;然后MIPI-DSI数据送入MIPI-DPHY物理层串化模块,将输入的4 Lane并行MIPI-DSI数据串化为4 Lane高速串行的差分信号,模块依托Xilinx官方的OSERDESE2和OBUFTDS实现串化和单端转差分处理;中途还要对MIPI-LVDS显示屏做初始化操作;最后MIPI-DSI编码视频直接送MIPI-LVDS显示屏显示即可,输出分辨率为1024x600@60Hz,MIPI-4 Lane;本工程适用于Xilinx 7系列FPGA实现MIPI-DSI视频编码输出应用;

本文详细描述了FPGA纯verilog实现MIPI-DSI视频编码输出的设计方案,工程代码可综合编译上板调试,可直接项目移植,适用于在校学生、研究生项目开发,也适用于在职工程师做学习提升,可应用于医疗、军工等行业的高速接口或图像处理领域;
提供完整的、跑通的工程源码和技术支持;
工程源码和技术支持的获取方式放在了文章末尾,请耐心看到最后;

免责声明

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

2、相关方案推荐

我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目

其实一直有朋友反馈,说我的博客文章太多了,乱花渐欲迷人,自己看得一头雾水,不方便快速定位找到自己想要的项目,所以本博文置顶,列出我目前已有的所有项目,并给出总目录,每个项目的文章链接,当然,本博文实时更新。。。以下是博客地址:
点击直接前往

我这里已有的 MIPI 编解码方案

我这里目前已有丰富的基于FPGA的MIPI编解码方案,主要是MIPI解码的,既有纯vhdl实现的MIPI解码,也有调用Xilinx官方IP实现的MIPI解码,既有2line的MIPI解码,也有4line的MIPI解码,既有4K分辨率的MIPI解码,也有小到720P分辨率的MIPI解码,既有基于Xilinx平台FPGA的MIPI解码也有基于Altera平台FPGA的MIPI解码,还有基于Lattice平台FPGA的MIPI解码,后续还将继续推出更过国产FPGA的MIPI解码方案,毕竟目前国产化方案才是未来主流,后续也将推出更多MIPI编码的DSI方案,努力将FPGA的MIPI编解码方案做成白菜价。。。
基于此,我专门建了一个MIPI编解码的专栏,并将MIPI编解码的博客都放到了专栏里整理,对FPGA编解码MIPI有项目需求或学习兴趣的兄弟可以去我的专栏看看,专栏地址如下:
点击直接前往专栏

3、设计思路框架

工程设计原理框图

工程设计原理框图如下:
在这里插入图片描述

FPGA内部彩条

首先FPGA内部生成1个1024x600@60Hz的静态彩条视频作为输入源,彩条视频为Native接口,即常规的行同步信号、场同步信号、数据有效信号、像素数据等;FPGA内部彩条设计为4阶白、蓝、绿、红色彩条,如下:
在这里插入图片描述
FPGA内部彩条代码架构如下:
在这里插入图片描述

RGB数据位宽转换

然后彩条视频送入视频位宽转换模块实现位宽转换功能,将输入的24bit像素数据转换为4路16bit像素数据,以便于后续模块生成4 Lane MIPI数据;需要注意的是,24bit的彩条视频需要拓展至48bit,直接将单路的24bit RGB数据复制为2路即可;RGB数据位宽转换代码架构如下:
在这里插入图片描述

RGB数据缓存

然后4 Lane视频送入异步FIFO缓存模块,以实现数据跨时钟域转换;数据缓存使用纯verilog代码实现的异步FIFO实现;RGB数据缓存代码架构如下:
在这里插入图片描述

MIPI-DSI协议层编码

然后4 Lane视频送入异步FIFO缓存模块,以实现数据跨时钟域转换;然后4 Lane视频送入MIPI-DSI协议层编码模块,按照DSI协议将输入的RGB视频进行编码处理,然后输出HS电路数据和LP电路数据;MIPI-DSI协议层编码代码架构如下:
在这里插入图片描述

MIPI-DPHY物理层串化

然后MIPI-DSI数据送入MIPI-DPHY物理层串化模块,将输入的4 Lane并行MIPI-DSI数据串化为4 Lane高速串行的差分信号,模块依托Xilinx官方的OSERDESE2和OBUFTDS实现串化和单端转差分处理;MIPI-DPHY物理层串化代码架构如下:
在这里插入图片描述

MIPI-LVDS显示屏

MIPI-LVDS显示屏分辨率为1024x600@60Hz;需要对MIPI-LVDS显示屏做初始化操作和背光控制,背光控制代码例化如下:
在这里插入图片描述
最后MIPI-DSI编码视频直接送MIPI-LVDS显示屏显示即可;MIPI-LVDS显示屏实物如下:
在这里插入图片描述

工程源码架构

工程源码架构如下:
在这里插入图片描述

4、工程源码1详解:Kintex7-325T版本

开发板FPGA型号:Kintex7-325T-xc7k325tffg900-2;
FPGA开发环境:Vivado2019.1;
输入:FPGA内部彩条,分辨率1024x600@60Hz;
输出:MIPI,分辨率1024x600@60Hz,4 Lane模式;
MIPI-DSI2-TX方案:纯verilog代码方案;
MIPI-D-PHY方案:纯verilog代码方案,OSERDESE2原语;
工程源码架构请参考前面第3章节中的《工程源码架构》小节;
工程作用:此工程目的是让读者掌握Xilinx系列FPGA纯verilog实现MIPI-DSI视频编码输出的设计能力,以便能够移植和设计自己的项目;
工程的资源消耗和功耗如下:
在这里插入图片描述

5、工程移植说明

vivado版本不一致处理

1:如果你的vivado版本与本工程vivado版本一致,则直接打开工程;
2:如果你的vivado版本低于本工程vivado版本,则需要打开工程后,点击文件–>另存为;但此方法并不保险,最保险的方法是将你的vivado版本升级到本工程vivado的版本或者更高版本;
在这里插入图片描述
3:如果你的vivado版本高于本工程vivado版本,解决如下:
在这里插入图片描述
打开工程后会发现IP都被锁住了,如下:
在这里插入图片描述
此时需要升级IP,操作如下:
在这里插入图片描述
在这里插入图片描述

FPGA型号不一致处理

如果你的FPGA型号与我的不一致,则需要更改FPGA型号,操作如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
更改FPGA型号后还需要升级IP,升级IP的方法前面已经讲述了;

其他注意事项

1:由于每个板子的DDR不一定完全一样,所以MIG IP需要根据你自己的原理图进行配置,甚至可以直接删掉我这里原工程的MIG并重新添加IP,重新配置;
2:根据你自己的原理图修改引脚约束,在xdc文件中修改即可;
3:纯FPGA移植到Zynq需要在工程中添加zynq软核;

6、上板调试验证并演示

准备工作

FPGA开发板,推荐使用本博的开发板;
MIPI-LVDS显示屏;
开发板连接如下:
在这里插入图片描述
开发板上电后下载bit即可测试;

VIO解复位

由于上电后系统由VIO控制处于复位状态下,所以需要操作VIO进行解复位,如下:
在这里插入图片描述
即需要手动将RST_n设置为1;

MIPI-DSI视频编码输出演示

MIPI-DSI视频编码输出如下:

MIPI-TX原始

7、工程源码获取

代码太大,无法邮箱发送,以某度网盘链接方式发送,
资料获取方式:私,或者文章末尾的V名片。
网盘资料如下:
在这里插入图片描述
此外,有很多朋友给本博主提了很多意见和建议,希望能丰富服务内容和选项,因为不同朋友的需求不一样,所以本博主还提供以下服务:
在这里插入图片描述


http://www.hkcw.cn/article/mbfKxACAWc.shtml

相关文章

极智项目 | 多模态大模型推理平台-Streamlit版(支持Qwen2.5/InternVL3/KimiVL三大模型)

多模态大模型推理测试Web应用 软件下载链接:下载 基于Streamlit的多模态大模型推理测试平台,支持Qwen2.5-VL、InternVL3、Kimi-VL三大模型,提供transformers和vLLM两种推理框架。 软件介绍 核心功能 多模型支持: 集成三大主流多模态大模型…

mysql慢sql的实际处理方案之一

复习mysql架构图 当大批量慢sql过来,显然就是占用了线程池的链接,然后长久不释放,所以会出现线程池满的问题,致使正常业务sql也全部阻塞,影响整个业务。 AI搜索如下: 可以考虑一种方案: 将线…

最小生成树

1 最小生成树的概论 最小生成树的概念 2 Kruskal算法 首先我们要熟记最小生成树的概念 必须是无向带权图,必须保证连通性,总的权值必须是最小的 如果无向带权图有n个节点,那么最小生成树一定有n-1个边 这个也被叫成k算法,很常用…

网络系统中安全漏洞扫描为何重要?扫描啥?咋扫描?

在网络系统中,安全漏洞扫描占据着极其重要的位置,这一环节有助于我们发现并消除潜在的安全隐患,进而提高网络安全防护的等级。下面,我将对此进行详尽的说明。 基本概念 漏洞扫描技术可以揭示并评估网站存在的安全风险&#xff0…

2025年- H62-Lc170--34.在排序数组中查找元素的第一个和最后一个位置(2次二分查找,标记向左寻找,标记向右寻找)--Java版

1.题目描述 2.思路 3.代码实现 public class H34 {public int[] searchRange(int[] nums, int target) {int start findFirst(nums, target);int end findLast(nums, target);return new int[]{start, end};}// 查找第一个出现的位置public int findFirst(int[] nums, int t…

VR/AR 显示瓶颈将破!铁电液晶技术迎来关键突破

在 VR/AR 设备逐渐走进大众生活的今天,显示效果却始终是制约其发展的一大痛点。纱窗效应、画面拖影、眩晕感…… 传统液晶技术的瓶颈让用户体验大打折扣。不过,随着铁电液晶技术的重大突破,这一局面有望得到彻底改变。 一、传统液晶技术瓶颈…

基于空天地一体化网络的通信系统matlab性能分析

目录 1.引言 2.算法仿真效果演示 3.数据集格式或算法参数简介 4.MATLAB核心程序 5.算法涉及理论知识概要 5.1 QPSK调制原理 5.2 空天地一体化网络信道模型 5.3 空天地一体化网络信道特性 6.参考文献 7.完整算法代码文件获得 1.引言 空天地一体化网络是一种将卫星通信…

基于FashionMnist数据集的自监督学习(生成式自监督学习AE算法)

目录 一,生成式自监督学习 1.1 简介 1.2 核心思想 1.3 常见算法 1.3.1 自动编码器(Autoencoder) 1.3.2 生成对抗网络(GANs) 1.3.3 变分自编码器(VAE) 1.3.4 Transformer-based 模型&…

腾讯位置商业授权关键词输入提示开发指南

概述 用于获取输入关键字的补完与提示,帮助用户快速输入。本接口为纯HTTP数据接口,需配合前端程序实现Autocomplete(自动完成)的效果。 请求URL 该请求为GET请求 https://apis.map.qq.com/ws/place/v1/suggestion 请求参数 名称必…

【愚公系列】《生产线数字化设计与仿真》006-颜色分类站仿真(配置颜色分类站的气缸和传送带)

🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! &#x1f…

企业内训|客户智能营销实战——某头部车企

5月下旬,TsingtaoAI团队为某央企汽车厂商的智能驾驶业务运营团队交付“客户智能营销实战”课程。 本课程聚焦AI技术与汽车营销的深度融合,以“数据驱动大模型赋能”为核心,系统拆解智能营销全链路。课程从行业痛点切入,结合最新趋…

Mybatis-Plus简单介绍

前一篇文章中,小编介绍到了Mybatis,以及它的增强工具,mybatis-generator。 那么为了再减少对于SQL语句的编写,那么mybatis的另一个增强工具也是做出了巨大努力。 Mybaits-Plus Mybatis-Plus简称MP,它是一个Mybatis的…

LLm中 float16和 float32 区别,为什么训练不能采用float16--梯度消失

LLm中 float16和 float32 区别,为什么训练不能采用float16–梯度消失 在深度学习中,使用 float16(半精度)而非 float32(单精度)进行训练时,数值范围和精度的差异可能导致一系列问题,特别是当损失值达到 0.0001 这种较小时。以下是具体分析: 1. float16 与 float32 的…

Vue2之2组件通信

文章目录 什么是组件通信不同的组件关系 和 组件通信方案分类组件关系分类:组件通信方案分类 父子通信流程图:父传子子传父非父子通信 (拓展) - event bus 事件总线非父子通信 (拓展) - provide & inject 深入学习prop属性prop接收多个值props 是只读…

Qt -下载Qt6与OpenCV

博客主页:【夜泉_ly】 本文专栏:【暂无】 欢迎点赞👍收藏⭐关注❤️ 前言 呃啊,本来就想在 Qt 里简单几个 OpenVC 的函数,没想到一搞就是一天。 我之前的开发环境是 Qt 5.14.2,使用 MinGW 7.3.0 64-bit 编…

8088单板机C语言sprintf()格式化串口输出---Prj04

#include "tiny_stdarg.h" // 使用自定义可变参数实现#define ADR_273 0x0200 #define ADR_244 0x0400 #define LED_PORT 0x800 #define PC16550_THR 0x1f0 #define PC16550_LSR 0x1f5 / //基本的IO操作函数 / char str[]"Hello World! 20250531 Ve…

HTML实现端午节主题网站:龙舟争渡,凭吊祭江诵君赋。

名人说:龙舟争渡,助威呐喊,凭吊祭江诵君赋。——苏轼《六幺令天中节》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、项目概览:传统与现代的技术碰撞1. 核心特…

YOLOv10改进|爆改模型|涨点|在颈部网络添加结合部分卷积PConv和SDI融合方法的PSDI特征融合层(附代码+修改教程)

一、文本介绍 本文修改的模型是YOLOv10,YOLOv10无需非极大值抑制(NMS)进行后处理,其推理速度以及参数量上都优于现有的模型。然而,针对某些目标检测任务中需要同时处理多尺度目标的挑战,YOLOv10 在此类场景…

Redis最佳实践——安全与稳定性保障之高可用架构详解

全面详解 Java 中 Redis 在电商应用的高可用架构设计 一、高可用架构核心模型 1. 多层级高可用体系 #mermaid-svg-Ffzq72Onkv7wgNKQ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Ffzq72Onkv7wgNKQ .error-icon{f…

虚拟存储器:将十六进制逻辑地址 0A5C、103C、1A5C 转换成物理地址(2)

转换成十进制(分步骤解析) 确定页号和偏移的计算方式 页大小1KB 2^10,逻辑地址中 页号 逻辑地址 1024(整数除法),页内偏移 逻辑地址 % 1024。物理地址 物理块号 1024 页内偏移,其中物理块…