The Harvard architecture is a computer architecture with separate storage and signal pathways for instructions and data. It is often contrasted with the von Neumann architecture, where program instructions and data share the same memory and pathways.

The term is often stated as having originated from the Harvard Mark I relay-based computer, which stored instructions on punched tape (24 bits wide) and data in electro-mechanical counters. These early machines had data storage entirely contained within the central processing unit, and provided no access to the instruction storage as data. Programs needed to be loaded by an operator; the processor could not initialize itself. However, in the only peer-reviewed published paper on the topic - The Myth of the Harvard Architecture published in the IEEE Annals of the History of Computing - the author demonstrates that: 

- 'The term “Harvard architecture” was coined decades later, in the context of microcontroller design' and only 'retrospectively applied to the Harvard machines and subsequently applied to RISC microprocessors with separated caches'

- 'The so-called “Harvard” and “von Neumann” architectures are often portrayed as a dichotomy, but the various devices labeled as the former have far more in common with the latter than they do with each other.'

- 'In short [the Harvard architecture] isn't an architecture and didn't derive from work at Harvard.'

Modern processors appear to the user to be systems with von Neumann architectures, with the program code stored in the same main memory as the data. For performance reasons, internally and largely invisible to the user, most designs have separate processor caches for the instructions and data, with separate pathways into the processor for each. This is one form of what is known as the modified Harvard architecture.

Harvard architecture is historically, and traditionally, split into two address spaces, but having three, i.e. two extra (and all accessed in each cycle) is also done, while rare.

Memory details
In a Harvard architecture, there is no need to make the two memories share characteristics. In particular, the word width, timing, implementation technology, and memory address structure can differ. In some systems, instructions for pre-programmed tasks can be stored in read-only memory while data memory generally requires read-write memory. In some systems, there is much more instruction memory than data memory so instruction addresses are wider than data addresses.

Contrast with von Neumann architectures

In a system with a pure von Neumann architecture, instructions and data are stored in the same memory, so instructions are fetched over the same data path used to fetch data. This means that a CPU cannot simultaneously read an instruction and read or write data from or to the memory. In a computer using the Harvard architecture, the CPU can both read an instruction and perform a data memory access at the same time, even without a cache. A Harvard architecture computer can thus be faster for a given circuit complexity because instruction fetches and data access do not contend for a single memory pathway.

Also, a Harvard architecture machine has distinct code and data address spaces: instruction address zero is not the same as data address zero. Instruction address zero might identify a twenty-four-bit value, while data address zero might indicate an eight-bit byte that is not part of that twenty-four-bit value.

Contrast with modified Harvard architecture

A modified Harvard architecture machine is very much like a Harvard architecture machine, but it relaxes the strict separation between instruction and data while still letting the CPU concurrently access two (or more) memory buses. The most common modification includes separate instruction and data caches backed by a common address space.  While the CPU executes from cache, it acts as a pure Harvard machine.  When accessing backing memory, it acts like a von Neumann machine (where code can be moved around like data, which is a powerful technique). This modification is widespread in modern processors, such as the ARM architecture, Power ISA and x86 processors.  It is sometimes loosely called a Harvard architecture, overlooking the  fact that it is actually "modified".

Another modification provides a pathway between the instruction memory (such as ROM or flash memory) and the CPU to allow words from the instruction memory to be treated as read-only data. This technique is used in some microcontrollers, including the Atmel AVR. This allows constant data, such as text strings or function tables, to be accessed without first having to be copied into data memory, preserving scarce (and power-hungry) data memory for read/write variables. Special machine language instructions are provided to read data from the instruction memory, or the instruction memory can be accessed using a peripheral interface. (This is distinct from instructions which themselves embed constant data, although for individual constants the two mechanisms can substitute for each other.)

Speed

In recent years, the speed of the CPU has grown many times in comparison to the access speed of the main memory. Care needs to be taken to reduce the number of times main memory is accessed in order to maintain performance. If, for instance, every instruction run in the CPU requires an access to memory, the computer gains nothing for increased CPU speed—a problem referred to as being memory bound.

It is possible to make extremely fast memory, but this is only practical for small amounts of memory for cost, power and signal routing reasons. The solution is to provide a small amount of very fast memory known as a CPU cache which holds recently accessed data. As long as the data that the CPU needs is in the cache, the performance is much higher than it is when the CPU has to get the data from the main memory. On the other side, however, it may still be limited to storing repetitive programs or data and still has a storage size limitation, and other potential problems associated with it.

Internal vs. external design 
Modern high performance CPU chip designs incorporate aspects of both Harvard and von Neumann architecture. In particular, the "split cache" version of the modified Harvard architecture is very common. CPU 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 formally divided into separate instruction and data sections, although it may well have separate memory controllers used for concurrent access to RAM, ROM and (NOR) flash memory.

