Von Neumann Architecture
The von Neumann Architecture is named after the mathematician and early computer scientist John von Neumann. von Neumann machines have shared signals and memory for code and data. Thus, the program can be easily modified by itself since it is stored in read-write memory.
The name Harvard Architecture comes from the Harvard Mark I relay-based computer. The most obvious characteristic of the Harvard Architecture is that it has physically separate signals and storage for code and data memory. It is possible to access program memory and data memory simultaneously. Typically, code (or program) memory is read-only and data memory is read-write. Therefore, it is impossible for program contents to be modified by the program itself.
Modified Harvard Architecture
A pure Harvard architecture computer suffers from the disadvantage that distinct mechanisms must be provided to initialize instruction and data memory. Modern Harvard architecture machines often use a non-volatile technology for the instruction memory. This allows the computer to begin execution of a pre-loaded program as soon as power is applied. The data memory will initially be in an unknown state, so it is not possible to provide any kind of pre-defined data values to the program.
One solution is to provide a hardware pathway and machine language instructions so that the contents of the instruction memory can be read as data. Initial data values can then be copied from the instruction memory into the data memory when the program starts. If the data is not to be modified (for example, if it is a constant value, such as pi), it can be accessed by the running program directly from instruction memory without taking up space in data memory (which is often at a premium).
Some intelligent ‘C’ compilers will place the const variable in program memory and access them from program memory itself (you can observe this in map file by declaring variable with and without const datatype). Some compilers will have a copy of constant values in program memory and copy those values to initialize section of data memory after boot up where constants variable will be located and initialize the remaining location with ‘0’.
Modern high performance CPU chip designs incorporate aspects of both Harvard and von Neumann architecture. On-chip cache memory is divided into an instruction cache and a data cache. Harvard architecture is used as the CPU accesses the cache. In the case of a cache miss, however, the data is retrieved from the main memory, which is not divided into separate instruction and data sections. Thus, while Von Neumann architecture is presented to the programmer, the hardware implementation gains the efficiencies of the Harvard architecture.
Please give your comments.