0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CPRI的数据帧结构与初始化流程

XILINX开发者社区 来源:XILINX开发者社区 2023-10-20 09:55 次阅读

本文作者:AMD 工程师Gary Pan

CPRI 是无线通信里的一个标准协议,连接 REC 和 RE 的通信。AMD有提供 CPRI IP 核。区别于其它通信协议,如以太网等,CPRI 是一个同步系统。

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

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

f215da58-6ea2-11ee-939d-92fbcf53809c.png

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

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

f2232fd2-6ea2-11ee-939d-92fbcf53809c.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 数据。

f22fb1c6-6ea2-11ee-939d-92fbcf53809c.png

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

f244430c-6ea2-11ee-939d-92fbcf53809c.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 这一排四个控制字,会在协议通信,对照信息的时候,都有各自不同的用途定义。

f2596f0c-6ea2-11ee-939d-92fbcf53809c.png

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

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

f26e47c4-6ea2-11ee-939d-92fbcf53809c.png

了解了 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 状态,可以开始进行正常的业务数据收发工作了。

f282baec-6ea2-11ee-939d-92fbcf53809c.png

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • amd
    amd
    +关注

    关注

    25

    文章

    5197

    浏览量

    132632
  • 无线通信
    +关注

    关注

    56

    文章

    4197

    浏览量

    142326
  • pll
    pll
    +关注

    关注

    6

    文章

    740

    浏览量

    134572
  • CPRI
    +关注

    关注

    1

    文章

    10

    浏览量

    8649
  • 数据帧
    +关注

    关注

    0

    文章

    33

    浏览量

    6647

原文标题:开发者分享|CPRI 的数据帧结构与初始化流程

文章出处:【微信号:gh_2d1c7e2d540e,微信公众号:XILINX开发者社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    AD9364初始化问题及标准初始化流程

    AD9364初始化好像不成功。能否请官方给出一个使用外部晶体(如33MHz),FDD的标准初始化例子。
    发表于 09-28 14:56

    labview顺序结构中的初始化问题

    Labview中顺序结构,我想让第一执行完成后,程序初始化,再执行第二,以此类推执行九,因为是一个AO,AI口不停地接收发送,不
    发表于 12-25 11:37

    喂狗(重载计数值)初始化流程

    这里写代码片IWDG_Initializes();//初始化IWDG_ReloadCounter();//喂狗(重载计数值)初始化流程:void IWDG_Initializes(void){IWDG_Enable();//使能
    发表于 08-02 07:37

    【原创分享】变量的初始化技巧

    由于在嵌入式系统中必须考虑程序规模的问题,因此,对程序中的变量的初始化也需要进行慎重的考虑。在C语言中,基本数据结构(字符型、整型)的初始化相对简单;数组、结构体属于C语言中的构造类型
    发表于 09-08 15:28

    MSP文件的初始化流程是怎样的

    MSP是指什么?MSP文件的初始化流程是怎样的?
    发表于 12-10 06:17

    nrf51822蓝牙初始化流程代码

    初始化流程代码、蓝牙流程、服务具体讲解
    发表于 12-13 07:28

    STM32F1 EXTI初始化流程

    1.EXTI初始化流程建立EXTI、GPIO、NVIC初始化结构体。 EXTI_InitTypeDefEXTI_InitStructure
    发表于 01-13 06:24

    NVIC初始化流程是怎样的

    1.NVIC初始化流程配置中断优先级分组void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);建立NVIC初始化结构
    发表于 01-17 07:08

    基本定时器定时初始化流程

    1.基本定时器定时初始化流程建立时基初始化结构体与中断NVIC结构体TIM_TimeBaseInitTypeDefTIM_TimeBaseS
    发表于 01-20 06:02

    通用定时器PWM模式初始化流程

    1.通用定时器PWM模式初始化流程建立GPIO、时基、输出比较结构体 GPIO_InitTypeDef GPIO_InitStructure
    发表于 01-25 07:44

    USART初始化流程是怎样的

    1.USART初始化流程建立GPIO、USART、NVIC初始化结构体USART_InitTypeDefUSART_InitStructure
    发表于 02-14 07:38

    USART初始化结构体详解

    USART 初始化结构体详解标准库函数对每个外设都建立了一个初始化结构体,比如USART_InitTypeDef,结构体成员用于设置外设工作
    发表于 02-22 06:08

    Display驱动初始化流程是怎样的?

    Display驱动初始化流程是怎样的?
    发表于 03-10 08:43

    Display驱动初始化流程是怎样的?

    Display驱动初始化流程是怎样的?
    发表于 03-10 07:08

    结构体数组的初始化

    char i; TEST data1[5] = {{1,2},{3,4},{5,6},{7,8},{9,10}};//经常使用的初始化方式TEST data2[5] ={0};//初始全为0,否则
    发表于 05-21 15:24