Download La inteligencia digital - Escuela Colombiana de Ingeniería

Document related concepts
no text concepts found
Transcript
ELECTRÓNICA
La inteligencia digital
Juan Manuel Andrade Morales
La inteligencia de todas las máquinas
actuales radica en la inteligencia digital,
cuya base se intenta revelar en el presente
artículo. A lo largo de él, usted podrá
saber dónde está la magia, podrá entender
que con un “pin” el procesador “piensa”,
con una “pata” el procesador toma la
decisión de hacer el proceso A o el
proceso B. Podría pensarse que los
Microprocesadores “piensan con las patas”
y aunque esto es parcialmente cierto, se
han requerido por lo menos 150 años de
pensamientos humanos para lograr que
estos pensamientos digitales, que aunque
elementales, lleguen a tener utilidad y de
que manera, mire a su alrededor y
encontrará: teléfonos celulares, Internet,
robots, tomografía axial computarizada,
resonancia magnética, satélites, refinerías
de petróleo automatizadas, toda la
industria química farmacéutica
automatizada, máquinas para hacer
billetes etc. Se trata del invento del siglo.
Con él se pueden hacer todos los
“juguetes” que se imaginen y de paso se
puede ganar mucho dinero; pueden
hacerse juguetes de unos dólares hasta
juguetes de millones de dólares (miren la
exploración espacial), con ellos se puede
mejorar el aparato productivo y
recreativo de cualquier país y por lo tanto
solucionados algunos problemas sociales,
obtener la riqueza y la paz necesaria para
vivir mejor.
Luego de leerlo cuidadosamente, usted
entenderá las bases de la Inteligencia
Electrónica. Las redes neuronales y la
lógica fuzzy serán tema de próximos
artículos, ya que éstas representan
desarrollos de matemáticas y software que
deben ser tratados primero en su
abstracción lógico-matemática y después
compilados para su tratamiento digital.
Ingeniero electricista. Especialista en
electrónica. Magister en sistemas.
Estudios de maestría en
telecomunicaciones e informática
Este artículo está escrito con el deseo de explicar de la mejor manera
posible el fenómeno de la inteligencia de los computadores; sin embargo, se requiere que el lector haya tomado un curso previo de sistemas
electrónicos digitales donde se hayan
tratado los siguientes temas: lógica
combinatoria: decodificadores,
codificadores, multiplexer, demultiplexer, unidades aritmeticológicas,
memorias ROM; lógica secuencial:
registros, memoria RAM, registros
de desplazamiento, contadores, contadores con carga en paralelo, máquinas generadoras de secuencias,
máquinas generadoras de secuencias
condicionales con base en contador,
ROM, MUX.
La aproximación a la inteligencia que han hecho los sistemas
digitales está ligada a la interpretación de abstracciones mentales tipo:
SI PASA TAL CONTIGENCIA,
ENTONCES haga este proceso; SI
NO, haga este otro proceso.
Al mirar cualquier lenguaje de
alto nivel, estructurado o no, se encuentran instrucciones como IFTHEN- ELSE, DO- WHILE-,
REPEAT-UNTIL-; o en los lenguajes de máquina en donde se hallan
las instrucciones BRANCH.
Estas instrucciones representan
las abstracciones mentales en la toma
de decisiones, dependiendo de condiciones o contingencias que suceden al azar.
En el gráfico 1 se explica esta estrategia de pensamiento digital.
32 / Revista Escuela Colombiana de Ingeniería No. 40
Como se puede observar en la figura 1, vemos una representación de
la solución de un problema que consiste en ejecutar el proceso 1, luego
el 2 y luego el 3; sin embargo, después de ejecutar este último no se
puede seguir con el proceso 4 si suceden algunas contingencias o condiciones.
Si se cumplen algunas condiciones que “puede arrojar” el proceso 3
se debe volver al proceso 2 y sólo en
el caso de que éstas no se cumplan
se puede pasar al proceso 4, luego al
5 y acabar. Esto representa lo más
Figura 1
Octubre-Diciembre 2000
ELECTRÓNICA
Figura 2. RAM o ROM del usuario.
clásico en rutas de pensamiento para
solucionar problemas cotidianos en
las oficinas, en las fábricas y aun en
la vida afectiva (en casos simples); no
se incluye aquí un procesamiento
paralelo, pero éste se puede subdividir en varios procesamientos secuenciales interconectados.
La inteligencia digital está representada en la capacidad que tienen
los procesadores de interpretar la
instrucción “IF, THEN, ELSE” la
más importante de cualquier sistema de desarrollo computacional.
Con ella un programador le dice
al computador que verifique el
cumplimiento de una condición.
Después de verificar la condición,
el procesador debe estar en capacidad de tomar decisiones: si se cumple la condición debe hacer el proceso A; si no, debe realizar el proceso
B. La sintaxis básica en un lenguaje
de alto nivel es la siguiente: IF, una
condición. THEN, haga el proceso
A. ELSE, haga el proceso B.
Compilada esa instrucción, termina en un grupo de códigos de máquina ejecutables por el procesador.
Las condiciones clásicas verificadas
después de hecha la compilación son,
entre otras, si hubo CARRY o no
Octubre-Diciembre 2000
lo hubo, si Z vale 1 o si Z vale 0, si
hubo interrupción o no la hubo, si
hubo half carry o no.
Para explicar en detalle cómo se
puede construir una máquina que
tenga la capacidad de ejecutar este
tipo de instrucciones, el estudiante
se debe introducir en los sistemas
electrónicos digitales.
Lo primero que hay que pensar
es cómo se va a disponer la máquina
para que un diseñador de software
la pueda programar, partiendo del
hecho de que éste implemente un algoritmo en un lenguaje de alto nivel desde un teclado, y el programa
compilador deposite el código binario ejecutable en una memoria RAM
como la mostrada en la figura 2.
Existe también la opción de programar directamente en lenguaje de
máquina. En ambos casos la instrucción por ejecutar queda como lo
muestra la figura 2, en las localizaciones n y n+1. Como observamos
en la memoria, el compilador deja
en localizaciones consecutivas un
código de operación, una dirección
y otro código de operación. Considérese este tipo de estructuras de
códigos, para efectos de la explicación, de la siguiente manera:
El código de operación COD.OP
X localizado en n, que representa el
tipo de instrucción que pregunta por
una condición.
El código localizado en n+1, llamado dirección, representa una dirección de la memoria a partir de la
cual está el proceso 2 por ejecutar en
caso de que se cumpla la condición.
Consideremos que el código
COD.OP Y, grabado en n+2, representa el proceso 4.
Las posibilidades de que un sistema físico diferente del cerebro humano tenga inteligencia son muy
remotas; sin embargo, si construimos una máquina capaz de procesar
las instrucciones grabadas en la memoria de la figura 2, podría ser muy
útil aunque, hay que aceptar, esta es
una aproximación minúscula al cerebro humano.
Con este artículo tan sólo se pretende explicar la posibilidad que tiene un microprocesador, un microcontrolador o un DSP, de tomar
decisiones dependiendo de contingencias no predecibles. Los fenómenos de aprendizaje en redes neuronales y el procesamiento en paralelo
serán tema de otro artículo.
Las operaciones clásicas en los
sistemas digitales siguen siendo la
suma, la resta, la división, la multiplicación, la comparación, la traslación y la rotación. De estas operaciones se puede sacar información
que permita tomar decisiones dependiendo de las condiciones que arroje un proceso de datos. Son condiciones clásicas en el mundo digital
el que una respuesta o una resta sea
cero o mayor que cero, o que sea un
número negativo; si estas respuestas
obedecen a una resta, el que dé cero
significa que los operandos eran igua-
Figura 3. Aritmetic Logic/Unit (ALU).
Revista Escuela Colombiana de Ingeniería No. 40 / 33
ELECTRÓNICA
les, el que dé mayor que cero significa que el minuendo era mayor que
el sustraendo y el que dé menor que
cero significa que el minuendo era
menor que el sustraendo. Fácilmente se podría pensar en inventar una
máquina que hiciera las operaciones
y a la que se le pudiera preguntar
posteriormente por los resultados.
La máquina que ejecuta las operaciones es conocida por la mayor
parte de los ingenieros como ALU
(Aritmetic Logic/Unit). En un curso básico de sistemas electrónicos
digitales, un ingeniero aprende a
diseñarlas. Al observar el gráfico 3
se ve una ALU que podría hacer
cuatro operaciones gobernadas por
los códigos de operación Cφ1 y Cφ0.
En el cuadro 1 la unidad aritméticológica es capaz de hacer las operaciones de suma, resta, AND y OR.
Figura 4. Creación de códigos de condición.
Cuadro 1
Cφ1
Cφ0
0
0
1
1
0
1
0
1
Suma
Resta
And
Or
Con las operaciones que sabe
hacer la ALU se pueden preguntar
muchas cosas, sólo que no se le puede preguntar prosaica sino electrónicamente. Para ello es necesario tomar todos los bits de la respuesta e
introducirlos en una humilde compuerta NOR que podrá avisar en su
salida que la respuesta fue cero. Hágase la operación NOR en una respuesta que sea cero en todos sus bits:
0+0+0+0
Por las leyes de De Morgan
0+0+0+0 = 1.1.1.1= 1 si y solamente si cuando todos los bits de las
respuesta son cero, la salida de la
NOR es uno; a esta salida de la NOR
se la llamará Z (ver figura 4). A la
máquina de esta figura se la llamará
de aquí en adelante procesador de
operandos.
Si alguno de los bits de la respuesta no es cero, la salida de la NOR es
cero, y avisa de esta manera que la
respuesta no fue cero. Compruébese esto:
0+0+1+0
Esto es igual a 1.1.0.1 = 0
Otra condición que avisa detalles
importantes del proceso es el carry
o el “llevo tanto” de su primer año
de primaria, cuando usted aprendió
a sumar; sólo que este carry o “llevo
tanto” se obtiene después de sumar
los bits de mayor valencia (recordar
el diseño de unidades aritmetico-
34 / Revista Escuela Colombiana de Ingeniería No. 40
lógicas). El carry (C) y el Z son, entre otros, los códigos de condición
más comunes y tal vez los más importantes porque dan suficiente información sobre el estado del proceso. Así como el Z avisa si una
respuesta fue 0 o no, el carry avisa
que una respuesta no se puede representar en n bits sino en n + 1
bits. Además, ayuda a identificar
si una respuesta fue positiva o negativa.
Estos dos códigos de condición
(C , Z) se deben memorizar en un
registro de código de condición
(RCC) (ver figura 4).
Generalmente, el registro que
memoriza el carry, para darle más
potencialidad al microprocesador,
no sólo es alimentado por el carry
de la ALU sino también por el bit
más significativo (bMs) o el bit menos significativo (bms) del registro
Octubre-Diciembre 2000
ELECTRÓNICA
Figura 5. Fuentes de información del registro carry.
de respuesta, siendo este último también un registro de desplazamiento.
Esta alimentación del registro carry
se hace a través de un MUX (ver figura 5), y con los seleccionadores
CMUX1 CMUX0 se elige cuál se carga en el carry (recordar diseño de
multiplexer).
Estas dos fuentes de información
de estado del proceso (Z y C) son
las que vamos a usar para explicar
la toma de decisiones en un procesador de información.
Z y C, previamente registradas,
se introducen reales y complementadas en un multiplexer, que se llamará de aquí en adelante MUX.CC
(multiplexer de código de condiciones) (ver figura 6).
La salida del MUX.CC avisa con
un contundente 1 si se cumple una
condición o avisa con un 0 si no se
cumple. Ahora el reto está en armar
un rompecabezas digital que le permita interpretar a un procesador instrucciones que lo obligan a seleccionar alternativas en un proceso,
dependiendo de que se cumpla o no
una condición. Hay que recordar
que estas instrucciones se llaman en
lenguajes de alto nivel IF, THEN,
Octubre-Diciembre 2000
ELSE, y en lenguajes de máquina o
assembler, Branch; ambas se denominarán de aquí en adelante instrucciones de ramificación condicional.
Una máquina que sea capaz de
interpretar instrucciones de ramificación condicional chequea las
condiciones mediante el MUX.CC
y selecciona la condición que hay
que examinar mediante los
CMUXCC2, CMUXCC1, CMUXCC 0
(ver figura 6).
La salida de este MUX.cc representa “la respuesta” a la condición
examinada, resultado que debe provocar cambios en la ejecución de una
instrucción.
Si la salida del MUX.cc es 1, se
debe hacer un proceso que consiste en traer la dirección de la localización n+1 hasta depositarla en
la máquina que gobierna las direcciones, como se explicará posteriormente(ver figuras 8, 9a y 9b); lo que
se desea concretar aquí es que si se
cumple una condición deben existir en “alguna parte” microinstrucciones para ejecutar la secuencia descrita anteriormente. Hay que
repasar el diseño de la generación
de secuencias mediante la combinación de contadores, ROM y MUX,
recordando especialmente que
dentro de la ROM están grabadas
las microinstrucciones que indican
cómo ejecutar una instrucción.
Esta secuencia se deberá grabar a
partir de una dirección de la misma ROM que contiene el procedimiento.
La dirección a partir de la cual se
va a colocar dicho procedimiento se
llamará BRA, pero ésta es un código binario. La llamaremos BRA sólo
para efectos de la explicación (ver
figura 7).
En este momento hay que hacer
tres preguntas:
1. ¿De dónde sale BRA para que
pueda tomar el control de las direcciones de la µROM?
Figura 6. Chequeo de condiciones mediante un multiplexer.
Revista Escuela Colombiana de Ingeniería No. 40 / 35
ELECTRÓNICA
Quien recibe a BRA es un contador con carga en paralelo, porque
éste debe recorrer la µROM a partir
de BRA. Sin embargo, en caso de que
“no” se cumpla la condición este
contador con carga en paralelo debe
recibir la dirección que le entregue
el D.I., correspondiente a una nueva instrucción.
2. ¿Cómo hacemos para tener dos
fuentes de direcciones, una para el caso
de que se cumpla la condición y otra
para el caso de que no se cumpla?
3. ¿Cómo lograr que la salida del
MUX.CC gobierne el sistema de tal
manera que si su salida es 1 se cargue en el contador, con carga en
paralelo, la dirección BRA, y en caso
contrario, pase a una dirección de
µROM correspondiente a traer una
nueva instrucción? (proceso 4) (ver
figura 1).
Las soluciones a estas tres preguntas son, respectivamente:
1. BRA sólo puede estar grabada
en un lugar fijo donde nunca se borre, por lo que lo podemos grabar
en la misma µROM (ver figura 7).
2. Ésta se puede solucionar simplemente con un MUX que llamaremos
de aquí en adelante “MUX de control”.
3. La tercera pregunta se resuelve colocando la salida del MUX.CC
como control del contador con car-
ga en paralelo, de tal manera que si
la condición se cumple el contador
carga a BRA; esto significa que una
línea de control proveniente de la
µROM debe direccionar en ese instante al MUX de control para que
BRA esté disponible a la salida de éste.
En el caso de que no se cumpla la
condición, el contador aumenta; por
tanto, pasa a la siguiente microinstrucción y a partir de allí debe haber un procedimiento para traer la
siguiente instrucción de la memoria
externa (proceso 4)(ver figura 7).
A esta máquina de aquí en adelante la llamaremos procesador de
instrucciones.
Figura 7. Estructura básica de un procesador de instrucciones con posibilidad de interpretar operaciones de ramificación
condicional.
36 / Revista Escuela Colombiana de Ingeniería No. 40
Octubre-Diciembre 2000
ELECTRÓNICA
Hasta aquí sólo podemos decir
que la instrucción grabada en la localización n, (ver figura 2) en la memoria del usuario, ha sido llevada
al bus de datos y de allí al decodificador de instrucciones. Este
decodificador simplemente cambió el código de operación de la
instrucción por una dirección de
la µROM a partir de la cual están
las microinstrucciones para ejecutar la instrucción.
Ahora el trabajo consiste en grabar adecuadamente ceros y unos en
cada bit de las microinstrucciones.
Al observar la figura 7 vemos que
cada bit de cada microinstrucción de
la ROM del procesador de instrucciones corresponde a una línea de
control de la máquina.
Pensemos en qué estado binario
colocar a CMUXcont, CMUXcc 2,
CMUXcc 1 , CMUXcc 0 , CMUX 1 ,
CMUX 0 , CKcc, CRTA 1 , CRTA 0 ,
Cϕ 1 , Cϕ 0 , CK 1 , CK 2 , CKRTA,
CCMUXR 1, R/W, CKCC. Pensar
esto parece fácil, pero hay que ser
muy cuidadoso porque existen operaciones que se logran hacer en un
instante de tiempo pero otras requieren dos o tres instantes y, en algunos casos, más. Recordar control de
procesos secuenciales usando ROM.
Nos podemos ayudar en el diseño de microinstrucciones pensando
en todos los pasos que se deben hacer cuando se quiere ejecutar la instrucción “ramifique si Z vale 1”.
Podríamos decir que ésta consta de
los siguientes pasos:
1. El MUXcc debe direccionarse
por
CMUXXcc 2 ,
CMUXcc 1 ,
CMUXXcco, para que E2 pase a la
salida. E2 contiene la información de
Z (ver figura 7).
2. Dependiendo de que la salida
del MUXcc sea uno o cero el CAR
cargará o contará, repetitivamente;
Octubre-Diciembre 2000
recordemos que si carga es porque
se cumplió la condición y si cuenta
es porque no se cumplió la condición.
Si carga, se carga la dirección
BRA. A partir de la dirección BRA
deben estar las microinstrucciones
necesarias para traer la dirección de
memoria externa contenida en n+1
(ver figura 8), y colocarla como nueva dirección en el contador de programas (PC). A partir de esta dirección se vuelve a ejecutar el programa
(ver figura 1).
3. Si no se cumple la condición,
a la línea de control del CAR llegará un cero y el CAR contará, y en la
ROM del procesador de instrucciones aparecerá en el bus de datos el
contenido de la dirección DI+1 (DI
+1 significa la dirección siguiente a
la última dirección entregada por el
DI). A partir de esta dirección de-
ben estar las microinstrucciones necesarias para traer de la memoria externa el código de operación de la
nueva instrucción contenido en
n+2. Este código de operación de la
nueva instrucción debe entrar a DI
y producir una nueva dirección que
estará en las puertas del MUX de
control y se cargará en el CAR (ver
figura 7).
Nuevamente se leerán las microinstrucciones correspondientes a una
nueva instrucción, y los ciclos lectura y ejecución de una nueva instrucción se repetirán hasta encontrar
la instrucción pare.
Como se puede concluir, existe
la necesidad de construir dos máquinas más para completar nuestro diseño: una que gobierne el bus de
direcciones y otra que reparta coherentemente instrucciones, direcciones y operandos.
Figura 8. Repartidor de instrucciones, direcciones y operandos.
Revista Escuela Colombiana de Ingeniería No. 40 / 37
ELECTRÓNICA
2. Colocar sobre el bus de direcciones códigos o direcciones no consecutivos, y después de hacer operaciones de lectura o escritura sobre la
memoria, hay que volver sobre los
códigos consecutivos.
Cuadro 2
CDMUX1 CDMUX0 Salida del DEMUX
0
0
1
Figura 9a. Procesador de direcciones (borrador).
Los operandos irán hacia los registros R1 y R2, registros de trabajo
que rodean la ALU (ver figura 3).
Las direcciones pasarán a tomar posesión del bus de direcciones, mientras que las instrucciones deben pasar al decodificador de instrucciones
(DI) mediante algún proceso lógico.
Sin el diseño de estas dos máquinas no se puede pensar todavía en el
diseño de las microinstrucciones
contenidas en la ROM del controlador (ver figura 7).
Empecemos con el diseño del repartidor de operandos, direcciones
e instrucciones. Un repartidor clásico es un demultiplexer (ver figura
8). Con esta máquina podemos tomar la información proveniente de
la memoria externa y con el control
de las líneas CDMUX1 y CDMUX0,
dirigir la información hacia las salidas del demultiplexer correspondientes a instrucciones, operandos y
direcciones, dependiendo del caso
(ver cuadro 2).
Diseñemos ahora la máquina que
procesa direcciones:
Para hacer este diseño hay que
pensar en las especificaciones que debe
tener esta máquina, las cuales son:
1. Recorrer direcciones consecutivas.
0
1
0
Direcciones ← Bus de datos
Operandos ← Bus de datos
Instrucciones ← Bus de datos
3. Ser capaz de empezar una secuencia a partir de cualquier número.
Este es el caso de los saltos condicionales que hemos venido explicando.
Para satisfacer estas tres cualidades de la máquina se debe pensar con
mucho orden. Primero, recorrer direcciones consecutivas, lo cual se logra con un contador. Sin embargo,
hay que pensar que sobre el bus de
direcciones, en un momento dado,
puede estar una dirección fuera de
Figura 9b. Procesador de direcciones (diseño final).
38 / Revista Escuela Colombiana de Ingeniería No. 40
Octubre-Diciembre 2000
ELECTRÓNICA
secuencia; esto lo podemos lograr
con una combinación de un contador con registro independiente y un
MUX y tener así dos fuentes posibles de direcciones: una dirección en
secuencia proveniente del contador
y otra dirección fuera de secuencia
proveniente de la memoria externa
(ver figura 9a).
Para cumplir con la tercera condición es necesario modificar la máquina de la figura 9a cambiando el
contador por un contador con carga en paralelo, con el fin de que éste
reciba los códigos a partir de los cuales se va a empezar un proceso en el
caso de que se cumpla una condición
(ver figura 9b).
Uniendo todas las máquinas diseñadas hasta aquí, tendremos la es-
tructura básica de un procesador inteligente (ver figura 10).
Con el deseo de explicar la diferenciación entre direcciones, operandos e instrucciones se colocó un
DEMUX para recibir al bus de datos; sin embargo, este dispositivo nos
lo podemos ahorrar usando un registro de datos, gracias a lo cual la
información se depositará en el dispositivo destino que esté activado.
Ahora, si juntamos todas las máquinas diseñadas, tendremos la estructura básica de un procesador inteligente (ver figura 10).
Una máquina como la de la figura 10, agregándole interfaces de entrada y salida, puede emplearse para
gobernar inteligentemente un avión,
un barco, un submarino, un robot,
un GPS, un auto, un teléfono celular,
un tomógrafo axial (TAC), una red de
computadores local o una red de computadores grande como internet, un satélite, una refinería de petróleo, una
máquina para hacer llantas, una máquina para hacer billetes, una máquina para
hacer lo que usted quiera, etc. Esto, a
mi juicio, es el invento del siglo; representa, solucionados los problemas sociales, la posibilidad de mejorar el aparato productivo de cualquier país, y por
tanto la calidad de vida del mismo.
BIBLIOGRAFÍA
Hayes, John, Computer Architecture and
Organization, McGraw Hill.
Hill and Peterson, Digital Systems, Prentice
Hall.
Morris, Digital Logic and Computer Design,
Prentice Hall
Figura 10. Estructura básica de un procesador.
Octubre-Diciembre 2000
Revista Escuela Colombiana de Ingeniería No. 40 / 39