从FPGA实现角度介绍DP_Main_link主通道原理

  DisplayPort(简称DP)是一个标准化的数字式视频接口标准,具有三大基本架构包含影音传输的主要通道(Main Link)、辅助通道(AUX)、与热插拔(HPD)。
在这里插入图片描述

  Main Link:用来传输各种类型的视频数据和音频数据,Main Link由1~4对差分线构成,这些数据线是单向的,从source指向sink。Main Link具体需要几对数据线,取决于屏幕的分辨率和颜色位数。
  AUX:是一条独立双向半双工的传输通道,它也是一对差分信号线。其数据传输速率1Mbps,用来传输配置参数与指令。具体来说它与EDID及DPCD存储器相连,并通过总线方式读写。
  HPD:该项功能是可选的,实现中断以及链路故障通知。
  DisplayPort1.4协议可以从以下地址下载https://download.csdn.net/download/cjie221/90649332。
在这里插入图片描述

1.结构框图

  我们根据DP1.4协议的DPTX框图进行说明。在Main Link主通道中主要有视频数据包和第二数据包。视频数据包就是传图像数据,第二数据包用来传输音频数据和其他控制数据,这里我们只介绍视频数据包。另外DP视频流传输还分为Multi-Stream Transport(MST)多流传输模式和Single-Stream Transport(SST)单流传输模式。这两种模式数据格式差别很大。我们先从简单的开始,这里只介绍SST模式。
  从以下DPTX框图中可以看出数据处理分成两个时钟域,一个是Stream CLK时钟域,一个是LS CLK时钟域。那么这里就涉及时钟域转换,一般用FIFO实现,并且还可以完成数据位宽的转换。Stream CLK时钟域是像素数据,数据位宽一般是24/30bit,LS CLK时钟域是字节数据,一般是8bit,但在FPGA中实现时,为了降低时钟频率,往往采用数据位宽16/32bit。
  首先在Stream CLK时钟域一般完成视频数据接收,以及数据位宽转换,然后存入FIFO中。
  其次在LS CLK时钟域分别对每个lane的数据进行封包,然后是SR Insertion模块。Encryption模块就是HDCP加密模块,加密模块是可选项。之后是Interlane Skew通道偏移模块,Scrambler扰码模块,还有8b/10b Encoder编码模块,最后是并串转换。
在这里插入图片描述

2.实现原理

2.1数据排序

  根据DP协议主链路可支持1,2或4 lanes。无论视频流的颜色空间和像素位深度如何,依照下表进行像素数据的填充。
在这里插入图片描述

  上面框图中的Bus Steering模块功能是就根据lane数对数据进行分配,可以在LS CLK时钟域实现,也可以在Stream CLK时钟域实现。
  甚至输入视频源直接根据lane数就按照相应的像素模式输入,这样实现更简单。比如链路数为1 lane,视频输入数据为单像素模式,即每个像素时钟传输1个像素。链路数为2 lanes,视频输入数据为双像素模式,即每个像素时钟传输2个像素。链路数为4 lanes,视频输入数据为四像素模式,即每个像素时钟传输4个像素。这样就可以不使用Steering模块,每个像素直接送到各自的lane,存入相应的FIFO中。

2.2数据封包

  根据DP1.4协议,封包的数据是以符号Symbol为单位,一个Symbol 8bit,可以分为数据符号和控制符号。以下控制符号用于组帧。每个控制符号都是一个特殊的K码。
 BS: Blanking Start,视频消隐开始标志
 BE: Blanking End,视频消隐结束标志,每行第一个有效视频前插入
 FS: Fill Start,填充数据开始标志
 FE: Fill End,填充数据结束标志
 SS: Secondary-data Start,第二数据填充开始标志
 SE: Secondary-data End,第二数据填充结束标志
 SR: Scrambler Reset,SR symbol用来复位LFSR到初始值
 BF: Blanking Fill,增强帧模式填充标志
  在ANSI标准中8B/10B特殊K码与控制符号对应关系如下表。
