S09 - myTeachingURJC/Arq-computadores-01 GitHub Wiki

Sesión de Teoría 9: Nivel de Electrónica Digital

  • Tiempo: 2h
  • Objetivos de la sesión:
    • Recordar cómo funciona la electrónica digital
    • Diferencias entre los circuitos combinacionales y secuenciales
    • Cálculo del retardo de un circuito
    • Frecuencia máxima de funcionamiento

Contenido

Introducción

Vamos a comprender cómo funciona un computador por dentro. Para concretar las ideas, utilizaremos el computador nanoRISC-V: es una versión reducida de un RISC-V de 64 bits, que tiene sólo 8 instrucciones. Dado que ahora nos metemos dentro del procesador, tendremos que recordar el pensamiento hardware y el funcionamiento de los circuitos digitales. En esta sesión haremos un repaso de los conceptos de electrónica digital necesarios, y de la notación usada para los esquemas. El objetivo es tener intuición sobre el funcionamiento del hardware a este nivel, centrándonos solo en las ideas que necesitaremos para las sesiones posteriores

Esquemas de circuitos digitales

En este tema nos meteremos dentro de los chips, para estudiar su hardware. En el mundo software se escriben programas, en un lenguaje de alto nivel. En el mundo hardware se dibujan esquemas. Para entender los diseños hardware repasaremos la notación utilizada para la creación de estos esquemas

Circuitos con puertas lógicas

Los circuitos hardware están formados por elementos interconectados mediante cables. Los cables los representamos mediante líneas y los elementos por símbolos que indican su función. Ya conoces algunos de estos símbolos de cuando estudiaste electrónica digital: Estas son las puertas lógicas AND, OR y NOT:

En estas puertas lógicas, las entradas están en la izquierda y la salida en la derecha. La AND y la OR del dibujo tiene 2 entradas y una salida, mientras que la NOT tiene una entrada y una salida. Este es un ejemplo de un circuito creado a partir de puertas lógicas, que tiene 2 entradas y 2 salidas

Representamos mediante un punto gordo la conexión de dos cables. Si dos cables se superponen pero no tienen este punto, significa que NO están conectados: son independientes. El circuito se ha construido mediante la unión de puertas lógicas. Los bits fluyen de izquierda a derecha, ya que las puertas lógicas tienen las entradas a la izquierda y las salidas a la derecha

Circuitos con bloques genéricos

Los elementos básicos son las puertas lógicas, que combinan y manipulan los bits, y los biestables, que almacenan bits. Con ellos construimos el resto de elementos. Representamos mediante un rectángulo a un circuito genérico, que en su interior estará formado bien por la unión de elementos básicos, o de elementos básicos con otros circuitos genéricos. Se utilizan flechas para indicar si la información sale del circuito o entra (si se trata de un pin de entrada o de salida)

En este dibujo se muestra un mismo circuito genérico de 4 entradas y 2 salidas, dibujado de diferentes formas. Los pines de acceso al bloque se pueden colocar en cualquier sitio, pero muchas veces situamos los de entrada a la izquierda y los de salida a la derecha. También el nombre asociado a cada pin se sitúa bien dentro del bloque, o bien en un rectángulo fuera del bloque, que representa el propio pin. Todas estas representaciones son equivalentes

Agrupando cables: Buses

Cada pin de acceso a los circuitos digitales transporta un bit de información. Para trabajar con números mayores, como por ejemplo 64-bits, necesitamos 64 cables. En el hardware real existirán esos 64 cables que salen del chip, sin embargo en el esquema lo simplificamos usando Buses. Dibujamos una única flecha gorda con una barra cruzada que indica el tamaño del BUS

En esta figura se muestra un circuito cuya salida a es de 64 bits. En la izquierda está dibujado el esquema utilizando los cables, desde el a0 hasta el a63. En la derecha está el mismo circuito que utilizando una salida de bus: Ahora la salida a es en realidad un número que tiene 64 bits. Nos ahorramos la necesidad de dibujar todos los cables. El circuito queda más compacto y limpio

Con los Buses trabajamos igual que con los cables de 1 bit. Los usamos para unir salidas de un bloque con las entradas de otro. Y también usamos el símbolo del punto gordo para conectar un bus a otro. El tamaño del bus se suele poner en varias partes del bus, para que no haya confusión

En esta figura vemos la salida a del circuito 1 conectada a las entradas b y c de los circuitos 2 y 3