Thus, while a von Neumann architecture is visible in some contexts, such as when data and code come through the same memory controller, the hardware implementation gains the efficiencies of the Harvard architecture for cache accesses and at least some main memory accesses.

In addition, CPUs often have write buffers which let CPUs proceed after writes to non-cached regions. The von Neumann nature of memory is then visible when instructions are written as data by the CPU and software must ensure that the caches (data and instruction) and write buffer are synchronized before trying to execute those just-written instructions.

Modern uses of the Harvard architecture
The principal advantage of the pure Harvard architecture—simultaneous access to more than one memory system—has been reduced by modified Harvard processors using modern CPU cache systems. Relatively pure Harvard architecture machines are used mostly in applications where trade-offs, like the cost and power savings from omitting caches, outweigh the programming penalties from featuring distinct code and data address spaces.

Digital signal processors (DSPs) generally execute small, highly optimized audio or video processing algorithms. They avoid caches because their behavior must be extremely reproducible. The difficulties of coping with multiple address spaces are of secondary concern to speed of execution. Consequently, some DSPs feature multiple data memories in distinct address spaces to facilitate SIMD and VLIW processing. Texas Instruments TMS320 C55x processors, for one example, feature multiple parallel data buses (two write, three read) and one instruction bus.
Microcontrollers are characterized by having small amounts of program (flash memory) and data (SRAM) memory, and take advantage of the Harvard architecture to speed processing by concurrent instruction and data access. The separate storage means the program and data memories may feature different bit widths, for example using 16-bit-wide instructions and 8-bit-wide data. They also mean that instruction prefetch can be performed in parallel with other activities. Examples include the PIC by Microchip Technology, Inc. and the AVR by Atmel Corp (now part of Microchip Technology).

Even in these cases, it is common to employ special instructions in order to access program memory as though it were data for read-only tables, or for reprogramming; those processors are modified Harvard architecture processors.

Notes

References

External links
 Harvard Architecture
 Harvard vs von Neumann Architectures
 Difference Between Harvard Architecture And Von Neumann Architecture

Computer architecture
Classes of computers
하버드 아키텍처(Harvard architecture)는 본래 명령용 버스와 데이터용 버스로 물리적으로 분할한 컴퓨터 아키텍처를 나타내는 용어이다. (폰 노이만 구조와 대비시킨 용어이기도 하다).

역사 
이 말은 하버드 마크 I(Harvard Mark I) 라는 릴레이 컴퓨터로부터 나온 것으로 이 머신은 명령을 천공 테이프에 메모리해 데이터를 릴레이의 ON/OFF 상태로 메모리했다. 이러한 초기의 머신에서는 메모리 영역이 지극히 작았기 때문에 CPU 내부에 모든 메모리 영역이 포함되어 있어 명령 메모리 영역을 데이터로서 취급할 수가 없었다(프로그래밍은 완전히 오프 라인의 작업이며, 프로그램의 내용을 컴퓨터 자신이 참조하거나 갱신하거나 하는 데에 이득이 없었다.).

폰 노이만 구조에서는 CPU는 메모리로부터 명령을 읽고, 메모리로부터 데이터를 읽고 쓰기도 한다. 명령과 데이터는 같은 신호 버스와 메모리를 사용하기 때문에 이러한 액세스하는 경우 동시에 발생할 수가 없다. 

하지만 하버드 아키텍처의 컴퓨터에서는 명령을 메모리로부터 읽는 것과 데이터를 메모리로부터 읽는 것을 동시에 할 수 있다. 하버드 아키텍처의 컴퓨터는 명령의 처리를 끝내자마자 다음의 명령을 읽어들일 수 있기 때문에 보다 더 빠른 속도를 낼 수 있다고 말할 수 있다. 그렇지만 이러한 처리 속도를 높이려면 보다 많은 전기 회로가 필요하다.

하버드 아키텍처의 부활 
최근에 CPU의 성능은 메모리의 속도와 비교해 크게 향상했다. 성능을 높이려면 주 메모리의 접근 횟수를 줄이는 노력이 필요하다. 명령을 처리할 때마다 주 메모리에 접근할 필요가 있다고 한다면 성능 향상은 전망할 수 없다. 이른바 메모리 속박 문제이다.

메모리는 속도가 올라가면 값이 비싸질 수 있다. 이를 해결하는 방법은 캐시로 불리는 작은 규모의 고속의 메모리를 준비하는 것이다. CPU는 필요로 하는 메모리의 내용이 캐시에 존재하면 성능이 향상된다. 하지만 반대로 필요한 메모리의 내용이 캐시에 없으면, 메모리로부터 캐시에 내용을 가져오는 것이다. 이 캐시의 조정이 컴퓨터의 설계로 중요한 관점이 되고 있다.