在这里插入图片描述

  在DP协议中,还有普通帧模式与增强帧模式区别,普通帧模式所有的控制符号都是1个K码,增强帧模式部分控制符号是4个K码的组合,具体控制符号差别如下表。
在这里插入图片描述

  视频流数据封包格式如下图所示。每个lane都从BE(消隐结束)控制符号开始,紧接着是视频数据,然后是BS(消隐开始)控制符号,每个lane的BS后必须跟随VB-ID,Mvid7:0和Maud7:0。之后填充数据零。
在这里插入图片描述

  无论lane数量是多少, VB-ID,Mvid7:0和Maud7:0 必须传输4次,如下图所示。
在这里插入图片描述

  在BE控制符号和BS控制符号之间的视频数据采用一种叫Transfer Unit传输单元的方式传输。每lane的Transfer Unit的大小必须介于32~64个符号。
  因为数据打包速率(packed data rates)必须小于等于链路符号速率(link symbols rates)。当打包数据率低于链路符号率时,链路层必须执行符号填充(Symbols stuffing)。也就是说在TU中除了数据,还需要符号填充。
  符号填充由stuffing frame symbols和dummy data symbols组成。 Stuffing frame symbols 由FS符号和FE符号构成,位于每个TU (Transfer Unit)之内,dummy data symbols在扰码之前必须是0x00,插在FS和FE之间,如下图所示。
  注意,每行视频数据最后一个TU不填充FS和FE,必须全部是视频数据。
在这里插入图片描述

  还有DP传输的数据中必须包含视频流的属性信息,叫做主视频流属性数据Main Stream Attribute(MSA)在主视频流的垂直消隐期间每帧发送一次。属性数据包括以下:
(1) 用于视频流时钟恢复的M和N值(24bits each)
(2) 水平总点数和垂直总行数(16bits each)
(3) 水平有效开始点数和垂直有效开始行数(16bits each)
(4) 水平和垂直同步信号极性和宽度(1 bit for polarity and 15 bits for width)
(5) 水平有效点数和垂直有效行数(16bits each)
(6) 杂项0(MISC0, 8bits)
(7) 杂项1(MISC1, 8bits)
  通过每lane发送2个连续的SS符号开始,之后就是主流属性数据,最后用SE结束。如下图所示。第二数据包也是用SS符号开始,SE结束,只是区别开始时只用1个SS符号。
在这里插入图片描述

  根据以上规则,对1lane,2lane,4lane分别处理,在LS CLK时钟域根据视频输入每行的等效长度进行计数,然后分别插入控制符号,以及视频数据,从而完成数据封包。SR符号的插入也可以在封包时完成。

2.3通道间偏移

  相邻lane必须插入2个链路时钟LS Clk歪斜,目的是提高链路对外部噪声的抗干扰能力,如下图所示。
在这里插入图片描述

2.4扰码

  为了减少EMI,在8B/10B编码之前,需进行扰码。16-bit LFSR的多项式为 G(X) = X16 + X5 + X4 + X3 + 1 。数据的每个字节都使用LFSR的最高有效 8 位以相反的位顺序进行加扰/解扰。
在这里插入图片描述

在这里插入图片描述

  SR符号或SR BF BF SR符号序列被用于复位LFSR至初始值FFFFh(或在eDP标准下初始值为FFFEh)。

