# Arquitectura Von Neumann



## ciri (Jul 17, 2008)

Para aprender un poquito más del funcionamiento de los procesadores, creo que lo más fácil de entender es esta arquitectura, vamos a ver si puedo hacer una pequeña recompilación.


El esquema más elemental que se puede plantear (una arquitectura básica) es:



Los bloques son:
*I/O:* Dispositivos de entrada y salida son los dispositivos que permiten interactuar a la computadora con el mundo exterior. Este mundo exterior puede ser tanto humano o un proceso industrial.
*CPU:* Unidad central de proceso. Es donde se realizan las diversas operaciones.
*MEM:* Unidad de memoria. Donde se almacenan los programas que se han de ejecutar por la CPU, siendo tanto instrucciones o datos.



La unidad de memoria está formada por el *ADD, DEC, DATA, y la MEMORIA* en si (esos cuadritos, donde cada cuadrito es un lugar de la memoria con su dirección).
El registro *ADD:* es en donde de acuerdo a la cantidad de bits disponibles resultara la cantidad de posiciones de memoria que se podrán direccionar.
*DEC: *Es el que selecciona la celda correspondiente para trabajar, por lo que tendrá tantas salidas como combinaciones posibles con los bits almacenados en el registro *ADD*.
*DATA:*  La información que se puede transferir puede ser datos o instrucciones. Esta información se puede transportas a través del *DATA BUS*.
Para completar las operaciones estás los microcomandos *(uC)* que en este caso serán leer o escribir.

El *CPU* estará compuesto por la Unidad de Control *(UC)* y la Unidad de Aritmética y Lógica *(ALU)*.
Según el diagrama la *UC*, está constituida por, *PC, DIR, CO, y el SECUENCIADOR*.
*PC:* Es el contador de programa. Este registro almacena la dirección de la próxima instrucción a ejecutar y al mismo llega el microcomando *(uC)* conocido como +1, que incrementa en 1 el contenido del *PC*. En la arquitectura Von Neumann se permite que el programa pueda alterar el orden de ejecución de las instrucciones almacenadas ordenadamente en la memoria, esto sucede cuando se toma decisiones.
El registro de Instrucciones es el que conforma los campos *CO* (código de operación) y *DIR* (direcciones).
Esto significa que el *CO* nos indica que hacer y el *DIR* la dirección de memoria donde trabajar para leer o escribir un dato de ser necesario.
Con el *CO* ahora podemos comenzar a emitir las diversas ordenes que permiten cumplir con el cometido propuesto y para ello se deberán emitir una seria de microcomandos *(uC)* que requerirán un cierto orden temporal y una secuencia correcta, esta función la cumple el *SECUENCIADOR* el cual para poder realizar esta tarea con un determinado orden además recibe la información del reloj de la máquina *(CLK)*.
La *ALU* esta formada por, *STATUS, ACC, 2ºOP, 1ªOP*. La única operación que realiza la *ALU* es sumar y a través de ciertos procedimientos puede realizar otras tareas, como multiplicar sumando muchas veces.
Los registros *1ºOP y 2ªOP*, son los operando, donde se alojan los datos a tratar, que llegan mediante en *DATA BUS*. El resultado de la operación de los datos cargados en los operando *(1ºOP y 2ªOP)*, se cargan en el acumulador *(ACC)* y esta información puede obtenerse mediante el *DATA BUS*.
Muchas veces no interesa tanto el resultado en si mismo de *ACC* sino alguna característica particular (si es cero o no, si es positivo o negativo, si se desbordó su capacidad, etc). Estas informaciónes que son útiles para tomar decisiones se alojan en el registro de estos *(STATUS)* y de allí se transporta a la unidad de control por el *STATUS BUS*.

Por último el *I/O *son los dispositivos que permiten a la máquina interactuar con el mundo exterior, pudiendo ser, de solo entrada (teclado, mouse, micrófono), solo salida (monitor, impresora, motores) y entrada/salida (impresoras que escanean, cd regrabarles).


