JESD204B简介

article/2025/10/17 21:45:49

1、SERDES技术

        了解JESD204B之前需要先了解SERDES(SERialization/DESerialization)技术,也就是串化和解串,在发送端将多位并行的数据转换为1bit的串行数据,在接收端将串行数据恢复成原始的并行数据。如下图为基于FPGA的串化功能框图。

        下图为8b/10b的串化例图。

        下图为A/D应用中经过8B/10B串化为串行数据,通过发送器发送给数据处理器后,解串为并行数据的应用实例。 

2、JESD204协议

        JESD204 是基于 SerDes 的串行接口标准,主要用于数模转换器和逻辑器件之间的数据传输,其最早的版本是 JESD204A, 现在是 JESD204B subclass0,subclass1,subclass2。区别主要在于其对同步和链路间固定时差的测量。目前市场上比较多地数模转换器接口是 JESD204B subclass1。其最大传输速率可达 12.5Gbps,支持多链路和多器件的同步以及固定 时差的测量。下表是各版本之间的差异。

         在JESD204 接口出现以前,数模转换器的数字接口绝大多数是差分 LVDS 的接口,这就造成了布板的困难,当 PCB 的密度很大的时候就需要增加板层从而造成印制板的成本上升。 而 JESD204B 接口是串行接口,能有效减少数据输出的差分对,能最大限度的简化 Layout。 因此 JESD204B 是高密度板不可或缺的接口。但因其需要进行严格的同步和以及时延的测量, 与之接口的逻辑会比 LVDS 接口复杂很多,现在逻辑厂商都集成了专用的JESD204 IPCore 在他们的软件里,从而简化了逻辑的设计。如下图为同样需求的DAC,使用LVDS接口和J204B接口下需要的设计对比。

         下图为两种接口下设计PCB走线对比。可以看出使用JESD204B接口能明显简化走线。

        LVDS接口和JESD204B接口(CML)电平的速率对比如下图。

3、JESD204B 原理

3.1 JESD204B 的分层

        JESD204B 是一种高速的串行接口协议,它规定了收发双方的同步机制,告警机制及其告警后处理机制。 任何 一种复杂的接口协议都将遵从逻辑架构分层来进行描述。 JESD204B 也是如此,其遵从如下的逻辑分层(右图)。

         204B适用的范围/对象中 TX 侧对应的是 FPGA/ASIC 或者 ADC,RX 侧对应的是 FPGA/ASIC 或者 DAC。 204B 的所有相关动作的描述都将依据其分层来进行描述,所以理解和掌握分层是了解 204B 的基础。

3.1.1传输层(Transport Layer)

        传输层的功能是将 AD/DA 的采集到的数据映射到非扰码的八字节的过程(The transport layer maps the conversion samples to non-scrambled octets)。204B 协议规定了几种映射模式。

  1. A single converter to a single-lane link
  2. Multiple converters in the same device to a single-lane link
  3. A single converter to a multi-lane link
  4. Multiple converters in the same device to a multi-lane link

        上述的四种模式是两个对象的几种组合,一个是数据转换器的个数,另外一个是对应的link的个数。 数据转换器就是对应的I/Q的数据组,例如我们无线系统中都是采用complex数据有16bits 的I 也有 16bits的Q,那么对应的转换器就是2,就类似I数据需要一个转换器来完成,Q数据需要一个转换器来 完成(注意这里的转换器的个数和我们通常所说的物理的ADC/DAC数据有区别,可以抽象为一个吞吐数据器件)。 通常情况下我们转换器的个数都是多个(多通道),这些转换器的数据可以一起来建链称之为单link也可以分组建链称之为多link。 所以下面将于常用的Multiple converters in the same device to a multi-lane link来说明。 在传输层映射过程中会用到几个参数:

  1. CF: Number of control words per frame clock period per link.
  2. CS: Number of control bits per conversion sample.
  3. NG: Nibble Group(group of half octets).

        这三个参数会影响到映射的过程,但实际的过程中往往没有这些控制字,同时也不需要插入nibble数 据,所以会比较简单。 这些数据的映射过程和排列过程会体现在JESD的LMFS 等配置中,一般数据 手册中都会给出我们支持的模式说明。

3.1.2加扰(Scrambler)

        加扰的主要目的是去除数据相关性例如各个帧同时发送相同的数据,从而减小造成的系统干扰和减小电磁兼容性问题。 按照实际的运用可以选择加扰或者不加扰。

