目录1、创作背景工程概述免责声明2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目我已有的FPGA图像处理方案我已有的4K/8K视频处理解决方案3、详细设计方案设计框图FPGA内部测试彩条MSA与主链路成帧主链路发送流水线AUX通道子系统链路训练状态机GTP高速收发器物理层时钟方案vivado工程源码架构4、Vivado工程源码1详解--Artix7-35T版本5、Vivado工程源码2详解--Artix7-100T版本6、Vivado工程源码2详解--Artix7-200T版本7、工程移植说明vivado版本不一致处理FPGA型号不一致处理其他注意事项8、上板调试验证并演示准备工作DP视频发送演示9、福利工程源码获取FPGA纯verilog实现DP视频接口支持2K60帧分辨率提供3套工程源码和技术支持1、创作背景Display Port简称 DPVESA 视频电子标准协会定义的高速包交换型数字显示接口2006 年首发免费无专利授权费目标替代 VGA/DVI/LVDS分外部 DP、内置 eDP笔记本屏同时支持 USB‑C DP Alt Mode。DP和 HDMI 最大本质区别HDMI 是流传输DP 是微包Micro-Packet架构视频、音频、辅助信息全部打包分时在主链路传输更灵活天然支持 MST 多流、带宽动态分配。Xilinx系列FPGA实现DP视频接口现状目前Xilinx系列FPGA实现DP视频方案主流做法是调用Xilinx官方的IP核比如Video PHY Controller DisplayPort 1.4 TX/RX Subsystem这一整套这套方案确实好用但有几个绕不开的问题一是官方DP Subsystem IP需要License没有License只能上板跑评估版时间一到就断链路二是IP核是个黑盒内部训练怎么跑、DPCD怎么读写、扰码怎么加出了问题只能看信号猜想改一行协议行为都无从下手三是IP核体积不小小容量的7系列片子塞进去之后资源所剩无几。那有没有不用官方IP、纯verilog手写、在7系列FPGA上就能跑通的DP方案有就是本篇要介绍的这个工程。DP接口本身并不复杂依赖于FPGA内置的高速收发器资源很适合用来做DP协议的物理层所以FPGA做DP接口协议可谓手拿把掐。本设计正是基于此使用Xilinx 7系列FPGA的GTP高速收发器资源实现DP视频接口协议最高支持2560×144060Hz分辨率。工程概述本设计基于Xilinx Artix-7系列FPGA的GTP高速收发器原语用纯verilog HDL实现了DisplayPort视频发送接口最高支持2560x144060Hz2K60帧视频输出工程没有调用任何Xilinx官方的DP相关IPDP物理层的8b/10b编码使用GTP高速收发器原语其他部分比如链路训练、AUX通道、DPCD读写、EDID读取以及主链路的MSA成帧、扰码、训练码型插入全部用verilog一行一行写出来代码全部可读、可改、可移植整个视频通路是这样的工程内部自带三档彩条测试源1080p/2Lane、1080p/4Lane、1440p/4Lane彩条源产生视频时序骨架和MSA参数像素数据以PIX占位符的形式嵌入符号流符号流先经过Idle码型插入补齐消隐期的BS/VB-ID符号再在每帧第512个BS处插入SR扰码复位符号然后进入16级LFSR扰码器生成多项式G(X)X16X5X4X31DP 1.1a规范值随后由训练码型插入模块在链路训练期间把有效数据替换为TPS1/TPS2训练码型最后经过4通道skew对齐送入GTP高速收发器做8b/10b编码和并串转换2.7Gbps的差分信号直接从GTP BANK输出到DP连接器显示器一侧的DP接收端在AUX通道的配合下完成链路训练后即可点亮屏幕输出彩条画面与DP接收方向不同DP发送端要主动完成链路初始化的全部工作上电后先通过AUX读取EDID确认显示器存在再读DPCD能力寄存器0x00100~0x00107获取对方支持的最大速率和Lane数然后按设置速率→设置Lane数→时钟恢复训练TPS1→符号对齐训练TPS2→关闭训练使能扰码的顺序把链路建立起来全程约50个状态的训练状态机自动完成训练失败还会自动降摆幅换预加重重试最多9组电压组合轮询这套状态机是整个工程里最核心的部分也是纯verilog方案和官方IP方案差距最大的地方——官方IP替你做了本博客方案则带你一步步做针对目前市面上主流的项目需求本博客共设计了3套工程源码详情如下现对上述3套工程源码做如下解释方便读者理解工程源码1开发板FPGA型号为Xilinx-Artix7-35T–xc7a35tfgg484-2DP视频输出源使用工程内部的彩条测试源模拟配置参数USE_TPG2输出分辨率为2560x144060HzCVT-RB时序像素时钟241.5MHz也就是常说的2K60帧使用DP的4个Lane发送RGB 4:4:4 8bpc色彩格式链路速率为2.7GbpsHBR总带宽4x2.7x0.88.64Gbps视频有效带宽约5.3Gbps占用率约62%在HBR速率下稳定输出2K60本设计使用Xilinx-GTP高速收发器适用于Xilinx-7系列FPGA实现DP视频发送应用工程源码2开发板FPGA型号为Xilinx-Artix7-100T–xc7a100tfgg484-2DP视频输出源使用工程内部的彩条测试源模拟配置参数USE_TPG2输出分辨率为2560x144060HzCVT-RB时序像素时钟241.5MHz也就是常说的2K60帧使用DP的4个Lane发送RGB 4:4:4 8bpc色彩格式链路速率为2.7GbpsHBR总带宽4x2.7x0.88.64Gbps视频有效带宽约5.3Gbps占用率约62%在HBR速率下稳定输出2K60本设计使用Xilinx-GTP高速收发器适用于Xilinx-7系列FPGA实现DP视频发送应用工程源码3开发板FPGA型号为Xilinx-Artix7-200T–xc7a200tfbg484-2DP视频输出源使用工程内部的彩条测试源模拟配置参数USE_TPG2输出分辨率为2560x144060HzCVT-RB时序像素时钟241.5MHz也就是常说的2K60帧使用DP的4个Lane发送RGB 4:4:4 8bpc色彩格式链路速率为2.7GbpsHBR总带宽4x2.7x0.88.64Gbps视频有效带宽约5.3Gbps占用率约62%在HBR速率下稳定输出2K60本设计使用Xilinx-GTP高速收发器适用于Xilinx-7系列FPGA实现DP视频发送应用本博客详细描述了Xilinx 7系列FPGA纯verilog实现DP视频接口的设计方案工程代码可综合编译上板调试可直接项目移植适用于在校学生、研究生项目开发也适用于在职工程师做学习提升可应用于医疗、军工等行业的高速接口或图像处理领域提供完整的、跑通的工程源码和技术支持工程源码和技术支持的获取方式放在了文章末尾请耐心看到最后免责声明本工程及其源码即有自己写的一部分也有网络公开渠道获取的一部分(包括CSDN、Xilinx官网、Altera官网以及其他开源免费获取渠道等等)若大佬们觉得有所冒犯请私信批评教育部分模块源码转载自上述网络版权归原作者所有如有侵权请联系我们删除基于此本工程及其源码仅限于读者或粉丝个人学习和研究禁止用于商业用途若由于读者或粉丝自身原因用于商业用途所导致的法律问题与本博客及博主无关请谨慎使用。。。2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目其实一直有朋友反馈说我的博客文章太多了乱花渐欲迷人自己看得一头雾水不方便快速定位找到自己想要的项目所以本博文置顶列出我目前已有的所有项目并给出总目录每个项目的文章链接当然本博文实时更新。。。以下是博客地址点击直接前往我已有的FPGA图像处理方案我的主页目前有FPGA图像处理专栏改专栏收录了我目前手里已有的FPGA图像处理方案包括图像缩放、图像识别、图像拼接、图像融合、图像去雾、图像叠加、图像旋转、图像增强、图像字符叠加等等以下是专栏地址点击直接前往我已有的4K/8K视频处理解决方案我的主页有FPGA 4K/8K视频处专栏该专栏有4K/8K视频处理包括简单的4K/8K视频收发、4K/8K视频缩放、4K/8K视频拼接等等以下是专栏地址点击直接前往3、详细设计方案设计框图本设计的工程详细设计方案框图如下整个工程按时钟域和功能天然分成三段左边是AUX管理域跑在100MHz管理时钟上负责HPD检测、EDID读取、DPCD读写和链路训练状态机是整个链路的大脑右上角是视频域跑在像素时钟148.5MHz或241.5MHz上由彩条源产生视频符号流中间靠右是符号域跑在135MHz符号时钟上五级流水线把符号流加工成符合DP规范的码流最后交给GTP物理层串化输出三段各自独立靠跨时钟域握手衔接耦合极低移植的时候基本只需要动GTP那一层的约束本工程实现的DP发送端性能参数如下●支持DisplayPort 1.1a发送端Source功能主链路编码8b/10b●链路速率2.7GbpsHBR通过DPCD 0x001000x0A告知接收端●动态Lane数支持1 Lane / 2 Lane / 4 Lane通过DPCD 0x00101配置●动态色彩格式支持RGB 4:4:48bpc每颜色分量8bit●最高支持2560x144060Hz2K60帧分辨率输出●AUX通道速率1Mbps半双工Manchester编码支持Native AUX与I2C-over-AUX●支持EDID读取最多8个128字节块与DPCD寄存器读写●支持完整的链路训练TPS1时钟恢复训练 TPS2符号对齐训练●支持训练失败的自动重试电压摆幅3档0.4/0.6/0.8Vx 预加重3档0/3.5/6dB共9组组合轮询●支持HPD热插拔检测与链路中断后的自动重训练●支持Downspread扩频时钟DPCD 0x001070x100.5%下扩频●支持主链路MSA成帧、VB-ID虚拟字节、Mvid/Maud时钟恢复参数●扰码多项式G(X)X16X5X4X31符合DP 1.1a规范第3.3节●全部模块纯verilog实现不依赖任何Xilinx官方DP相关IP核需要说明的是本工程按DP 1.1a实现能力上限是2.7Gbps x 4 Lane比1.1a更高的DP 1.25.4Gbps HBR2、DP 1.48.1Gbps HBR3需要在GTP上跑更高的线速率并增加TPS3/TPS4训练码型架构上本工程已预留扩展空间详见第7节的移植说明DP版本能力矩阵与本工程落点如下图FPGA内部测试彩条DP视频源使用工程内部的彩条测试源模拟不需要外部输入设备彩条源并不直接产生像素值而是产生时序骨架 占位符号 MSA参数三样东西行内计数器和行计数器决定何时发BS/BE/FS/FE这些控制符号有效区内发送PIX0xCC占位符真正的颜色由后级的像素替换模块按像素横坐标查表填入8段彩条这样做的好处是时序生成与颜色生成解耦换分辨率只需换一个彩条源模块其余流水线一行代码不用动本设计代码设计了3种彩条均由FPGA内部纯verilog代码生成具体如下彩条11920×108060HzRGB888像素时钟148.5M使用DP接口的2条Lane资源占用最低适合资源紧张的场合彩条21920×108060HzRGB888像素时钟148.5M使用DP接口的4条Lane4 Lane配置与主流DP显示器兼容性最好彩条22560×144060HzRGB888像素时钟241.5M使用DP接口的4条Lane分辨率最高FPGA内部测试彩条代码架构如下接口描述如下彩条源的生成、选择与像素替换如下如三档彩条源通过一个编译期参数USE_TPG选择分别对应1080p/2Lane、1080p/4Lane和1440p/4Lane三套工程每套彩条源同时输出完整的MSA参数包Mvid/Nvid时钟恢复比值18/0或9/0、H_visible/V_visible有效区尺寸、H_total/V_total总尺寸、同步宽度与极性、色彩空间标志RGB/YCC、4:4:4/4:2:2、BT.601/709、量化范围等24个信号这些参数在MSA插入模块中被组包成Secondary Data Packet插入主链路MSA与主链路成帧MSAMain Stream Attributes是DP主链路的元数据告诉接收端这帧视频的分辨率、时序和色彩格式长什么样本工程的MSA插入模块在每帧的BS符号之后插入一组SS…SE包裹的MSA字节包内容包括Mvid/Nvid接收端靠它做时钟恢复本工程2 Lane时为18/0即链路符号率与像素钟之比的整数近似、Hstart/Vstart、Hsync宽度、Htotal/Vtotal、H/V极性、同步时钟标志、色彩格式标志、位深、Lane数编码等这部分代码架构如下TU内符号顺序与MSA的多通道分布如下图MSA之后是TUTransfer Unit传输单元的组装TU是主链路带宽分配的基本单位每行视频的有效像素被切成若干个TU每个TU在4 Lane上按符号轮流分发TU的尺寸由链路带宽和像素带宽的比值算出来比如1080p2Lane的配置链路每行可用符号数约2640个视频需要2200个每个TU装64个像素符号剩余的余量用填充符号补齐这部分算不准会导致屏幕撕裂或者花屏是DP发送端调试时最容易出问题的地方链路预算与TU计算示例如下图主链路发送流水线主链路发送采用五级流水线结构从像素域到GTP接口依次为Idle码型插入 → SR扰码复位插入 → 多通道扰码 → 训练码型插入 → 4通道Skew对齐每一级都只做一件小事级与级之间位宽清晰72bit符号流进、80bit符号流出这也是纯verilog方案的优势——每一级都可以单独挂ILA观察哪级出问题一眼定位各级流水线的功能如下这里有个纯verilog实现特有的细节值得展开DP规范要求每Lane使用独立的扰码器且扰码器只在帧内复位SR符号处帧间不清零更关键的是K码K28.5、K28.0等控制符号永远不参与扰码必须原样直通——实现时如果图省事把整个符号都过了LFSR屏幕上就会看到规律性的花屏这是很多初学者自己写DP扰码时踩的第一个坑本工程的扰码模块对每bit判断K标志只有数据bit进入异或网络K码bit直接旁路AUX通道子系统AUX是DP的管理通道1Mbps半双工Manchester编码物理上是一对差分线逻辑上承载DPCD寄存器读写和I2C-over-AUX的EDID读取没有AUXDP发送端连显示器是谁都不知道更谈不上训练链路此部分代码架构如下AUX报文格式与响应处理如下图本工程的AUX子系统分为三层最底下是AUX物理层Manchester编解码、16字节收发FIFO、400us超时检测中间是报文查表层把读DPCD 0x00200、写DPCD 0x001000x0A这类操作翻译成AUX线上的字节序列命令4bit 地址20bit 长度 数据最上层是链路管理状态机约50个状态覆盖从HPD检测、EDID读取、能力协商到时钟训练、对齐训练、重试、错误处理的完整生命周期链路训练状态机链路训练是DP发送端最核心的逻辑也是本工程代码量最大的模块训练的目的只有一个让GTP的输出参数速率、摆幅、预加重与显示器的接收能力匹配并把每个Lane的符号对齐链路训练状态机主干流程如下图训练流程如下HPD拉高后状态机先通过AUX读EDID确认显示器存在再读DPCD能力寄存器组0x00100链路速率带宽、0x00101最大Lane数、0x00103~0x00106最大摆幅与预加重、0x00107扩频能力然后依次写入0x001080x01选择8b/10b编码、0x001000x0A2.7Gbps、0x00101Lane数、0x001070x10扩频接着进入时钟恢复训练主链路发TPS1码型D10.2重复序列写DPCD 0x001020x21告知接收端等100us后读0x00202~0x00203的LANE_STATUS检查每个Lane的时钟恢复标志时钟训练通过后进入符号对齐训练主链路发TPS2码型K28.5交替极性写0x001020x22等100us后再查状态这次除了时钟恢复还要检查符号对齐和通道间偏斜两阶段全部通过后写0x001020x00关闭训练码型、使能扰码链路建立进入正常视频传输任何一步检查失败状态机不会直接报错放弃而是自动降低电压摆幅或调整预加重档位重试3档摆幅x3档预加重共9种组合轮询一圈还不行才进入error状态并等待HPD重新拉起重训这个重试机制在链路质量差的板子上比如DP走线过长、没有隔直电容的转接板非常关键官方IP文档里不会告诉你这些但上板就会遇到GTP高速收发器物理层GTP是7系列FPGA的低速收发器硬核本工程把GTPE2_CHANNEL原语配置为DP发送模式线速率2.7Gbps参考时钟135MHz经CPLL倍频TX_DATA_WIDTH20、TXOUT_DIV2即每个TXUSRCLK2周期送入2个10bit符号2.7G/20bit135MHz与符号时钟自洽8b/10b编码由GTP内部的TX8B10BEN硬件完成本工程只需送入8bit数据K码标志极性控制位此部分代码架构如下GTP通道内部发送通路与时钟树如下图发射档位映射是纯verilog方案绕不开的活DP协议的电压摆幅和预加重各有3档需要映射成GTP的TXDIFFCTRL摆幅0x20/0x30/0x40分别对应约0.4/0.6/0.8V和TXPRECURSOR预加重0x00/0x16/0x26对应0/3.5/6dB两组寄存器的值这组映射表是本工程根据Xilinx官方UG482文档和实际示波器测试标定的训练状态机的9组重试组合直接查这张表GTP的复位时序遵循UG482规范CPLL先上电锁定再复位通道等待TXRESETDONE后拉高tx_running主链路流水线才开始发数据复位顺序错了会导致CPLL锁不上或者输出无信号是GTP调试最常见的坑时钟方案整个工程三个时钟域100MHz管理时钟AUX状态机与DPCD译码、像素时钟148.5MHz或241.5MHz随工程配置变化、135MHz符号时钟由GTP的TXOUTCLK经BUFG输出反哺并行侧跨时钟域的信号不多1bit信号用两级同步器多bit参数分辨率、Lane数、训练结果用源域稳定后拉使能、目的域使能下采样的策略这也是小规模跨域设计最稳妥的做法时钟域划分与跨时钟域处理图下图vivado工程源码架构提供3套工程源码以工程源码1为例综合后的源码架构如下4、Vivado工程源码1详解–Artix7-35T版本开发板FPGA型号Xilinx-Artix7-35T–xc7a35tfgg484-2FPGA开发环境Vivado2019.1输入FPGA内部彩条1920x108060Hz和2560×144060Hz可选输出DP1.1a分辨率1920x108060Hz或2560×144060HzDP物理层方案纯verilog封装GTPE2_CHANNEL原语CPLL2.7Gbps8B10B编解码DP协议层方案纯verilog实现AUX训练状态机五级主链路流水线工程源码架构请参考前面第3章节中的《工程源码架构》小节工程作用让读者掌握FPGA纯verilog实现DP接口的设计能力以便能够移植和设计自己的项目工程的资源消耗和功耗如下5、Vivado工程源码2详解–Artix7-100T版本开发板FPGA型号Xilinx-Artix7-100T–xc7a100tfgg484-2FPGA开发环境Vivado2019.1输入FPGA内部彩条1920x108060Hz和2560×144060Hz可选输出DP1.1a分辨率1920x108060Hz或2560×144060HzDP物理层方案纯verilog封装GTPE2_CHANNEL原语CPLL2.7Gbps8B10B编解码DP协议层方案纯verilog实现AUX训练状态机五级主链路流水线工程源码架构请参考前面第3章节中的《工程源码架构》小节工程作用让读者掌握FPGA纯verilog实现DP接口的设计能力以便能够移植和设计自己的项目工程的资源消耗和功耗如下6、Vivado工程源码2详解–Artix7-200T版本开发板FPGA型号Xilinx-Artix7-200T–xc7a200tfbg484-2FPGA开发环境Vivado2019.1输入FPGA内部彩条1920x108060Hz和2560×144060Hz可选输出DP1.1a分辨率1920x108060Hz或2560×144060HzDP物理层方案纯verilog封装GTPE2_CHANNEL原语CPLL2.7Gbps8B10B编解码DP协议层方案纯verilog实现AUX训练状态机五级主链路流水线工程源码架构请参考前面第3章节中的《工程源码架构》小节工程作用让读者掌握FPGA纯verilog实现DP接口的设计能力以便能够移植和设计自己的项目工程的资源消耗和功耗如下7、工程移植说明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软核8、上板调试验证并演示准备工作FPGA开发板带GTP BANK和DP输出接口或DP转HDMI转接板DP显示器一台建议支持2K分辨率DP线缆一根以工程源码1为例开发板连接如下DP视频发送演示DP视频发送演示如下9、福利工程源码获取福利工程代码的获取代码太大无法邮箱发送以某度网盘链接方式发送资料获取方式私或者文章末尾的V名片。网盘资料如下此外有很多朋友给本博主提了很多意见和建议希望能丰富服务内容和选项因为不同朋友的需求不一样所以本博主还提供以下服务
阅读完成 · 觉得有帮助?