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.

EVM648 DDR2 adressing problem

Hi,

I have a strange behaviour on my EVM648 Board adressing DDR2 memory. On the board, 256MB of DDR2 memory are physically present - mapped to 0xE0000000...0xEFFFFFFF.

The problem can be reproduced without loading any software. I just write to memory in the 'watch' or 'view memory' window.

It seems that only the first 0x02000000 Bytes of DDR-RAM are adressed correctly. When I write for example to 0xE2000180, the value will not just be 'written' to this adress, also 0xE0000180, 0xE4000180, 0xE6000180 and so on will be set to the same value. It seems that the adressing 'rolls over' after 0x0200 0000 Bytes in DDR Ram.

Is this behaviour something I can configure somewhere or does it sound to you like a hardware bug?

best regards,

Thomas

  • just a follow up:

    it seems that this is the powerOn behaviour of the DSP/EVM-board. The DDR-Controller has to be configured in order to be able to adress the complete DDR-Ram. A prototype of this can be found in the .gel file shipped by Lyrtech (installed from a CD shipped with the EVM648 board) to Lyrtech\EVMDM648\gel\EVMDM648.gel -> Function Global_Default_Setup_Silent() -> Set_DDR2()

    I created something like a bootup-application that sets all the DDR/EMIF stuff and also the MUX-settings on the EVM board. I coped the Set_DDR2() to my bootup-application (I dont want to use .gel files...) and the initialization of DDR-Ram seems to work.

    best regards,

    Thomas

  • Hi Thomas,

    Sorry to jump in after you have answered your own question. I just wanted to add some insight into why you see what you are seeing...

    The GEL file is there to automate many of the configuration routines that allow CCS to properly load a project to the DSP. For example, when you first power on the DSP all the peripheral registers will be in a default state until reconfigured. If you attempt to write to external memory before the EMIF is configured to communicate to that specific device then the writes will fail. This means you either need to download a small configuration project to internal memory only (which programs all the necessary peripherals), or you do it by hand through the register window.

    Obviously neither of these choices are desirable, thus the GEL file comes into play. Note that you can program these necessary registers via the GEL file and then re-program them in your application code if desired.  Although the GEL is not required it is still very useful. I hope this helps shed some light into the issue.

  • Hi Tim, hi Brad,

    thanks for your answers. I didnt use the .gel File up to now. In my application, a DM648 is used on a PCI card running in a PC under Linux. In my production environment I dont have the possibility to use .gel, so I wanted to do everything 'manually' from start in order to see every problem as soon as possible... I have the feeling that the (quite big) Lyrtech .gel file hides the things a little from your eyes... If you develop a prototype using this .gel File, I think a lot of settings might get lost in the application. But maybe I'm wrong, maybe its better to start concentrating on the application and when everything is running move the .gel settings into the production environment... I'll try ;-)

    bye,

    Thomas

  • Thomas,

    If you're planning to use CCS to debug then I would at least have a minimal gel file that sets up the CCS memory map (i.e. the address range that the emulator is allowed to read/write).  Also, if you plan to actually load code at any point through CCS then you should have it invalidate the caches before the load (or reset the device first).

    Regarding your issue with only being able to write to the first 16MB of DDR2, how was that tested?  Specifically, what was doing the write?  The PCI?  Or did you load code into internal memory and have the DSP core access external memory?  There are various registers for the PCI which configure its mapping and how much memory it can address.  Perhaps one of those is setup incorrectly and that's what is limiting you.

    Brad