Hi all, I'm currenlty gettting into embedded system architecture and would like to know where can I find any kind of tutorial/articles/lecture notes regarding the "art" of selecting the memory for my design I.E. what kind of memory to use SDRAM , SRAM ,FLASH ,EEPROM and where to use it. another thing I'm looking for is stuff on the subject of memory mapping I.E. how to arrange the different memories , peripherals etc. I hope you guys will be able to help me with those. Thanks in advance , Mordehay.
I'm not sure if there are any articles, for the simple reason one size never fits all in the embedded space (if anywhere at all).
Just what memories you need depends on the system, the processor you use, the code / data requirements etc.
There are many systems with no external memory (where external means a separate chip from the processor) and there are some with huge amounts of all the types you list.
To determine the type and amount you need, you first need a requirement and know what processor you are going to use. The processor decision is usually driven in part by the memory requirement, too. I usually decide what the processor is going to be (based on all the requirements - performance, integrated options, memory overall requirements), but the processor decision is not simply driven by the performance requirement. It's various built-in interfaces (if they exist) are a large part of the decision.
Different processors support differing types of memory directly, which impacts the decision, and differing system requirements will vary what is necessary.
So there is no silver bullet for this, nor can it be reduced to an equation - that's why we have designers :)
I have personally designed systems from controller only (no external memory) to boards with a SoC [multiple cores], 3 independent DDR memory systems, large amounts of flash (some for FPGA loading, some for boot), lots of serial eeprom and even some SRAM on board (on a single board) and most things in between.
So - set a requirement for what your board must do, and go from there.
The types of memories that you mentioned, SDRAM, SRAM, FLASH, and EEPROM, all have certain features that make them an advantage or dis-advantage in certain situations. For example, SDRAM will be fast and high density per dollar, but it requires a refresh circuit which isn't necessarilly feasible on an embedded application. Therefore, SRAM is often times use instead as it doesn't require this, but it is a bit slower (70ns is typical I think) and slightly more expensive. The last time I looked, a 256K x 16 SRAM chip on digikey was about $4 for one device, which for most embedded systems, unless you call pentium computers running windows an embedded system, which I don't, is a lot of memory. Flash, on the other hand is non volatile, fairly high density and is reprogrammable, often times used as ROM while EEPROM is also nonvolatile, but fairly low density and speed.
The choice of which type of memory you select depends on the goal of the application and a typical system will likely have multiple form of memory in it.