En el
mundo de las computadoras existen dos vías de aproximación a cómo se relacionan
las CPUs con las instrucciones y los datos.
El primer
procedimiento consiste en separar ambas informaciones, las cuales usan buses
distintos, pudiendo en ese caso acceder simultáneamente la CPU a ambas. Este
diseño recibe el nombre de arquitectura Harvard, por la computadora Harvard
Mk.1 que fue la primera en implementarlo.
Si bien en principio es el sistema más rápido, tiene varios inconvenientes: la frecuencia de actividad en ambos buses debe ser aproximadamente idéntica para optimizar el rendimiento, y las instrucciones suelen estar almacenadas en formatos de difícil modificación, además de ser los programas casi incapaces de adaptar su funcionamiento a cambios internos o externos en su estado. No obstante, en una versión modificada, es la arquitectura primaria de todos aquellos componentes electrónicos e informáticos que precisan de realizar con rapidez y eficacia tareas siempre similares, como por ejemplo las videocámaras digitales, las tarjetas de sonido de los ordenadores, unidades de memoria cache, etc.
La lógica más extendida en el diseño de CPUs para computadoras, por contra, considera tanto a los datos como a las instrucciones una misma cosa (las instrucciones, los programas, no dejan de ser datos almacenables), por lo que comparten un único bus para su transmisión y un único espacio de almacenamiento.
Esta
aproximación recibe el nombre de arquitectura Princeton o Von Neumann, por ser
el matemático John von Neumann, entre otros, el primer proponente de la misma.
Al estar ambos grupos de información limitados a una única vía de contacto con
la CPU, ésta no puede actuar simultáneamente sobre ambos, con el resultado de
ser cualquier proceso, teóricamente, más lento siempre que para un procesador
Hardvard de similares prestaciones; peor aún, con el incremento de las
velocidades de los procesadores muy por encima de las de los buses de memoria,
la capacidad de una máquina con arquitectura Von Neumann se ve constreñida por
un "cuello de botella" (bottleneck). A cambio, la versatilidad del
concepto de integración de instrucciones y datos permite no sólo que se puedan
realizar mayor variedad de tareas, sino también que los programas puedan
adaptarse y "cambiar" a medida que van avanzando en su ejecución.