3.1.3链接层(Link layer)

        链接层在再整个 204B 中占有及其重要的地位, 是 204B 的核心。 它包含了 8B/10B 的编码过程, TX 和 RX键链(link establishment)过程。下面会专门描述 204B 的键链过程。

        8B/10B 编码:

         8B/10B 编码的状态机和码表如下图所示。 编码的目的就是去除数数据中的 DC-unbalance(CML电平中会增加直流偏置),8bit变为 10bit。 例如我们通常所说的 K28.5,8 bit 的时候为 BC,编码后变成 0011111010……。

3.1.4物理层( Physical layer)

        物理层包含了完成高速并/串转换的SDRDES 模块, 时钟及时钟数据恢复模块(CDR) 。 物理层也规定了接口的物理电器特性如下表所示。

 3.3 JESD204B 中的一些关键参数描述

        传输层(Transport Layer)中关键参数 传输层中的关键参数描述如下:

  1. L: Number of lanes in a link.
  2. M: Number of converters per device.
  3. F: Number of octets per frame.
  4. S: Number of samples per converter per frame clock cycle(two octets per sample)
  5. K:# of frames per multi-frame
  6. CF: Number of control words per frame clock cycle per link
  7. CS: Number of control bits per sample.
  8. HD :High-Density bit which controls whether a sample may be divided over more lanes to reduce data transfer overhead
  9. Line rate = Serdes speed
  10. LMFC = Local Multiple Frame Clock= Line rate/(10 * F*K) Control bits can either be appended after the LSB of every sample or all the bits for different samples can be sent together in CF number of frames.

        可以参考上图理解对应参数。

         可以按照 LMFC 的公式技术出多帧的周期,SYSREF 的周期。例如如果 Lane rate is 10G, F=2,K=32 可以计算出 LMFC 的周期是 64ns。 下面通过一个实例来说明各个参数之间的关联。

        参考上图中是以 16bitd 的 4 通道 ADC 为例来说明它的 JESD 格式将是如何映射的。

         1、图中所示是一个单 Link,ADC 共占用了 4 条 lane,对 L 的定义,可以看到 L=4。

        2、ADC 的四个物理通道,而且每个通道上假设都是 I/Q 数据传输,那么每一条 lane 上 M=2,一共 4 条 lane 所以 M=8。

         3、每一个 frame 为 8 个八字节,F=8。

        4、一个 frame 里面有 4 个 sample(16bits),S=4。

        所以 LMFS=4884。

        在实际的运用中,数据手册都会规定所能支持的各种模式下的 LMFSH值。例如我们的高集成的 4 通道 transceiver AFE7689 中就有非常详细的各种模式描述。 这里需要说明的是同一种接口模式可以有不同LMFSH 值从而或得到不同的数据排列格式。 例如下面对应的 是同一个接口 983.04M I/Q 占用 4 条 lane 对应的数据排列格式。 左边的是 42220 模式,右边的是 42111 模式。通过 增加 F 的值,就可以将 I 数据和 Q 数据分别放到同一个 Lane 上传输。 

        如下为ADS42JB49的两种模式的对比图。

  4、204B中的TX 和 RX 功能模型

        上述对 JESD 中的逻辑分层和关键参数进行了描述,基于描述抽象出 JESD 的 TX 和 RX 功能模型。 掌握 TX 和 RX 模型,可以将分层和 204B 中的关键参数归属到某个功能中。 TX 和 RX 模型分别如下所示。从模型图中可以看到几个非常重要的信号:

  1. SYNC 信号: 该信号由 204B 侧的 RX 侧发出触发 TX 侧开始发 K28.5。
  2. LMFC 信号: 本地多帧信号。

 

5、204B 键链(Establishment)步骤整体描述

        204B 的键链是在 link layer 完成,目的就是完成了 RX/TX 之间的同步对齐,主要完成如下三大步骤:

        马组同步: Code Group Synchronization (CGS).

        帧同步: Initial Frame Synchronization.

        Lane 同步: Initial Lane Synchronization

      上图清晰的描述了 JESD 键链过程中各个信号的配合及其步骤, 各个信号的功能如下:

  1. SYNCbRX 侧送出,用于使能 TX 侧发送 K 码。
  2. CLKIN: Link layer 的输入时钟,可以理解为 device clock
  3. SYSREF: 系统的同步信号,用于同步 TX RX 侧的 Frame CLKSYSREF的周期必须是多帧时钟LMFC周期的整倍数。

        特别注意只有检测到 SYSREF 才能使能 Frame clock!如果没有 SYSREF 那么就 没有 LMFC clock,这样 TX 端会持续发 K 码。 整个过程可以简单描述为在 SYSREF 完成时钟同步后, RX 侧会将 SYNC 拉低,当 TX Device clock检测到 SYNC 为低以后,则开始发送 K28.5 码用于码组同步, RX 侧所有 lane 上收到连续 4 K 码后会将 SYNC 拉高从而 完成码组同步, TX 侧检测到 SYNC 为高并在 LMFC 的边缘处开始发送 ILA 序列来完成 Frame lane 的同步。