3.实现框架

  根据上述的分析,我们可以将DPTX对应到如下的框架。首先根据lane数,将输入视频数据按对应的像素模式输入,最多是四像素模式。之后是pixel to symbol模块,将像素位宽转成符号位宽。然后存入FIFO。LS CLK时钟域用32bit目的是为了降低处理时钟频率。之后是封包模块,最复杂的操作就在此模块,按行等效长度进行计数,在不同的计数位置,插入控制符号,或者从FIFO中读取视频数据插入。通道间偏移相对简单,寄存器打拍移位就可实现。扰码模块参考DP协议附录,按并行模式实现即可。
  因为大多数SERDES IP都集成了8b/10b编解码,所以可以不用单独开发8b/10b编码模块,直接利用SERDES IP就可以实现。至于SERDES IP为什么用135MHz做参考时钟,因为DP的常见速率1.62Gbps/lane(RBR),2.7Gbps/lane(HBR),5.4Gbps/lane(HBR2),8.1Gbps/lane(HBR3)与135MHz都有倍数关系,PLL比较容易产生相应时钟频率。当然如果非要用其他如100MHz时钟做参考时钟,也是可以的,只是有可能PLL输出时钟精度不准,有可能会影响到sink端数据解串。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/902067.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式软件--stm32 DAY 2

大家学习嵌入式的时候,多多学习用KEIL写代码,虽然作为编译器,大家常用vscode等常用工具关联编码,但目前keil仍然是主流工具之一,学习掌握十分必要。 1.再次创建项目 1.1编译器自动生成文件 1.2初始文件 这样下次创建新…

游戏引擎学习第234天:实现基数排序

回顾并为今天的内容设定背景 我们今天继续进行排序的相关,虽然基本已经完成了,但还是想收尾一下,让整个流程更完整。其实这次排序只是个借口,主要是想顺便聊一聊一些计算机科学的知识点,这些内容在我们项目中平时不会…

计算机网络——常见的网络攻击手段

什么是XSS攻击,如何避免? XSS 攻击,全称跨站脚本攻击(Cross-Site Scripting),这会与层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,因此有人将跨站脚本攻击缩写为XSS。它指的是恶意攻击者往Web页面…

Agent的九种设计模式 介绍

Agent的九种设计模式 介绍 一、ReAct模式 原理:将推理(Reasoning)和行动(Acting)相结合,使Agent能够在推理的指导下采取行动,并根据行动的结果进一步推理,形成一个循环。Agent通过生成一系列的思维链(Thought Chains)来明确推理步骤,并根据推理结果执行相应的动作,…

LeetCode 热题 100:回溯

46. 全排列 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2: 输入&#xff…

cJSON_Print 和 cJSON_PrintUnformatted的区别

cJSON_Print 和 cJSON_PrintUnformatted 是 cJSON 库中用于将 cJSON 对象转换为 JSON 字符串的两个函数,它们的区别主要在于输出的格式: 1. cJSON_Print 功能:将 cJSON 对象转换为格式化的 JSON 字符串。 特点: 输出的 JSON 字符…

A股周度复盘与下周策略 的deepseek提示词模板

以下是反向整理的股票大盘分析提示词模板,采用结构化框架数据占位符设计,可直接套用每周市场数据: 请根据一下markdown格式的模板,帮我检索整理并输出本周股市复盘和下周投资策略 【A股周度复盘与下周策略提示词模板】 一、市场…

Linux下使用C++获取硬件信息

目录 方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文件获取BIOS信息有两种方法:1、读取文件;2、使用dmidecode命令获取主板信息有两种方法:1、读取文件&#xff1…

BootStrap:进阶使用(其二)

今天我要讲述的是在BootStrap中第二篇关于进一步使用的方法与代码举例; 分页: 对于一些大型网站而言,分页是一个很有必要的存在,如果当数据内容过大时,则需要分页来分担一些,这可以使得大量内容能整合并全面地展示&a…

【技术派后端篇】技术派中的白名单机制:基于Redis的Set实现

在技术派社区中,为了保证文章的质量和社区的良性发展,所有发布的文章都需要经过审核。然而,并非所有作者的文章都需要审核,我们通过白名单机制来优化这一流程。本文将详细介绍技术派中白名单的实现方式,以及如何利用Re…

TRAE.AI 国际版本