Cables y etiquetas

Los cables y buses se utilizan constantemente en los circuitos para unir todos sus elementos. A medida que los diseños se hacen más complejos, el número de cables aumenta. Para hacer que los esquemas sean más legibles y estén más limpios, los cables y buses se pueden sustituir por etiquetas. Las etiquetas que tienen el mismo nombre significa que están unidas por un cable, pero no se dibuja

En esta figura el circuito 1 está unido a los circuitos 2 y 3 por dos cables, uno de bus y otro de 1 bit. Con el par de etiquetas Cable1 se ha sustituido el de bus, y con las etiquetas Cable2 el de un bit. Típicamente se suelen sustituir por etiquetas los cables más lejanos o los que den muchas vueltas. Es el diseñador el que elije dónde usar líneas y dónde etiquetas

Una salida de un circuito se puede conectar a una o más entradas de otros circuitos también usando etiquetas. En esta figura se muestra un esquema en el que la salida a del circuito 1 está conectada con las entradas b y c de los circuitos 2 y 3. Esta conexión también se puede realizar con etiquetas

y también con mezcla entre etiquetas y cables. Es el diseñador el que elige la opción que más le interese

Típicamente las entradas en los bloques genéricos las solemos poner en la izquierda, y las salidas en la derecha, igual que con las puertas lógicas. Cuando se conectan dos circuitos en anillo, la salida del circuito de la derecha se tiene que llevar hacia la izquierda para llegar a la entrada del circuito izquierdo

Esta señal que va hacia atrás (señal de feedback) se suele poner con etiquetas para que el esquema quede más limpio, como se muestra en la figura

Circuitos combinacionales y secuenciales

Los circuitos los dividimos en dos grandes grupos: los combinacionales y los secuenciales. Los primeros modifican los bits y los combinan para generar nuevos bits en la salida. Los secuenciales tiene la capacidad de almacenar información y generar salidas en función de lo que tienen almacenado

Funcionamiento de los circuitos combinacionales

Los circuitos combinacionales son los que sus salidas dependen exclusivamente de las entradas. En cuanto cambia una entrada, su salida se actualiza al cabo de un tiempo. El tiempo que tarda en actualizarse la salida se llama retardo, y lo expresaremos en nanosegundos (ns). Las puertas lógicas son circuitos combinaciones

En esta figura se muestra una puerta AND. Los bits llegan por sus entradas y se genera otro de salida como resultado de aplicar la operación AND entre ambos. La salida correcta está disponible al cabo de un tiempo: el retardo

En esta animación vemos lo que ocurre cuando cambia una de las entradas. Inicialmente las entradas de la AND están a 1 y 0, por lo que la salida es 0. El circuito es estable: las entradas no cambian y por tanto la salida tampoco. En un momento determinado su entrada inferior pasa de 0 a 1. Al cabo de un tiempo igual al retardo, la salida cambia a 1

No te dejes engañar por la simplicidad de la animación. Presta atención a este detalle: nada más cambiar la entrada de 0 a 1... ¿Cuánto vale la salida? ¡¡0!! Tenemos unos instantes de tiempo en los que por las entradas de una puerta AND llegan dos unos, pero su salida es cero! Si paramos el tiempo en ese instante, vemos que la tabla de verdad de la and NO SE CUMPLE

El resultado de esta AND sólo es VÁLIDO si ha transcurrido un tiempo igual al retardo. Transcurrido ese tiempo el valor será el correcto y lo podremos utilizar en otras partes de nuestro circuito. Pero si lo leemos ANTES, tendremos un resultado incorrecto: Nuestro circuito NO FUNCIONARÁ. Por eso el retardo es la clave para diseñar correctamente los circuitos y garantizar que funcionan

Salida estable y salida transitoria

En los circuitos combinacionales, en cuanto cambia una entrada, la salida se recalcula y se obtiene el resultado correcto al cabo de un tiempo igual al retardo. Decimos que una salida es estable, o que un circuito combinacional es estable cuando ha transcurrido un tiempo mayor o igual al retardo desde que se cambió alguna de las entradas

Decimos que una salida es transitoria cuando todavía no ha llegado el resultado final, y por tanto esa salida todavía NO es válida

  • Regla de diseño: Los resultados de los circuitos combinacionales sólo se pueden almacenar cuando sus salidas sean estables

Conexión en cadena