6、JESD204B 时钟的需求

        尽管 JESD204B 也有不同的版本,但越来越多的厂商选择 Subclass1,因此市面上绝大多 数的数模转换器都是基于这个版本设计的。Subclass0/1/2设计对比如下图。

        以 JESD204B subclass1 来讨论时钟的时序需要以及 TI 时钟芯片方案的实现。任何一个串行协议都离不开帧和同步,JESD204B 也 例外,也需要收发双方有相同的帧结构,然后以一种方式来同步,即辨别起始。JESD204B 是以时钟信号的沿来辨别同步的开始,以及通过一定的握手信号使得收发双方能够正确识别 帧的长度和边界,因此时钟信号及其时序关系对于 JESD204B 就显得极其重要。下图是典型 的 JESD204B 系统的系统连接,Device Clock 是器件工作的主时钟,一般在数模转换器里为其采样时钟或者整数倍频的时钟,其协议本身的帧和多帧的时钟也是基于 Device Clock。 SYSREF 是用于指示不同转换器或者逻辑的 Device Clock 的沿,或者不同器件间 Deterministic latency 的参考。

        如下图所示,Device Clock 和 SYSREF 必须满足的时序关系。SYSREF 的第一个上升沿要非常容易的能被 Device Clock 捕捉到,这样就需要 SYSREF 和 Device Clock 满足上图的时序关系。通常会因为 PCB 的线长以及时钟器件不同通道输出 时的 Skew,会带来一定的误差, Device Clock 的上升沿不一定正好在 SYSREF 的脉冲的正 中间,工程上只要在一定范围内就能保证 JESD204 收发正常工作。

 --内容来源于TI官网


http://chatgpt.dhexx.cn/article/SeO1vCPE.shtml

相关文章

高速接口----JESD 204B(1)

前言 最近两周在做一些关于高速ADC的东西,也算是接触到了一些新的东西,做技术的,就是要不断地学习新的东西才可以啊。调试的平台是zcu102daq3。daq3是ADI推出的一个高速AD和DA的评估板。上面主要的芯片是ADC芯片AD9680,DAC芯片AD…

gzip chunked

gzip chunked --比天空间-- - mod_gzip和chunked http://www.httpwatch.com/httpgallery/chunked/ When an HTTP client is reading a response message from a server it needs to know when it has reached the end of the message. This is particularly important with per…

http协议里的chunked编码与测试