최신의 성능이 좋은 CPU 설계에서는 하버드와 폰 노이만 두 쪽 모두의 아키텍처를 도입하고 있다. 캐시 메모리 장치는 보통 명령용과 데이터용으로 분리되어 있다. 하버드 아키텍처는 CPU와 캐시의 관계에 활용되고 있다. 캐시에 오류가 일어나면 주 메모리로부터 데이터를 가져 오고, 명령 캐시나 데이터 캐시에 저장한다. 따라서, 폰 노이만 구조는 CPU 외부에 적용된다.

하버드 아키텍처는 특수한 디지털 신호 처리 프로세스에서 자주 쓰인다. 이를테면, 아날로그 디바이스의 블랙핀 프로세서는 하버드 아키텍처를 활용하고 있다.

또한 범용 마이크로 콘트롤러의 상당수는 하버드 아키텍처에 기반을 두고 있다. 마이크로칩 테크놀로지사의 PIC 마이크로 콘트롤러, ATMEL사의 AVR 마이크로 컨트롤러 등이 그 예이다. 이러한 프로세서는 프로그램과 데이터를 저장하는 작은 메모리를 내장하고 있는 것이 특징이다. 그리고 또 다른 이점으로는 프로그램 메모리와 데이터 메모리가 분리되어 있으므로 각자 다른 비트수를 사용할 수 있다는 것이다. 즉 AVR 프로세서의 경우 명령어는 대부분 16비트 1워드로 구성되어 있는데 비해 데이터는 모두 8비트로 처리한다. 그 때문에 RISC와 하버드 아키텍처를 활용해 1 머신 사이클로 1 명령을 실행할 수 있게 되는 것이다.

하버드 아키텍처는 이러한 장점이 있는 대신 단점도 존재한다. 프로그램 중에 데이터가 함께 혼합된 경우, 예를 들어 폰트 데이터나 표시할 문장 데이터, 메뉴 데이터 등은 프로그램과 함께 존재해야 하는데, 프로세서가 이러한 데이터를 읽어들이려고 시도하면 엄연히 '데이터'를 읽으려 하므로 데이터 메모리에서 이 내용을 찾으려 한다. 그런데 이 데이터들은 명령(프로그램) 메모리에 존재하기 때문에 명령(프로그램) 메모리로부터 데이터를 읽을 수 있는 특수 상황의 명령어가 필요하고, 더구나 명령(프로그램) 메모리와 데이터 메모리의 비트수가 다른 경우 주소를 변환하는 과정을 거쳐야 한다.

명령/ 데이터 분리 캐시 문제 
범용 마이크로 프로세서로 캐시 메모리 장치를 명령 캐시와 데이터 캐시를 분리했을 경우에 보다 성능이 좋은 write back형의 캐시를 사용하면 문제가 발생한다. write back형에는 캐시에 있는 내용을 CPU로 고쳐 썼을 경우에 그것을 주메모리에 동시에 써 되돌리지 말고 그대로 보관 유지해 두는 방식이다. 한편, 주 메모리도 동시에 고쳐 쓰는 캐시를 write through형 캐시라고 말한다. write back형 캐시는 그 캐시 라인을 다른 캐시 라인으로 옮겨놓을 때 주 메모리에 써 되돌리는지 CPU는 명시적으로 캐시 플래시를 지시했을 때에 주 메모리에 전체를 써 되돌린다.

특정 용도가 아닌 컴퓨터에서는 컴파일러를 사용하고 실행 파일을 만든다. 이때 실행 파일을 메모리 맵 파일로 하고 있으면, 명령 줄이 데이터 캐시에 남게 된다. 그러므로 컴파일한 뒤 바로 실행하면 명령 줄이 주 메모리에 써 되돌려지지 않은 경우에 실행이 실패할 가능성이 있다. 인터프리터와 컴파일러가 일체화하고 있는 일부의 고급 언어나 어떤 종류의 개발 환경을 제공하는 소프트웨어에서는 한층 더 현저하게 발생한다. 이러한 경우 컴파일 결과는 그 소프트웨어의 데이터 영역에 있고 있어 그 영역에 트리키인 수법으로 점프하는 것으로 실행하려고 한다. 이 또한 명령 줄이 메모리에 써 되돌려지지 않기 때문에 실행이 실패하는 일이 있다.

이것은 일부분 하버드 아키텍처에 일어나는 문제며, 본질적으로는 폰 노이만 구조이기 때문에 발생하는 문제이다.

참조 문서

같이 보기 
 폰 노이만 구조

컴퓨터 구조
하버드 대학교