Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Esta primera sesión del sirvió como presentación de los temas a estudiar a lo largo del curso. Así
mismo se presentó la forma de trabajo la cual sería de forma remota debido a las restricciones
provocadas por la pandemia global a causa del virus covid-19.
Si bien los procesadores ARM crearon sus bases en los años 80, no fueron aprovechados hasta la
llegada de los dispositivos móviles ya que estos dispositivos sacaban provecho de la eficiencia
energética a pesar de tener menor potencia de procesamiento.
Para poder hablar más a fondo de los procesadores basados en la arquitectura ARM es necesario
estudiar su set de instrucciones, y para poder hacerlo es indispensable repasar los conocimientos
relacionados con el lenguaje ensamblador y el diseño lógico. Por ello fueron propuestos los libros
de DIGITAL DESIGN AND COMPUTER A RCHITECTURE. ARM EDITION, SARAH L. HARRIS, DAVID MONEY
HARRIS, MORGAN KAUFMANN (ELSEVIER ) 2016 y P RINCIPLES OF COMPUTER A RCHITECTURE, MURDOCCA
M. J. ED. PRENTICE HALL, 2000.
Como último punto de esta sesión se habló de diseñar un procesador ARM al seleccionar un
conjunto básico de instrucciones, es decir, haciendo uso de estructuras como el Pipeline y el
paralelismo de instrucciones. Sin embargo, al no tener acceso al hardware necesario para llevar a
cabo la parte práctica, la mayoría de las temáticas del curso serían meramente teóricas.
Aprendimos sobre el modelo Von Neumann, en el cual se basa la arquitectura de la mayoría de las
computadoras actuales. El modelo Von Neumann consta de 5 componentes principales y las rutas
de control y de datos que las conectan.
1
RISC: Del inglés “Reduced Instruction Set Computer”
Fig. 1. Componentes De La Arquitectura Von Neumann
El bus del Sistema en realidad está constituido por tres buses: El bus de datos, el bus de
direcciones y el bus de control. Existe también de manera implícita un “bus de alimentación”.
Algunas arquitecturas tienen también un bus de Entradas y Salidas.
En esta sesión también se habló de los niveles de maquina o niveles de abstracción, los cuales van
desde el nivel usuario, el nivel de abstracción más alto, hasta el nivel de transistores, el nivel más
bajo. En este aspecto, el arquitecto de computadoras debe conocer las implicaciones del diseño de
computadoras en todos estos niveles, de manera que comprenda también las restricciones que
enfrenta.
La compatibilidad de código fuente, es la propiedad que consiste en que un programa debe ser
compatible con distintos tipos de máquina y para lograrlo el programa en cuestión debe estar
escrito en un lenguaje de alto nivel. La compatibilidad binaria, por otro lado se refiere a que el
código binario de un programa funciona correctamente sin modificaciones en otra máquina, para
lograr esto último se crearon las familias de procesadores, las cuales respetan las instrucciones de
modelos más viejos de manera que funcionen en procesadores más recientes.
2
ALU: Del inglés “Arithmetic Logic Unit”
3a sesión: Representación de Datos en la Computadora
En esta sesión se abordaron algunos de los tipos de datos utilizados para la representación de
números en una computadora. En particular se habló de los números con punto fijo ya que hay
aspectos importantes a considerar al momento de representar estos números en la computadora,
pues deben ser traducidos a código binario, lo cual aunque no resulta difícil, tampoco es trivial.
El sistema binario como sabemos solo utiliza los valores ‘0’ y ‘1’ y cada bit tiene un peso, es decir
cada dígito representado vale de acuerdo a su posición dentro del número representado. El peso
de los bits se mide de mayor a menor de derecha a izquierda creando los conceptos de MSB y LSB.
El rango se refiere a los valores máximo y mínimo que se puede representar y a los
números comprendidos dentro de ese intervalo. Cualquier número fuera de este rango no
puede ser representado. Si se intenta ocurre lo que llamamos overflow 3
La precisión se refiere al intervalo mínimo que debe existir entre dos números. Es decir,
cualquier número intermedio no puede ser representado.
3
Error que se produce cuando un programa no controla adecuadamente la cantidad de datos que se copian
sobre un área de memoria reservada para ello.
4a sesión: Números en punto flotante.
Durante esta sesión se abordó la representación de números en punto flotante. Los cuales son
números con una parte fraccionaria extensa. Se hizo hincapié en que para su representación en
código binario es necesario utilizar el estándar IEEE-754 el cual fue propuesto en 1985 para
resolver problemas de representación en las diversas implementaciones existentes del punto
flotante hasta ese momento.
Cuando las operaciones de punto flotante implican un redondeo se emplean formatos extendidos
para evitar que la perdida de precisión sea muy grande, pues uno de los objetivos de utilizar esta
representación es que los valores numéricos representados sean más precisos.
Es importante señalar que la norma IEEE-754 contempla ciertos casos especiales para la
“representación” de ciertos valores:
Si el valor del exponente se encuentra lleno con ‘1’s y la parte fraccionaria se llena con ‘0’s
la computadora interpretará este valor como +inf o –inf según el signo.
Si el exponente se encuentra lleno con ‘1’s pero al menos un bit de la parte fraccionaria es
diferente de ‘0’ la computadora interpretará el valor como NaN4
Si el valor del exponente se compone de ‘0’s y la parte fraccionaria también está
compuesta solo por ‘0’s el valor se interpreta como 0
Si el exponente es de ‘0’s y al menos un bit de la parte fraccionaria es diferente de ‘0’ se
tiene un “número denormalizado”
Se abordaron los conceptos de diseño de hardware, y de circuitos digitales, los cuales resultan
necesarios previo a realizar el análisis de la arquitectura de un procesador ARM.
En el diseño de circuitos digitales o circuitos lógicos existen dos principales categorías: Los
combinacionales y los secuenciales, a los cuales también llamamos “síncronos”. Durante esta
sesión se abordaron los conceptos que giran en torno al primer grupo
Los circuitos combinacionales tienen la particularidad de que sus salidas dependen exclusivamente
de las funciones de entrada dadas, por lo cual se puede analizar su comportamiento tan solo con
los valores presentes en su tabla de verdad.
El diseño de estos circuitos se puede realizar de manera modular, por ello su practicidad, para ello
se emplean expresiones funcionales que junto con el álgebra Booleana permite obtener
expresiones simplificadas para que la complejidad del circuito se mantenga en un nivel bajo, claro
que es esta misma simplicidad la que nos permite ir desarrollando módulos de una complejidad
mayor utilizando módulos más pequeños, como si se tratase de piezas de lego.
Algebra Booleana
Es una estructura algebraica empleada para esquematizar y simplificar las operaciones lógicas
presentes en un circuito. Tal como ocurre en el “algebra tradicional” existen axiomas y leyes que
se utilizan para realizar las reducciones lógicas. Entre los axiomas tenemos a la ley asociativa, la ley
conmutativa, la ley distributiva y la existencia de un neutro, todas ellas tanto para la suma como
para el producto.
En muchos circuitos lógicos existen condiciones de entrada que en realidad no especifican una
salida concreta, ya sea porque estos casos con frecuencia no se presentan o simplemente la salida
que producen es irrelevante. A estos casos se les llama “Condiciones de No importa”. En los
mapas de Karnaugh se representan con una X en lugar de ‘0’s o ‘1’s, esto quiere decir que el valor
de ese bit puede tomar cualquier de los dos valores posibles sin afectar la función y su salida.
Está matemáticamente comprobado que cualquier circuito lógico puede ser descrito utilizando
solo cierto tipo de compuertas: Las compuertas NAND o las compuertas NOR. Y aunque esto
incrementa un tanto la complejidad del circuito, resulta bastante eficiente en términos
energéticos. Esto es posible gracias a las compuertas AND y OR y los inversores lógicos, además de
las leyes de De Morgan que nos permiten realizar las reducciones necesarias.
5
Es un sistema de numeración binario en el que dos números consecutivos difieren solamente en uno de sus
dígitos.
Fig. 6 Operaciones lógicas implementadas con compuertas NAND
Un Mux o Multiplexor es un circuito Combinacional que cuenta con varios canales de entrada de
datos y una salida única, normalmente están representados con una figura de trapecio. Se utilizan
para seleccionar ciertas entradas en particular y generar una salida correspondiente a dichas
entradas, para ello se utilizan las llamadas “señales de control”.
Existen distintos tipos de multiplexores según el número de entradas que posean. Existen por
ejemplo multiplexores de 2, de 4, 8 y 16 entradas. La cantidad de líneas de control de cada uno de
ellos depende directamente del número de canales de entrada que posea. La relación es la
siguiente:
Número de entradas = 2n
Donde n es el número de líneas de control
Así por ejemplo si la cantidad de entradas fuese de 8, el número de líneas de control necesarias
sería para este mux sería 3. Es decir. 8 = 2 n, n = 3
Un circuito secuencial síncrono utiliza señales que afectan a los elementos de almacenamiento en
intervalos de tiempo discretos. Para ello se emplea un generador de reloj, el cual genera pulsos
con un periodo constante. Estos pulsos de reloj se distribuyen por el sistema de manera que los
elementos solo se vean afectados al llegar un pulso concreto.
Los circuitos secuenciales síncronos que utilizan pulsos de reloj en sus entradas se denominan
circuitos secuenciales con reloj y son los más utilizados debido a su alta estabilidad y a que son
fáciles de dividir en pasos discretos independientes.
En un circuito combinacional síncrono parte de sus salidas pueden ser retomadas como entradas
de manera que se formen trayectorias cíclicas. Esta operación resulta útil para generar elementos
de memoria que “recuerden” secuencias de entrada y los estados que atraviesa, sin embargo es
necesario diseñar estos circuitos cuidadosamente pues de lo contrario se volverán inestables.
Fig. 9 Estructura básica de un circuito secuencial.
Flip Flops
Los Flip flops o latches son un circuito electrónico con dos estados estables que pueden ser
utilizados para almacenar datos binarios. Estos circuitos pueden ser utilizados para cambiar el
estado de un circuito al aplicar una señal concreta a una entrada de control. Son los elementos
básicos de almacenamiento en la lógica secuencial.
Flip flop RS: Es un flip flop que en lugar de utilizar inversores utiliza compuertas “universales”
NAND con las cuales se puede manipular el estado del latch.
Flip flop D: Consiste en una mejora del latch tipo SR, para ello se agrega una entrada de disparo
especial la cual tiene como finalidad eliminar una entrada o condición no deseada.
Esta sesión del curso se utilizó exclusivamente para realizar la primera evaluación del curso.
Consisten en las temáticas de las 8 sesiones del curso.
Siguiendo con los circuitos secuenciales analizamos con más detalle el Flip flop tipo D. El cual como
se había mencionado cuenta con una entrada síncrona de datos comúnmente llamada entrada D.
Por otro lado la entrada del reloj denominada como CLK es asíncrona. Esta señal de reloj debe
tener un tiempo de activación bastante corto para poder disparar el flip flop. Los flip flop tipo D
suelen contar con una “indicador dinámico” el cual nos ayuda a diferenciar si el flip flop se activa
con ‘0’ o con ‘1’.
En el diagrama anterior podemos notar que la salida Q almacena un bit de información y no hay
intermediarios en esta señal. A esta señal se le llama “salida registrada” y no cambia hasta el
siguiente ciclo del reloj. Para generar la señal Q’ con frecuencia se debe utilizar un inversor y se
utiliza para retroalimentar la entrada del Flip flop. Así pues, un flip flop D copia la entrada D a la
salida Q en el momento de la subida del pulso del reloj y guarda su estado en los ciclos siguientes.
Normalmente también se integra una señal de “Reset” la cual al activarse pone el valor del flip flop
en cero. Esta señal es síncrona y tiene prioridad pro sobre las demás señales de este tipo.
Máquina de Moore
Una máquina de Moore es un autómata de estados finitos cuya salida depende exclusivamente de
su estado en el momento actual, y el estado siguiente se obtiene en función de su estado actual y
la entrada introducida para el siguiente pulso de reloj. Cuenta con una única salida.
Máquina de Mealy
Es un tipo de máquina de estados finitos que genera una salida basándose en su estado actual y
una entrada, en ese aspecto es similar a una máquina de Moore, salvo que la máquina de Mealy
siempre toma en cuenta el valor de la entrada, incluso para su estado inicial.
En esta sesión se profundizó en el diseño de FSM 6 discretas y se diseñó uno en particular que fuera
capaz de detectar el primer bit ‘0’ que ocurriera al transmitir cadenas de ‘1’s. El desarrollo de este
diseño se enuncia a continuación:
1. Se obtiene el diagrama de estados de manera que cumpla con las especificaciones. Cabe
señalar que esta es la parte del diseño que ocupa más tiempo pues se debe diseñar la
estructura del FSM y las reglas que deben de seguir para alcanzar el objetivo deseado.
Fig. 16 FSM diseñado para detectar el primer ‘0’ en una cadena de ‘1’s
2. Una vez que tenemos el diagrama procedemos a analizar el tipo de FSM que necesitamos
para implementarlo. En este caso se trata de una máquina de Mealy pues como se dijo en
la sesión anterior las salidas siempre dependen del estado presente y de una entrada
dada. Note que nuestra FSM es de 4 estados.
3. Ahora procedemos a dimensionar el diagrama de manera que conozcamos concretamente
el número de entradas y salidas, así como su transición entre todos sus estados. Para
nuestro diseño tenemos:
a. Una entrada
b. Una única salida
c. Cuatro estados diferentes, los cuales pueden abarcarse con dos señales, esto
debido a que cada señal puede tomar dos valores ‘0’ o ‘1’ y con ello generamos las
cuatro combinaciones necesarias.
6
FSM: Del inglés “finite state machine”
4. Diseñamos el circuito utilizando flip flops para el almacenamiento de información y la
retroalimentación de la FSM
A(t+1) = Da = A(t)x = Ax + Bx
B(t+1) = Db = A’(t)x = A’x
Donde (t+a) es el estado siguiente y (t) indica el estado actual.
7. Como último paso diagramamos el circuito lógico con sus compuertas y los flip flops tipo D
necesarios para su funcionamiento como máquina de Mealy