AD9253链路训练

  • 传统方式

        参考Xilinx官方文档xapp524。对于AD9253器件 - 125M采样率 - DDR模式,ADC器件的DCO采样时钟(500M Hz)和FCO帧时钟是中心对齐的,适合直接采样。但是DCO时钟不能直接被FPGA内部逻辑使用,需要经过BUFIO和BUFR缓冲后,得到s_bit_clk和s_frame_clk。此时,s_bit_clk和DCO时钟不是相位对齐的。如果s_bit_clk直接采样数据总线,则不能保证采样到正确的数据。故需要进行链路训练。

参考之前博客:  AD9253 LVDS 高速ADC驱动开发_lvds adc-CSDN博客  

step1:

       大概流程为:s_bit_clk采样DCO时钟信号,通过调节IDELAY,配合ISERDES原语,先稳定得到8'b11111111或8'b00000000(根据ADC器件手册时钟和数据相位关系来选择),则表明s_bit_clk和DCO处于固定的相位关系,但不是边沿对齐。然后再调节IDELAY,使得s_bit_clk采样DCO时钟信号,得到的结果为一个不确定值,则表明DCO和FCO时钟信号已边沿对齐,即链路s_bit_clk和DCO时钟信号的相位关系已训练完毕。

step2:每个数据点比特位的链路训练,用于对齐采样时钟和每个数据点的比特顺序。

s_bit_clk采样FCO帧时钟信号,通过调节ISERDES的bitslip,使得采样到特定pattern,对于ADC9253器件而言,特定pattern为8'hf0。则表明每个数据点比特位的链路训练完毕。

  • 本文方式

传统方式存在一个问题:需要DCO,FCO,多路DOUT走线和阻抗均需要保持完全一致,才能满足手册的时序关系。

在实际项目中,遇到一个问题:ADC9253的2个通道,有一个通道很稳定,另一个通道存在偶发的数据值跳变。于是修改训练方案:

核心思路是每路数据总线和采样时钟s_bit_clk配合来单独训练,从而可以避免不同通道的差异性。因为传统方法通过调节采样时钟s_bit_clk,使之与DCO对齐,这种调节类似于全局调节,DCO对每个通道都会起作用,如果两个通道存在硬件设计差异,就会导致上述问题。

Step1:AD9253器件配置为test mode模式,test pattern为标号1所示。

通过调节IDELAY,配合ISERDES原语(可以使用selectio这个IP更方便),使得采样时钟s_bit_clk能采样到稳定的值,比如10ms内采样值都不变。说明:该值通常不会恰好等于测试pattern。

step2:每个数据点比特位的链路训练,用于对齐采样时钟和每个数据点的比特顺序。

对于每路数据总线,通过调节ISERDES的bitslip,使得采样到预先设定的pattern,见标号1。当所有路数据总线均稳定采样到预先设定的pattern,则表明AD9253链路训练OK。

Step3:验证环节。AD9253器件配置为test mode模式,test pattern为标号2所示。因为链路已经训练OK,那么此时改变test pattern,所有通道,理论上也应该正确采样到该test pattern值。实际项目测试,也验证了该理论猜想。

  • 补充说明:对于链路训练,通常只训练一次。但是如果受到温度等因素干扰,链路可能失效。此时需要自适应的检测到,并重新进入链路训练环节。链路失效检测方法:链路训练OK后,可以用采样时钟s_bit_clk采样FCO帧时钟信号,当采样值突然稳定的发生改变,不等于当前值,则表明链路失效。

  • AD9253器件支持test mode。数据管脚可以输出固定的 test pattern序列。

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

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

相关文章

解决方案:远程shell连不上Ubuntu服务器

服务器是可以通过VNC登录,排除了是服务器本身故障 检查服务是否在全网卡监听 sudo ss -tlnp | grep sshd确保有一行类似 LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid...,fd3))返回无结果,表明系统里并没有任…

关于大数据的基础知识(四)——大数据的意义与趋势