Para tener un poco más claras las cosas:
En microprocesadores, un registro es una porción de memoria ultrarrápida, de poca capacidad e integrado al microprocesador, que permite almacenar y acceder datos usados frecuentemente. Se emplean para aumentar la velocidad de ejecución de los programas.

La mayoría de las arquitecturas de computadora emplean registros, moviendo datos desde la memoria principal hacia los registros, se opera sobre éstos, y el resultado es movido nuevamente a la memoria principal.

Existen múltiples tipos de registros como ser:

* Registro de memoria: almacenan exclusivamente direcciones de memoria.

* Registro de datos: almacenan números enteros.

* Reigistro de propósito general (GPR o General Purpose Registers): permiten almacenar tanto datos como direcciones. La mayoría de las computadoras modernas emplean este tipo de registros.

* Registro de coma flotante: almacenan datos en formato de coma flotante. 

* Registro de constantes: almacenan datos constantes (que no se cambian).

* Registro de propósito específico: almacenan información específica sobre el estado del sistema, como el puntero de pila o el registro de estado.


_Fuente: Informática para Ingeniería Electrónica._


----------



## Fonsi (Mar 7, 2009)

Cordial saludo.....

olle lo que pasa tengo una duda acerca de un trabajo.La situacion es la siguiente. 
Tengo un microprocesador de 16 lineas de direcciones y bus de datos de 16 bits y me piden bloques de memoria en las posiciones: 0000H(8Kb x 16), A000H (16Kx8),B011H(2kx16) y en FC00H(8kx8); la pregunta es como puedo direccionar la memoria de 2kx16 si esta dentro del segundo bloque(16kx8) y si hay algun problema con el ultimo ya que el maximo de posiciones seria aprox 65mil entonces desde la posicion en la que me piden direccionar la memoria no habria suficientes posiciones de memoria......


Gracias..............................


----------



## boximil1 (Mar 7, 2009)

ciri , ahora lo leere tranquilo .
se que si busco en la web hay mil lugares donde explica el tema .
pero aqui lo tengo comodo, siempre quise ver cual era la diferencia entre la arquitectura del aleman ese y la de la escuelita yanky .
asi que gracias por ponerlo, lo leere.

EDIT: no e slo que esperaba, pero buen intento , buscare a ver que encuentro.

saludos


----------



## boximil1 (Mar 7, 2009)

bueno ciri , he dedicado un rato de tiempo y creo que consegui algo pero es parcial.

PIC >>> hardvard >>> 
CPU ---- memoria de datos
......-------memoria de programa 

2 buses distintos , por lo que e smas rapida en algunas cosas.


von newman  >>>> CPU ----- MEM (datos y programa) 

en fin , les adjunto lo que hice.

*como puse en azul me parece que algo me falta, ya que leo muchas veces que von newman es muy buena tambien.
si alguien puede completar la información vendria bien, y si alguien la puede organizar , mejor.*
por que no le cambias el titulo y pones von newman y hardvard explicacion , o algo asi ?


yo lo que hice fue separar asi:
el principio del archivo es explicaciones sencillas, amenas cortitas, con dibujos claros y contundentes.

luego mas abajo copie y pegue articulos interesantes para quien quera profundizar y usar tiempo en leer.

saludos


----------



## ciri (Mar 7, 2009)

El gran cambio que produjo Von Neumann....

"""En la arquitectura Von Neumann se permite que el programa pueda alterar el orden de ejecución de las instrucciones almacenadas ordenadamente en la memoria, esto sucede cuando se toma decisiones. """


----------



## boximil1 (Mar 7, 2009)

ciri dijo:
			
		

> El gran cambio que produjo Von Neumann....
> 
> """En la arquitectura Von Neumann se permite que el programa pueda alterar el orden de ejecución de las instrucciones almacenadas ordenadamente en la memoria, esto sucede cuando se toma decisiones. """



en sus inicios, por que hoy dia los pic y todos permiten eso , o no ?


----------



## ciri (Mar 7, 2009)

