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.

Notify with Platform Changed

Other Parts Discussed in Thread: SYSBIOS

Hi

I am using EVM6678. I ported the Notify_multicore example with the platform given in the ipc.examples. This was working fine. But when I tried to change the platform to place data memory in DDR3. Stack and Code memory in MSMC it is not executing fully and behaving erratically like getting stuck, IPC start aborting, one core aborting etc. The platform given in the example places stack, code and data in L2 SRAM. The example was not working even if I change the L2 Cache which is set to 0 in the example platform(L2 Memory is configured as ALL SRAM).

In my actual application, the eight processors will perform independent computations accessing data from independent memory locations. There is one master processor which accesses the outputs of all processors(The outputs will be written in predefined memory locations). To achieve this I declared a shared memory in the DDR3 this region will be accessed by all the processors. While each  processor doesnot access the same memory location, their access exclusion(all cores may try to access different memory locations in DDR3 at the same time) is not  gaurenteed explicity by my program. I am expecting the shared region or the external memory controller(XMC) will take care of the exclusion. I am esuring cahce coherency explicitly.

My Questions are:

  1. Is the execution of the notify multicore program dependant on the platform? If yes, in what way?
  2. Is the mutual exclusion of memory access by different cores gaurenteed by sharedmemory module?
  3. Is there anything else I am missing in the above approach?

Could you please help.

Srikanth

  • I'm not familiar with this code itself, maybe someone else can comment on that.

    As for #3.  Have you verified that you configured the DDR and can read/write correct data to/from the DDR?  If you haven't configured the DDR, then you'll be seeing garbage data at a minimum, and crashing if you've got program in DDR memory if the DDR hasn't be configured.

    Best Regards,

    Chad

  • Chad

    I am not sure I understood exactly what configuration means. In our case as we are using the GEL file from the Eval Board, DDR3 Drivers are written in it. As with writing and reading, Yes I am able to do that in a single core program and even in a multicore program with each core updating the same memory location(this works only when the platform is code, data and stack all placed in L2SRAM as described above).

    Srikanth 

  • Ok, sounds like that wasn't the issue, it's a common mistake that people make when developing w/o DDR and then when they start using it, they assume it just works.  It does require to be configured, but the GEL file that comes with the EVM can do that for you.  Note in Embedded system that you don't have a GEL file and the configuration would have to be done by the initialization code prior to using DDR.

    Best Regards,

    Chad

  • Hi,

    I have another question about the platform used in the Notify example. The platform set when we create the project is ti.sdo.ipc.examples.platforms.evm6678.core0 and the example works properly, but if I change the platform to ti.platforms.evm6678 I get the following error messages (using the simulator):

    [TMS320C66x_6] main: MultiProc id = 7
    [TMS320C66x_6] main: MultiProc name = CORE6
    [TMS320C66x_0] main: MultiProc id e = [TMS320C66x_1] main: MultiProc id e = [TMS320C66x_2] main: MultiProc id e = [TMS320C66x_3] main: MultiProc id e = [TMS320C66x_4] main: MultiProc id e = [TMS320C66x_5] main: MultiProc id e = [TMS320C66x_7] main: MultiProc id e = [TMS320C66x_0] main: MultiProc name = CORE7
    [TMS320C66x_1] main: MultiProc name = CORE7
    [TMS320C66x_2] main: MultiProc name = CORE7
    [TMS320C66x_3] main: MultiProc name = CORE7
    [TMS320C66x_4] main: MultiProc name = CORE7
    [TMS320C66x_5] main: MultiProc name = CORE7
    [TMS320C66x_7] main: MultiProc name = CORE7
    [TMS320C66x_1] ti.sysbios.family.cline 338: assertion failure: A_notRegistered: Notify instance not [TMS320C66x_2] ti.sdo.ipc.Notify: line 338: assertion failure: A_notRegistered: Notify instance not yet registered for the processor/line
    [TMS320C66x_3] ti.sdo.ipc.Notify: line 338: assertion failure: A_notRegistered: Notify instance not yet registered for the processor/line
    [TMS320C66x_4] ti.sdo.ipc.Notify: line 338: assertion failure: A_notRegistered: Notify instance not yet registered for the processor/line
    [TMS320C66x_5] ti.sdo.ipc.Notify: line 338: assertion failure: A_notRegistered: Notify instance not yet registered for the processor/line
    [TMS320C66x_7] ti.sdo.ipc.Notify: line 338: assertion failure: A_notRegistered: Notify instance not yet registered for the processor/line
    [TMS320C66x_1] xdc.runtime.Error.raise: terminating execution
    [TMS320C66x_2] xdc.runtime.Error.raise: terminating execution
    [TMS320C66x_3] xdc.runtime.Error.raise: terminating execution
    [TMS320C66x_4] xdc.runtime.Error.raise: terminating execution
    [TMS320C66x_5] xdc.runtime.Error.raise: terminating execution
    [TMS320C66x_7] xdc.runtime.Error.raise: terminating execution

    Why does this happen?

    And one more question, if I try to create a new platform for C6678 the only one that I can import is the ti.platforms.evm6678, but this platform doesn't work with the Notify example. So, how can I create a custom platform that also works with the Notify project?

    Thanks

  • Johannes,

    When you create a new platform, the choice of where an imported platform comes from is dependent on which platform packags repository is set. The default platform package is in XDCTools directory. Something like <MCSDK_INSTALL_DIR>\xdctools_x_xx_xx_xx\packages".  The ti.sdo.ipc.examples.evmc6678.core0 platform is in a set of packages supplied with the IPC module.  If you set the platform package directory to something like <MCSDK_ISTALL_DIR>\ipc_x_xx_xx_xx\packages, you should be able to import the ti.sdo.ipc.examples.evm6678.core0 package into your new platform. 

    Looking at the two different platforms in the RTSC Platform viewer, they seem to be identical.  So I took a closer look by comparing the Platform.xdc files.  The difference that I see is that in the ti.sdo.ipc.examples.platforms.evm6678.core0 platform file, l2Mode is set to 256k.  But in the viewer it shows as 0K.  In the ti.platforms.evm6678, l2Mode is set to 0k, which agrees with what is seen in the viewer.  This may be a small bug in the viewer.  You can tru changing your ti.platforms.evm6678 setting for L2 to be 256K and see if this resolves the problem.  

    Regards,

    Dan

  • Dan,

    Thanks for your answers

    DanRinkes said:
    If you set the platform package directory to something like <MCSDK_ISTALL_DIR>\ipc_x_xx_xx_xx\packages, you should be able to import the ti.sdo.ipc.examples.evm6678.core0 package into your new platform. 

    Now I found it, I was looking in the wrong directory. Sorry for that.

    DanRinkes said:
    Looking at the two different platforms in the RTSC Platform viewer, they seem to be identical.  So I took a closer look by comparing the Platform.xdc files.  The difference that I see is that in the ti.sdo.ipc.examples.platforms.evm6678.core0 platform file, l2Mode is set to 256k.  But in the viewer it shows as 0K.  In the ti.platforms.evm6678, l2Mode is set to 0k, which agrees with what is seen in the viewer.  This may be a small bug in the viewer.  You can tru changing your ti.platforms.evm6678 setting for L2 to be 256K and see if this resolves the problem.  

    Changing the L2 to 256K did work.

    But now I got to the same question of Srikanth, if I change the Data and Stack memory sections in the platform from L2SRAM to MSMCSRAM or DDR the project doesn't work anymore (changing the Code Memory section doesn't seem to cause any problem). Why?

    Regards

    Johannes