FPGA, SoC, And CPLD Boards And Kits
FPGA Evaluation and Development Kits

co processor design problem

Altera_Forum
Honored Contributor II
1,416 Views

Hello, 

 

Our group has got Altera DSP Development Kit, Cyclone II. The whole purpose is to have co-processing with TI DSP via EMIF. 

The development kit includes "Fast Fourier transform (FFT) coprocessor reference design for Texas Instruments' TMS320C6416 DSK" (http://www.altera.com/products/devkits/altera/kit-dsp-2c70.html) (http://www.altera.com/products/devkits/altera/kit-dsp-2c70.html%29), but the problem is that we dont have 320C6416 DSK, but rather have 2 other models: C6455 and C6713 DSKs.  

The problem is that none of us had much experience with either FPGA or DSP, and cannot adapt the code part of C6416 to any of the two DSKs we have. 

In the past few days I was left to try to do something with the .gel files, and config files, but got really stuck, and instead of getting one build error, I was getting another. 

Cannot find any resource that would explain how to do so. 

 

It would be great if someone could tell me where to read this material from, or if "there is a number of steps that I need to follow and then it will be VOILA", or a link to where this have been done. Anything that you think could help us with this task. 

 

Thank you very much. 

Waiting for replies. 

Nik
0 Kudos
11 Replies
Altera_Forum
Honored Contributor II
585 Views

What code are you trying to adapt? The compiled code or the source code? 

In my opinion the solution may me to re-compile the DSP source code (I believe it is C code) for one of the two different targets. I think that a TI FAE may be the right person to contact. 

I hope it helps. 

:)
0 Kudos
Altera_Forum
Honored Contributor II
585 Views

Hello,  

I am trying to adapt C6416 code to either C6713 or C6455. 

The code is provided by Altera thats why I decided to write here. Plus TI is not "very friendly" with students...
0 Kudos
Altera_Forum
Honored Contributor II
585 Views

I don't konw much about the TI IDE, but I think that you will be able to re-compile the source code for a different target, and typically the evboard targets are among the pre-defined targets for any development tool because they automatically do some jobs as correct memory pages addressing, interrupt management, pin assignment and so on. 

Sorry but I am not able to suggest more than this. 

:)
0 Kudos
Altera_Forum
Honored Contributor II
585 Views

I think, the key point isn't the code example, but to understand the hardware interface provided in the Altera reference design and how the FFT data can be passed through the interface. First, you should check if it can be used unchanged for your DSP type.  

 

You can either write the interfacing DSP code from the scratch or port some or all of the existing code.
0 Kudos
Altera_Forum
Honored Contributor II
585 Views

So, just to clarify about what the example I am trying to run is, it consist of 2 parts: one part is for Altera board and the other one is for DSP board. 

I connect the boards through External Memory and Peripheral interfaces. 

What happens is: TI part does the IFFT processing and transfers data to the FPGA board, while FPGA board transfers the obtained data from D/A to A/D ports (via a cable connecting D/A to A/D directly), after which FPGA passes data back to DSP, which does the inverse of has been done in the very beginning. 

 

"to understand the hardware interface provided in the altera reference design and how the fft data can be passed through the interface. first, you should check if it can be used unchanged for your dsp type." 

^this is basically the problem. I do not know what reference can I check with. 

I have tried cheching if it can be used unchanged on my DSP type but it has not worked out. 

 

And, writing from scratch doesnt seem to be a good option for us since none have much experience with this type of task... 

 

Again, everything ends up in not knowing how to do it, and not knowing where to read up... Reading just plain TI manuals is not an option. And, the only book I have found on Amazon on practical TI applications has nothing about interfacing with external board. 

 

Thanks for answers and help 

Waiting for more options :)
0 Kudos
Altera_Forum
Honored Contributor II
585 Views

Unfortunately I'm neither familiar to any TI DSP nor plan a related project. I reviewed the cyclone ii fft co-processor reference design documentation (AN375) and took a look on the design files to understand your problem. It seems to me, that the interface is documented sufficiently. The access method from DSP side called edma may or may be not applicable for your DSP. I think, it's a good service from Altera design engineers to provide a complete reference design including the DSP code. As far as I understand, it's basically applicable for TMS320C6000 family, but there may be differences with your specific processor or due to changes of the TI design enviroment.

0 Kudos
Altera_Forum
Honored Contributor II
585 Views

Yes, I agree, that's why I suggest you to insist with your local TI support. The migration from one device to another in the same C6000 family should not be a big trouble.

0 Kudos
Altera_Forum
Honored Contributor II
585 Views

Thank you for spending time and checking the paper. 

And the code provided from Alera's side is good as well (this was the reason we decided to go for Altera's solution) 

As said earlier, I have done some rough modifications, like modified the DSP/BIOS config file, checked the gel file, but as soon as I try to build the example with the csl_c6455.lib library file, I am given the following (which is an error, but it doesnt guide me and I cannot understand much from it). 

May be someone who has some knowledge in Code Composer Studio could tell me,what it means: (I particularly dont understand the part with undefined symbol...) 