claro.. claro.. estamios hablando de la base de todo... y no solo lo permiten si no que tienen mas de uno de estos "sistemas" funcionando...


----------



## boximil1 (Mar 7, 2009)

hola, no solo me interesaba la base de todo , me interesaba tambien saber HOY DIA cual es la diferencia , veo que siempre hay disputa acerca de los PIC y los ARM .
supongo que ambos son muy buenos, mas popular el PIC pero dicen que /(en algunos aspectos) mas poderoso el ARM .

me gustaria saber cuales son las diferencias en conceptos muy sencillos:
lenguaje
estructura, en que afectan, velocidad, forma de trabajar.
leo que eso de que los PIC hay que decirle el BANK cada vez que se nombra un registro es un fastidio.
supongo que el ARM tendra sus cosas buenas y no tanto.

tambien creo que escuche que los PIC al llegar a un nivel determinado , no se si los de 16 o 32 bits o los dspic cambian a von neuman, no se si es asi o me parecio.


bueno......eso, desasnarnos en esos conceptos estructurales , sin hacer una pelea entre marcas, sino que entender conceptos en forma sencilla.


----------



## Eduardo (Mar 8, 2009)

boximil1 dijo:
			
		

> hola, no solo me interesaba la base de todo , me interesaba tambien saber HOY DIA cual es la diferencia ,


Vos habias escrito en el .DOC:
_NOTA: algo me huele raro, en los articulso de abajo pinta como que von newman es el mas usado, como que fue el mejor, y hay muchas marcas actuales que usan Von newman, asi que aun no he encontrado las ventajas ACTUALES de von newman frente a hardvard..pero las hay …….. _
La diferencia entre arquitecturas HOY DIA es la de siempre y es mas o menos lo que pusiste antes --> En arquitectura Von Neumann *se comparte* el bus datos con el bus de programa y en arquitectura Harvard *no se comparte*.

Al no compartir el bus, el nucleo de una arquitectura Harvard es mas sencillo y puede completar la instruccion en menos ciclos de reloj.
En cambio la arquitectura Von Neumann es mas flexible, porque podes leer codigo desde un dispositivo externo y despues ejecutarlo.
Esto seria con las arquitecturas 'puras' , porque algunos PIC te hacen engendros que llaman "Modified Harvard" que es Harvard con ligero aroma a Von Neumann.



> veo que siempre hay disputa acerca de los PIC y los ARM .
> supongo que ambos son muy buenos, mas popular el PIC pero dicen que /(en algunos aspectos) mas poderoso el ARM .
> me gustaria saber cuales son las diferencias en conceptos muy sencillos:
> lenguaje, estructura, en que afectan, velocidad, forma de trabajar.
> ...


Esa disputa es una huevada. Para cada aplicacion se necesitan siempre recursos que no los tiene 1 microcontrolador, los tienen varios y de distintos fabricantes.   Cual sera el mejor? --> pues el que *uno* conozca mejor --> programacion mas rapida y menos tiempo debugeando.

La "desventaja" del PIC es su codigo de instrucciones, lo pongo entre comillas porque el PIC es precisamente una arquitectura RISC (Reduced Instruction Set Computer). Y la filosofia del RISC es justamente *instrucciones elementales que se ejecuten en un ciclo de reloj*.  
En contraste con la CISC (Complex Instruction Set Computer), que son instrucciones mas complejas internamente, compuestas por varias instrucciones elementales.
En teoria, un programa podra optimizarse mas con un RISC que con un CISC (solo que dependemos del compilador)

Logicamente programar un RISC puro en assembler es un clavo de aquellos, lo que pasa es que esa arquitectura es para programar en C u otro lenguaje de medio/alto nivel *y que sea el compilador el que se encargue de optimizar*

Claro que la realidad es que los compiladores no optimizan mucho que digamos y te linkean con librerias que no les usas ni el 10% --> Resultado: Aunque el programa sea sencillo, si el microcontrolador tiene poca memoria, no entra.