如果有写过http下载的人,或多或少了解一点chunked编码的传输方式。例如笔者最初不知道这个http传输方式,以前能行的代码有一天就突然不行了,抓包才发现数据异样。 chunked编码 分块传输编码(Chunked transfer encoding&#xff09…

c客户端http post chunked协议上传到服务器demo源码

下面例子中 :c 客户端采用 chunked协议上传到服务器,java 服务器返回的不是chunked 协议 chunked 编码协议格式参考 https://blog.csdn.net/wy5761/article/details/17568851 c 客户端 chunked 完整内容是 Hello, world,how are you 。分了2块上传 Hel…

HTTP CHUNKED

服务端给浏览器发送报文时,必须告诉浏览器报文的大小,这样浏览器可以根据报文大小来判断报文的完整性以及在长连接中确定报文的截尾。但是很多服务器的报文是动态创建的,在发送之前是无法确定其大小的。服务器只有等待内容全部创建后&#xf…

chunked java_HTTP协议的chunked编码

一般情况HTTP的Header包含Content-Length域来指明报文体的长度。如: 有时候服务生成HTTP回应是无法确定消息大小的,比如大文件的下载,或者后台需要复杂的逻辑才能全部处理页面的请求,这时用需要实时生成消息长度,服务器…

HTML中chunked解码和gzip解压

chunked编码 chunked编码的的好处 当访问的时动态页面时,服务器则无法预知内容的大小,因此需要一遍产生数据,一边发送数据,将数据分块发送(服务器通过响应头’Transfer-Encoding: chunked’告诉浏览器它将使用chunked编码传输)。…

Android:rxjava简单实现原理(map/flatmap操作符)

rxjava 装饰者模式1、背景2、定义3、特征4、装饰者模式demo rxjava装饰者模式1、rxjava中转换操作符map的简单实现2、rxjava中转换操作符flatmap的简单实现 装饰者模式 1、背景 假设奶茶店有两种茶,果茶(fruit tea)和奶茶(milky tea)&#…

java dataset flatmap_Spark中map和flatMap的區別詳解

本文介紹了Spark中map(func)和flatMap(func)這兩個函數的區別及具體使用。 函數原型 1.map(func) 將原數據的每個元素傳給函數func進行格式化,返回一個新的分佈式數據集。(原文:Return a new distributed dataset formed by passing each element of the…

Spark中flatMap的操作

Test 1: package test.wyh.wordcountimport org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext}object TestFlatMap {def main(args: Array[String]): Unit {//建立Spark连接val sparkConf new SparkConf().setMaster("local&quo…

flatMap底层实现

上篇:Transformation的map使用 第一种方式重写flatMap方法实现 实现需求:根据字符串在nc -lk 8888的窗口命令下输入的数据,在控制台打印输出发现:在同一行数据输入的单词字符串自动换行,按每个单词独立换行并且若输入…

java7 flatmap_flink学习之七-map、fliter、flatmap

看完了Flink的datasource、sink,也就把一头一尾给看完了,从数据流入到数据流出,缺少了中间的处理环节。 而flink的大头恰恰是只在这个中间环节,如下图: source-transform-sink-update.png 中间的处理环节比较复杂&…

Stream之flatMap

一、flatMap简介 flatMap:将小Stream转换为大Stream 二、示例转换要求 目标:将如下对象中的分类category提取出来,去重。其中如"哲学,爱情",需要解析为两个分类,["哲学","爱情"] [{"age":33,"…

flatmap使用

使用场景 适用于嵌套list数据结构&#xff0c;想把内部的list数据合并成一个list.。 举例如下&#xff1a; public class Test {public static void main(String[] args) {List<List<String>> list new ArrayList<>();List<String> list1 new Arr…

Java8中map与flatMap用法

目录 1 概述 2 map与flatMap 3 常用写法 1 概述 Java8中一些新特性在平时工作中经常会用到&#xff0c;但有时候总感觉不是很熟练&#xff0c;今天特意将这个Java8中的映射记录一下。 2 map与flatMap map---对集合中的元素逐个进行函数操作映射成另外一个 flatMap---接收一…

如何使用flatMap

1. 什么情况下用到flatMap 当使用map&#xff08;&#xff09;操作时&#xff0c;不是返回一个值&#xff0c;而是返回一个集合或者一个数组的时候&#xff0c;这时候就可以使用flatMap解决这个问题。举个例子&#xff0c;你有一个列表 [21,23,42]&#xff0c;然后你调用getPr…

【JavaScript中数组的flatMap方法的详细介绍】

在我们平时对数组进行操作的时候&#xff0c;通常map、forEach和filter方法比较常用。而flatMap方法用得相对少一些。当你掌握了flatMap方法的使用之后&#xff0c;我相信你一定会喜欢上它的&#xff01; 下面我们会通过以下三个问题展开对flatMap方法的讲解&#xff1a; 1. f…

Java8 - Streams flatMap()

文章目录 官方文档What is flatMap()?Why flat a Stream?Demo需求1&#xff1a;Find all books需求2&#xff1a;Order and LineItems需求3&#xff1a;Splits the line by spaces需求4&#xff1a; flatMap and primitive type 官方文档 https://docs.oracle.com/javase/8/…

JAVA8 中的flatmap

构建对象 class User{private String addr } 将多个User集合中的addr按照;分割合并成一个字符串list List<User> uList Lists.newArrayList();User u1 new User();u1.setAddr("a1;a2;a3;a4;a5");User u2 new User();u2.setAddr("b1;b2;b3;b4;b5&qu…

Unity resource style/Theme.AppCompat.Dialog (aka xxx:style/Theme.AppCompat.Dialog) not found

关于Unity 打包报错"resource style/Theme.AppCompat.Dialog (aka com.game.chipsmerge:style/Theme.AppCompat.Dialog) not found."的问题 解决方法: 在mainTemplate文件中添加依赖: implementation ‘com.android.support:appcompat-v7:28.0.0’ 或者自己去下载其…