------------------------- fft_ping_pong.pjt - Debug ------------------------- "C:\CCStudio_v3.2\bios_5_21\xdctools\tconf" -b -Dconfig.importPath="C:/CCStudio_v3.2/bios_5_21/packages;" fft_ping_pong.tcf "C:\CCStudio_v3.2\C6000\cgtools\bin\cl6x" -g -q -fr"C:/Documents and Settings/Nik/My Documents/Research/TI6455_Quartus_documents/emif_ref_design_FFT/TI6455/Debug" -d"_DEBUG" -d"CHIP_6416" -mv6400+ -@"Debug.lkf" "edma.c" "C:\CCStudio_v3.2\C6000\cgtools\bin\cl6x" -g -q -fr"C:/Documents and Settings/Nik/My Documents/Research/TI6455_Quartus_documents/emif_ref_design_FFT/TI6455/Debug" -d"_DEBUG" -d"CHIP_6416" -mv6400+ -@"Debug.lkf" "fft_ping_pong.c" "C:\CCStudio_v3.2\C6000\cgtools\bin\cl6x" -g -q -fr"C:/Documents and Settings/Nik/My Documents/Research/TI6455_Quartus_documents/emif_ref_design_FFT/TI6455/Debug" -d"_DEBUG" -d"CHIP_6416" -mv6400+ -@"Debug.lkf" "sine_generator.c" "sine_generator.c", line 21: warning: variable "fs" was declared but never referenced "sine_generator.c", line 22: warning: variable "f" was declared but never referenced "C:\CCStudio_v3.2\C6000\cgtools\bin\cl6x" -g -q -fr"C:/Documents and Settings/Nik/My Documents/Research/TI6455_Quartus_documents/emif_ref_design_FFT/TI6455/Debug" -d"_DEBUG" -d"CHIP_6416" -mv6400+ -@"Debug.lkf" "fft_ping_pongcfg.s62" "C:\CCStudio_v3.2\C6000\cgtools\bin\cl6x" -g -q -fr"C:/Documents and Settings/Nik/My Documents/Research/TI6455_Quartus_documents/emif_ref_design_FFT/TI6455/Debug" -d"_DEBUG" -d"CHIP_6416" -mv6400+ -@"Debug.lkf" "fft_ping_pongcfg_c.c" "C:\CCStudio_v3.2\C6000\cgtools\bin\cl6x" -@"Debug.lkf" <Linking> undefined first referenced symbol in file --------- ---------------- _EDMA_intHook C:\\Documents and Settings\\Nik\\My Documents\\Research\\TI6455_Quartus_documents\\emif_ref_design_FFT\\TI6455\\Debug\\edma.obj _IRQ_clear C:\\Documents and Settings\\Nik\\My Documents\\Research\\TI6455_Quartus_documents\\emif_ref_design_FFT\\TI6455\\Debug\\fft_ping_pong.obj _IRQ_globalEnable C:\\Documents and Settings\\Nik\\My Documents\\Research\\TI6455_Quartus_documents\\emif_ref_design_FFT\\TI6455\\Debug\\fft_ping_pong.obj _CSL6416_LIB_ C:\\Documents and Settings\\Nik\\My Documents\\Research\\TI6455_Quartus_documents\\emif_ref_design_FFT\\TI6455\\Debug\\fft_ping_pong.obj __CSL_init C:\\Documents and Settings\\Nik\\My Documents\\Research\\TI6455_Quartus_documents\\emif_ref_design_FFT\\TI6455\\Debug\\fft_ping_pong.obj _IRQ_enable C:\\Documents and Settings\\Nik\\My Documents\\Research\\TI6455_Quartus_documents\\emif_ref_design_FFT\\TI6455\\Debug\\fft_ping_pong.obj _EDMA_intDispatcher C:\\Documents and Settings\\Nik\\My Documents\\Research\\TI6455_Quartus_documents\\emif_ref_design_FFT\\TI6455\\Debug\\fft_ping_pongcfg.obj >> error: symbol referencing errors - './Debug/fft_ping_pong.out' not built >> Compilation failure Build Complete, 2 Errors, 2 Warnings, 0 Remarks.
0 Kudos
Altera_Forum
Honored Contributor II
585 Views

You can see from the report that the problem is in the linker, most probably because of the memory initialization files that it is not able to find, I am not expert in Code Composer Studio but you may have a look at the Linker initialization to check if the IRQ (Interrupt ReQuest) table is correctly addressed by the Code Composer.

0 Kudos
Altera_Forum
Honored Contributor II
585 Views

Most of the missing functions are very general ones as IRQ_enable() or IRQ_clear(), defined e. g. in csl_irq.h, not related to EDMA specific functions. So I wonder how they can be missing? I would expect similar functions to be used in most embedded or DSP code. 

 

Also the EDMA (enhanced DMA) functionality is a general feature of C6000 family, the respective support should be present in your development enviroment as well. It could be, that different versions of code composer have different libraries or some functions renamed.
0 Kudos
Altera_Forum
Honored Contributor II
585 Views

Hello, yes, I have actually figured out THIS PARTICULAR problem (but still have greater problem). It was due to modifications introduced to the DSK6455.gel files which is responsible for memory mapping. 

The problem is that the program that runs on the DSP cannot properly transmit data to the Altera board through the EMIF interface. I have put many printf()'s and GEL_TextOut()'s throughout the program (to see where the program [stops/does nothing]) and the problem occurs due to the fact that the transmitted to EMIF packets should increment a certain counter to a certain value, which would further lead to successful finish of the program, but the counter is not incremented. 

 

I could post the source code as well (3 source files: 100, 200 and 250 lines approximately) if can be helpful, along with the output I am obtaining. 

 

Thank you everyone for helping out.
0 Kudos
Reply