Cuando se conectan circuitos combinacionales en cadena, el retardo del nuevo circuito es igual a la suma de los retardos de los circuitos que forman la cadena. En este circuito de ejemplo se ha conectado una puerta NOT a la salida de la AND. Como la puerta AND tiene un retardo r1, y la NOT r2, el retardo total es de r1 + r2

Esto significa, que la salida del nuevo circuito NO es válida hasta que haya transcurrido un tiempo mayor o igual a r1+r2 desde que se cambió alguna entrada

Si partimos de esta circuito, cuando su salida es estable, y en el instante T0 se cambia una de las entradas a 1, durante el intervalo T0 < t < T0+r1 la salida de la puerta NOT no es válida, y por tanto la salida final del circuito tampoco es válida

A partir del instante t=T0+r1, la salida de la AND ya es válida, pero mientras que t < T0+r1+r2, la salida final NO será válida

Sólo a partir del instante t=T0+r1+r2 la salida final ya será estable, y por tanto válida

En esta animación se muestra el transitorio, desde que cambia la entrada hasta que se obtiene la salida válida

Camino crítico

Dentro de un circuito hay diferentes caminos que llevan desde las entradas a las salidas. Cada camino tendrá un retardo diferente, ya que atravesará diferentes componentes. Denominamos camino crítico al que tiene el retardo mayor

En esta figura se muestra un circuito combinacional con dos entradas y dos salidas. Las puertas AND tiene un retardo de 20ns, las NOT de 10ns y la OR de 25ns

En total hay 4 caminos posibles, que denotaremos por C1, C2, C3 y C4. El primero atraviesa una puerta AND y una NOT, por lo que su retardo será: C1 = 20 + 10 = 30ns. El segundo pasa por una AND, una NOT y una AND: C2 = 20 + 10 + 20 = 50ns. El tercero pasa por una AND, una OR y otra AND: C3 = 20 + 25 + 20 = 65ns. Y el último pasa por una NOT, una OR y una AND: C4 = 10 + 25 + 20 = 55ns

El que tiene mayor retardo es el C3, por tanto el camino crítico es C3. Su retardo será el que usemos para los cálculos: 65ns. Así, consideraremos que las salidas de este circuito son válidas cuando transcurran al menos 65ns desde que se cambió alguna entrada. Retardo del circuito: 65ns (Siempre será el del caso peor)

Funcionamiento de los circuitos secuenciales

Los circuitos secuenciales almacenan información en su interior. Sus salidas no sólo dependen de las entradas, sino también de la información que habían almacenado previamente (su estado)

Los circuitos secuenciales sólo funcionan cuando llega un flanco de subida del reloj (o de bajada, pero sólo en uno de los dos). En ese momento es cuando leen las entradas, capturan información del exterior y modifican sus salidas. Por tanto, estos circuitos NO CAMBIAN todo el rato, como pasaba con los combinaciones. Aunque cambie una entrada, su salida no cambia, hasta que no llegue un pulso del reloj (un latido del corazón)

En esta figura se muestra un circuito secuencial genérico que tiene tres entradas y dos salidas. Una de las entradas SIEMPRE es el reloj del sistema. Lo dibujamos en la parte superior izquierda. El pin lo llamamos clk, y en su derecha se suele colocar el símbolo ">"

Estos circuitos también tienen un retardo, pero sólo se aplica cuando llega el pulso de reloj, ya que antes las entradas no están activas, y aunque cambien, el circuito no las lee. Pero en el momento en el que llega el flanco de subida del reloj, comienza la actividad del circuito y al cabo de un tiempo igual al retardo las salidas se actualizan

El registro

Un registro es un circuito secuencial que almacena un número. El número llega a la entrada en cualquier momento, sin embargo sólo se captura en el registro cuando llega el flanco de subida del reloj. En esta figura se muestra un ejemplo de un registro de 64 bits. Tiene guardado el valor v1, por lo tanto por sus salidas sale ese valor v1

En esta animación se muestra el funcionamiento del registro. Inicialmente tiene el valor V1 almacenado, y es el que sale por tanto por su salida. En un momento determinado llega a la entrada otro valor V2. No se captura, sino que se queda esperando hasta que llegue un flanco de reloj. Al llegar el pulso de reloj se captura y al cabo de un retardo el nuevo valor se obtiene por la salida

Registro con entrada de escritura/load

