FPGA+DSP SRIO通信(一)——DSP端参数设置(通道)

原创 2017年04月19日 18:56:45
  • 1217

以上就是我的一些学习经验,分享出来,也是对自己以后学习DSP的一个指导思想。

下面开始正题。

DSP端参数设置

使用的官方例程路径:

port mode(port模式)

SRIO通道有自回环(loopback)模式和普通模式(Normal),要使用SRIO实现FPGA和DSP的通信,必须将各port调至Normal模式,即:

    /* Configure SRIO to operate in loopback mode.(原始例程代码)*/
// CSL_SRIO_SetLoopbackMode(hSrio,0);
// CSL_SRIO_SetLoopbackMode(hSrio,1);
// CSL_SRIO_SetLoopbackMode(hSrio,2);
// CSL_SRIO_SetLoopbackMode(hSrio,3); /* Configure SRIO to operate in normal mode.(修改后例程代码) */
CSL_SRIO_SetNormalMode(hSrio,0);
CSL_SRIO_SetNormalMode(hSrio,1);
CSL_SRIO_SetNormalMode(hSrio,2);
CSL_SRIO_SetNormalMode(hSrio,3);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

不懂的函数可以去路径:

链接速率配置(link rate)

    /* Assuming the ref_clock of 312.5 MHz and link rate is 3.125Gbps; program the PLL accordingly. */

    CSL_BootCfgSetSRIOSERDESConfigPLL (0x229);
  • 1
  • 2
  • 3

该语句是对link rate的配置,假设参考时钟是312.5MHz(对于不同的C66x系列DSP,其参考时钟是不同的,所以该配置因板子型号而异),而你想要配置的link rate是3.125Gbps,那么就可以使用0x229作为该函数的参数,如果需要配置为其他link rate,就需要改变该函数参数。该函数参数的设定依据是: 
FPGA+DSP SRIO通信(一)——DSP端参数设置(通道)-LMLPHP

首先,该函数就是对SRIO_SERDES_CFGPLL寄存器做配置,而该寄存器最重要的,就是上图所示的0-9bit。其中,ENPLL是对PLL(锁相环)的使能,该位必须置1;MPY是选择PLL的倍频倍数,拿图中的8.25x为例,其对SRIO_SERDES_CFGPLL的1-8位写001000 01,高六位是整数部分,001000b是十进制的8,低两位是小数部分,01b是小数0.25;至于VRANGE,写1就行,如果想了解可以自行谷歌。

而0x229的1-8bit为:000101 00b,整数部分是5。那有人就会问了,你说参考时钟是312.5MHz,现在锁相环的倍频5倍,倍频出来的时钟频率不是3.125G啊?

不要着急,最终的link rate不只有锁相环决定,真正起传输作用的是RX和TX,所以对他们的配置也影响link rate,RX和TX的配置我后面会讲到,RX和TX的配置寄存器中有个域叫RATE,就是配置每个锁相环时钟采样几个数据。

TX和RX的RATE域描述如下图所示: 
FPGA+DSP SRIO通信(一)——DSP端参数设置(通道)-LMLPHP

然后然后!!我们看一下下面这张表,就明白了: 
FPGA+DSP SRIO通信(一)——DSP端参数设置(通道)-LMLPHP 
很明显我们在配置RX和TX时将RATE配成了Half,也就是一个PLL时钟采样2个数据,这样数据率不就变成了3.125G吗!

RX和TX的配置

接下来就到了我们通道配置的重头戏,传输器和接收器的配置,RX负责接收数据,TX负责传输数据,对RX和TX不太了解的可以看我之前的博客。大概了解即可。首先来看一下例程中这部分的写法:

   /* Configure the SRIO SERDES Receive Configuration. */
