xilinx cpri ip 开发记录

CPRI是无线通信里的一个标准协议,连接REC和RE的通信。
Xilinx有提供CPRI IP核。

区别于其它通信协议,如以太网等,CPRI是一个同步系统。

这就意味着两端的Master和Slave应当是同源时钟的,两边不存在频差,并且内部延时也都是固定的,每次运行可以通过计算获得,供上层应用使用。因此,可以让Master有一个参考时钟使用,而Slave则利用GT从串行数据中恢复出来的时钟,经过外部一个Cleanup的PLL,产生参考时钟送回来,供Slave参考使用。这样,两端就能同源了。

注意,由于Xilinx的GT模块限制,这里外部需要提供一个,在还没有恢复钟送到,就能自主产生相同频率(但有ppm差异)时钟的PLL;等到Slave收到数据,同步并产生恢复时钟后,外部的这个PLL也能将频率渐渐对齐到恢复时钟(即对端Master真正频率上面),最终实现整个同步系统。

在这里插入图片描述

CPRI的内部结构如下图所示。CPRI数据,主要指的是IQ数据通道,另外还有控制数据,包括Vendor Specific,Slow C&M(即HDLC数),Fast C&M(即Ethernet数),这些数据共同分享CPRI物理层通道。

接下来,分析CPRI的数据帧格式,以帮助我们进一步了解这些不同类型的数据,是如何共同复用CPRI通道的。
image.png

无线通信中,UTRA-FDD的Chip Rate为3.84MHz(fc)。因此在CPRI的协议中,一个基本帧(Basic Frame)的时间长度就是1/fc=260.416667ns。

那么,CPRI的基本帧的结构就如下图所示,如果是614.4Mbps的CPRI应用,那Y就只会等于0,数据为Z.X.0打头,有16个bytes数组成,第1个byte一般做控制用,后15个bytes就是IQ数据。

如果是2457.5Mbps的CPRI应用,带宽更大,Y就可以为0,1,2,3,按照下图所展示的发送顺序发数,一个基本帧里有Z.X.0,Z.X.1,Z.X.2,Z.X.3,四个控制字,和60个bytes的IQ数据。

在这里插入图片描述

进一步,CPRI每隔10ms是一个完整的无线帧,其中由150个超帧(hyperframe)组成,每个超帧又由256个上面的基本帧组成。

image.png

之前已经提到过,每个基本帧的第1个byte一般做控制用;下图就展示了一个超帧,里面含有256个基本帧,这样一个超帧里就有256个bytes可作控制用途,非IQ数据的Control Words。

并且,由图里的位置,可以看到每个control words的用途,如Z.0.0是用作同步的帧头数据;Z.1.0作为Slow C&M,也就是HDLC数据用;而Z.2.0,Z.66.0,Z.130.0,Z.194.0这一排四个控制字,会在协议通信,对照信息的时候,都有各自不同的用途定义。

在这里插入图片描述

于是,我们结合Xilinx IP,看下CPRI是如何收发数的。由于CPRI是一个完全同步的系统,用户在使用CPRI IP的时候,需要主动每隔10ms,给IP一个nodebfn_tx_strobe输入。IP会根据用户此输入,对应每隔一个基本帧的时间,给出一个iq_tx_enable输出。

基本帧的开头几个bytes为control words,来自于各个对应控制数据接口;用户不用在IQ数据接口(iq_tx,iq_rx)管这几个数,后面则是正常的IQ数据收发。

在这里插入图片描述

了解了CPRI的数据业务如何使用之后,再来看下CPRI的初始化流程。

CPRI IP支持自协商,根据用户选择的IP的可支持速率,从高到低依次下降,与对方互通,直到通信成功为止。

初始化状态机的运行可以观察IP的stat_code[3:0]输出信号。该状态机参考CPRI协议设计,如下。因此其具体细节,建议直接参照CPRI协议。

例如,如果初始化状态机卡在状态B不前进,那意味着此时IP无法实现与对端任何通信,可能是GT初始化有问题,或者link没有成功,可以先做下近端环回实验。注意,如果这是一个Slave的CPRI IP,需要先使能Slave Transmit Enable,再做环回。

或者卡在状态C的话,按照CPRI协议,是Protocol Setup两边没有对应上,需要检查IP的相关设置,或者看下两边收发的Z.2.0这个数是否是相一致。

最终,这个stat_code状态走到F或者G,IP达到了link状态,可以开始进行正常的业务数据收发工作了。

image.png

Xilinx IP核手册编号为pg056,首先通过配置好IP核,生成example工程,该IP为付费IP,需要特定lic文件,硬件设计部分和普通SFP类似,本项目采用通信速率10.137G
在这里插入图片描述
IP核可分为master和slave两种模式
在这里插入图片描述

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

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

相关文章

mysql 行锁,间隙锁,临键锁,锁范围和死锁实际例子实战

文章目录 背景锁介绍表默认数据测试唯一键记录存在事务1事务2结论 唯一键记录不存在事务1事务2结论 范围查询事务1事务2结论 普通索引存在事务1事务2总结 普通索引不存在事务A事务B结论 死锁例子 背景 想了解下RR事务如何防止幻读的,以及一个实际的死锁例子 锁介绍…

【计算机网络】面经

1.TCP&UDP 1.1TCP与UDP的区别 TCP传输数据稳定可靠,适用于对网络通信质量要求较高的场景。 面向连接。 每一条TCP有且只有两个端点,为一对一关系。 提供可靠交付。 全双工通信,全双工为即可传输又可接收。 面向字节流。 UDP的优点是速…

客户端动态降级系统

