Anyone using external SRAM on the Delfino using XINTF?
How is speed and and any design things we should know. We have to add more SRAM, another product to suggest?
thanks,
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.
Anyone using external SRAM on the Delfino using XINTF?
How is speed and and any design things we should know. We have to add more SRAM, another product to suggest?
thanks,
Hello Zenman,
Not much to say here. The XINTF timings are provided in the device datasheet (you don't say which device you are using, but look in the latest datasheet). The XINTF is a conventional asynchronous interface, with a user selectable 16- or 32-bit data bus. Here is a basic connection for 16-bit mode:
and here for 32-bit mode using dual 16-bit ASRAMs:
For the 150 MHz F2833x/2823x devices, I recall that 10 and 12 ns ASRAMs both yield the same performance. In other words, no point in spending more for a 10 ns device. But, run the timings yourself using the datasheet to confirm my statement. You'll typically end up with a 4 cycle access (read or write) for a 10 or 12 ns SRAMs:
Obviously, using the XINTF in 32-bit mode will double your throughput.
The ASRAM vendor and choice is up to you. Any conventional ASRAM should work.
Regards,
David
Thanks David,
Of course we would be using the ole 300 MHz TMS320C28346. I am running code and data from RAM, loading from FLASH.
So I was looking at using 2 1Mx 16 SRAMs. That is 32 Mbit, maybe overkill but largest case.
I am a software guy, dictating to a hardware guy, trying to stay on C2000 for as long as possible, for some larger stuff now. That guy needs to be calmed down a little.
The assumption is accessing this external RAM will be 4 x as slow as internal SARAM?
So most will use code in internal SARAM and less accessed data in external?
Have you heard of those running code in that space?
thanks
Zenman,
zenman said:The assumption is accessing this external RAM will be 4 x as slow as internal SARAM?
I haven't run the numbers for a 300 MHz C28346, but I suspect an external access at 300 MHz will take about 6+ cycles (it takes 4 cycles on a 150 MHz F28335). You can run the timing numbers using the timings provided in the device datasheet.
zenman said:So most will use code in internal SARAM and less accessed data in external?
People manage the external RAM use in different ways. Absolutely, you want critical code to execute from on-chip RAM, and stick initialization type code external. For data, yes you'd start out with less used data external. But there are also sometimes tricks you can pull to speed things up. Suppose you had an array of 16-bit values that you needed to access from external RAM. Since you are using a 32-bit external memory configuration, you will be better off accessing two 16-bit values at a time as a single 32-bit value. This way, you will only need one access to the external RAM instead of two. You would need to be particular about how you write your code in order to do this.
I'd stick the stack in internal RAM. The stack is frequently used by all your C functions.
zenman said:Have you heard of those running code in that space?
People do what they need to do. There is no reason why you cannot run code from the external RAM. It will just run slow. If that works in your system, then you're good to go.
It will take you some trial and error on the memory mapping to get things tuned up optimally for your application.
Regards,
David
Thanks,
I think I understand now,
Time to do the board spin and get the hardware guy on board and lose a lot of pins. ) Goodbye all those cool interfaces.
I might even throw another parallel interface device on there.
Of course now I am stretching the topic.
My Code is C++. I can write my own malloc to allocate memory from ZONE7 (just a memory counter).
How can I do a "new" class command to get memory from ZONE7 rather from the heap in general. probably one of those #pragma DATA_SECTION commands.
Or do a (malloc) with the size of the class I am creating.
Is there a TI trick for this?