Hola de nuevo.
Los cinco bloques que constituyen nuestro procesador sencillo, you han sido
implementados y también hemos realizado sus correspondientes modelos VHDL.
Ahora para completar nuestro diseño, falta ensamblar
estos cinco bloques y añadirles la unidad o bloque de control.
Para poder realizar esta unidad o bloque de control antes de proceder al ensamblado
de los bloques, debemos escoger como será la codificación de las instrucciones.
Hasta ahora, hemos utilizado nombres como el assign value,
el data input y así sucesivamente, para identificar las instrucciones.
Y también nombres específicos como el índice k,
el valor n o el valor A para indicar los parámetros de estas instrucciones.
Obviamente, para implementar el circuito, estos nombres a menudo
llamados nemónicos deben codificarse bajo la forma de vectores binarios.
Y esta tabla que tenemos aquí describe una
posible codificación binaria de las instrucciones.
Vemos los bits, los cuatro primeros bits del C15 al C12 codifican
el nombre de la instrucción, así como la operación si es una suma o una resta.
En el caso de que se trate de una operación de una instrucción de operation.
Los 12 bits restantes, del C11
al C0 son necesarios para codificar los parámetros de las instrucciones.
Veamos algunos ejemplos.
En el caso de la instrucción operation, como parámetros hay tres índices,
el i, el j, y el k.
Estos índices hacen referencia a registros del banco de registros.
Hemos dicho que había 16 registros distintos en el banco de registros.
Luego cada uno de éstos índices necesitará cuatro bits para
poder direccionar cada uno de los 16 registros del banco de registros.
En una instrucción del tipo assign value como esta de aquí.
Hay dos parámetros, un número A que está codificado
en estos ocho bits que tenemos aquí del C11 al
C4 y un índice k este de aquí,
que está codificado con cuatro bits del C3 al C0.
Y así iríamos procediendo con esta codificación de las instrucciones.
La codificación se ha escogido de tal forma, que la generación posterior
de señales de control sea fácil, esto lo iremos viendo más adelante.
Recordemos que en una lección previa, habíamos calculado el
número mínimo de bits para codificar todas nuestras posibles instrucciones.
Y habíamos dicho que el número mínimo de bits era 15 bits.
Ahora en cambio, la codificación que proponemos que
facilitará considerablemente la generación de señales de control tiene un bit más,
es decir hemos pasado de los 15 mínimos imprescindibles a 16 bits.
En las próximas transparencias, veremos que este pequeño incremento de
un bit para codificar todas las instrucciones y sus parámetros,
utilizando un total de 16 bits resultará muy adecuada y
facilitará como hemos dicho la generación de señales de control.
Vamos pues, a generar las señales de control teniendo en
cuenta la definición de las mismas y los nombres y
código de instrucción implicados en cada una de esas señales de control.
Para cada bloque, debemos generar las señales de control y los parámetros de
control que dicho bloque requiere y no necesariamente todos los parámetros de
las instrucciones que afectan a dicho bloque.
Por ejemplo, a este bloque de selección de entrada le afectan estas tres
instrucciones que tenemos aquí, assign value, data input y operation.
Estas instrucciones tienen múltiples parámetros del tipo índices i,
j, k o el valor A.
Sin embargo, la información que se necesita de la instrucción para controlar
este bloque es el índice j de la instrucción data input
para seleccionar uno de los ocho puertos de entrada que tenemos aquí.
La constante A de la instrucción assign value y
la señal de control de dos bits input control.
Y estas son las únicas informaciones que tendrán que llegar en forma de señales de
control a este bloque de selección de entrada.
Empezamos por las señales de control del bloque de selección de entrada.
A partir de la tabla que define las señales de control de este bloque
y del código de instrucción que tenemos en la tabla de la derecha,
podemos ver que los bits de la señal input control se corresponden
con los bits C14 y C13 del código de instrucción correspondiente.
En cuanto a los parámetros de esta,
de este bloque vemos que el índice j se
define con los bits del 7 al 4 de nuestra codificación.
Aunque actualmente ese índice j hace referencia a un puerto de entrada.
Vimos que solo había ocho puertos de entrada,
luego el índice j sólo necesita tres de esos cuatro bits que tenemos aquí.
Luego el índice j en realidad sólo utilizará los bits C6 al C4.
Y en la otra de estas instrucciones,
vemos la constante A que utiliza los bits
del C11 al C4 para su representación binaria.
Luego, en este caso tanto los bits necesarios
para la señal de control llamada input control como la información
o los bits necesarios para los distintos parámetros de esta instrucción,
están incluidos en la propia codificación de la instrucción y se extraen
directamente de la misma tal como muestran las ecuaciones que tenemos aquí al lado.
El bloque siguiente son los recursos de cálculo.
Y en este caso la única señal de control que se necesita es la función f,
para indicar la operación que hay que realizar o una suma o una resta.
Y esta operación f la tenemos codificada en el
bit C12 de nuestra codificación de instrucciones.
Luego la señal de control f sencillamente es el bit C12 directamente.
Vemos ahora el bloque de selección de salida.
Las señales de control de este bloque son out en y out sel.
Out en debe ser igual a uno en el caso de que se trate de una instrucción de salida.
Data output o output value.
Luego esta señal de control tomará el valor uno cuando
los bits C15 y C14 tomen los valores uno y cero respectivamente.
Por lo tanto,
la expresión booleana de esta señal de control es la que tenemos aquí.
Una AND lógica entre C15 y el complementario de C14.
La señal de control out sel esta de aquí,
distingue entre las instrucciones data output o output value.
Luego, podemos utilizar el bit C13 para esta señal.
En relación con los parámetros de las instrucciones que afectan a este bloque,
vemos que el parámetro i se corresponde con los bits del
C10 al C8, está ahí sólo tiene que direccionar
uno de los ocho puertos de salida y por lo tanto, tres bits son suficientes.
Otro parámetro es el valor A y A toma directamente los bits del C7 al.
C0. A continuación veamos el
banco de registros.
La señal de control write read es igual a uno
para las instrucciones assign value, data input y operation.
Es decir, que si nos fijamos en sus códigos de operación esto es
cuando el bit C15 es igual a cero.
Luego la señal write read puede derivarse directamente
de esta ecuación que tenemos aquí, es decir del complementario del bit C15.
En cuanto a los parámetros de estas instrucciones, vemos
que los índices i, j k en general harán referencia al banco
de registros por lo tanto utilizaran cuatro bits como se puede ver aquí.
Solo hay un caso en el data input en donde el índice j de hecho hace referencia
a uno de los cortos de entrada, pero ese índice j no tiene
ninguna incidencia dentro de este bloque de banco de registros,
ese índice j iría a actuar en el bloque de selección de entrada.
Y para finalizar veamos el bloque go to,
y observemos que los cuatro bits de la señal de control
numb sel se corresponden directamente con los
bits C15 a C12 de nuestra codificación de instrucciones.
Y que el parámetro n viene dado por los bits del C7 al C0.
Luego las señales que necesitamos a partir de esta codificación de
instrucciones es la señal de control numb sel que es directamente estos
cuatro bits del C15 al C12 y el valor n que viene de la propia instrucción
y que estará codificado en los bits del C7 al C0.
Y ahora que hemos identificado cómo obtener las señales de control necesarias
para cada uno de los cinco bloques, vamos a mostrar el circuito completo.
Vemos el bloque de selección de entradas, el banco de registros,
los recursos de cálculo que básicamente son un sumador y un restador,
un modulo sumador y restador, el bloque de selección de salida y el bloque go to.
Prácticamente todas las señales que se necesitan dentro
de estos bloques se extraen directamente de la propia instrucción,
tal como vemos aquí.
Es decir, la mayor parte de señales de control vienen directamente
de los bits del C15 al C0 de nuestro, de la codificación de las instrucciones
y solo es necesario generar señales de control para la señal write read,
que la tenemos aquí arriba, y la señal out en que la tenemos aquí.
El resto de señales vemos que
son directamente bits de nuestra codificación de instrucciones.
Y you hemos dicho que la función que genera el write read es
sencillamente un inversor para invertir el valor del C15 y
la función que genera la señal out en es una AND
lógica entre el bit C15 y el complementario del bit C14.
Y con esto habríamos completado la implementación directa de
nuestro procesador.
Vamos ahora también a general un modelo VHDL del procesador
completo integrando de forma jerárquica los distintos modelos
VHDL you realizados hasta ahora para los cinco bloques de nuestro procesador.
Esta es la declaración de la entidad, entity a la que hemos llamado proceso.
Las entradas de esta entity son los
ocho puertos de entrada de m bits cada uno de ellos,
y que son los que aparecen aquí y también aquí, la instruction
que es un vector de 16 bits y que lo tenemos
en el símbolo y lo tenemos en la parte de implementación directa,
la señales de clk y reset, que son señales de un solo bit, el reset
lo podemos ver tanto aquí arriba como en la implementación directa, mientras
que la señal de clk no está representada en el esquema de este circuito.
Hay ocho puertos de salida que corresponden a estos que tenemos aquí,
y en el esquema los tenemos en esta parte de aquí,
cada uno de ellos de m bits y finalmente una salida number,
number que es un vector de ocho bits y
que nos da la dirección o el número de la siguiente instrucción a ejecutar.
Y con esto you tendríamos declarada la entidad de nuestro procesador completo.
you ahora podemos pasar a describir la
arquitectura que vamos a asociar a la entidad que acabamos de declarar.
En la parte de la arquitectura se tienen que declarar distintas
señales que son corresponden a señales internas propias de esta arquitectura.
Vemos la señal write read y out en que son señales de control.
write read, out end que actúan dentro de nuestra arquitectura,
son señales de un bit y después tenemos la señal de result,
result lo tenemos aquí, reg in, reg in, left out,
left out y write out, write out que
son vectores de m bits, buses de m bits.
A continuación se declaran, seguimos en la parte declarativa de la arquitectura,
se declaran los componentes que utilizaremos en la descripción
de esta arquitectura, es decir los componentes correspondientes a las cinco,
a los cinco bloques que you hemos estudiado.
Por ejemplo esta parte de aquí es la declaración del componente de
selección de entrada, del componente que hemos llamado input selection.
Esta declaración del componente, tal como se ha hecho en este caso,
es prácticamente igual a la declaración de la entidad que you habíamos visto,
es decir se le da un nombre lógico a cada una de sus señales de entrada salida.
Aquí tendríamos los ocho puertos de entrada,
los nombres lógicos de a y result, del índice j,
de la señal de control input control y de las, y del vector to reg.
Y así iríamos haciendo para todos los otros
componentes que corresponden a los cinco bloques de este procesador.
Y ahora, en el cuerpo de la arquitectura que empieza en este begin,
tenemos que instanciar estos cinco componentes e interconectarlos entre
sí a través de sus puertos entradas salidas y a través de las
señales específicas de esta arquitectura que hemos declarado anteriormente.
Por ejemplo, el componente input selection se instancia aquí,
se le da la etiqueta comp1 y sus puertos se
mapean de esta forma, a los nombres lógicos IN0,
IN1, IN2 y así hasta el IN7,
se les asigna los nombres de las señales actual IN0,
IN1, IN2 y así hasta IN7.
En este caso los nombres tanto los nombres lógicos como los de
las señales actuales son idénticos.
A un nombre lógico A le asociamos los bits
del 11 al cuatro de la instrucción, del vector de instrucción.
Al nombre lógico result le asociamos la señal actual result.
A la j, al índice j para este bloque de input selection le
asociamos los bits del 6 al 4 de nuestra codificación de instrucción.
Al nombre lógico input control que es una señal de control les
asociamos los bits 14 y 13 de nuestra codificación de instrucciones.
Y finalmente al nombre lógico reg le asociamos el
nombre de la señal actual reg in.
Esta es la forma de instanciad un componente y esto
es lo que haríamos para el resto de componentes, el de recursos de cálculo
computation resources, el de selección de salida output selection,
el banco de registros register bank y el bloque go to.
Finalmente nuestra unidad de control que tenemos aquí
tienen que generar dos señales de control write read y
out reg que obedecen a dos funciones booleanas que you hemos
visto y esto es lo que hacemos en esta parte final de nuestra
arquitectura que acaba precisamente en este end que tenemos aquí.
Vemos que out end es igual a una AND,
una función AND entre el bit 15 de nuestro
código de instrucción y el bit 14 una vez invertido, una vez complementado.
Y por su parte la señal de control write read
es al complemento del bit 15 de nuestro código de instrucción.
Estas dos ecuaciones booleanas forman parte de nuestra unidad de control para
general las correspondientes señales de control write read y out end.
Y esto es todo, con este módulo del procesador completo
y teniendo acceso a todos los módulos VHDL de los distintos bloques que you
habíamos descrito en sesiones anteriores, tendríamos un
modelo jerárquico completo de nuestro procesador en VHDL.
Y como resumen de esta lección decir que hemos codificado el conjunto de
instrucciones utilizando para ello 16 bits, que se han
generado las señales de control a partir de dicha codificación de instrucciones,
que el procesador completo se ha implementado mediante puertas,
multiplexores y estables y decodificadores, y que también hemos
desarrollado un modelo VHDL jerárquico y completo de nuestro procesador.
Y con esto damos por finalizada nuestra sesión de hoy.
Muchas gracias y hasta la próxima.