/* loopback mode */
// CSL_BootCfgSetSRIOSERDESRxConfig (0, 0x01C40495);
// CSL_BootCfgSetSRIOSERDESRxConfig (1, 0x01C40495);
// CSL_BootCfgSetSRIOSERDESRxConfig (2, 0x01C40495);
// CSL_BootCfgSetSRIOSERDESRxConfig (3, 0x01C40495); /* Non-loopback */
CSL_BootCfgSetSRIOSERDESRxConfig (0, 0x00440495);
CSL_BootCfgSetSRIOSERDESRxConfig (1, 0x00440495);
CSL_BootCfgSetSRIOSERDESRxConfig (2, 0x00440495);
CSL_BootCfgSetSRIOSERDESRxConfig (3, 0x00440495); /* Configure the SRIO SERDES Transmit Configuration. */
/* loopback mode */
// CSL_BootCfgSetSRIOSERDESTxConfig (0, 0x00780795);
// CSL_BootCfgSetSRIOSERDESTxConfig (1, 0x00780795);
// CSL_BootCfgSetSRIOSERDESTxConfig (2, 0x00780795);
// CSL_BootCfgSetSRIOSERDESTxConfig (3, 0x00780795); /* Non-loopback */
CSL_BootCfgSetSRIOSERDESTxConfig (0, 0x00180795);
CSL_BootCfgSetSRIOSERDESTxConfig (1, 0x00180795);
CSL_BootCfgSetSRIOSERDESTxConfig (2, 0x00180795);
CSL_BootCfgSetSRIOSERDESTxConfig (3, 0x00180795);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

这两个函数的功能就是对RX和TX进行配置,具体写入的寄存器是:SRIO_SERDES_CFGRX[0-3]和SRIO_SERDES_CFGTX[0-3]。由于我们使用的是Normal模式,所以对loopback模式下的RX和TX配置不作解释。我把这部分分为两块来讲。

RX配置

对SRIO_SERDES_CFGRX的写入值为0x00440495。我们一步一步讲: 
先看0-3bit: 
FPGA+DSP SRIO通信(一)——DSP端参数设置(通道)-LMLPHP

FPGA+DSP SRIO通信(一)——DSP端参数设置(通道)-LMLPHP

FPGA+DSP SRIO通信(一)——DSP端参数设置(通道)-LMLPHP

FPGA+DSP SRIO通信(一)——DSP端参数设置(通道)-LMLPHP

FPGA+DSP SRIO通信(一)——DSP端参数设置(通道)-LMLPHP

不知道大家发现没有,除了rate位,几乎所有的域都是固定配置的,所以大家在配置RX时只需要修改rate位,其余位与0x00440495保持相同即可。

TX配置

对SRIO_SERDES_CFGTX的写入值为0x00180795。我们一步一步讲:

同样除了rate位,几乎所有的域都是固定配置的,所以大家在配置TX时只需要修改rate位,其余位与0x00180795保持相同即可。

参考文献

PS:欢迎大家与我讨论文章中的问题,包括反对我的观点。

版权声明:本文为博主原创文章,未经博主允许不得转载。
FPGA+DSP SRIO通信(一)——DSP端参数设置(通道)-LMLPHP
 
FPGA+DSP SRIO通信(一)——DSP端参数设置(通道)-LMLPHP
  • warmbeast

    2017-07-25 11:403楼

  • “其中,ENPLL是对PLL(锁相环)的使能,该位必须置0”,使能PLL,不是应该置1吗
  • 回复 1条回复
FPGA+DSP SRIO通信(一)——DSP端参数设置(通道)-LMLPHP
 
FPGA+DSP SRIO通信(一)——DSP端参数设置(通道)-LMLPHP
  • haiyonghao

    2017-07-18 22:452楼

  • 我自己探索的东西,没什么好泄密的
  • 回复 1条回复
FPGA+DSP SRIO通信(一)——DSP端参数设置(通道)-LMLPHP
  • Nevermore_NO1

    2017-07-21 10:42

  • 回复haiyonghao:楼主写的很棒,大大的赞~至于楼下说的泄密,从何谈起啊。Ti巴不得有人把这些文章翻译成中文,把配置都简化了,这些工作都是替Ti在干活,有什么泄密的。
 
FPGA+DSP SRIO通信(一)——DSP端参数设置(通道)-LMLPHP
  • Jiangguannan

    2017-07-06 22:041楼

  • 楼主你这个就是开发手册,不怕泄密么~
 
 

转载自:http://blog.csdn.net/haiyonghao/article/details/70244003

05-11 20:29