This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AIF2 CPRI 与FPGA互联的问题



大家好,

我们正在做用FPGA(Xilinx V6)与C6670进行CPRI协议的数据传输。

FPGA做master,C6670做slave。

目前我的调试结果是:C6670经过光纤接到FPGA端,FPGA能够抓到C6670 TX出来的信号,但是无法进入HFNSYNC状态。

现在有以下几点问题,望大家不吝赐教:

1. C6670的时钟输入引脚有SYSCLK以及ALTCORECLK两个,

当使用AIF2模块的时候,是不是必须ALTCORECLK作为DSP Core的时钟,而SYSCLK作为AIF2的时钟?

目前我们的电路上只是用了SYSCLK(122.88MHz),并没有使用ALTCORECLK这路时钟,这样的话会不会有错?

2. FPGA板卡的时钟是板上晶振出来的,C6670板卡的时钟是自己板上的晶振出来的,两板时钟不同源,会不会有错?

FPGA作为master,C6670作为slave,那么是否需要把C6670设置为从链路恢复时钟,然后用这个恢复出来的时钟去驱动SerDes?

3 AIF2实现CPRI协议的时候,与另一端的FPGA达到HFNSYNC的整个过程我不是很明白。

我的理解是:

比如FPGA作为master、C6670作为slave,C6670板卡先加电、FPGA板卡后加电,两者再连接光纤。

FPGA的TX向C6670的RX发送物理层的信号,一旦C6670接收到若干个K28.5,则会进入HFNSYNC状态。

同时,C6670的TX向FPGA的RX发送物理层的信号,一旦FPGA接收到若干个K28.5,则FPGA进入HFNSYNC状态。

请问是这样的吗???