Los registros almacenan el dato que llega por su entrada cada vez que aparece un flanco de subida del reloj. Por tanto, los registros están siempre capturando datos, a la velocidad marcada por el reloj del sistema

Cuando sólo se necesita capturar un dato en un determinado instante, y no todo el tiempo, los registros incluyen una entrada de control denominada write (o también load). Al llegar el pulso del reloj, si la señal de write está a 1 se realiza la captura. Y si está a 0 se ignora

En esta animación se muestra el funcionamiento. Partimos de un registro que tiene almacenado el valor 0. La entrada write está a 0. Llega el valor 15 por la entrada y un flanco de subida del reloj. Este valor NO se captura. Después se pone la señal de write a 1. Al llegar otro flanco de subida ya se captura el valor

Combinando un circuito secuencial con uno combinacional

Muchos de los circuitos se pueden realizar dividiéndolos en una parte secuencial, que almacena información sobre el estado del circuito, y una parte combinacional que realiza cambios en sobre esa información. Estos cambios se realimentan de nuevo hacia la parte secuencial, para recalcular el estado del circuito en el siguiente ciclo de reloj. Esta es la estructura general:

La señal de realimentación que une la parte combinacional con la secuencial la representaremos mediante la etiqueta Next. Para la señal de reloj utilizamos la etiqueta CLK, de color dorado. Este será el circuito de referencia:

Al utilizar la etiqueta para el reloj, ya no se suele incluir el propio circuito de reloj, suponiéndose que está en otra parte del esquema

Este es el funcionamiento del circuito de forma genérica. Se parte de un estado inicial, que denotamos por E0, que está almacenado en el circuito secuencial. El circuito combinacional lo transforma en el valor E1, que será el siguiente estado. Pero hasta no que no llegue el siguiente ciclo de reloj el valor E1 no será captura por el circuito secuencial. Si ha transcurrido un tiempo superior a r1+r2 desde el último pulso de reloj, el circuito será estable, con estos valores:

En animación se muestra el comportamiento de este circuito. En cada ciclo de reloj está actualizando el estado con un nuevo valor. Inicialmente se parte del estado E0 y el circuito combinacional obtiene el siguiente estado E1. Al llegar el siguiente flanco de reloj se captura este valor y se recalcula el siguiente: E2

En este cronograma se plasma el funcionamiento y se muestran todos los instantes de interés. En el punto 0 el sistema está en el estado inicial: su estado es E0 y el siguiente estado E1 está ya calculado, esperando en la entrada d. Es una situación estable

En el punto 1 llega el flanco de subida del reloj. El circuito combinacional se activa, lee la entrada y comienza su almacenamiento. Transcurrido un tiempo igual a r1, en el punto 2, se ha guardado en nuevo valor E1 y sale de forma estable por su salida q, llegando al circuito combinacional

En el punto 3 el circuito combinacional ha realizado el cálculo y ya está disponible el siguiente valor: E2, que llega a la entrada d. Ha transcurrido un tiempo igual a r1 + r2. A partir de este instante, en el punto 4, el sistema ya es estable. Todos los valores del circuito son estables y el sistema está listo para la llegada del siguiente flanco de reloj

Frecuencia máxima de funcionamiento

La frecuencia máxima de funcionamiento de estos circuitos con una parte secuencial y otra combinacional se calcula mediante la siguiente ecuación:

donde r1 es el retardo de la parte secuencial y r2 el de la combinacional

Ejemplo: Un contador hardware de 8 bits

Como ejemplo de circuito vamos a estudiar un contador hardware de 8 bits. El valor actual de la cuenta se almacena en un registro de 8 bits (circuito secuencial). La salida se lleva a un sumador de 8 bits (circuito combinacional) para obtener el siguiente valor de la cuenta, que se quedará a la espera de ser cargado en el registro en el siguiente ciclo de reloj. Este es el circuito

En esta animación vemos el funcionamiento del contador, cuando llegan dos pulsos de reloj tras el estado inicial

El contador vale 0 (tiene 0 almacenado en el registro). Cuando llega el pulso de reloj se captura el siguiente valor: 1. Este nuevo valor se guarda en el registro y se propaga. Al llegar al sumador se convierte en un 2 que se queda esperando en la entrada. Al llegar el siguiente ciclo de reloj se captura el dos, se propaga, se incrementa en el sumador y aparece un 3 que se queda esperando en la entrada del registro

