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.

Example of sending data between 2 DSPs using SRIO,DMA and DioLib?

Are there any examples available that show how to setup a slave processor to recieve DMA from a host processor using DMA and DioLib? The test cases seem to only do data verification on the sender? How do I map a SrioAddress to memory on the receiver? I am using a 6457

Thanks in advance

Bob Coburn

  • Hi Robert,

    Sorry for the delay.

    The testDIO_edmaStreamLsu example in the dioLib shows how to use EDMA to program DIO LSU registers for sending DIO packets. Most of the examples in dioLib either use single DSP with digital loopback or external loopback. For 2 DSP SRIO communication:

    1) Enable SRIO on both DSPs

    2) Perform SRIO initialization on both DSPs

    3) Configure SRIO on both DSPs to operate in normal mode (disable both digital and SERDES loopback)

    4) Once the SRIO link between the 2 DSPs is up (Port ok on both DSPs), we can readily share data between both the DSPs

    5) On the host DSP, the testDIO_edmaStreamLsu example can be used to send DIO packets using EDMA. No further setup is required on the slave DSP, except we need to perform data verification, if the host is writing data into the slave processor. In case of DirectIO, mapping of SRIO address to memory is not required and the slave memory address (which needs to be written/read) itself can be used as the SRIO address. Always use Global DSP memory address while using SRIO.

    I hope this helps.

  • Karthik,

    Will you clarify what you mean by Global DSP memory

    Thank you

    Bob Coburn

     

  • Bob,

    The DSP CPU can access its own local L1 and L2 memory using either local addresses or global address. For example, consider core0 L2: 0x00800000 is local address and the corresponding global address is 0x10800000. The local addresses are used only by the local core to access its own L1 and L2 memory. Whereas, global addresses are used by other non-local cores or system level peripherals like SRIO, EDMA3 etc.

  • Sorry for sounding like a rookie, but I am on the TI DSPs

    So this global address is the address used in the .gel file in the command GEL_MapAddStr?

    For the 6457, this is 0x00800000, performing a SRIO NWITE from SrioId 0 to SrioId 1, using the srio address 0x09000000 will DMA the data to Global Address 0x09000000 on the Srio device ID 1. An vice versa (Srio id 1 to Srio Id 0) 

    This is the way the test appears to be laid out.

    I don't know where the global address 0x10800000 you specify comes from. It does not exist in this file

    Bob Coburn

  • GEL_MapAddStr is used to mention the regions of the device memory map which are allowed to be accessed through the emulator (debugger).

    Sorry my bad. I gave you the wrong example for differentiating between local and global address. The example which I gave is only applicable for multicore C64xx devices. This is not applicable for C6457.

    Your statement about SRIO NWRITE from SrioId0 to SrioId1 and vice-versa is correct. To clear the confusion regarding local and global access of L1 and L2 memories, the following is a snapshot from the C6457 data manual:

    Please, let me know which dioLib test example you are referring here? What HW platform are you working on?

  • I think the snapshot images did not get through. The following is the information from section 5.2 "Memory Protection", which is was referring to:

    In addition, a page may be marked as either (or both) locally accessible or globally accessible. A local access is a direct
    CPU access to L1D, L1P, and L2, while a global access is initiated by a DMA (either IDMA or the EDMA3) or by
    other system masters. Note that EDMA or IDMA transfers programmed by the CPU count as global accesses.

    Table 5-2  provides the available Memory Page Protection Schemes

  • Bob,

    What is your status on this SRIO thread?

    For examples of communicating from one DSP to another using SRIO, there are two recommendations of examples that I would offer:

    1. In the DIOLIB examples, there is one that runs on the EVM6474. That EVM has two multi-core DSPs that have an SRIO lane connection between them. The DIOLIB example uses this connection on the EVM to demonstrate sending data between the board using SRIO.

    2. In a previous workshop that was called IW6455 or IW6000 with a revision number, we had a chapter on SRIO with a lab that demonstrates using SRIO between two C6455s on the EVM6455. The EVM6455 includes a main board like the DSK6455 but with a big connector on one end, plus it adds a mezzanine board with another C6455 DSP on it. The lab shows how to use CSL to communicate between the two boards.

    Since the IW6455 example is the closest to what you want to do, but since I could not find an online copy of it, I have attached that section of the Student Guide and the lab files to this post. The labs were written for CCS 3.3, but the source should port easily to CCSv5 and SYS/BIOS (easy for me to say).

    Please let us know if you have any updates or questions.

    Regards,
    RandyP

    0243.iw6455m09 Using SRIO.pdf

    2352.SRIO_MasterSlave_DIO.zip

  • I see the patterns that I need in the Lab you supplied, but it appears this code is incompatible with the CSL I have for the 6457. Setup_Srio.c is refering to items that do not exist in the CSL See attached file?

  • Robert,

    The labs came from the IW6455 Workshop authors. They have not migrated these examples to newer libraries. Are there similarities that will allow you to follow the same flow using your own rewrite using the newer CSL?

    Can you be specific about what is different that is causing you problems with the translation?

    Regards,
    RandyP

  • I guess my attachement didn't make it Specifically the structure CSL_DevRegs appears to be incompatible

    Compile errors.docx
  • The example is built using CSL CSL Revision: 3.00.09.00

    My 6457 CSL is  CSL Revision: 03.04.03.01

    I should be able to work with this once I get past my initialilazation errors and 2 emulator connection problems

    Robert Coburn