4.还有就是CPRI中的master与slave的具体区别到底是什么?我搜了一些帖子说AIF2无法作为CPRI的slave(http://e2e.ti.com/support/dsp/c6000_multi-core_dsps/f/639/p/270838/960182.aspx#960182)。

但是我们这种情况下,首先FPGA必须作为master,AIF2如果不能作为CPRI的slave,那么作为master,两个master能实现CPRI传输吗?

  • 1. ALTCORECLK不是必需的。SYSCLK可以同时给AIF和DSP core用。

    2. 时钟必须同步。DSP 的CPRI接收恢复时钟只用做接收,不能用作其它功能,这个设计死了,没办法。可以让FPGA用CPRI接收恢复出来的时钟做本地工作时钟,这样双方就同源了。或者改电路板设计让双方用同源时钟。

    3. 你说的基本是对的,细节请参考CPRI协议。

    4, 我的理解是slave要能适从于Master, 比如上述问题2. 而AIF2所有的参数或功能都需要预先配置好,不支持运行时协商或自适应。

  • 谢谢您的回复!

    关于第2点:

    我们的是两块板卡(FPGA板卡和DSP板卡)通过光纤互联,而且还要拉远,没法用同源时钟。

    我想的是FPGA和C6670 CPRI互联的话,C6670 TX到FPGA的RX,FPGA RX恢复出时钟用作自己的接收;FPGA TX到C6670的RX,C6670 RX恢复出时钟用作自己的接收。这样可行吗?

  • 恢复时钟用作接收是很自然的,所以对Serdes都这么做。

    要解决你的问题,在FPGA中,还需要用恢复出来的时钟产生发送时钟,甚至还要把它作为其它需要与CPRI同步到所有模块的工作时钟。

  • 还有一个问题,目前我们用FPGA板卡和C6670板卡通过光纤互联了。

    我在C6670端想通过寄存器观察C6670 RX(由FPGA TX过来)恢复出来的时钟。

    根据AIF2文档7.4.1.1

    这里我有2个问题:

    1.第一个高亮的那句话,我无法理解。这句话说system clock=307.2MHz,那么应该对应OBSAI协议,OBSAI协议的4x link rate是3072MHz,怎么换算得到2x_byte clock=76.8MHz的?2x_byte clock不是用link rate除以20吗?(我理解的是2x_byte clock是SerDes传输2个byte 16bit的时钟,而SerDes经过8B10B编码了,所以传输16bit相当于物理链路传输了20bit,所以2x_byte clock是用link rate除以20)。

    是我理解有问题吗?

    2.第二个高亮那句话,我只实际调试中(FPGA与C6670光纤互联,CPRI协议,1.2288Gbps link rate)。我将mon_wrap值设置为0x12c(300),得到的clk_qual值约为0x4B4(0x4B3~0x4B6这样跳动),这样的话,计算得到的2x_byte clock应该是多少呢?

    同时有一点让我非常困惑的是:即使我把光纤拔了(就是说C6670 AIF2的RX没有信号输入了),但是clk_qual仍然有值,并且仍然是在0x4B4左右跳动。可是根据下图

    如果RX链路没有信号,应该就没有2x_byte clock,没有2x_byte clock的话,2x_byte clock counter就没法wrap,没法wrap的话就没法对clk_qual重新加载system clock counter的值。然而,在拔掉光纤后,我却能观察到clk_qual有值,还在跳动。这点让我非常困惑!希望您能给我解答。

  • 还有一个问题:

    AIF2接口的电平是不是CML的?所以,我使能AIF2接口后,还没连接光纤信号到AIF2的RX,AIF2的RX会有600mv的直流电平?

  • 关于您提到的“要解决你的问题,在FPGA中,还需要用恢复出来的时钟产生发送时钟,甚至还要把它作为其它需要与CPRI同步到所有模���的工作时钟”,我看了FPGA端的IP,确实是可以从RX恢复时钟再做TX的.

    我理解的是:DSP板卡的本地时钟(122.88MHZ)输入AIF模块,作为TX时钟,TX到FPGA的RX端,FPGA的RX从此时钟恢复出来一个时钟,此时钟再作为自己的TX时钟,FPGA的TX再到DSP的RX,DSP的RX恢复一个时钟再去接收。

    整个时钟的关系,我理解的应该无误的吧?

  • 你对时钟和电平的理解是对的。

    文档关于clock quality counter的例子,计算出来的2x_byte时钟速度是76.8MHz,这没错。不过76.8MHz不是4x link rate对应的2x byte clock.

    对于你的例子,计算公式应该是245.76/0x4B4=(2x_byte clock)/0x12c, 所以2x_byte clock= 61.23588MHz。

    关于没有输入的时候的行为,我猜是不是PLL自振。

  • 也就是说或2x_byte clock*20是等于link rate的吗?

    ***********************************************************************************************************

    可是我不插光纤,就给DSP板上电,也就是说这次上电,RX从来没接收到信号过,但是clk_qual仍然有值,且在0x4B4左右跳动。(RX link rate我设置的为1.228GHz,得到的clk_qual应该就是0x4B4左右)。

    可是外部从来都没有信号进入RX,为什么还会有clk_qual呢?感觉这不合理的!

    ***********************************************************************************************************

    目前DSP板卡这边的光模块LOS=0,简单地用示波器抓取AIF2 RX的信号,也有差分的信号进入AIF2的RX。

    但是我们的调试状态一直为LOS=1、LOF=1,导致无法进入HFNSYNC状态。

    我们的光模块到AIF2之间是没有加电容的,因为光模块RD(receive data out)内部有了电容。

    对于LOS=1、LOF=1,这种情况一般是由于什么原因导致的错误呢?

  • 检测到的2x_byte clock= 61.23588MHz,说明link rate差不多是1.2288G.

    而监测值的波动说明信号不稳定,还是测一下眼图看看,注意要尽量靠近接收端测。

     

  • 您好!据我们观察板上链路信号,信号的质量确实存在问题,已经在改版。

    **************************************************************************************************

    有一个问题,望您能指导一下!

    根据altera AN610文档,有这样一句话

    “In any RE, send the receiver recovered clock from the slave port to an external clean-up PLL before feeding into the transmitter PLL input reference clocks of the slave port and master port (in a multi-hop connection).”

    同时CPRI spec中也有这样一句话

    ”Any RE shall receive on its slave port a clock traceable to the main REC clock. This requires any RE reuses on its master ports a transmit clock traceable to REC, i.e. a clock retrieved from one of its slave ports.“

    我理解的是,也是您在上面提到的:CPRI另一端需要将RX恢复出来的时钟(经过clean-up PLL)作为TX,或者两者直接用一个common clock,从而实现CPRI spec中提及的traceable。

    **************************************************************************************************

    我的疑问是:CPRI提及这样的RE TX clock要traceable to REC,是出于什么样的考虑的呢?

    **************************************************************************************************

    经过这几天看文档的结果,我大概觉得有这两个方向可能涉及到这一点

    1. 出于3GPP协议中对时钟的约束

    2. SerDes中要求TX不同源的话,需要考虑clock correction(见注),而实现clock correction的方式就是在packet之间插入idle symbols,比如SRIO IDLE1、IDLE2序列。而CPRI中是没有这样的IDLE序列,所以无法进行clock correction,所以必须时钟traceable to REC。

    **************************************************************************************************

    望您能给我进一步的帮助分析这个问题!十分感谢!

    **************************************************************************************************

    注:参考的是High-Speed serial IO made simple这个文档的第63页

    ”Since we are going board-to-board, we would definitely have different oscillators driving the transmit clocks of the transceivers, so we must account for clock correction.“

  • 我觉得主要还是无线协议要求上下行同步。如果不同步,比如下行发了10000帧,上行却发了10001帧,那就乱了。

    SRIO的idle symbols主要是实现同一方向的多个lane之间的同步;而CPRI不会用多个lane传相同的数据流,所以lane之间不需要同步。

    SRIO的发送和接收方向不需要同步,因为SRIO传输的是突发的没有严格定时的数据,收发数据间也没有时间约束。

  • 您好,我最近也在做FPGA与DSP互联,我主要做DSP这一块,如果可能的话能交流一下么?十分感谢,qq:932832439