成长路上不孤单😊😊😊😊😊😊 【14后😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于大数据的基础知识(四&a…

智能指针(weak_ptr )之三

1. std::weak_ptr 1.1 定义与用法 std::weak_ptr 是一种不拥有对象所有权的智能指针,用于观察但不影响对象的生命周期。主要用于解决 shared_ptr 之间的循环引用问题。 主要特性: 非拥有所有权:不增加引用计数。可从 shared_ptr 生成&…

学习海康VisionMaster之卡尺工具

一:进一步学习了 今天学习下VisionMaster中的卡尺工具:主要用于测量物体的宽度、边缘的特征的位置以及图像中边缘对的位置和间距 二:开始学习 1:什么是卡尺工具? 如果我需要检测芯片的每一个PIN的宽度和坐标&#xff…

Java面试实战:从Spring Boot到微服务的深入探讨

Java面试实战:从Spring Boot到微服务的深入探讨 场景:电商场景的面试之旅 在某互联网大厂的面试间,面试官李老师正襟危坐,而对面坐着的是传说中的“水货程序员”赵大宝。 第一轮:核心Java与构建工具 面试官&#x…

深入理解 Spring @Configuration 注解

在 Spring 框架中,@Configuration 注解是一个非常重要的工具,它用于定义配置类,这些类可以包含 Bean 定义方法。通过使用 @Configuration 和 @Bean 注解,开发者能够以编程方式创建和管理应用程序上下文中的 Bean。本文将详细介绍 @Configuration 注解的作用、如何使用它以及…

密码学中的盐值是什么?

目录 1. 盐值的基本概念 2. 盐值的作用 (1) 防止彩虹表攻击 (2) 防止相同的密码生成相同的哈希值 (3) 增加暴力破解的难度 3. 如何使用盐值? (1) 生成盐值 (2) 将盐值附加到密码 (3) 存储盐值和哈希值 (4) 验证密码 4. 盐值如何增加暴力破解的难度 在线暴…

基于瑞芯微RK3576国产ARM八核2.2GHz A72 工业评估板——Docker容器部署方法说明

前 言 本文适用开发环境: Windows开发环境:Windows 7 64bit、Windows 10 64bit Linux开发环境:VMware16.2.5、Ubuntu22.04.5 64bit U-Boot:U-Boot-2017.09 Kernel:Linux-6.1.115 LinuxSDK:LinuxSDK-[版本号](基于rk3576_linux6.1_release_v1.1.0) Docker是一个开…

大数据技术全解析

目录 前言1. Kafka:流数据的传输平台1.1 Kafka概述1.2 Kafka的应用场景1.3 Kafka的特点 2. HBase:分布式列式数据库2.1 HBase概述2.2 HBase的应用场景2.3 HBase的特点 3. Hadoop:大数据处理的基石3.1 Hadoop概述3.2 Hadoop的应用场景3.3 Hado…

mcpo的简单使用

1.安装依赖 conda create -n mcpo python3.11 conda activate mcpo pip install mcpo pip install uv2.随便从https://github.com/modelcontextprotocol/servers?tabreadme-ov-file 找一个mcp服务使用就行,我这里选的是爬虫 然后安装 pip install mcp-server-f…

uniapp-商城-32-shop 我的订单-订单详情和组件goods-list

上面完成了我的订单,通过点击我的订单中每一条数据,可以跳转到订单详情中。 这里就需要展示订单的状态,支付状态,物流状态,取货状态,用户信息,订单中的货物详情等。 1、创建一个订单详情文件 …

XCVU13P-2FHGA2104I Xilinx Virtex UltraScale+ FPGA

XCVU13P-2FHGA2104I 是 Xilinx(现为 AMD)Virtex UltraScale™ FPGA 系列中的高端 Premium 器件,基于 16nm FinFET 工艺并采用 3D IC 堆叠硅互连(SSI)技术,提供业内顶级的计算密度和带宽​。该芯片集成约 3,…

【Python3】Django 学习之路

第一章:Django 简介 1.1 什么是 Django? Django 是一个高级的 Python Web 框架,旨在让 Web 开发变得更加快速和简便。它鼓励遵循“不要重复自己”(DRY,Don’t Repeat Yourself)的原则,并提供了…

Python 设计模式:模板模式

1. 什么是模板模式? 模板模式是一种行为设计模式,它定义了一个操作的算法的骨架,而将一些步骤延迟到子类中。模板模式允许子类在不改变算法结构的情况下,重新定义算法的某些特定步骤。 模板模式的核心思想是将算法的固定部分提取…

【后端】构建简洁的音频转写系统:基于火山引擎ASR实现

在当今数字化时代,语音识别技术已经成为许多应用不可或缺的一部分。无论是会议记录、语音助手还是内容字幕,将语音转化为文本的能力对提升用户体验和工作效率至关重要。本文将介绍如何构建一个简洁的音频转写系统,专注于文件上传、云存储以及…

音频base64

音频 Base64 是一种将二进制音频数据(如 MP3、WAV 等格式)编码为 ASCII 字符串的方法。通过 Base64 编码,音频文件可以转换为纯文本形式,便于在文本协议(如 JSON、XML、HTML 或电子邮件)中传输或存储&#…

240422 leetcode exercises

240422 leetcode exercises jarringslee 文章目录 240422 leetcode exercises[237. 删除链表中的节点](https://leetcode.cn/problems/delete-node-in-a-linked-list/)🔁节点覆盖法 [392. 判断子序列](https://leetcode.cn/problems/is-subsequence/)🔁…

MYSQL之库的操作

创建数据库 语法很简单, 主要是看看选项(与编码相关的): CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...] create_specification: [DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE collation_name 1. 语句中大写的是…

Git Flow分支模型

经典分支模型(Git Flow) 由 Vincent Driessen 提出的 Git Flow 模型,是管理 main(或 master)和 dev 分支的经典方案: main 用于生产发布,保持稳定; dev 用于日常开发,合并功能分支(feature/*); 功能开发在 feature 分支进行,完成后合并回 dev; 预发布分支(rele…

【Spring】依赖注入的方式:构造方法、setter注入、字段注入

在Spring框架中,除了构造器注入(Constructor Injection)和Setter注入(Setter Injection),还有一种依赖注入方式:字段注入(Field Injection)。字段注入通过在Bean的字段上…