Los AVR en cambio, dicen ser "Advanced RISC" --> tienen instrucciones mas potentes y es mas aliviada la programacion en assembler.  En realidad, si se le mira el set de instrucciones,  es CISC  de aca a la China.



> tambien creo que escuche que los PIC al llegar a un nivel determinado , no se si los de 16 o 32 bits o los dspic cambian a von neuman, no se si es asi o me parecio.


Te permiten mezclar programa y datos, pero no es Von Neumann 100%.


----------



## boximil1 (Mar 8, 2009)

gracias eduardo por meterte y ayudar a comprender el tema.

por lo visto estan entonces *2 PUNTOS*  al parecer destacables a la vista de un posible usuario que quiere comprender un poco el asunto:
LA ARQUITECTURA
y EL LENGUAJE de programacion, o el tipo de lenguaje.

ahora bien (y pregunto yo) 
si el RISC tiene la caracteristica de ser un set de instrucciones sencillo y cortito, (( no hay que saber muchisimas instrucciones ))) eso es una conveniencia para programas pequeños o de cosas faciles.
pero para cosas mas complejas es una dificultad  !
ahora mi pregunta:
hoy dia en el cual ya no hay escases de recursos, cualquier PIC dispone de suficiente memoria de programa y RAM , se puede usar lenguajes como el C aunque se dessperdicie algo de memoria (por no ser optimizado).

el C es mas poderoso que el SISC , no ?

me refiero a que si estamos hablando de chips que soportan lenguajes de un nivel mayor que el asembler en sus versiones RISC o SISC , entonces ya no importa si la base es SISC o RISC ..............no ?

para cosas sencillas o no tanto imagino que el RISC es una buena opcion , y para complejas se usa C y un PIC *18 *


.
.
. es asi ? 
o hay cosas que los ARM crean diferencias en su estructura y mantienen esas diferencias a pesar de que crezcan en recursos ?


----------



## Eduardo (Mar 8, 2009)

boximil1 dijo:
			
		

> ...ahora bien (y pregunto yo)
> si el RISC tiene la caracteristica de ser un set de instrucciones sencillo y cortito, (( no hay que saber muchisimas instrucciones ))) eso es una conveniencia para programas pequeños o de cosas faciles.
> pero para cosas mas complejas es una dificultad  !


Que una ventaja de un procesador RISC sea "pocas instrucciones para aprender" es una falacia usada por Microchip. Es un viejo argumento de venta: Antes que el cliente note una desventaja se la presenta como ventaja.

Son pocas instrucciones... pero como son elementales el codigo escrito es mas largo y criptico, con mas probabilidades de cometer errores y mayor dificultad para encontrarlos. Claro... vas a renegar menos con programas cortos.

Vaya a saber uno que estrategia tenia en mente Microchip en los comienzos... porque no siguio la linea del resto de los microcontroladores?




> ahora mi pregunta:
> hoy dia en el cual ya no hay escases de recursos, cualquier PIC dispone de suficiente memoria de programa y RAM , se puede usar lenguajes como el C aunque se dessperdicie algo de memoria (por no ser optimizado).


Y si... porque no ?



> el C es mas poderoso que el SISC , no ?
> me refiero a que si estamos hablando de chips que soportan lenguajes de un nivel mayor que el asembler en sus versiones RISC o SISC , entonces ya no importa si la base es SISC o RISC ..............no ?


RISC y CISC no tienen nada que ver con el lenguaje de programacion usado. Estan referidos a como se procesan las instrucciones de maquina. En un caso son instrucciones elementales y en el otro "no tan" elementales internamente descompuestas en elementales.

No importa cual sea el set de instrucciones de un microcontrolador vos lo 'podrias' programar en el lenguaje que quieras... Siempre y cuando consigas el compilador apropiado y un entorno de programacion que le explote el hardware ;-)
Pero para microcontroladores no hay mucho que elegir --> C o assembler y tal vez los Parallax que traen un interprete Basic en ROM. Desconozco de algun otro.



