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.

C6678 SRIO的port与lane的关系及配置



阅读了SRIO相关文档,积累了一些问题,现列举如下:

1、lane和port的关系,是不是lane代表物理链路,而port代表传输一个数据包的基本单元?

2、1个6678可以有多个port,是否代表这些port可以去连接不同的设备?

3、我看到PLM_PORT_PATH_CONTROL寄存器用于配置PORT的PATHID PATHCONFIG PATHMODE,但是只有MODE是可写,其他两个是只读,那么我们怎么配置一个port是1x、2x还是4x呢?

4、最后,PATH又是什么概念呢?

请指教,谢谢!

  • 我说下我的简单理解:

    lane是传输数据的链路,port是传输数据的接口。

    要正常传输数据,你需要一条链路和一个接口,这是基本的东西。当然,如果你觉得这个接口速度太慢,你可以用两个链路接到这个接口上,这就是2x。4个链路接到1个接口上就是4x。(这里的1条链路包括接收链路和发送链路)

    至于如何配置1x,2x,4x。这个手册上写的很明白,就不多说了。

  • 那么一个6678的4条lane如果被分配成4个1x或者2个2x,是不是不同的port可以连接不同的设备呢

  • 如果配置成4个1x模式,那么最多可以接4个设备。每个port都使用一条lane。

  • 你好,我用SRIO发送接收数据,使用的是下面的代码

    void send_CSL(unsigned int lsu, unsigned int SrcAddr, \
    unsigned int DstAddr, unsigned int ByteCnt, unsigned int DstID,unsigned int portnum)
    {
    SRIO_LSU_TRANSFER lsuTransfer;
    CSL_SrioHandle hSrio;
    Uint8 context;
    Uint8 transID;
    Uint8 compCode;
    Uint8 contextBit;

    hSrio = CSL_SRIO_Open (0);
    while (1)
    {
    if (CSL_SRIO_IsLSUFull (hSrio, lsu) == FALSE)
    break;
    }


    // while(CSL_SRIO_IsLSUBusy(hSrio, lsu)==FALSE){}
    retry:
    // Populate the Transfer Information.
    lsuTransfer.rapidIOMSB = 0x0;//0
    lsuTransfer.rapidIOLSB = DstAddr;//目的地址
    lsuTransfer.dspAddress = SrcAddr;//源地址
    lsuTransfer.bytecount = ByteCnt;//数据大小
    lsuTransfer.doorbellValid = 0;//0
    lsuTransfer.intrRequest = 1;//1
    lsuTransfer.supInt = 0;//0
    lsuTransfer.xambs = 0;//0
    lsuTransfer.priority = 2;//0
    lsuTransfer.outPortID = portnum;//输出port号
    lsuTransfer.idSize = 0;//目的ID 0-8bit or 1-16bit
    lsuTransfer.srcIDMap = 0;//0
    lsuTransfer.dstID = DstID;//目的ID
    lsuTransfer.ttype = 4;
    lsuTransfer.ftype = 5;
    lsuTransfer.hopCount = 0x0; //FF
    lsuTransfer.doorbellInfo = 0;
    CSL_SRIO_GetLSUContextTransaction (hSrio,lsu ,&context, &transID);
    // Send the transfer on LSU 0
    CSL_SRIO_SetLSUTransfer (hSrio, lsu, &lsuTransfer);

    while(CSL_SRIO_IsLSUBusy(hSrio, lsu)==TRUE){} // polling, test BSY bit

    CSL_SRIO_GetLSUCompletionCode (hSrio, lsu, transID, &compCode, &contextBit);
    if (compCode!=0x0)
    {
    goto retry;
    }

    }

    对于这段代码有几个问题

    1. outPortID是什么:输出端口还是?

    2. srcIDMap:值是多少,怎么确定,是发送包里的源id么?

    3. hotCount给多少?

    4. idSize:怎么确定是8bit还是16bit?我给的dsp的设备id是9,这里应该是什么值?

    对于设备ID有几个疑问,相关的额寄存器有base_id,host_base_id_lock,deviceID_reg0, deviceID_reg1。这几个寄存器里的值都是dsp设置的设备id么,这个设备id是不是就是发送包里填充的源id?

    谢谢

  • 你好King,

    那如果我的两块6678物理上只有port0连上了(即只有RIORXN0/P0与RIOTXN0/P0间有布了线),那是不是也可以实现4X,2X?

  • 不可以。芯片上看到的RIO0、RIO1对应于lane,2x使用两个lane,4x使用4个lane。

  • Hi,qian cui :

        我最近在研究FPGA和DSP间的SRIO通信,对LSU寄存器填充的一些参数也不是很明白,想请教下你,发送数据的目的地址到底指的是什么,是怎么确定的,我对这些ID搞的也头晕,还有你上面提到的几个参数各有什么含义?我接收程序现在死在

    CSL_SRIO_GetLSUCompletionCode (hSrio, lsu, transID, &compCode, &contextBit);

    判断compCode=1,然后一直goto retry, transID=3,这个值是从寄存器读出来的,但不知道具体带表什么,感觉是哪个参数没配置对。

    希望你能指点一下,非常感激!!!

  • 希望讨论FPGA与DSP之间SRIO通信的朋友们能够加群74522342,相互讨论!