本文字数:4576字 预计阅读时间:20分钟 01 背景 无论是iOS还是Android系统的设备,在线上运行时受硬件、网络环境、代码质量等多方面因素影响,可能会导致性能问题,这一类问题有些在开发阶段是发现不了的。如何在线上始终…

微服务架构中的业务完整性验证设计

目录 1.概要设计 1.1 功能完整性与正确性验证 1.2 性能与响应速度验证 1.3 安全性验证 1.4 容错性与恢复能力验证 1.5 监控与日志记录验证 2.技术实现 2.1 测试策略与工具选择 2.2 身份验证与授权 2.3 数据一致性与事务管理 2.4 监控与日志 2.5 容错与恢复 2.6 数…

【linux kernel】 一文总结linux内核中的kobject、kset和ktype

文章目录 一、kobject、kset、ktype(1-1)kobject(1-2)ktype(1-3)kset 二、kobject操作API(2-1)kobject_init()(2-2)kobject_add()(2-3&#xff09…

【命名空间详解】c++入门

目录 命名空间的定义 1.命名空间的正常定义 2.命名空间还可以嵌套 3. 命名空间可以合并 命名空间的使用 1.加命名空间名称及作用域限定符 2.使用using将命名空间中某个成员引入 3.使用using namespace 命名空间名称 引入 输入,输出 输出 命名空间的定义 …

linux命令ar使用说明

ar 建立或修改备存文件,或是从备存文件中抽取文件 补充说明 ar命令 是一个建立或修改备存文件,或是从备存文件中抽取文件的工具,ar可让您集合许多文件,成为单一的备存文件。在备存文件中,所有成员文件皆保有原来的属…

Java技术学习|Git

学习材料声明 尚硅谷Git入门到精通全套教程(涵盖GitHub\Gitee码云\GitLab) GIt Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。Git 易于学习,占地面积小,性能极快。 它具有…

ARM_day8:基于iic总线的通信

一、IIC总线的基本概念: iic总线是一种带应答的同步的、串行、半双工的通信方式,支持一个主机对应多个从机。它有一根SCL(时钟线)和一根SDA(数据线)组成,由于只有一根数据线,所以它是…

英伟达大跳水!一夜暴跌10%,市值蒸发2000亿

相信大家已经在各大社交平台上看到了,英伟达一夜蒸发了2000亿美元! GPT-3.5研究测试: https://hujiaoai.cn GPT-4研究测试: https://higpt4.cn Claude-3研究测试(全面吊打GPT-4): https://hic…

大语言模型隐私防泄漏:差分隐私、参数高效化

大语言模型隐私防泄漏:差分隐私、参数高效化 写在最前面题目6:大语言模型隐私防泄漏Differentially Private Fine-tuning of Language Models其他初步和之前的基线微调模型1微调模型2通过低秩自适应进行微调( 实例化元框架1) 在隐…

Vue2 —— 学习(九)

目录 一、全局事件总线 (一)全局总线介绍 关系图 对图中的中间商 x 的要求 1.所有组件都能看到 2.有 $on $off $emit (二)案例 发送方 student 接收方 二、消息订阅和发布 (一)介绍 &#xff08…

虚拟机中的打印机,无法打印内容,打印的是白纸或英文和数字,打印不了中文

原因:打印机驱动设置不正确 解决方案: 打开打印机属性 -> 高级 -> 新驱动程序 下一页 -> Windows 更新 耐心等待,时间较长。 选择和打印机型号匹配的驱动,我选择的是: 虽然虚拟机和主机使用的驱动不…

跨境电商指南:防关联浏览器和云主机有什么区别?

跨境电商的卖家分为独立站卖家和平台卖家。前者会自己开设独立站点,比如通过 shopify;后者则是入驻亚马逊或 Tiktok 等平台,开设商铺。其中平台卖家为了扩大收益,往往不止开一个店铺,或者有店铺代运营的供应商&#xf…

皇后之战:揭秘N皇后问题的多维解法与智慧【python 力扣52题】

作者介绍:10年大厂数据\经营分析经验,现任大厂数据部门负责人。 会一些的技术:数据分析、算法、SQL、大数据相关、python 欢迎加入社区:码上找工作 作者专栏每日更新: LeetCode解锁1000题: 打怪升级之旅 python数据分析…

Go之map详解

map的结构 map实现的两个关键数据结构 hmap 定义了map的结构bmap 定义了hmap.buckets中每个bucket的结构 // A header for a Go map. type hmap struct {count int // 元素的个数flags uint8 // 状态标记,标记map当前状态,是否正在写入B …

css层叠性,继承性,优先级

前言 本文概要:讲述css的三大特性,层叠,继承和优先级。 层叠性 描述:我们试想以下这种情况:我们定义了同一个选择器,但是定义的属性不同。属性有相同的也有不同的,那么最后我们这个页面会听谁的…

CSS display属性

目录 概述: 设置display示例: none: block: inline: inline-block : 概述: 在CSS中我们可以使用display属性来控制元素的布局,我们可以通过display来设置元素的类型。 在不设置…

封装个js分页插件

// 分页插件类 class PaginationPlugin {constructor(fetchDataURL, options {}) {this.fetchDataURL fetchDataURL;this.options {containerId: options.containerId || paginationContainer,dataSizeAttr: options.dataSizeAttr || toatalsize, // 修改为实际API返回的数据…

vue里面事件修饰符.prevent使用案例

什么是.prevent事件修饰符? 在Vue中,事件修饰符是指在事件处理函数后面添加的特殊标记,用于修改事件的行为。.prevent事件修饰符是其中之一,它的作用是阻止事件的默认行为。通常情况下,当用户触发某些事件时&#xff0…