> para cosas sencillas o no tanto imagino que el RISC es una buena opcion , y para complejas se usa C y un PIC *18 *.
> es asi ?  o hay cosas que los ARM crean diferencias en su estructura y mantienen esas diferencias a pesar de que crezcan en recursos ?


Eso seria una primera aproximacion. Si bien programar en assembler un PIC es bastante mas engorroso que un AVR, tampoco es la muerte.

Ha casos donde es mejor mezclar.  Si un evento rapido te entra por interrupcion tenes que:
 leerlo->interpretarlo->ejecutar_una_accion->volver_a_donde_estabas.

Eso escrito en C dificilmente sea tan rapido como 'a mano' en assembler (se supone que el programador no es un nabo) con lo que estarias tirando abajo la capacidad de respuesta de tu sistema, y si estas medio al limite y perdes eventos se pudre todo (como en el caso posicionamiento con encoders incrementales)

Se debe reprogramar todo en assembler? --> No, solamente las rutinas con velocidad de respuesta critica. El resto se mantiene en C.


----------



## Chico3001 (Mar 9, 2009)

Duda dudosa... Boximil habla de ARM, Eduardo de AVR y creo que estan mezclando peras con manzanas

AVR es un microntrolador de Atmel de 8 bits que compite directamente con los PIC, su set de instrucciones es reducido (RISC), pero no tan reducido como en un PIC

ARM es un microprocesador de 32 bits que se manufactura por varios fabricantes, pero el core (nucleo del microprocesador) esta diseñado por la empresa ARM, seria un competidor directo con micros como DsPIC, PIC32, AVR32, o iMX de Freescale, tambien tiene un set de instrucciones reducido pero es mucho mas amplio que un AVR o PIC


----------



## Eduardo (Mar 9, 2009)

Como hablo de "la disputa" supuse que se habia confundido con el nombre.   Si no fue asi, eso resulto una conversacion entre locos.


----------



## boximil1 (Mar 9, 2009)

ARM...AVR........
no sabia la diferencia  ops: 
y no fue discusion de locos por que al saltar se me aclaro , las explicaciones de ambos sirven.

no sabia que el ARM por como era (32 bits) compite con lso otros a ese nivel, ahi se aclaran cosas.

saludos  y gracias , sigo copiando y pegando y armandome un archivo del tema


----------



## Chico3001 (Mar 9, 2009)

Tampoco creo que haya sido conversacion de locos, solo fue un problema de confusion de nombres como dice eduardo 

Mas bien quise aclararlo para las personas que solo entran a leer el tema y no preguntan...


----------



## LxL (Jun 9, 2011)

Estoy diseñando un procesador en un curso d la carrera, y me gustaria inclinarme por la arquitecta Von Von Neumann, pero no se como diseñar el circuito para que se identifique cuando sale una instruccion o un dato de la memoria. Esa seria mi duda...


----------



## Eduardo (Jun 9, 2011)

LxL dijo:


> Estoy diseñando un procesador en un curso d la carrera, y me gustaria inclinarme por la arquitecta Von Von Neumann, pero no se como diseñar el circuito para que se identifique cuando sale una instruccion o un dato de la memoria. Esa seria mi duda...


 Es decir, del diseño todavía no hiciste nada.

Los pasos que sigue la CPU son estos 
Primero tenés que diseñar una circuiteria que administre las señales de control en todo el hardware asociado.
Después está todo el hardware asociado a las funciones a realizar, su decodificación, administración y ejecución se te puede llegar a poner bastaaaaaante complicado si te ponés en ambicioso.


----------



## LxL (Jun 9, 2011)

Si! Bueno ya tenemos todo listo, solo nos faltan interrupciones, pero la tenemos en arquitectura  Harvard... Pero el profe nos dijo que nos daría una buena curva si lográbamos montar la d Von Neumann.


----------



## Chico3001 (Jun 9, 2011)

La Von Neumann es mucho mas simple que la Hardvard

http://es.wikipedia.org/wiki/Arquitectura_de_von_Neumann


----------