Este contador funcionará bien siempre y cuando el tiempo entre un flanco y otro sea al menos de r1 + r2. Este es el valor que nos garantiza que el valor calculado es estable, y que se puede capturar con seguridad

Por tanto, la frecuencia máxima a la que puede funcionar este contador es de: 1 / (1ns + 9ns) = 1 / 10ns = 100Mhz. Si usamos una frecuencia mayor, la cuenta realizada no será correcta

Conclusiones

Ya tenemos la intuición de cómo funcionan los circuitos digitales, tanto combinacionales y secuenciales, y entendemos el factor principal que limita la frecuencia máxima de funcionamiento: el retardo. Y sabemos también cómo realizar los cálculos necesarios para obtener esta frecuencia máxima. Si se superan los límites de la frecuencia, habrá circuitos que generen datos inválidos. Por el contrario, si se trabaja por debajo de la frecuencia máxima los datos siempre serán válidos, pero el funcionamiento será más lento del que se podría obtener

Lecturas del libro de referencia

Libro de referencia: "Computer Organization and Design. Hardware/Software interface. Risc-V"

  • Apartado 4.1: Introduction (Pag 236-240)
  • Apartado 4.2: Logic Design Conventions (Pag 240-243)

Ejercicios

Ejercicios para practicar y asimilar los conceptos más importantes

Ejercicio 1

Tenemos el siguiente circuito:

  • a) Indicar qué tipo de circuito es: combinacional o secuencial
  • b) Indicar el número de entradas y salidas de 1 bit que tiene
  • c) Obtener todos los caminos posibles que van desde las entradas hacia las salidas, y calcular su retardo
  • d) Obtener el camino crítico
  • e) ¿Cual es el retardo de este circuito?
  • f) ¿Qué cambio sugerirías como ingeniero/a para mejorar el retardo de este circuito?

Ejercicio 2

Partimos del diseño del ejercicio 1. Para mejorarlo decidimos cambiar la puerta NOT2 por una similar a la NOT1, que es mucho más rápida. El circuito a nivel lógico es igual, pero los retardos se mejoran

  • a) Calcular el retardo del circuito al realizar ese cambio
  • b) Para mejorar el circuito todavía más, se decide cambiar la AND2 por otra similar a la AND1. Calcular el nuevo retardo

Ejercicio 3

Analiza este circuito:

  • a) ¿Qué tipo de circuito es? (combinacional/secuencial)
  • b) Calcular su frecuencia máxima de funcionamiento
  • c) Si inicialmente el registro tiene el valor 0, calcular el que tendrá transcurridos 5 ciclos
  • d) (Curiosidad) ¿Sabrías decir qué hace este circuito?

Ejercicio 4

Analiza este circuito:

  • a) Explica este circuito
  • b) Calcula su frecuencia máxima de funcionamiento
  • c) Si inicialmente el registro tiene el valor 0, ¿Cuantos ciclos de reloj transcurren hasta que valga 3?
  • d) Si el registro tiene el valor 3 y llega un flanco de reloj, ¿Cual es el nuevo valor del registro?
  • e) ¿Cuanto tiempo transcurre desde que vale 0, llega el primer ciclo de reloj y vuelve otra vez a cero?

Ejercicio 5

Analiza el siguiente circuito:

  • a) Explica este circuito
  • b) Calcula su frecuencia máxima de funcionamiento
  • b) Inicialmente el registro contiene el valor 0 y la señal cnt está a 0. Durante el tercer ciclo de reloj la señal cnt se pone 1, y se vuelve a poner a 0 en el cuarto ciclo, permaneciendo así indefinidamente. ¿Cuál será el valor del registro en el sexto ciclo de reloj?
  • c) Si la señal cnt está a 0 durante 3 ciclos de reloj, en el siguiente se pone 1, en los siguientes 3 a 0, luego otra vez a 1 y así sucesivamente... ¿A qué frecuencia funciona este contador?

Notas para el profesor

  • Título informal de la clase: "Hardware: Entrando en el lado oscuro..."
  • Cambiamos totalmente de tercio. Ahora no pensamos en software, sino en Hardware. Nuestras unidades mínimas de información son los bits
  • Los circuitos digitales transportan, manipulan y almacenan estos bits
  • Los diseñadores de hardware digital somos "Domadores de bits": Queremos que los bits sigan nuestras instrucciones....

Autores

Licencia

Créditos

Enlaces