1、 通道模式配置(1X 2X or 4X)
相关寄存器: PLM Port(n) Path Control Register (PLM_SP(n)_PATH_CTL)
寄存器地址: 0x0291B0B0
该寄存器的PATH_MODE域负责配置1X,2X,4X模式。下图为不同mode的配置图:
使用CSL库 API完成通道数配置工作:
//配置为Mode4,即4x
CSL_SRIO_SetPLMPortPathControlMode (hSrio, i, 4); // i 为端口号
各种模式对应使用端口如下图所示:如4x模式只能使用端口0进行通信。
//配置为Mode4,即4x ,端口0
CSL_SRIO_SetPLMPortPathControlMode (hSrio, 0, 4);
蓝色数字表示每种模式对应端口号。
2、链接速率配置(link rate)
波特率配置寄存器: SerDes Macro Configuration Register (SRIO_SERDES_CFGPLL)
接收通道配置寄存器:SerDes Receive Channel Configuration Register(SRIO_SERDES_CFGRXn)
发送通道配置寄存器:SerDes Transmit Channel Configuration Register(SRIO_SERDES_CFGTXn)
在配置波特率相关寄存器之前必须先对寄存器进行解锁方可配置。解锁如下:
*((volatile unsigned int *)(0x02620038)) = 0x83E70B13;
*((volatile unsigned int *)(0x0262003C)) = 0x95A4F1E0;
波特率设置公式:
srioBaund = refClk ∗ MPY ∗ Rate
srioBaund: SRIO波特率
refClk: 参考时钟
MPY: 锁相环倍频乘数(SRIO_SERDES_CFGPLL寄存器MPY字段)
Rate: SRIO_SERDES_CFGRXn与SRIO_SERDES_CFGTXn 寄存器RATE字段
参考时钟为SRIOGMIICLKP和SRIOGMIICLKN管脚输入时钟(SRIOGMIICLK),锁相环倍频参考SRIO_SERDES_CFGPLL寄存器MPY字段,如下下图所示; MPY字段参考SRIO_SERDES_CFGRXn与SRIO_SERDES_CFGTXn 寄存器如下图所示。
RATE字段说明:
00: 完整波特率。 每1个PLL输出时钟周期采集4个数据样本。
01: 一半波特率。 每1个PLL输出时钟周期采集2个数据样本。
10:四分之一波特率。 每1个PLL输出时钟周期采集1个数据样本。
11:八分之一波特率。 每2个PLL输出时钟周期采集1个数据样本。
3、参考时钟设置
相关寄存器: RIO port IP prescalar (PRESCALAR_SRV_CLK)
寄存器地址: 0x0291BD30
参数PRESCALAR_SRV_CLK的计算方法如下,其中[]的意思是取最近的整数
prescalarClock = [refclk ÷ 10]
如参考时钟为156.25MHz配置如下:
// prescalrClock = (156.25/10) = 15.625 ≈ 16 = 0x10
CSL_SRIO_SetLLMPortIPPrescalar (hSrio, 0x10);
4、实 例
参考时钟为156.25MHz, 4X模式,波特率分别配置成1.25Gbps,2.5Gbps,3.125Gbps, 5.0Gbps。
参考时钟配置
// prescalrClock = (156.25/10) = 15.625 ≈ 16 = 0x10
CSL_SRIO_SetLLMPortIPPrescalar (hSrio, 0x10);
参考Table3-7图所示,若MPY选择10x即0b001010000,RATE只能为Haif模式,波特率计算如下:
//RATE=01,每一个PLL输出时钟周期取2个数据样本,即:156.25 * 10 * 2 = 3.125Gbps
CSL_BootCfgSetSRIOSERDESConfigPLL (0x51);
CSL_BootCfgSetSRIOSERDESRxConfig (0, 0x00440495);
CSL_BootCfgSetSRIOSERDESRxConfig (1, 0x00440495);
CSL_BootCfgSetSRIOSERDESRxConfig (2, 0x00440495);
CSL_BootCfgSetSRIOSERDESRxConfig (3, 0x00440495);
CSL_BootCfgSetSRIOSERDESTxConfig (0, 0x00180795);
CSL_BootCfgSetSRIOSERDESTxConfig (1, 0x00180795);
CSL_BootCfgSetSRIOSERDESTxConfig (2, 0x00180795);
CSL_BootCfgSetSRIOSERDESTxConfig (3, 0x00180795);
参考Table3-7图所示,若MPY选择16x即0b01000000,RATE可选择Haif,Qtr,Eighth模式,波特率计算如下:
//RATE=01,每一个PLL输出时钟周期取2个数据样本,即:156.25 * 16 * 2 = 5.0Gbps
CSL_BootCfgSetSRIOSERDESConfigPLL (0x81);
CSL_BootCfgSetSRIOSERDESRxConfig (0, 0x00440495);
CSL_BootCfgSetSRIOSERDESRxConfig (1, 0x00440495);
CSL_BootCfgSetSRIOSERDESRxConfig (2, 0x00440495);
CSL_BootCfgSetSRIOSERDESRxConfig (3, 0x00440495);
CSL_BootCfgSetSRIOSERDESTxConfig (0, 0x00180795);
CSL_BootCfgSetSRIOSERDESTxConfig (1, 0x00180795);
CSL_BootCfgSetSRIOSERDESTxConfig (2, 0x00180795);
CSL_BootCfgSetSRIOSERDESTxConfig (3, 0x00180795);
//RATE=10,每一个PLL输出时钟周期取1个数据样本,即:156.25 * 16 * 1 = 2.5Gbps
CSL_BootCfgSetSRIOSERDESConfigPLL (0x81);
CSL_BootCfgSetSRIOSERDESRxConfig (0, 0x004404A5);
CSL_BootCfgSetSRIOSERDESRxConfig (1, 0x004404A5);
CSL_BootCfgSetSRIOSERDESRxConfig (2, 0x004404A5);
CSL_BootCfgSetSRIOSERDESRxConfig (3, 0x004404A5);
CSL_BootCfgSetSRIOSERDESTxConfig (0, 0x001807A5);
CSL_BootCfgSetSRIOSERDESTxConfig (1, 0x001807A5);
CSL_BootCfgSetSRIOSERDESTxConfig (2, 0x001807A5);
CSL_BootCfgSetSRIOSERDESTxConfig (3, 0x001807A5);
//RATE=11,每二个PLL输出时钟周期取1个数据样本,即:156.25 * 16 * 1/2 = 1.25Gbps
CSL_BootCfgSetSRIOSERDESConfigPLL (0x81);
CSL_BootCfgSetSRIOSERDESRxConfig (0, 0x004404B5);
CSL_BootCfgSetSRIOSERDESRxConfig (1, 0x004404B5);
CSL_BootCfgSetSRIOSERDESRxConfig (2, 0x004404B5);
CSL_BootCfgSetSRIOSERDESRxConfig (3, 0x004404B5);
CSL_BootCfgSetSRIOSERDESTxConfig (0, 0x001807B5);
CSL_BootCfgSetSRIOSERDESTxConfig (1, 0x001807B5);
CSL_BootCfgSetSRIOSERDESTxConfig (2, 0x001807B5);
CSL_BootCfgSetSRIOSERDESTxConfig (3, 0x001807B5);