Hi Guys ,
how to do a Memory Configuration using TMS320C6678 ? It is possible to do that automatically into CCS ?
Thank you for reply
Lopez
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.
Hi Guys ,
how to do a Memory Configuration using TMS320C6678 ? It is possible to do that automatically into CCS ?
Thank you for reply
Lopez
Hi Lopez,
Could you elaborate your question? What do you want exactly?
If you use SYS/BIOS realtime operating system, you can refer the section "6.2.2 Creating a Custom Platform" and "6.3 Placing Sections into Memory Segments" of the SYS/BIOS Real-time Operating System User's Guide. It is included in the SYS/BIOS distribution but you can download it separately at http://www.ti.com/lit/ug/spruex3m/spruex3m.pdf.
Regards,
Atsushi
Hi Atsushi ,,
DSP Developpment is new world for me . I read the file included here : http://www.ti.com/lit/ug/spruex3m/spruex3m.pdf, but I don´t no exactly which Modules I need to configure to resolve my Problem.
I have a 256 * 2080 data Buffer , and I want to parallelize the FFT on this data using the 8 Cores from TMS320C6678. Each Core Compute 256 FFT points . It is possible to do this using openMP ? How I can Configure Module or Memory to do that?
Please I need Some idea
Lopez
Lopez,
I'm not (yet) familiar with OpenMP, could you please ask it (possibly in a different forum) separately?
Regarding the memory configuration, the following is the basic idea.
By the way, we provide FFT library in DSPLIB. Please refer http://processors.wiki.ti.com/index.php/DSPLIB. It may help.
Regards,
Atsushi
Hi Atsushi ,
since ours last communication , I make progress to programming a DSP . For my Problem I have modified the Configuration file coming with the openMP Hello World example:
That is My comfiguration File :
* Copyright (c) 2012, Texas Instruments Incorporated
*
/*-----------------------------------------------------------------------------*/
/* runtime module configuration */
/*-----------------------------------------------------------------------------*/
var Timestamp = xdc.useModule('xdc.runtime.Timestamp');
/* load the common configuration file */
xdc.loadCapsule('ti/omp/common.cfg.xs');
var System = xdc.useModule('xdc.runtime.System');
System.extendedFormats = "%$S";
// allocate out of this shared region heap after IPC has been started.
var SharedRegion = xdc.useModule('ti.sdo.ipc.SharedRegion');
/*-----------------------------------------------------------------------------*/
/* configure openMP Module */
/*-----------------------------------------------------------------------------*/
// Configure HeapOMP for the shared memory heap
var HeapOMP = xdc.useModule('ti.omp.utils.HeapOMP');
var Timestamp = xdc.useModule('xdc.runtime.Timestamp');
var OpenMP = xdc.useModule('ti.omp.utils.OpenMP');
OpenMP.setNumProcessors(8);
HeapOMP.sharedRegionId = 2;
HeapOMP.localHeapSize = 0x20000;
HeapOMP.sharedHeapSize = 0x1000000;
// Specify the Shared Region
SharedRegion.setEntryMeta( HeapOMP.sharedRegionId,
{ base: 0x90000000,
len: HeapOMP.sharedHeapSize,
ownerProcId: 0,
cacheEnable: true,
createHeap: true,
isValid: true,
name: "heapomp",
}
);
// Enable Cache Write-back for HEAPOMP
var Cache = xdc.useModule('ti.sysbios.family.c66.Cache');
Cache.setMarMeta(0x80000000, 0x20000000, Cache.PC | Cache.WTE);
/*-----------------------------------------------------------------------------*/
/* define a Section to store Shared input data and private data for each Core */
/*-----------------------------------------------------------------------------*/
Program.sectMap["InputBuffer"] = new Program.SectionSpec();
Program.sectMap["InputBuffer"].loadSegment = "DDR3";
Program.sectMap[".threadprivateBuffer"] = new Program.SectionSpec();
Program.sectMap[".threadprivateBuffer"].loadSegment = "L2SRAM";
/*-----------------------------------------------------------------------------*/
/* System Configuration : Memory for Variable and Program Code */
/*-----------------------------------------------------------------------------*/
Program.sectMap["systemHeapMaster"] = "DDR3"; // contains Heap Buffer
Program.sectMap[".cinit"] = "MSMCSRAM_MASTER"; // contains tables for initializing variables and constants
Program.sectMap[".const"] = "MSMCSRAM_MASTER"; // contains string literal, floating-point constant
Program.sectMap[".text"] = "MSMCSRAM_MASTER"; // contains all executable code
Program.sectMap[".far"] = "L2SRAM"; // reserve space for global variable declared with far
I defined two region InputBuffer to store my shared input data and threadprivatebuffer to store private input data for each core .
But I don´t no if all these Configuration is correct .
QuestionS : how I can init a Array to store it in programSection InputBuffer ?
thank for reply
Lopez
Hi Lopez,
If I don't correctly understand your question, please let me know.
When you put a variable array in the section, we have two ways to initialize it as usual C language manner, namely (1) initialization by C start-up routine, or (2) initialing it by application. In both cases, we can tell compiler to allocate a variable to a specific section by TI's special pragma.
(1)
#pragma DATA_SECTION(array_a, "InputBuffer");
int array_a[16] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
(2)
#pragma DATA_SECTION(array_a, "InputBuffer");
int array_a[16];
int main(void)
{
int i;
for (i = 0; i < 16; i ++)
array_a[i] = i;
// ...
}
Does this answer to your question?
By the way, one notice is, if you put a variable in DDR memory and need to initialize it, we need to configure DDR memory interface (EMIF) prior to load the image into memory. If you want to initialize DDR EMIF after going into the main() function, my recommendation is to take the (2) method shown above. It's easy and still works well.
Regards,
Atsushi