Saltar al contenido principal
LibreTexts Español

16.4: Microprocesadores

  • Page ID
    154459
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    Los primeros pioneros de la informática como Alan Turing y John Von Neumann postularon que para que un dispositivo informático fuera realmente útil, no solo tenía que ser capaz de generar salidas específicas según lo dictado por instrucciones programadas, sino que también tenía que poder escribir datos en la memoria, y poder actuar sobre esos datos más tarde. Tanto los pasos del programa como los datos procesados debían residir en un “pool” de memoria común, dando paso así a la etiqueta de la computadora del programa almacenado. La máquina teórica de Turing utilizó una cinta de acceso secuencial, que almacenaría datos para que un circuito de control los leyera, el circuito de control reescribía datos en la cinta y/o movía la cinta a una nueva posición para leer más datos. Las computadoras modernas utilizan dispositivos de memoria de acceso aleatorio en lugar de cintas de acceso secuencial para lograr esencialmente lo mismo, excepto con mayor capacidad.

    Una ilustración útil es la de la tecnología temprana de control automático de máquinas herramienta. Llamados de bucle abierto, o a veces simplemente NC (control numérico), estos sistemas de control dirigirían el movimiento de una máquina herramienta como un torno o un molino siguiendo instrucciones programadas como agujeros en cinta de papel. La cinta pasaría en una dirección a través de un mecanismo de “lectura”, y la máquina seguiría ciegamente las instrucciones de la cinta sin tener en cuenta ninguna otra condición. Si bien estos dispositivos eliminaban la carga de tener que tener un maquinista humano dirigiendo cada movimiento de la máquina herramienta, su utilidad era limitada. Debido a que la máquina era ciega al mundo real, solo siguiendo las instrucciones escritas en la cinta, no pudo compensar condiciones cambiantes como la expansión del metal o el desgaste de los mecanismos. Además, el programador de cintas tuvo que ser muy consciente de la secuencia de instrucciones previas en el programa de la máquina para evitar circunstancias molestas (como decirle a la máquina herramienta que mueva la broca lateralmente mientras aún está insertada en un agujero en la obra), ya que el dispositivo no tenía más memoria que la cinta en sí, que era de solo lectura. La actualización de un simple lector de cinta a un diseño de control de Estado Finito le dio al dispositivo una especie de memoria que podría usarse para realizar un seguimiento de lo que ya había hecho (a través de la retroalimentación de algunos de los bits de datos a los bits de dirección), por lo que al menos el programador podría decidir que el circuito recuerde “afirma” que el la máquina herramienta podría estar en (como “refrigerante encendido” o posición de la herramienta). No obstante, aún quedaba margen de mejora.

    El enfoque final es que el programa dé instrucciones que incluirían la escritura de nuevos datos en una memoria de lectura/escritura (RAM), que el programa podría recordar y procesar fácilmente. De esta manera, el sistema de control podría registrar lo que había hecho, y cualquier cambio en el proceso detectable por sensores, de la misma manera que un maquinista humano podría anotar notas o medidas en un rasguño para futuras referencias en su trabajo. Esto es lo que se conoce como CNC, o Control Numérico de Bucle Cerrado.

    Ingenieros e informáticos esperaban con ansias la posibilidad de construir dispositivos digitales que pudieran modificar su propia programación, de la misma manera que el cerebro humano adapta la fuerza de las conexiones interneuronales dependiendo de las experiencias ambientales (es por ello que la retención de memoria mejora con repetidos estudio, y el comportamiento se modifica a través de retroalimentación consecuente). Sólo si el programa de la computadora se almacenara en el mismo “pool” de memoria grabable como los datos, esto sería práctico. Es interesante señalar que la noción de un programa de auto-modificación todavía se considera a la vanguardia de la informática. La mayor parte de la programación informática se basa en secuencias de instrucciones bastante fijas, siendo un campo separado de datos la única información que se altera.

    Para facilitar el enfoque de programa almacenado, requerimos un dispositivo que sea mucho más complejo que el FSM simple, aunque se aplican muchos de los mismos principios. Primero, necesitamos memoria de lectura/escritura a la que se pueda acceder fácilmente: esto es bastante fácil de hacer. Los chips de RAM estáticos o dinámicos hacen bien el trabajo y son económicos. En segundo lugar, necesitamos alguna forma de lógica para procesar los datos almacenados en la memoria. Debido a que las funciones aritméticas estándar y booleanas son muy útiles, podemos usar una Unidad Lógica Aritmética (ALU) como el ejemplo de ROM de tabla de búsqueda explorado anteriormente. Por último, necesitamos un dispositivo que controle cómo y dónde fluyen los datos entre la memoria, la ALU y el mundo exterior. Esta llamada Unidad de Control es la pieza más misteriosa del rompecabezas hasta la fecha, estando compuesta por búferes de tres estados (para dirigir datos hacia y desde buses) y lógica de decodificación que interpreta ciertos códigos binarios como instrucciones a llevar a cabo. Las instrucciones de ejemplo podrían ser algo así como: “agregar el número almacenado en la dirección de memoria 0010 con el número almacenado en la dirección de memoria 1101", o, “determinar la paridad de los datos en la dirección de memoria 0111”. La elección de qué códigos binarios representan qué instrucciones para que la Unidad de Control decodifique es en gran parte arbitraria, así como la elección de qué códigos binarios usar para representar las letras del alfabeto en el estándar ASCII fue en gran medida arbitraria. ASCII, sin embargo, ahora es un estándar reconocido internacionalmente, mientras que los códigos de instrucciones de las unidades de control son casi siempre específicos del fabricante.

    Al juntar estos componentes (memoria de lectura/escritura, ALU y unidad de control) se obtiene un dispositivo digital que normalmente se llama procesador. Si se utiliza una memoria mínima, y todos los componentes necesarios están contenidos en un solo circuito integrado, se llama microprocesador. Cuando se combina con los circuitos necesarios de soporte de control de bus, se conoce como Unidad Central de Procesamiento, o CPU.

    La operación de la CPU se resume en el llamado ciclo de buscar/ejecución. Fetch significa leer una instrucción de la memoria para que la Unidad de Control la descodifique. Un pequeño contador binario en la CPU (conocido como contador de programa o puntero de instrucción) contiene el valor de dirección donde se almacena la siguiente instrucción en la memoria principal. La Unidad de Control envía este valor de dirección binaria a las líneas de dirección de la memoria principal, y la salida de datos de la memoria es leída por la Unidad de Control para enviarla a otro registro de retención. Si la instrucción obtenida requiere leer más datos de la memoria (por ejemplo, al sumar dos números juntos, tenemos que leer tanto los números que se van a agregar de la memoria principal o de alguna otra fuente), la Unidad de Control aborda adecuadamente la ubicación de los datos solicitados y dirige la salida de datos a los registros ALU. A continuación, la Unidad de Control ejecutaría la instrucción señalizando a la ALU que haga lo que se le solicite con los dos números, y dirigiría el resultado a otro registro llamado el acumulador. La instrucción ahora ha sido “buscada” y “ejecutada”, por lo que la Unidad de Control ahora incrementa el contador del programa para dar paso a la siguiente instrucción, y el ciclo se repite.

    TR.PNG

    Como se podría adivinar, llevar a cabo incluso instrucciones simples es un proceso tedioso. Son necesarios varios pasos para que la Unidad de Control complete los procedimientos matemáticos más simples. Esto es especialmente cierto para los procedimientos aritméticos como los exponentes, que implican ejecuciones repetidas (“iteraciones”) de funciones más simples. ¡Imagínese la gran cantidad de pasos necesarios dentro de la CPU para actualizar los bits de información para la visualización gráfica en un juego de simulador de vuelo! Lo único que hace que un proceso tan tedioso sea práctico es el hecho de que los circuitos de microprocesador son capaces de repetir el ciclo de buscar/ejecutar con gran velocidad.

    En algunos diseños de microprocesadores, hay programas mínimos almacenados dentro de una memoria ROM especial interna al dispositivo (llamada microcódigo) que manejan todos los subpasos necesarios para llevar a cabo operaciones matemáticas más complejas. De esta manera, solo se tiene que leer una sola instrucción de la RAM del programa para hacer la tarea, y el programador no tiene que lidiar con tratar de decirle al microprocesador cómo hacer cada paso de minuto. En esencia, es un procesador dentro de un procesador; un programa que se ejecuta dentro de un programa.


    This page titled 16.4: Microprocesadores is shared under a GNU Free Documentation License 1.3 license and was authored, remixed, and/or curated by Tony R. Kuphaldt (All About Circuits) via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.