国际版下载地址: https://www.trae.ai/https://www.trae.ai/ 国际版本优势:提供更多高校的AI助手模型 Claude-3.5-Sonnet Claude-3.7-Sonnet Gemini-2.5-Pro GPT-4.1 GPT-40 DeepSeek-V3-0324DeepSeek-V3DeepSeek-Reasoner(R1)

关于支付宝网页提示非官方网页

关于支付宝网站提示 非官方网站 需要找官方添加白名单 下面可以直接用自己的邮箱去发送申请 支付宝提示“非支付宝官方网页,请确认是否继续访问”通常是因为支付宝的安全机制检测到您访问的页面不是支付宝官方页面,这可能是由于域名或页面内容不符合支…

【今日三题】打怪(模拟) / 字符串分类(字符串哈希) / 城市群数量(dfs)

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;每日两三题 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 打怪(模拟)字符串分类(字符串哈希)城市群数量(dfs) 打怪(模拟) 打怪 #include <iostream> using namespace std;int …

npm install 版本过高引发错误,请添加 --legacy-peer-deps

起因&#xff1a;由于使用"react": "^19.0.0", 第三方包要低版本react&#xff0c;错解决方法&#xff01; npm install --save emoji-mart emoji-mart/data emoji-mart/react npm install --save emoji-mart emoji-mart/data emoji-mart/react npm err…

Python基础总结(七)之条件语句

文章目录 条件语句if一、Python中的真假二、条件语句格式2.1 if语句格式2.2 if-else语句2.3 if-elif-else语句 三、if语句嵌套 条件语句if 条件语句其实就是if语句&#xff0c;在讲解if语句之前需要知道Python中对于真假的判断。 一、Python中的真假 在Python中非0的都为真&…

基于Ubuntu2504部署OpenStack E版

OpenStack 初始化环境安装数据库、memcahe、rabbitmq等服务安装keystone服务安装glance服务安装placement服务安装nova服务安装neutron服务安装horizon服务 官网 OpenStack Epoxy 巩固了作为 VMware 替代方案的地位&#xff0c;增强了安全性&#xff0c;并改进了硬件支持 第 3…

可发1区的超级创新思路(python 、MATLAB实现):基于多尺度注意力TCN-KAN与小波变换的时间序列预测模型

一、数学模型与原理 1.1 小波变换多尺度分解 输入功率序列 x(t) 经小波变换分解为近似系数 Aj​ 与细节系数 Dj​: 1.2 多尺度TCN特征提取 对每个尺度子序列 {A3​,D3​,D2​,D1​} 采用独立TCN: 式中 ∗d​ 为扩张率 d=2l 的扩张卷积,Wd​ 为可学习参数。 1.3 多尺度注…

YOLOv11改进有效涨点专栏:从理论到实战的深度优化指南

## YOLOv11的进化之路 在目标检测领域,YOLO系列算法始终保持着革命性的创新步伐。YOLOv11作为该系列的最新演进版本,在保持实时检测优势的同时,通过架构层面的深度优化实现了精度与速度的平衡。本文将从**七大核心模块**出发,系统性地解析针对YOLOv11的有效改进方案,涵盖从…

Cursor新版0.49.x发布

小子看到 Cursor 0.49.x 版本正式发布&#xff0c;截止今天已经有两个小patch版本&#xff01;本次更新聚焦于 自动化Rules生成、改进的 Agent Terminal 以及 MCP 图像支持&#xff0c;并带来了一系列旨在提升编码效率和协作能力的改进与修复。 以下是本次更新的详细内容&…

《手环表带保养全攻略:材质、清洁与化学品避坑指南》

系列文章目录 文章目录 系列文章目录前言一、表带材质特性与专属养护方案二、清洁剂使用红黑榜三、家庭清洁实验&#xff1a;化学反应警示录四、保养实践方法论总结 前言 手环作为现代生活的智能伴侣&#xff0c;表带材质选择丰富多样。从柔软亲肤的皮质到耐用耐磨的金属&…