贵州省建设厅官方网站,建筑工程劳务分包平台,移动互联网是以手机等什么设备为终端,网站页面做海报用什么软件目录 1、前言免责声明 2、我这里已有的 MIPI 编解码方案3、本 MIPI CSI2 模块性能及其优缺点4、详细设计方案设计原理框图OV5640及其配置权电阻硬件方案MIPI CSI-2 RX SubsystemSensor Demosaic图像格式转换Gammer LUT伽马校正VDMA图像缓存AXI4-Stream toVideo OutHDMI输出 5、… 目录 1、前言免责声明 2、我这里已有的 MIPI 编解码方案3、本 MIPI CSI2 模块性能及其优缺点4、详细设计方案设计原理框图OV5640及其配置权电阻硬件方案MIPI CSI-2 RX SubsystemSensor Demosaic图像格式转换Gammer LUT伽马校正VDMA图像缓存AXI4-Stream toVideo OutHDMI输出 5、vivado工程详解FPGA逻辑设计Vitis SDK软件设计Vitis HLS补丁 6、工程移植说明vivado版本不一致处理FPGA型号不一致处理其他注意事项 7、上板调试验证8、福利工程代码的获取 Xilinx Kintex7中端FPGA解码MIPI视频基于MIPI CSI-2 RX Subsystem架构实现提供工程源码和技术支持 1、前言
FPGA图像采集领域目前协议最复杂、技术难度最高的应该就是MIPI协议了MIPI解码难度之高令无数英雄竞折腰以至于Xilinx官方不得不推出专用的IP核供开发者使用不然太高端的操作直接吓退一大批FPGA开发者就没人玩儿了。
本设计基于Xilinx的 Kintex7中端FPGA开发板采集OV5640摄像头的2Line MIPI视频OV5640摄像头配置为MIPI模式引脚经过权电阻方案后接入FPGA的HS BANK的LVDS差分IO调用Xilinx的MIPI CSI-2 RX Subsystem IP实现MIPI的D-PHY功能该IP由Xilinx免费提供将MIPI视频解码后以AXIS视频流格式输出再调用Xilinx的Sensor Demosaic IP实现RAM转RGB功能 再调用Xilinx的Gammer LUT IP实现伽马校正功能再调用Xilinx的VDMA IP实现图像三帧缓存功能VDMA调用两个一个用于视频写入DDR3另一个用于视频读出DDR3这样分开读写的目的在于使用AXI的带宽再调用Xilinx的Video Timing Controller和AXI4-Stream toVideo Out IP实现视频流从AXI4-Stream到VGA时序的转换最后用自定义的HDMI发送IP将视频输出显示器显示整个工程调用MicroBlaze软核做IP的配置相当于Zynq的作用MicroBlaze的配置在Vitis SDK里以C语言软件代码的形式运行所以整个工程包括FPGA逻辑设计和Vitis SDK软件设计两部分需要具备FPGA和嵌入式C语言的综合能力不适合初学者或者小白。。。
本文详细描述了Xilinx Kintex7中端FPGA解码MIPI视频的设计方案工程代码编译通过后上板调试验证可直接项目移植适用于在校学生做毕业设计、研究生项目开发也适用于在职工程师做项目开发可应用于医疗、军工等行业的数字成像和图像传输领域 提供完整的、跑通的工程源码和技术支持 工程源码和技术支持的获取方式放在了文章末尾请耐心看到最后 关于MIPI协议请自行搜索csdn就有很多大佬讲得很详细我就不多写这块了
免责声明
本工程及其源码即有自己写的一部分也有网络公开渠道获取的一部分(包括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、本 MIPI CSI2 模块性能及其优缺点
由于调用了Xilinx的MIPI CSI-2 RX Subsystem IP核所以性能上就取决于你的FPGA型号理论上FPGA越高端支持的IO线速率或者GT高速接口线速率就越高就能跑速率更高的MIPI视频 该IP适应性极强支持的MIPI相机性能参数如下 并且在越高端的FPGA型号上该IP支持的高端性能也越多 由于调用了Xilinx的MIPI CSI-2 RX Subsystem IP核NIPI视频解码的稳定性很好且使用及其简单缺点是看不到源码出了问题后不好排查只能在输入输出接口添加ila进行逐级追踪 本方案使用的FPGA型号为Xilinx Kintex7属于中端FPGA的MIPI解码应用再小型的Artix7-35T或者Spartan7、Spartan6等就已经不能使用MIPI CSI-2 RX Subsystem了
4、详细设计方案
本设计基于Xilinx的 Kintex7中端FPGA开发板采集OV5640摄像头的2Line MIPI视频OV5640摄像头配置为MIPI模式引脚经过权电阻方案后接入FPGA的HS BANK的LVDS差分IO调用Xilinx的MIPI CSI-2 RX Subsystem IP实现MIPI的D-PHY功能该IP由Xilinx免费提供将MIPI视频解码后以AXIS视频流格式输出再调用Xilinx的Sensor Demosaic IP实现RAM转RGB功能 再调用Xilinx的Gammer LUT IP实现伽马校正功能再调用Xilinx的VDMA IP实现图像三帧缓存功能VDMA调用两个一个用于视频写入DDR3另一个用于视频读出DDR3这样分开读写的目的在于使用AXI的带宽再调用Xilinx的Video Timing Controller和AXI4-Stream toVideo Out IP实现视频流从AXI4-Stream到VGA时序的转换最后用自定义的HDMI发送IP将视频输出显示器显示
设计原理框图
设计原理框图如下
OV5640及其配置
输入视频采用廉价的OV5640摄像头模组配置为MIPI模式2 Line数据格式为RAW10线速率为1000Mbps视频分辨率为1280*720一个时钟一个像素OV5640需要SCCB总线配置才能运行该总线等价于I2C总线调用一个AXI-GPIO模拟I2C利用Vitis软件配置OV5640配置部分代码有C语言实现具体参考Vitis程序AXI-GPIO调用和SCCB软件配置代码截图如下
权电阻硬件方案
使用Xilinx官方推荐的权电阻硬件方案将输入的差分MIPI对恢复HS和PL原理图部分截图如下 注意权电阻方案只在低速率的MIPI模式下可用高速率的MIPI请用专用芯片实现比如MC20001MC系列这种方案可以支持到2Gbps/Lane速率以上只要FPGA的IO速率够用
MIPI CSI-2 RX Subsystem
调用Xilinx的MIPI CSI-2 RX Subsystem IP实现MIPI的D-PHY功能该IP由Xilinx免费提供将MIPI视频解码后以AXIS视频流格式输出调用和配置如下
Sensor Demosaic图像格式转换
调用Xilinx的Sensor Demosaic IP实现RAM转RGB功能该IP通过Vitis的C代码软件配置Sensor Demosaic调用和C代码软件配置代码截图如下
Gammer LUT伽马校正
调用Xilinx的Gammer LUT IP实现伽马校正功能该IP通过Vitis的C代码软件配置Gammer LUT调用和C代码软件配置代码截图如下
VDMA图像缓存
调用Xilinx的VDMA IP实现图像三帧缓存功能VDMA调用两个一个用于视频写入DDR3另一个用于视频读出DDR3这样分开读写的目的在于使用AXI的带宽该IP通过Vitis的C代码软件配置VDMA调用和C代码软件配置代码截图如下 AXI4-Stream toVideo Out
再调用Xilinx的Video Timing Controller和AXI4-Stream toVideo Out IP实现视频流从AXI4-Stream到VGA时序的转换Video Timing Controller配置为1280*72060Hz这两个IP不需要软件配置Video Timing Controller和AXI4-Stream toVideo Out调用截图如下
HDMI输出
最后用自定义的HDMI发送IP将视频输出显示器显示该IP最大输出分辨率只支持1920*108060HzIP调用截图如下
5、vivado工程详解
FPGA逻辑设计
开发板FPGA型号Xilinx–Kintex7–xc7k325tffg900-2 开发环境Vivado2021.1 输入OV5640摄像头–MIPI–2 Line–RAW10-1280*720 输出HDMI 分辨率720P 应用Xilinx Kintex7中端FPGA解码MIPI视频 工程Block Design如下 由于调用IP较多分散开来很不好看也不利于阅读我们将MIPI解码和缓存的核心IP进行了再封装如上图中红框标记部分该封装只是形式上的好看而已没有特殊功能可以通过如下方法将其展开查看里面的详细组成和结构如下 展开后如下 工程代码架构如下 工程的资源消耗和功耗如下
Vitis SDK软件设计
Vitis SDK C语言软件是为了配置FPGA调用的IP用VItis打开即可查看代码内容如下
Vitis HLS补丁
由于工程中用到了HLS生成的IPSensor Demosaic和Gammer LUT可能会出现综合编译失败或者警告后在Vitis SDK里找不到设备ID等情况此时需要更改电脑系统时间或者打上官方补丁解决这件事情具体方法参考这位大佬博文直接点击前往
6、工程移植说明
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软核
7、上板调试验证
需要准备的器材如下 FPHA开发板 OV5640摄像头 HDMI显示器 输出如下
8、福利工程代码的获取
福利工程代码的获取 代码太大无法邮箱发送以某度网盘链接方式发送 资料获取方式私或者文章末尾的V名片。 网盘资料如下