您好!
感谢您的关注、以下是我的问题:
我有一个定制板、FPGA 通过 SRIO X 2 (5.0GHz)与 DSP (C6678)通信、在我的系统初始化期间、FPGA 将复位 DSP 电源(1.0V 和1.1V)以复位 DSP。
然后、DSP 将从 EEPROM 加载固件。 在我的 DSP 固件中、SRIO 接口将由以下代码(TI 的示例代码)提供。
SRIO 链接后、我的 PC SW 将通过 SRIO 进行读取/写入来验证 DSP DDR3。
但是、在 DDR3测试期间、在 SRIO 链路后重新初始化 SRIO 的可能性约为1.5%、并使 DDR3测试失败。(最后检测到 status0x00020002)由于 FPGA 上没有仅复位 SRIO 的功能、因此怀疑 DSP 在 DDR3测试期间复位 SRIO。 我是否可以知道任何条件/DSP 函数将触发 SRIO 链路复位?
此外、我还发现了一个问题、即在 SRIO 链接(状态从0x1更改为0x2)之后的 DSP 固件中、有用于初始化 SRIO 中断的函数、如您在源代码中看到的那样。
我还尝试在检测到 SRIO 链路后等待50ms、然后转到在高级测试 DDR3、但问题也可以检测到。
附录:DSP 的 SRIO Link 初始化源代码。
/********* SRIO 链接初始化******** /
//最后链接 SRIO
serdes_cfg.commonSetup.inputRefClock_MHz = 250;
//清除配置结构 true 以确保未使用的字段为0
memset (&SRIO_cfg、0、sizeof (SRIO_cfg));
SRIO_cfg.blockEn.bBLK1_LSU_EN = 1;
SRIO_cfg.blockEn.bBLK2_MAU_EN = 1;
SRIO_cfg.blockEn.bBLK3_TXU_EN = 0;
SRIO_cfg.blockEn.bBLK4_RXU_EN = 0;
SRIO_cfg.loopback_mode = SRIO_NO_LOOPACK;
srio_cfg.device_ID_routing_config = dsp0_device_ID_routing_config;
SRIO_cfg.uiNumDeviceId = sizeof (dsp0_device_ID_routing_config)
/ sizeof (SRIO_Device_ID_Routing_Config);
serdes_cfg.commonSetup.loopBandwidth = SERDES_PLL_LOOP_BAD_MID;
srio_cfg.serdes_cfg = SerDes_cfg;
serdesLinkSetup.loopback = SERDES_LOOP_DISABLE;
serdesLinkSetup.txOutputSwing = 0~15;//μ s 表示100到850mVdfpp 之间
serdesLinkSetup.testPattern = SERDES_TEST_DISABLED;
serdesLinkSetup.rxAlign = SERDES_RX_逗 号_alignment_enable;
serdesLinkSetup.rxInvertPolarity = SERDES_RX_NORMAL;
serdesLinkSetup.rxTermination = SERDES_RX_TERM_common_point_ac_耦 合;
serdesLinkSetup.rxEqualizerConfig = SERDES_RX_EQ_ADAPTIVE;
serdesLinkSetup.rxCDR = SERDES_RX_CDR_1;
serdesLinkSetup.txInvertPolarity = SERDES_TX_NORY_POLARITY;
priority_permissing.SupervisorHostID_16b = DSP1_SRIO_BASE_ID;
priority_permissing.SupervisorHostID_8b = DSP1_SRIO_BASE_ID 和0xFF;
priority_permission.uiVbusPriority = 0;
SRIO_cfg.Priority_Permission =&Priority_Permission;
LSU_cfg.lsughp0ShadowImage 设置= SRIO_LSU_SHADOK_REGs_Setup_4_4_4_4_4_4;
LSU_cfg.lsup Grp1ShadowImage 设置= SRIO_LSU_SHADOK_REGs_Setup_4_4_4_4_4_4;
LSU_cfg.lsuIntSetup[0]= LSU_INT_DRIVE_BY_SRCID;
LSU_cfg.lsuIntSetup[1]= LSU_INT_DRIVE_BY_SRCID;
LSU_cfg.lsuIntSetup[2]= LSU_INT_DRIVE_BY_SRCID;
LSU_cfg.lsuIntSetup[3]= LSU_INT_DRIVE_BY_SRCID;
LSU_cfg.lsuIntSetup[4]= LSU_INT_DRIVE_BY_SRCID;
LSU_cfg.lsuIntSetup[5]= LSU_INT_DRIVE_BY_SRCID;
LSU_cfg.lsuIntSetup[6]= LSU_INT_DRIVE_BY_SRCID;
LSU_cfg.lsuIntSetup[7]= LSU_INT_DRIVE_BY_SRCID;
SRIO_cfg.LSU_cfg =&LSU_cfg;
NuCard2_SRIO_Init();
SRIO_INTERRUPTS_Init();
/********* SRIO 链路初始化结束************* /
谢谢。