SlvERSlDAD AUTONOMA METROPOLITANA …148.206.53.84/tesiuami/reportesok/UAMR0723.pdf · Informe...
Transcript of SlvERSlDAD AUTONOMA METROPOLITANA …148.206.53.84/tesiuami/reportesok/UAMR0723.pdf · Informe...
SaablertadtremQo
SlvERSlDAD AUTONOMA METROPOLITANA-IZTAPALAPA
Departamento de IngenierSa Eldctrica Area de Ingeniersa Electrdnica
MINIMIZACION DE CIRCUITOS COMBINATORIOS DE SALIDA MULTIPLE Y
REALIZACION CON COMPUERTAS UNIVERSALES
Guzmdn Ldpez Miguel A.
RES'UMEN
El diseño de sistemas digitales presenta posibilidades de ser automatizado, al menos en algunos de los algoritmos que - utiliza. Un programa para computadora puede servir como una herramienta de diseño, con aplicaciones diddcticas o de desa- rrollo.
Se presenta la descripcidn de un sistema desarrollado en el Departamento de Ingenierla Eldlctrica de la Unidad Iztapalapa, para servir como herramienta d.e diseño de circuitos combinatorios de salida multiple y realizacibn utilizando compuertas univer- sales.
El sistema se compone de dos programas que funcionan independientemente, pero que pueden comunicarse para comple - tar un diseño. Los programas se encuentran disponibles para computadores personales.
Informe Tecnico No. 2 3 noviembre de 1987
I N I C E
CAPITULO i
METODOLOGIA
MAPAS DE KARNAUGH 1.1
METODO DE QUINE-MCCLUSKEY i . 2
REALIZACION CON COMPUERTAS UNIVERSALES 1.5
CAPITULO 2
REALIZACION
EL PROGRAMA DE MINIMIZACION 2.1
EL PROGRAMA DE REALIZACSON CON LOGICA NAND 2.3
AREA DE DATOS 2.4
POSIBILIDADES DE EXPANSION 2.5
CAPITULO 3
EJEMPLOS
EJEMPLO 4 3.4
EJEMPLO 2 3.5
APENDICE A
PROGRAMA DE MINIMIZACION DE CIRCUITOS DE SALIDA MULTIPLE
APENDICE B
PROGRAMA DE REALIZACION CON COMPUERTAS UNIVERSALES
APENDICE C
REFERENCIAS BIBLIOGRAFICAS
I N T R O D U C C I O N
Este trabaJo presenta la realization de dos programas que son
una herramienta para el diseno automatizado de circuitos
digitales combinatorios. El primero de los programas lleva a cabo
la minimizacr6n di3 circuitos de sallda mQltiple, mediante el
metodo de Qulne-McCluskey. El segundo de los programas obtiene
las conexiones del circuito, usando compuertas universales NAND
de dos entradas. Ambos programas se produjeron para utilizarse en
computadoras personales y se escribieron en Turbo Pascal.
Estos programas representan una buena ayuda para el diseno de
sistemas digitales a nivel de realizacibn de sistemas o con fines
didilcticos. En especial, en el area de la ensefianza del diseno
lbgico, permiten verificar e l trabaJo realizado de manera manual
y tambien pueden aprovecharse como medio para obtener opciones de
diseno para eleccibn del disenador.
A pesar de que este siste3a se encuentra en una etapa muy
simple, se puede utilizar en los cursos de sistemas digitales de
las licenciaturas c8C l a Universrdad, como un producto terminado,
ademas de servlr cono base para el desarrollo de un sistema mas
completo.
C A , P I T U L ’ O i M E T O D O L O G I A
En todo disetlo, siempre se desea obtener aquel que, siendo
el mas sencillo, pueda efectuar el trabajo esperado. Esto es, se
trata de obtener la representaci6n mínima ( o menos costosa) de un
diseno. En el caso de circuitos 16gicos combinacionales, esto
irnpllca obtener la representaci6n en minitCrminos o maxiterrninos
que contenga el menor nlllmero de literales.
Cuando se trabaJa con expresiones booleanas, es posible
efectuar alguna simplificaci6n aplicando el algebra de Boole, sin
embargo, frecuentemente, la manipulaci6n de expresiones es
compleja y el encontrar una linea directa de ataque requiere de
ingenio y de suerte. Esto se debe, fundamentalmente, a que no
exlsten reglas precisas ni un algoritmo concreto a seguir en la
rnanipulaci6n algebraica. Sin embargo, hay dos metodos
sistematicos para minimizar funciones booleanas:
- Mapas de Karnaugh - Metodo tabular de Quine-McClusBey
MAPAS DE KARNAUGH
El mapa de Karnaugh es uno de los medios mas poderosos en el
repertorio del disenador 16gico. La importancia del mapa no se
basa en la aplicacion de algdn teorema maravilloso, sino en la
utílizaciOn de la capacidad de la mente humana para reconocer
patrones en representaciones pict6ricas de datos. El mapa de
Karnaugh se puede considerar ya sea como una forma pict6rica de
tabla de verdad o como una extensi6n de los mapas de Venn, donde
cada casilla representa un subconjuto del espacio de variables.
El mapa de Karnaugh es una tabla, donde las casillas
- i . í -
adyacentes corresponden a una combination de variables, las
cuales difieren a lo mas en que una de las variables aparece
negada en una combinaclon y no negada en otra.
L a mi.n.imizaci6n se realiza asociando aquellas casillas, adya-
centes, en el mapa que tengan el mismo valor (O 6 I), donde se
considera que el extremo superior de la tabla es adyacente al
inferior y el izquierdo es adyacente al derecho. Los terminos
correspondientes a dichas casillas difieren en variables que se
pueden eliminar, ya que se tiene el mismo valor de la funci6n
independientemente del valor de dichas variables.
k
METOM) DE QUINE-MCCLUSKEY
Una variable binaria puede representarse mediante dos puntos en
los extremos de una recta finita. Esto se amplia para representar
los cuatro valores de dos variables logicas mediante los cuatro
vCrtices de un cuadrado, los ocho valores de tres variables por
los vertices de un cubo, y así para cubos de mas dimensiones.
En general, se dice que las diferentes combinaciones de n
variables se representan como Puntos en el espacio-n y que la
colecci6n de todos los puntos posibles forman los vCrtices de un
cubo-n o hipercubo de Boole.
Para representar funciones en el cubo-n, se establece una
correspondencia uno a uno entre los terminos de n variables y los
vertices del cubo-n.
Se dice que dos cubos-O de una funci6n (terminos) forman un
cubo-I si difieren so10 en una coordenada. De modo similar, se
dice que un conjunto de cuatro cubos-O, cuyas coordenadas son
- 1.2 -
iguales en todas sus variables excepto en dos, forman un cubo-2
de la funciOn.
Cuando todos los vertices (cubos-O) de un cubo-k estan en el
conjunto de los vertices que componen un cubo mayor, se dice que
el cubo mas pequeno esta contenido o cubierto por el cubo mayor.
El mapa de Karnaugh presenta ciertas desventajas, primero, se
trata btisicamente de un metoldo de prueba y error, que no ofrece
ninguna garantla de producir la mejor realizacibn. En seguno
lugar, su dependencia de l a capacidad intuitiva del ser humano
para reconocer patrones, hace que sea inadecuado para una
computadora digital.
El metodo tabular, basado principalmente en el trabajo de,
W. V. Quine y E. J. McCluskey, ayuda a corregir estas deficiencias.
Este es un procedimiento organizado ingeniosamente para efectuar
una bttsqueda exhaustiva de todas las combinaciones de cubos-O
(miniterminos) en cubos de mayor dimensidn y luego seleccionar la
combinacidn mínima de cubos requerida para realizar, la funcion.
El punto de partida del m'etodo es la lista de miniterminos de
la funcien a minimizar.
El primer paso consiste en convertir todos los miniterminos a
su forma binaria y luego se cuenta el nllrnero de unos en dicha
representaci6n. A continuaci6n se ordena la lista de miniterminos
en forma creciente y clasificados, tambien crecientemente, por el
n~el'0 de unos en su representacibn binaria. Cada clase difiere
de otra adyacente en que una de sus variables esta negada en la
otra clase.
Una vez que se han agrupado l o s miniterminos, se compara cada
uno de cada clase con aquel los; de la clase siguiente, si los dos
- i . 3 -
miniterminos son iguales en todas sus variables excepto en una,
se marcan como cubiertos y se anota un nuevo cubo-í, que tiene
las mismas variables que aquellos cubos-O que cubre excepto en la
variable en que difieren y que en el cubo-i se elimina.
Una vez que se agotan todos los grupos de cubos-O, el
siguiente paso consiste en tratar de combinar cubos-i, para
obtener cubos-2, en este caso, dos cubos-í se combinan si todas
sus variables son iguales, excepto una y, ademas, las variables
eliminadas en su formacion son las mismas.
El proceso se contintla para formar cubos de mayor dimension,
hasta que ya no sea posible una combinacibn de cubos.
Los cubos-k que no fueron cubiertos por un cubo mayor, que se
denominan implicantes primos, se separan.
Un metodo alterno para obtener los implicantes primos consiste
en maneJar las representaciones decimales de los miniterminos, y
en este caso, la combinacion de dos cubos-k es posible 3610 si la
diferencia entre la representacien decimal de los cubos-O menores
de cada cubo-k es una potencia de dos (lo cual indica que
difieren exactamente en una sola variable).
Cada cubo-IC esta representado en una realizacion de suma de
productos por medio de un termino de productos de n - k
literales, donde n es el ntlmero de literales distintas que apare-
cen en la funcion. Por lo tanto, cualquier conjunto de cubos-ir,
que contenga todos los cubos-O (miniterminos) de la funcion,
proporcionara3 una realizacion de suma de productos. En esta etapa
se cuenta con una lista de todos los cubos-k de la funcion. Para
completar el disetio, se debe seleccionar un conjunto de cubos-k
que contenga todos los cubos.-O y que conduzca a una reallzacibn
minima de suma de productos. Tal conjunto debe constar de un
subconjunto de los implicantes primos.
Para determinar los implicantes primos de clrcuitos de salida
mOItiple, se debe obtener una lista de todos los mlniterminos que
aparecen en cualquiera de lais funciones, ordendndolos de manera
"??ciente y clasificandolos por el nllmero de unos en su
rekresentaci6n binaria.
S e trata de combinar 10:: cubos para formar cubos de mayor
dAmenSibn, practicamente en la misma forma que para una sola
funcibn, pero con algunas diferencias importantes:
No se pueden combinar dos cubos, a menos que pertenezcan
por lo menos a una funci6n en coman. Es decir, un cubo de una
funci6n no se puede combinar con cubos de otra funci6n.
Cuando se combinan dos cubos, el cubo resultante pertenece
a las funcionés comunes en los cubos que se combinan.
Un cubo se considera combinado o cubierto s610 si las
funciones a las que pertenece el cubo mayor son las mismas que
las del cubo menor.
REALIZACION CON COMPUERTAS UNIVERSALES.
Existen ciertas compuertas que pueden utilizarse para que
funcionen como cualquier otro tipo de compuerta, estas son: NAND
(conjuncibn negada) y NOR (disyunci6n negada). A partir de una
compuerta NAND se pueden obtener:
Un inversor, aplicando la misma funci6n a las entradas de
la compuerta.
Una compuerta AND, negando la salida de la NAND.
- 1 . 5 -
Una compuerta OR, negando las entradas de la compuerta
NAND.
De tal forma que estas ConIpuertas, conocidas como compuertas
universales, pueden utilizarse para reemplazar a cualquiera otra.
Los circuitos digitales se construyen frecuentemente con com-
puertas universales, ya que estas son mas faciles de fabricar con
componentes electr6nicos y son las compuertas basicas utilizadas
en todas las familias de circuitos 16gicos integrados. Una
ventaja adicional, al utilizar un solo tipo de compuertas, con-
siste en la reduccilbn del desperdicio de a l g m nllunero de compo-
nentes de cada tipo que se utilicen y, ademas, solamente se
requiere proveerse de una clase de compuerta, que puede utilizar-
se en cualquier parte del circuito ha construirse. ,/”
, ./’
/’ ,/
- 1 . 6 -
C A P I T U L O 2 R E A L I Z A C I O N
El sistema se compone de dos programas, uno que minimiza las
expresiones para hasta ocho funciones de hasta doce varlables y
otro que obtiene la realizacidn en 16gica NAND de las expresiones
(de hasta doce variables).
Se eligi6 tener dos programas por separado, debido a las
siguientes razones:
1 ) Se tienen dos funciones distintas a realizar: minimizar
funciones booleanas y realizar funciones en 16gica NAM), que
son independientes.
2 ) Se requiere un gran espacio de almacenamiento para los
datos y este no se ocupa de manera simultiinea, de tal forma
que se puede aprovechar mejor el espacio disponible en la
memoria (64K bytes para Turbo-Pascal) si se separan las
Areas de datos de los prlogramas.
3 ) El sistema resultante se compone de dos m6dulos pequefios
y simples.
Los dos programas que componen el sistema fueron escrltos en
Turbo Pascal, para utilizarse en computadoras personales, Para
manejar la memoria secundaria (archivos en discos flexibles) se
utili26 el paquete de acceso .indizado para archivos llamado Turbo
Access.
EL PROGRAMA DE MINIMIZACION.
Este representa cada cubo-K con un registro, cuyos campos son:
prim-cubo, seg-cubo
cubos que se combinar) para formar el cubo-k y en caso de
los cubos-O el minitermino que representa.
num-unos
el ntlmero de unos en la representacion binaria del
minitermino menor que cubre el cubo-k.
dlferencia
variables que se han (?lirninado.
peso
nomero de miniterminos que cubre el cubo-K.
f unc
funciones a las que pc?rtenece el cubo-K.
cubierto
funciones en las que se ha cubierto el cubo-K.
Todos los cubos estan en un arreglo [i.. NUMCUBOS], donde
NUMCUBOS tiene un valor mtkxinlo de unos 4500 (limite impuesto por
los 64K bytes de memoria para datos que proporciona Turbo
Pascal). Es posible asignar un espacio mayor para los cubos s1 se
utilizan dispositivos de memoria secundaria para su manejo.
Los implicantes primos se manejan en un archivo indizado y
cada uno se representa de manera decimal.
Los implicantes primos seleccionados en la representaci6n
mínima se encuentran en un archivo secuencial, guardando la
representacion decimal del implicante.
En cuanto se concluye la selecci6n de implicantes prlmos, se
genera un archivo por cada funciOn realizada, con la representa-
ci6n de los productos que utiliza el programa de realizacidn
NAND. Los nombres de los archivos incluyen el rimero de la
funci6n que representan y cada uno de sus registros corresponde a
un Producto de la suma que representa la funcibn.
- 2 . 2 -
El programa cuenta con dos procedlmlentos yrlnclpales:
obten-cubos, que genera todos los cubos-k, combinando
parejas de cubos de menor grado.
selecci4n-mínima, que selecciona los cubos que cubren el
mayor nlhmero de miniterminos con el menor costo posible,
El procedimlento obten-cubos lee los cubos-O (miniterminos) de
las funciones, genera todos los cubos-I< posibles, combinando
parejas de cubos de clases adyacentes, en los cuales se pueda
eliminar una variable y que pertenezcan al menos a una funci6n en
coman y para los cuales las variables eliminadas sean las mismas.
El procedimientos selecci6n-minima abre el archivo de impli-
cantes primos (indizado), escribe en el todos aquellos cubos que
no fueron cubiertos y busca iterativamente el cubo que cubre el
mayor nllmero de minitermino%, al seleccionar el cubo de mayor
grado, se marcan los miniterminos cubiertos por C1, pero tomando
en consideracibn las funciones en que no se cubren. Por Oltimo,
produce los archivos secuenciales de comunicacidn con el programa
de realizacibn NAND y despliega resultados.
EL PROQRAMA DE REALIZACION corq LOGICA NAND.
Los circuitos integrados considerados en el desarrollo del
programa son los 7400 de 16gica TTL, que tienen cuatro compuertas
NAND de dos entradas.
Este programa representa cada funclbn a realizar mediante un
archivo secuencia1 que lee un arreglo de productos (en su repre-
sentaci6n interna), cada producto se representa, a su vez, como
un registro con: namero de Variables en el producto y un arreglo
de variables de la funcibn, dionde cada una de ellas es un entero
- 2 . 3 -
posltivo o negativo, s l la variable esta negada.
Cada compuerta NAND se representa mediante un registro que
tiene dos expresiones booleanas, que pueden ser una variable (en
cuyo caso es un entero positivo o negativo, con magnitud entre i
y el ntmero mhximo de variables) o el ntunero de identlficacion de
una compuerta NAND, en la cual se obtiene la funci6n parcial
requerida. b
La funci6n prlncipal realiza una suma de terminos, aplicando
un arreglo arbolado de compuertas OR de dos entradas para obtener
una compuerta de cualquier ntunero de entradas. Cuando s610 queda
un termino, se obtiene la realizaci6n del producto con una
compuerta AND de cualquier nllmero de entradas, utilizando un
arreglo arbolado de compuertas de dos entradas.
Los pares de expresiones booleanas de entrada a cada compuerta
NAND se mantienen como Indices del archivo de compuertas y se
pueden hacer baswedas de los pares para reutilizar la salida de
una compuerta, cuando se requiere la misma funci6n parcial en mhs
de una realizacibn.
AREA DE DATOS.
Una de las dificultades mas importantes en la realizacidn
conslsti6 en la restriccldn de area para datos impuesta por el
compllador de Turbo Pascal (a,unque es cla o w e esta restriccibn
existe a pesar de que en vez de 64K Bytes sean 256K para datos).
Se pretendion buscar, inicialmente, una memoria con gran disponl-
bilidad de espacio: memoria secundarla, esyecificamente discos
flexibles, con capacidad maxima de 360K (se podrla pensar tambien
f
- 2 . 4 -
lento al' sistema, ' pero se trat6't.de reducir .el niunero de accesos
al disco, teniendo archivos indizados para realizar btlsquedas y
escribiendo o leyendo datos que, por su naturaleza, son poco
numerosos. Una posibilidad para acelerar el acceso a los archi-
vos, que se encuentra disponible para computador& del tipo P C ,
es e,¡ uso de RAMDISK, es decir, un discossimulado en memoria, que
proporciona almacenamiento de rapid0 acceso en grandes canti-
dades, pero conserva el funcionamiento. planteado para discos
magneticos. .& ::,..id
; . . . ' <
.. . ' 4 ,
, c ? , .,
I
.t
s.. :_, . '., ,
. ._ .E. I ,
. .
' ! I ,
POSIB1,LIDADES DE EXPANSION
Es posible modificar los limites del programa, para que acepte
diferente, ntlmero de funciones y variables. Los límites milximos
. .
I
son :
Nilmero de variables (NUMVARI hasta 15, debido al nilmero de
bits que utiliza Turbo-Pascal para representar enteros. E
Nhmero de funciones (NUMFIJNC) hasta 15 , por 'la representacidn
de enteros. 8
Namero. total de cubos obtenidos (NUMCUBOS), alrededor de,. 5000,
pero se requiere de una modificaci6n al programa para que una
variable comparta el grado (le1 cubo y las funciones en que esta
cubierto (peso y cubierto).
Nilmero maximo de 'compuertas (MAXCOMP), . esta limitado por el
ntlmero maxim0 de registros que soporta la utileria da? .acceso
indizado (en el cas'o de Turbo Access es de 64K,). . .
Nilmero maxlmo de productos por funci6n (MAXPROD), es de unos
400 (restringido por el 'area de datos en memoria)
- 2 . 5 - h
EL PAQUETE DE ACCESO INDIZADlO DE ARCHIVOS.
El paquete Turbo Access consta de cuatro archivos:
ACCESS. BOX
GETKEY. BOX
ADDKEY. BOX
DELKEY. BOX
Estos contienen las r u t i n a s para crear , abr ir y cerrar los
archivos de datos y de indices, leer , agregar y borrar regis tros
de datos.
Turbo-Access maneja catda archivo indizado mediante dos
a r c h i v o s f i s i c o s : uno con los datos y otro cop los indices a los
datos, ordenados en un hrbol-B.
Para cualquier adicibn o borrado de un reg is t ro , es prec i so
operar sobre los archivos de datos tanto como en los de indices.
Las l laves se restrlngen a cadenas de caracteres, pero es
posible codif icar un entero (?n una cadena de dos caracteres y así
u t i 1 izar enteros como 11 aves.
- 2 . 6 -
C A P I T U L O 3 E J E M P L O S
EJEMPLO i :
(Teoría de Conmutacibn y Diseno LOgico, Hill & Peterson,
Secc. 7. 5 , p. 1 8 2 1
Supongase que se desea una realizacibn mínima de suma de
productos para las funciones:
fi( A, B, C, D ) = m( 2 , 4, 10, 1 1 , 1 2 , 1 3 )
f2( A, B, C, I) 1 = m( e,, 5 , 10, 1 1 , 1 3 1
f3( A, B, C, D 1 = m( i , , 2 , 3 , 10, i t , 1 2 )
Primero, se hace una lista con los minittrminos de las fun-
ciones, ordenandolos crecientemente, clasificados por el ntunero
de unos que tiene e indicando a que funciones pertenecen:
m F1 F2 F3
1 1
2 1 1
4 1 I
3 1
5 1
"""""""-"-.-""""""""-
i o 1 1 1
1 2 i i
1 1 1 i 1
13 I i
I
"""""""""."""""""""
Se ejecuta el programa de reducciOn y se introduce:
Ntunero de varltables : 4
Nllmero de funciones : 3 .
N m e r o de miniterminos : 9
- 3. i -
Y luego se introduce la tabla anterior.
AI terminar el programa, se tendrll la selecci6n minima.
Posteriormente, se eJecuta el programa de realizaci6n con
compuertas NAND, que pedirll el rimero de funciones (3) y el
ntunero de variables (4).
Esto completa la obtention de la realizaci6n en 16gica NAND de
dos entradas de las tres funclones.
_ " " " " - S E L E C C I O N " " _ " " _
Fi F2 F3 : B -C D
F3 : B -C
Fi -B C D
F2 A -B C
Fi F2 -A -B C -D
Fi F3 : -A B -C
F3 : A -C -D
Fi F3 : -A -B C D *
REALIZACION NAND DOS ENTRADAS LOGICA TTL
REALIZADO POR: GUZMAN LOPEZ MIGUEL ANGEL SEPTIEMBRE / , 1 9 8 7
Fi = CHIP: 7 PIN: i i
F2 = CHIP: 9 PIN: 6
F3 z CHIP: i i PIN: i i
- 3 . 2 -
R E
CHIP: i
CHIP: i
CHIP: i
CHIP: i
CHIP: 2
CHIP: 2
CHIP: 2
CHIP: 2
CHIP: 3
CHIP: 3
CHIP: 3
CHIP: 3
CHIP: 4
S U L
PIN: 3
PIN: 6
PIN: 8
PIN: 1 i
PIN: 3
PIN: 6
PIN: 8
PIN: i i
PIN: 3
PIN: 6
PIN: 8
PIN: i 1
PIN: 3
T A D O S :
ENTRADAS C , C
ENTRADAS I3 , CHIP :
ENTRADAS CHIP: 1
ENTRADAS I) , CHIP:
ENTRADAS 13 , B
ENTRADAS C , CHIP :
ENTRADAS CHIP: 2
ENTRADAS I) , CHIP :
ENTRADAS CHIP: i
ENTRADAS A , A
ENTRADAS CHIP: 2
ENTRADAS I3 , D
ENTRADAS C , CHIP :
i PIN: 3
PIN: 6 , CHIP: i PIN: 6
i PIN: 8
2 PIN: 3
PIN: 6 , CHIP: 2 PIN: 6
2 PIN: 8
PIN: i i , CHIP: 2 PIN: i i
PIN: 3 , CHIP:' 3 PIN,: 6
3 PIN: i i
CHIP: 4 PIN: 6 ENTRADAS CHIP: 3 PIN: 8 , C'HIP: 3 PIN: 8
CHIP: 4 PIN: 8 ENTRADAS CHIP: 4 PIN: 3 , CHIP: 4 PIN: 3
CHIP: 4 PIN: i i ENTRADAS CHIP: 4 PIN: 6 , CHIP: 4 PIN: 8
CHIP: 5 PIN: 3 ENTRADAS CHIP: 3 PIN: 3 , CHIP: 3 PIN: 3
CHIP: 5 PIN: 6 ENTRADAS CHIP: 4 PIN: t i , CHIP: 5 PIN: 3
CHIP: 5 PIN: 8 ENTRADAS 16 , CHIP: 3 PIN: 6
CHIP: 5 PIN: i i ENTRADAS CHIP: 5 PIN: 8, CHIP: 5 PIN: 8
CHIP: 6 PIN: 3 ENTRADAS CHIP: i PIN: 3 , CHIP: 5 PIN: i i
CHIP: 6 PIN: 6 ENTRADAS C , D
CHIP: 6 PIN: 8 ENTRADAS CHIP: 6 PIN: 6 , CHIP: 6 PIN: 6
CHIP: 6 PIN: i i ENTRADAS CHIP: 4 PIN: 6 , CHIP: 6 PIN: 8
CHIP: 7 PIN: 3 ENTRADAS CHIP: 6 PIN: 3 , CHIP: 6 PIN: i i I
CHIP: 7 PIN: 6 ENTRADAS CHIP: 5 PIN: 6 , CHIP: 5 PIN: 6
CHIP: 7 PIN: 8 ENTRADAS CHIP: 7 PIN: 3, CHIP: 7 PIN: 3
- 3 . 3 -
CHIP: 7 PIN: i i ENTRADAS CHIP: 7 PIN: 6 , CHIP: 7 PIN: 8
CHIP: 8 PIN: 3 ENTRADAS A. ,. CHIP: 2 PIN: 3
CHIP: 8 PIN: 6 ENTRADAS CHIP: 8 PIN: 3 , CHIP: 8 PIN: 3
CHIP: 8 PIN: 8 ENTRADAS C , CHIP: 8 PIN: 6
CHIP: 8 PIN: i i ENTRADAS CHIP: i PIN: i i , CHIP: 8 PIN: 8
CHIP: 9 PIN: 3 ENTRADAS CHIP: 8 PIN: i i , CHIP: 6 PIN: i i
CHIP: 9 PIN: 6 ENTRADAS CHIP: 4 PIN: t i , CHIP: 9 PIN: 3
CHIP: 9 PIN: 8 ENTRADAS CHIP:. i PIN: 6 , CHIP: 1 PIN: i i
CHIP: 9 PIN: i i ENTRADAS CHIP: 9 PIN: 8, CHIP: 9 PIN: 8
CHIP: 10 PIN: 3 ENTRADAS CHIP: 6 PIN: 3 , CHIP: 9 PIN: i t
CH1P:iO PIN: 6 ENTRADAS A , CHIP: i PIN: 3
CHIP:í0 PIN: 8 ENTRADAS CHIP:í0 PIN: 6 , CH1P:iO PIN: 6
CH1P:iO P1N:ii ENTRADAS CHIP: 3 PIN: i i , CH1P:iO PIN: 8
CHIP: i f PIN: 3 ENTRADAS (CHIP: 6 PIN: i i , CHIP: 10 PIN: i i
CHIP: i i , PIN: 6 ENTRADAS (CHIP: 10 PIN: 3, CHIP: 10 PIN: 3
CH1P:'ii PIN: 8 ENTRADAS (CH1P:ii PIN: 3 , CHIP: i i PIN: 3
CHIP: i i PIN: 1 1 ENTRADAS CHIP: t i PIN: 6 , CHIP: i i PIN: 8
EVALUACION DE LAS FUNCIONES OBTENIDAS:
D: i C: í B: O A: 43 FZ = O
D: 1 C: i B: O A: O F3 = i
a - 3 . 4 -
l.
EJEMPLO 2:
(Teoría de Conmutacidn y Diseno Ldgico, Hill 81 Peterson,
Secc. 7 . 5, P. 182 1
Se desea obtener un decodificador BCD a 7 segmentos, se supone
que si no se dh un dIgito BCD, en la salida se tienen todos 10s
segmentos apagados.
Dígito Decimal Fi F2 F 3 F4 F5 F6 F7
O O i i i i i i
I
4
5
6
1
8
9
; 0 0 i 1 0 0 0
i i o i i o i
i i i i i o o
i o i i o i o
i i i o i i o
i i i o o i i
o o i i i o o i i i i i i i
i o i i i i o
Primero, se hace una lista de con los miniterminos de las
funciones, ordenandolos. crecientemente, clasificados por el
ntlmero de unos que tiene e indicando a qut funciones pertenecen:
- 3 . 5 -
Dígito Decimal Fi F2 F3 F4 F 5 F6 F7
O o i i i i i i
i o o i i o o o "~""""""""-.""-""""""""-
2 i i o í i o i
e , i O l í O i O
8 i i i i i i i
3 i i i i i o o .....................
5 i i i o i í o
6 i i i o o i í
9 i O l i i i 0
7 o o i i i o o .....................
Se eJecuta el programa de reducci6n y se introduce:
Nlhmero de variables : 4
Ntunero de funciones : 7
Nilmero de minittrminos : i0
Y luego se introduce la tabla anterior.
Al terminar el programa, se tendra la selecci6n mínima,
Posteriormente, se ejecuta el programa de realizaci6n con
compuertas NAND, que pedir'& el nllrnero de funciones ( 7 ) y el
nlhmero de variables ( 4 ) .
Esto completa la obtenci6n de la realizaci6n en ldgica NAND de
dos entradas del decodificador.
- 3.6 -
" " - " " * S E L E C C I O N
F2 F3 F4 F5 F6 F7 :
F1 F2 F4 F5
F1 F3 F4 F5 F6
F1 F3 F6
Fi F2 F3 F5 F6
F3 F4 F5
Fi F2 F7 :
F3 F4
F3 F4 F6
-A -B -C
B -C -D
-B -C D
-A C -D
A -B C
A B -D
-A B -D
-B -C
-A -B -D
- " " " " _
-D
REALIZACION NAND DOS ENTRADAS LOGICA TTL
REALIZADO POR: GUZMAN LOPEZ MIGUEL ANGEL SEPTIEMBRE / 1987
F1 = CHIP: 7 PIN: 1 1
F2 = CHIP: 9 PIN: 6
F3 = CHIP: 13 PIN: 3
F4 = CHIP: 13 PIN: 11
F5 = CHIP: 14 PIN: 6
F6 = CHIP: 15 PIN: 1 i
F7 = CHIP: 16 PIN: 3
R E S U L T A D O S :
CHIP: 1 PIN: 3 ENTRADAS C , C
CHIP: 1 PIN: 6 ENTRADAS B , CHIP: 1 PIN: 3
CHIP: i PIN: 8 ENTRADAS CHIP: 1 PIN: 6 , CHIP: i PIN: 6
- 3.7 -
CHIP: 1
CHIP: 2
CHIP: 2
CHIP: 2
CHIP: 2
CHIP: 3
CHIP: 3
CHIP: 3
CHIP: 3
CHIP: 4
CHIP: 4
CHIP: 4
CHIP: 4
CHIP: 5
CHIP: 5
CHIP: 5
CHIP: 5
CHIP: 6
CHIP: 6
CHIP: 6
CHIP: 6
CHIP: 7
CHIP: 7
CHIP: 7
CHIP: 7
CHIP: 8
CHIP: 8
CHIP: 8
FIN: 1 i
PIN: 3
PIN: 6
PIN: 8
PIN: 1 i
PIN: 3
PIN: 6
PIN: 8
PIN: í i
PIN: 3
PIN: 6
PIN: 8
PIN: í í
PIN: 3
PIN: 6
PIN: 8
PIN: í í
PIN: 3
PIN: 6
PIN: 8
PIN: 1 1
PIN: 3
PIN: 6
PIN: 8
PIN: 11
PIN: 3
PIN: 6
PIN: 8
ENTHADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTHADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
D , D
CHIP: i PIN: 8 , CHIP:
€ 3 , B
CHIP: i PIN: 3 , CHIP:
CHIP: 2 PIN: 8 , CHIP:
D , CHIP: 2 PIN: i i
CHIP: 2 PIN: 3 , CHIP:
A , A
C , CHIP: 3 PIN: 8
CHIP: 3 PIN: i i , CHIP:
CHIP: i PIN: i i , CHIP:
CHIP: 3 PIN: 6 , CHIP:
CHIP: 4 PIN: 6 , CHIP:
A , CHIP: 2 PIN: 6
C , CHIP: í PIN: i i
CHIP: 5 PIN: 3 , CHIP:
CHIP: 5 PIN: 6 , CHIP:
CHIP: 5 PIN: 8 , CHIP:
B , CHIP: 3 PIN: 8
1
2
2
3
3
4
3
4
5
5
5
CHIP: 6
CHIP: 1
CHIP: 6
CHIP: 4
CHIP: 7
CHIP: 7
CHIP: 2
CHIP: 8
CHIP: i
PIN: 6 , CHIP: 6
PIN: i i , CHIP: 6
PIN: 3 , CHIP: 6
PIN: i i , CHIP: 4
PIN: 3 , CHIP: 7
PIN: 6 , CHIP: 7
PIN: 6 , CHIP: 3
PIN: 3 , CHIP: 8
PIN: 3 , CHIP: 8
PIN: 1 I
PIN: 6
PIN: 8
PIN: 3
PIN: í i
PIN: 3
PIN: 6
PIN: 8
PIN: 3
PIN: 6
PIN: i i
PIN: 6
PIN: 8
PIN: i i
FIN: i 1
PIN: 3
PIN: 8
PIN: 8
PIN: 3
PIN: 6
- 3 . 8 -
CHIP: 8
CHIP: 9
CHIP: 9
CHIP: 9
CHIP: 9
CHIP: 10
CHIP: io
CHIP: 10
CHIP: 10
CHIP: i i
CHIP: f i
CHIP: i i
CHIP: i i
CHIP: i 2
CHIP: f 2
CHIP: 12
CHIP: 12
CHIP: i 3
CHIP: i 3
CHIP: 1 3
CHIP: i 3
CHIP: 14
CHIP: 14
CHIP: i4
CHIP: 14
CHIP: i 5
CHIP: 15
PIN: I i
PIN: 3
PIN: 6
PIN: 8
PIN: 1 i
PIN: 3
PIN: 6
PIN: 8
PIN: 1 1
PIN: 3
PIN: 6
PIN: 8
PIN: i i
PIN: 3
PIN: 6
PIN: 8
PIN: I i
PIN: 3
PIN: 6
PIN: 8
PIN: i i
PIN: 3
PIN: 6
PIN: 8
PIN: 1 1
PIN: 3
PIN: 6
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADA§
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
ENTRADAS
CHIP: 2
CHIP: 8
CHIP: 7
CHIP: 3
CHIP: 4
CHIP: 9
CHIP: 9
CHIP: ; O
,A , B
CHIP: 10
CHIP: i
CHIP: 2
CHIP: i
CHIP: i i
CHIP: i i
CHIP: 10
CHIP: 12
CHIP: 12
CHIP: 3
CHIP: 1 3
CHIP: i 2
CHIP: 6
CHIP: 14
CHIP: í 3
CHIP: 4
CHIP: 6
CHIP: 14
PIN: 3 ,
PIN: í i ,
PIN: 8 ,
PIN: 3 ,
PIN: 6 ,
PIN: 8 ,
PIN: 1 1 ,
PIN: 3 ,
PIN: i i ,
PIN: i i ,
PIN: 8 ,
PIN: 1 i ,
PIN: 8 ,
PIN: i i ,
PIN: 8 ,
PIN: 6 ,
PIN: 8 ,
FIN: 3 ,
PIN: 6 ,
PIN: i f ,
PIN: 3 ,
PIN: 3 ,
PIN: 8 ,
PIN: 6 ,
PIN: 3 ,
PIN: i 1 ,
CHIP: 8
CHIP: 8
CHIP: 9
CHIP: 8
CHIP: 6
CHIP: 9
CHIP: 9
CHIP: i O
CHIP: i o
CHIP: i i
CHIP: i 1
CHIP: 8
CHIP: i i
CHIP: i2
CHIP: 10
CHIP: 12
CHIP: 1 2
(:HIP: 9
CHIP: 1 3
CHIP: i 3
CHIP: 1 i
CHIP: 14
CHIP: 14
CHIP: í O
CHIP: I i
CHIP: 14
PIN: 8
PIN: i i
PIN: 3
PIN: 8
PIN: 3
PIN: 8
PIN: i i
PIN: 6
PIN: i i
PIN: 3
PIN: 6
PIN: 6
PIN: 8
PIN: 3
PIN: 8
PIN: 6
PIN: i i
PIN: 3
PIN: 6
PIN: 8
PIN: 6
PIN: 3
PIN: 6
PIN: 3
PIN: i i
PIN: i I
- 3 . 9 -
CHIP:í5 PIN: 8 ENTRADAS CHIP:í5 PIN: 3 , CHIY:I5 Y 1 N : 3
CHIP:í5 PIN: í i ENTRADAS CHIP: 15 PIN: 6, CHIP:í5 PIN: 8
CHIP: 16 PIN: 3 ENTRADAS CHIP: 6 PIN: i i , CHIP: 8 PIN: 8
- 3. í o -
A P E N D I C E A
CIRCWTIOS DE SALIDA MULTIPLE A DE MINIMIZACION DE
PROGRAM Cubos; I
MINIMIZA HASTA NUMFUNC FUIICIONES ]"OR EL METODO DE QUINE-MCKLUSKY
REALIZADO FOR: GuzMAlv LOPEZ MIbXJlL ANGEL SEPTIEMERE/l987
USA TRES ARCHIVOS DE TRABAJO CiW ESTAN ABIERTOS SI"L,T-. AL FINAL DEL FROGRAMA SE B O R W ESTOS Y SE PROWCEN TANTOS ARCHIVOS DE SALIDA COMO FUNCIONES SE MINIMICEN (ESTOS ARCHI- VOS SE ABREN UNO A LA VEZ)
1
CONST WAR= 12; NuMFuNc=8; r4uKmKx W O O ; ArchReduc='REWC.DAT';
TYPE tipo-cubo= RECORD
pr m-cubo, f cubos que se combinan 1 seg-cubo, nun-unos, f numero de unos en el minltermino 1 d if erenc la, i diferencia entre los cubos-O menores 1 peso, f numero de cubos4 que cubre 1 f unc, f funclones a la que pertenece 1 noopc, f funciones en las que no es opcional 1 cubierto: integer; f funclones ya cubiertas 1
E N D ; tlpo-arrprod=ARRAY[l. .WAR] OF -WAR. .MAR; tipo-prod=RECORD
1 ong i tud: O . . MAR; componente: t ipo-arrprod
END;
VAR cubo: ARRAY [ 1 . . NUMWl3OS] OF t 1 po-cubo; indice-cubos, f numero de cubos-n obtenldos 1 nun-rnrni: integer; f nimero de minlterminos en 1 as funciones 1 reduccion: FILE OF integer; Fi lePtr : FILE; tot-var : integer; tot-func : Integer;
PROCEDURE resultados; f
ESCRIBE LOS TERMINOS RESULTAIjO TANTO EN ARCHIVOS PARA PASAR DATOS AL PROGRAMA DE CONVERSION A LOGICA NAND CaMo EN FORMATO LEGIBLE.
1 VAR nun-cubo, ind, cont-var, dif, funcs: Integer; arree 1 o: t ipo-arrprod;
nombre: strlng [ E O ] ; reg-datos: tlpo-prod; datos: FILE OF t lpo-prod;
PROCEMJRE sal ida ( num-fun: Integer 1; I
1 BEG IN
ESCRIBE UN FROWCTO EN EL ARCHIVO CORRESPONDIENTE A LA FWCION nun-fun i
nombre: = ,SIJMPROD'+CHR( ORD( ' 0 ' )+md )+ .DATI; ASSIGN( datos, nombre 1; RESET( datos 1; SEEK( datos, Filesize( datos ) ); reg-datos. longitud: zcont-var; reg-datos.componente:=arreglo; WRITE( datos, reg-datos 1; CLOSE( datos )
-1
BEGIN f resultados 1 WRITEL,N(con ); WRITELN( con ); WRITEL,N(con, - - RESET( reduccion ); FOR lnd: =l TQ tot-func Do BEGIN
_ " _ "" S E L E C C I O N - - - - . ' ) ""
nombre: ='SIJMPROD'+CHR( ORD( ' 0 ' )+md )+ .DAT#; ASSIGN( datos, nombre 1; REWRITE( datos ); CLOSE( datos )
m: { VACIA TODO EL ARCHIVO QUE COWIE€E LOS CUBOS SELECCIONADOS 1 W H I L E NOT EOF(reducc1on) DO BEG IN
READ( reducc ion, nun-cubo. ); d If: --cubo [nun-cubo] . dif erenc pa; funcs: =cubo [nun-cubo] . func; WH I L E cubo [nun-cubo] . prim-cubo < O DO
nu-cubo: =cubo [nm-cubo] . prim-cubo; cont-var: =O; [ SE KMAN LAS VARIABLES NO ELIMINADAS EN ESE CUBO 1 FOR Ind: =1 TO tot-var DO BEG IN
1
num-cubo: = -cubo [nun-cubo J . pr Im-cubo;
IF ( dif MOD 2 ) = O THEN BEG IN
cont-var: z cont-var + I; IF ( nun-cubo MOD 2 1 = 1 THEN arreglo[cont-var]: = ind ELSE arreglo[cont-var]: = - m d
EM); nm-cubo: z nun-cubo DIV 2; dlf: z dif DIV 2;
END; I SE DESPLIEGAN EN FORMATO LEGIBLE 1 FOR ind: =l TO tot-f unc DO
BEG I N IF (funcs MDD 2 z O 'I'HEN
EISE WRITE(con, ' )
BEG I N WRITE(con, IF', lnd: 1, ' ); sal Ida( Ind )
funcs: 5 funcs DIV 2 m;
E N D ; WRITE(con, : ); FOR ind: :: 1 TO cont-var DO
WRITE(con, ' ' ); IF arreglo[ind] < O THEN WRITE(con, ' - I )
ELSE WRITE(con, 1; W R I T E ( con, CHR( ABS(arreglo[lnd] ) + ORD('A') - 1 ) );
BEG IN
EM); WRITELN(con )
EM>; WRITELN(con 1; WRITELN(con )
END; f resultados 1
FUNCTION cuenta-unos (
DEWELVE EL NUMERO 1 VAR
BEGIN result: integer;
result: =O;' W I L E n>O DO BEG IN
IF ( n m D 2 ) = result: zresul t
n : = n DIV 2 m;
n: integer 1: Integer;
DE UNOS QUE TIENE UN TEZMINO
&
l"€EN + 1;
cuenta-unos: =result m, PROCEDURE obten-cubos; I
GENERA cubos-n A PARTIR DE cubos-0, CONSIDERAMX> PARA CCIMBINARSE: - LOS cubos-n con LAS MISMAS VARIABLES ELIMINADAS
- AQUELLOS EN LOS CUALES SE ELIMINA UNA NUEVA VARIABLE ( I G U A L dlf erencia)
(LA DIFERENCIA ENI?zE LOS cubos-0 MENORES ES UNA PQTENCIA DE DOS)
- AQUELLOS QUE PERTENECEN AL MENOS A UNA FUNCION C W 1 CONST
VAR NoOPcIONAL=$FF;
primer-cubo, ult-cubo, indice, seg-lndlce, dif: Integer;
unos, f u n c s : I n t e g e r ;
FROCEDURE otro-cubo ( cubl , cub2 , d if, unos, f unc lones, no-opc: lnteger ); f
OBTIENE UN NUEVO CUBO con LOS DATOS c u b l , c u b 2 , clif, unos Y f u n c l o n e s
1 BEG I N
IF lndlce-cubos >= l4U"BC)S THEN BEGIN
wHITEL,N(t ERROR DEMASIADOS CUBOS 1; HALT
EM>
BEG I N ELSE
Indice-cubos: lndlce-cubos + 1 ; WITH cubo [ lndice-cubos] Do BEG IN
L
prim-cubo: = c u b l ; seg-cubo: rcub2; d I f e r e n c ia: = d l f ; nun-unos: -unos; f unc: = func lones ; c u b i e r t o : =O; noopc: =no-opc
EMD EM)
EM);
FUNCTION d i f e r e n c i a ( c u b l , c u b 2 : I n t e g e r 1: I n t e g e r ; f
OBTIENE LA DIFERENCIA ENTRE LOS cubos-0 MENORES CORF¿ESPONDIE?4TF.S A LOS cubos-n cubl Y cub2
1 BEG I N
W H I L E cubo [cubl] . prim-cubo < O DO c u b l : -- -cubo [ cubl ] . prlm-cubo;
WHILE c u b o [ c u b 2 ] , prim-cubo < O Do cubil: z -cubo [cub2 J . prim-cubo;
d i f e r e n c i a : = cubo (cub21 . prlm-cubo - cubo [ cubi l . prim-cubo END;
M C T I O N p o t d e d o s ( e n t : i n t e g e r 1: boolean ; I
I VAR
BEG I N
DEVUELVE TRUE S I LA ENTRADA E S UNA POTENCIA DE 2
1 , p o t : I n t e g e r ;
potdedos: -FALSE; pot: - 1 ; W H I L E 1 < = t o t - v a r Do
BEGIN IF e n t = p o t THEN BEG I N
potdedos: ITRUE; 1 : .ERwAR
E N D ; pot : 5 p o t r 2 ; 1 : : ltl
END END:
PROCEDURE 1 ee-m~ n 1 te rm; f
1 VAR
LEE LOS MINITERMINOS Y LAS FWNC IONES A LAS UUE PERTENECEN
m l n l t e r , opcional, conl funcs , numbl t : In teger ; r e n , c o l , i n d : I n t e g e r ; f u n c i o n e s : char;
PROCEDURE encabezado; f
ESCRIBE UNA LINEA PARA GENERAR UNA TABLA DE CAPTURA DE W R O DE MINITEXMINO Y FUNCIONES A LAS I Q U E PERTENECE
1 VAR
BEG IN lnd : In teger ;
C 1 rScr; GOTOm(1, 1 ); WRITE( MINITEXMINO 1; FOR Ind: = 1 TO t o t f u n c Do
WRITE(’ F J , In;?: 1 ) ; WRITELN; ren : - 3
E N D ;
PROCEDURE ordena-cubo; VAR
ind : in teger : aux: t ipo-cubo;
lnd: I indlce-cubos; WHILE m d > 1 DO
lnd: = O
BEGIN
IF cubo[ indJ .nm-unos >= cubo[ind-11 .num-unos THEN
ELSE BEG IN
aux: -cubo [ ind] ; c u b o [ l n d J : = c u b o [ l n d - l ] ; cubo [ ind- 1 J : = aux; ind: = ind-1
END m BEGIN I lee-minlterm 1
WRITE(’ CUANTOS MINITEIIMINOS? : 1: READLN(num-mln1);
mdlce-cubos: =O; .
encabezado; WILE lndice-cubos < nun-minl Do BEG I N
GOTOXY ( 2 , ren 1: W R I T E ( lndLce-cubos+i: 5, ' : 1; READLN(miniter 1; col: r i g ; conJfuncs: =O: opcronal: =NOOPCIONAL; numbit: = l ; FOR.'ind: S TO tot-f unc DO
BEG IN GOTOXY( col, ren 1; READ( KBD, funciones 1; funciones: =UPCASE ( f unc iones 1; CASE funciones OF
' i ': conJfuncs: =conjfuncs + numbit; 'X!: BEGIN
,con~funcs: =conjfuncs + numbit; opcional: opcional - numbit
EM>; ELSE fbciones: = ' 0 ) ;
E2Q ['OF CASE 1 GOTOXY( col, ren 1; W R I T E ( funciones ); numbit: = numbit * 2; col: :: c01+4
w ren: = ren + i; IF ren > 22 THEN
encabezado; otro-cubo (mini ter, mln i ter, O, cuenta-&os (mini ter ),
ordena-cubo
$
conjfuncs, opcional 1; I
m; WRITELN(con1
EIQ 1 lee-miniterm 1
BEGIN I obten-caos f pr ¡mer-cubo: = i ; I ee-min i term; WRITEIS(' ! GENERANDO CUBOS-n . , ' ) ; u1 t-cubo: -nm-minl; f PARA TODOS LOS CUBOS, 'EXCEPTO LOS DE LA ULTIMA CLASE,
W H I L E u1 t-cubo > primer-cubo DO BEG IN
BUSCA CWINACION 1
indice : :: primer-cubo; unos: =cubo [u1 t-cubo] . num-unos; W H I L E cubo [indice] . nm-unos < unos DO BEG IN
seg-indice: =indice + 1; W H I L E cubo[seg-indice] .nm-u.nos = cubo[indice] .num,unos DO
seg-indice: =seg-indice + 1;
REPEAT I HASTA QUE LA DIFERENCIA ENTRE cubos-n SEA DE MAS DE Dos VARIABLES O SE ACABEN LOS CUBOS 1
dlf: =diferencia( lndlce, seg-indice ); (VARIABLES QUE SE ELIMINANI funcs: =cubo[segLlndicel .func AND cubo[indrce] .func; f FUNC. cm. )
( cubo[seg indlce] .dlferencla = cubo[mdlce] .dlferencra ) IF potdedos ( dlf ) AND
AND (funcs-<> O ) THEN BEG IN otro-cubo(-lndice, -seg-lndlce, dif+cubo[seg-indice] .diferencia,
IF cubo [ lnd ice] . f unc =f uncs THEN cubo [ lndlce] . cublerto: =f uncs;
IF cubo[seg-lndicel .func=funcs THEN cubo [seg-lndlce] . cublerto: Zfuncs
cubo[seg-lndlcel .nmn_unos, funcs, NOOPCIONAL );
EM); see-lndice: =see indlce + 1
UNTIL ( (cubo [segIindlce] . nun-unos-cubo [ mdice] .num-unos ) > 2 )
indice: = indice+l OR (seg-indlce > ult-cubo 1;
m t primer-cubo: = u1 t-cubo + 1; u1 t-cubo: = indice-cubos
EM) f obten-cubos 1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
PROCEDURE se 1 ecc ion-min lma;
CONST DA”0S PARA LAS RUTINAS DE ACCESO INIDZADO DE ARCHIVOS 1
MINI?43=8; MaxDataRecSize~5; MaxKeyLen = 5; Pagesí ze = 24; Order = 12; PageStackSize =8; Mame i ght = 5;
t
HVTINAS DE ACCESO INIDZADO DE ARQ3IVOS 1 ($1 a: urbopasoolbox\access. box] f $ I a: urbopasoolboxetkey. box) {$I a:urbopasoolbox\addkey.boxf ($1 a: urbopasoolboxelkey.box]
TYPE strE=strlng[E]; implicante= RECORD
nun-cubo: str2; cubre : lnteger
E N D ; VAR
Imp-pr imos: DataFi 1 e; lnd-primos: IndexFi 1 e;
J
ap-prlmos : Integer; primo: imp1 Icante; lnd: integer; numero-cubo, mayor: Integer;
FUNCTION StrToInt( cad: str2 1: Integer; I
1 BEG IN
m
DECODI FI CA UNA CADENA DE DOS CARACTERES Y DEVUELVE UN ENTE230
StrToInt : Swap( ORD(cad[ll) ) + ORD( cad[E] ) t 38000
RTNCTION InToStr( n: integer ): str2; f
1 BEGIN
CODIFICA UN ETTIERO EN UNA CADENA DE DOS CARACTERES
n : = n + 38000; InToStr : = CHR( Hi(n) ) + CHR( Lo(n) )
EM);
PROCEDURE menor-costo; f
I VAR
BUSCA LOS cubos-n QUE CUBREN MAYOR NWERO DE cubos-0
bitf unc, I: Integer;
PROCEDURE pon-cublertos ( n, funcs: Integer 1; f
MARCA LOS cubos-0 CUBIERTOS, INDICAMX) EN QUE FUNCIONES SE CUBRIERON
1 VAR
BEG I N aux: integer;
IF cubo [n] . prim-cubo < O THEN BEG I N
pon-cubiertos ( -cubo [n] . prim-cubo, funcs ); pon-cubiertos ( -cubo [n] . seg-cubo, funcs )
END
BEG IN ELSE
aux: = fUnCS AND cubo In]. func AND (NOT cubo [n] . cublerto ) IF aux < > 0 THEN
AND cubo En] . noopc; cubo[n] . cublerto: = cubo [n) .cubierto OR aux
END END;
FUNCTION peso( n: integer ): lnteger; f
DEVUELVE EL NUME30 DE cubos--0 QUE CUBRE EL cubo-n n , SOLO CONSIDERA AQUELLQS QUE NO ESTABAN CUBIERTOS PARA
LAS FUNCIONES A LAS QUE PEZTENECE EL cubo -n 1 VAR
BEG I N aux: integer;
IF cubo [n 1 . prlm-cubo < 0 THEN peso: I peso ( -cubo[ri] . prim-cubo ) +
peso ( -cubo En] . seg-cubo ) ELSE
BEG IN aux: : bitf unc AND cubo [n J . f unc AND (NOT cubo [n] . cubierto )
AND cubo [n J . noopc; peso: =cuenta-unos ( aux )
END EM>;
PRGCECURE obten-mayor; I
1 VAR
OBTIENE EL cubo-n QUE CUBRE MAYOR NUMERO DE cubos-0
mayor-peso: integer; aw: str2; OK-Am: boo 1 e m ;
OK = T R U E ; I INICIALIZA INDICES DE AEi:CHIVO DE IMPLICANTE3 PRIEOS 1 ClearKey( ind-primos 1; I TCHA UN IMPLICANTE PRIMO 1 PrevKey( índ-primos, ap-prrmos, prlmo.num.cubo ); mayor-peso: =O; mayor: =O; WHILE OK Do
BEG I N
BEG IN
. .
*
GetRec ( imp-primos, ap-primos, prlmo ); numero-cubo: = StrToInt ( primo. nun-cubo ); bltfunc: =cubo[numero-cubo] .func; cubo [numero-cubo J . peso: = peso ( numero-cubo ); IF cubo [numero-cubo J . peso > mayor-peso THEN
BEGIN mayor-peso: :cubo [numero-cubo] . peso; mayor-: =numero-cubo
f TWA OTRO IMPLICANTE PRIM33 1 E N D ;
PrevKey( ind-primos, ap-primos, primo.num-cubo 1 END
BEGIN I menor-costo 1 WRITELN(’ ! OBTENIENDO SELECCION MINIMA DE IMPLICAFETES PRIMOS .. I); o bten-mayor; W I L E mayor > O Dc)
BEG IN WRITE ( reducc lon, mayor 1; pon-cublertos (mayor, cubO [mayor] . f unc );
obten-mayor m;
E N D ; t menor-costo 1
BEGIN I selecclon-mlnima 1 WRITELN( ! OBTENIENIXI IMFLICANES PRIMOS ' ) : f CREA ARCHIVO DE IMPLICANTES PRIMAS 1 MakeFlle( imp-primos, IMPRIM. DAT',. MINIMO); MakeIndex( ind-primos, IMPRIM. IDX', 2, O 1; InitIndex; f CREA ARCHIVO DE IMPLICANTES PRIMOS SELECCIONADOS EN REDUCCION f ASSIGN(reducc ion, ArchReduc 1; REWRITE(reducc1on); FOR md: =l TO Indice-cubos DO f :3ELECCIONA LOS IMPLICXNIES PRIMOS 1 BEGIN
cubo [ ind] . nun-unos: =O; cubo [ ind J . peso: =O; IF cubo (ind] , cubierto < > (cubo [ ind] . f unc AND cubo [ md) . noopc ) "HEX
4
BEGIN primo. nun-cubo: 2 InToStr ( ind ); OK: =TRUE; AddRec ( imp-primos, ap-_primos, pruno ); IF OK THEN AddKey( intl-primos, ap-prlmos, primo.nurr-cubo ) ELSE WRITELN(' ERROR : NO AGREGO UN IMPLICANI'E PRIM3' )
END; cubo [ ind] .cubierto: =O;
m menor-costo; resultados; CLOSE (reducc ion ); CloseFi le (imp-primos 1; CloseIndex( ind-primos ); f SE BORRA EL ARCHIVO DE IMPLIcAFiTES F'RIKIS 1 ASSIGN(Fi lePtr, ' IMPRIM. DAT' 1; ERASE(Fi1ePt.r); ASSIGN(FilePtr, IMPRIM. IDX' ); ERASE (Fi lePtr )
E N D ;
BEG IN indice-cubos: =O; WRITELN(con 1; WRITELN(con, J REWCCION DE FUNCIONES POR EL METODO DE QUINE-McKLUSKY ' 1; WRITELN(con); WRITELN(con, REALIZADO POR : GuzMAN LOPEZ MIGUEL ANGEL, ' 1; WRITELN(con, SEPTIEMBRE / 1987 ' 1; WRITELN(con); WRITE( CUANTAS VARIABLES SE UTILIZAN [l.. ', NUWAR, '1 ? 1; READW( tot-var 1; IF NOT( tot-var IN [l. .NUWAR] 1 THEN
BEG I N I WRITEM( " E X 0 ILEGAL DE VARIABLES 1;
HALT E N D ;
WRITE(' CUANTAS FUNCIONES [l.. ' , N U N C , ' I ? ' 1; m m ( tot-func 1; IF NOT( tot-func IN [l. . N U " U N C l ) THEN
BEG IN WRITELN( NUMERO ILEGAL DE FUNCIONES 1; HALT
END ; obten-cubos; selecclon-mlnima;
ASSIGN(FilePtr, ArchReduc 1; ERASE(Fl1eFtt-1
f SE BORRA EL ARCHIVO DE IMPLIWES PRImS SELECCIONADOS EN REWICCION j
END.
t
R E A L I Z A D O FOR: GUZMAN LOPEZ MIGUEL ANGEL SETIEMBREi1987
USA TANTOS A R C H I VOS DE ENTRADA COMO FUNCIONES SE REALICEN QUE SE ABREN UNO A LA VEZ Y DOS ARCHIVOS DE TRABAJO UUE SE ABREN S I W T - . LOS ARCHIVOS DE TRABAJO SE EORRAN' AL TERMINAR EL PROGRAMA.
CONST WAR 12; NUMFUNC =. 8; MAXCW = 32767; MAXPROD = 1000; f DA'IDS PARA LAS RUTINAS DE ACCESO I N D I Z A D O DE ARCHIVOS 1 MaxDataRecSize = 5; MaxKeyLen = 5; Pages 1 z e = 24; Order = 18; PageStackSize = 8; MaxHe ight = 5; NANDDAT : 'NAND. DAT'; NAND1 DX : 'NAEP). IDX';
I
TYPE str2=strlng[E]; f
exp-boo 1 = integer; tipo-comp: stringl41; tipo_arrprod=ARRAY[l.,~AR'J OF -NmVAR. .MAR;
9
tipo-prod-RECORD 1 ong i tud: 0. , N U M V A R ; componente: tlpO-WrprOd
m;
VAR compuerta: tlpo-comp; UI t-nand: exp-boo1; t numero de compuertas usadas 1 S u n de Prod: ARRAY[l, .MAXPROD1 OF tipo-prod; f productos de cada func ion 1 F1 lePtF : FILE: nand.-dat: DataFl le; nand- idx: IlldexF 1 1 e; nand-ptr: Integer; nm-prod: byte; I numero de prod. de entrada 1 nun-f unc, tot-f unc: integer;
tot-vars: Integer; funclon:ARRAY[l. . N u M N N c ] OF exp--bcol; I resultado de la reallzdclon 4
FUNCTION InToStr( n: Integer ); str2; f
1 BEG IN
CODIFICA UN EN’IERO EN UNA C A D N DE DOS CARACTERES
n: =n + $8000; InToStr: : CHR( Hi (n) 1 + CHR( Loin) )
m, FUNCTION StrToIn( S : str2 1: integer; I
1 BEG IN
DECODIFICA UNA OENA DE DOS CARACTERES Y DEVUELVE UN ENTERO
StrToIn: = Swap( ORD( S ClJ 1 1 + ORD( S [2] ) + $8000 E N D ;
FUNCTION una-compuerta(ent1, ent2: exp-bool,): exp-bool; f
DEVUELVE EL NUGRO DE UNA COMPUERT.A CUYAS RlT” 1 BEG IN IF entl > ent2 THEN BEGIN
compuerta: = InToStr (enti! ) + InToStr(ent1)
END
BEGIN ELSE
compuerta: = InToStr (ent 1 ) + InToStr (ent2 )
m; OK: =TRUE;
SON entl Y ent2
FmdKey( nand-idx, nand-ptr, compuerta ); IF OK THEN f SI YA MISTIA UNA CcevIpuERTA CON ESAS ENTRAIW 1
una-compuerta: = nand-ptr + NLWAR ELSE
IF u1 t-nand > = MAXCCMP THEN BEG IN WRITELN(tERROR DEMASIADAS CaElpuERTAS I 1; HALT
END
BEG IN ELSE
ult-nand: =SUCC(ult-nand 1; OK: = T R U E ; AddRec ( nand-dat, nand-ptr, compuerta ); IF OK THEN AddKey( nand-idx, nand-ptr, compuerta ) ELSE WRITELN( ’ N o AGREGO CCMPUE3TA I ) ;
una-compuerta: =u1 t-nand; END
END; I una-compuerta 1
"
FUNCTION not_a-nan$(entrada: exp-boo1 1: exp-bool; (
1 BEG IN
FEALIZACION DE UNA CCMFUERTA NOT CON COMFUERTAS NAND
not-a-nand: x una-compuerta (entrada, entrada.) END;
FUNCTION or-a--nand ( i n f , sup: i n t e g e r I : exp-bgo 1; I
1 VAR
R E A L 1 ZAC I ON DE UNA CCMPUERTA OH CON C C " A S NAND
.?dl medio : in teger ; .. . 2 ] OF exp-bool; z
RINCTION am-a-nand ( i n f sup: I n t e g e r ): exp-bool; f
REALEZACION DE UNA ColMpuERTA AND CON Ccklpunrr ASNAND
// "GÁR
1 /' .*
a;, I I
nm-operandop, medlo, lnd: integer; ,- / entrada : ARRAY [l. . 2 J O F exp-boo 1; BEGIN
nun-operapcp: : SUCC (sup- mf ); CASE nm-i)perandos OF
1 : and-a-nand: = a r r e g l o [ i n f ] ; E L S E I ~ I Z A U N A A N D D E I M A S D E 2 ~ C O N U N A R R E G L O A R B O L A D O 1
BEGIN medio: = (sup+ i n f ) DIV 2 ; e n t r a d @ [ l ] : =and-a-nand( i n f , m e d i o ) ; entradaL21: =and-a-nand (SVCC (medio ), sup ); FOR ind: = l TO 2 Do IF e n t r a d a [ i n d ] < (3 THEN
e n t r a d a r i n d l : :: not-a-nand(-entrada[Ind] ); I SE INDICA UNA MPKESION NEGADA 1 and-a-nand: 2 - una-compuerta (entrada 11, e n t r a d a (,2] )
END END f OF CASE 1
EM);
BEGIN nun-operandos: =SUCC ( sup- Inf ); CASE nun-operandos OF
1 : BEGIN I SE REALIZA EL PROEUCTO 1 arreg lo : wm-de-prod [ in f 1 . componente; or-a-nand: = and-a-nand ( 1 sum-de-prod [ i n f ] . I o n g i t u d ) m;
2 : BEGIN f SE REALIZAN DOS PRODUCTOS 1 arreglo : =sm-de-prodCinf 3 . componente; e n t r a d a [ 11 : = and-a-nand ( 1 , sum-de-prod Cinf J . l o n g i t u d 1; ameglo: =sum-de-prod [sup] . componente;
entradal21: : and-a-nand(1, sm-de-prod[supJ. longltud ); FOR lnd: I 1 TC] 2 EO IF entradaElnd1 > O THEN
' entradal indl : f not-a-nand (entrada[ Ind J 1 ELSE
entrada [ lndl : : -entrada [ lnd] ; or-a-nand : = una-comPuerta(entrada [ 11, entrada [ 2 ] )
ELSE f PARA MAS DE 2 EBTRADAS REALIZA UN ARREGLO ARBOLADO 1 END;
BEG I N medio: 2 ( s u p inf ) DIV 2; entrada [i]: = or-a-nand( lnf, medio 1; entradal21: = or-a-nand( SUCC(medio ), sup ); FOR ind: = i To 2 Do IF entradaCind1 > O 'THEN
entradatindl : = not-a-nand(entradaCind1 ) ELSE
entrada [ lnd] : z .-entrada [ ind] ; or-a-nand : = una-compuerta(entrada[i], entradaE21 ) m
EEJS; f OF CASE 1 END; I or-a-nand 1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . PROCEDURE 1 ee-datos; t
1 VAR
LEE LOS PROWCTOS PARA CADA FWNCION
datos: FILE OF tipo-prod; nombre: string [20] ;
nombre: =!SUMPROD' + &( ORD('O' t nun-func + I .DATI; ASSIGN(datos, nombre ); RESFl'(datos f ; nrrm-prod: =O; W I L E NOT EOF(datos ) DO BEG IN
BEG I N
num-prod: =num-prod + 1; READ(datos, sum-de-prod [numprod J );
EM); CLOSE (datos ) m NNCTION pin-sal ( n : exp-boo1 1: integer; f
1 BEG IN
DETERMINA EL FIN DE SALIDA EN C-TAS NAND Tm, (7400)
CASE n OF 1: pin-sal: = 3 ; 2: pin-sal: =6; 3: pin-sal: =8; ELSE pin-sal: = i i EM>
PROCEDURE escrlbe ( entrada: exp-boo 1 1; t
PROWRCIONA FORMATO DE S A L I D A CON NUMERO DE C.I. Y DE PIN PARA CADA ENTRADA Y SALIDA
1 VAR
BEGIN nun-comp, nun-chl p: Integer;
IF entrada < - MAR THEN
ELSE WRITE( con, CHR( ORD('AJ 1 t entrada - 1 ) )
BEGIN entrada: = entrada - WAR; num-chlp: = SUCC( PRED(entrada) DIV 4 1; nun-comp: - entrada MOD 4 : WRITE( con, CHIP: I , nun-chlp: 5, ); W R I T E ( con, I PIN: I , pln-sal (nun-comp): 5, 8 )
END EM>;
PROCEIXJRE resultados; VAR
i: byte;
BEGIN I resultados 1 WRITELN(con 1; WRITELN( con, R E S U L T A D 0 S : I ) ; wRITELN(c0n 1;
VACIA TOW LAS CCMF4XRTA.S UTIL.IZADAS 1
BEGIN FOR i : =SUCC(r"VAR) TO ult-nand D C I
nand-ptr: = I - NUMVAR; GetRec ( nand-dat, nand-ptr, compuerta 1; escribe ( i ): WRITE(con, ENTRADAS 1; escribe (StrToIn(COPY(compuerta, 1 , 2 ) ) ); WRITE(con, , ); escribe (StrToIn (COPY (compuerta, 31 2 ) ) 1; WRITELN(c0n )
EM> END; I resultados 1
PROCEDURE eva 1 uac Ion; VAR
vars: ARRAY [l. . NUWAR] OF byte; ind : byte; opclon: char;
res: exp-boo 1 ; compuerta: t I Po-comp;
IF exp <: NUMVAR THEN
ELSE
BEG I N
va 1-nand: = vars [ exp J
BEG I N nand-ptr: = exp - WAR; GetRec ( nand-dat, nand-ptr, compuerta 1; res: = val-nand( StrToIn( COFY (compuerta, 1, 2 ) ) ) AND
val-nand ( StrToIn ( COPY (compuerta, 3 , 2 ) ); IF res=0 THEN
va 1-nand: = 1 ELSE
val-nand: 10 END
m BEG I N
FOR Ind: =1 TO NUMVAR Do
WRITELN( con 1; REPEAT
vars [ ind J : =O;
WRITE('Def inir variables / Evaluar funclones / Fln [D/E/FJ: ' ); READ(KB4 opcion); WRITELN( opc:lon 1; CASE UPCASE(opc ion ) OF
IF': ; ID': BEGIN
WRITELN; FOR ind: =tot-vars DCYWNTO 1 Do BEG IN
W R I T E ( CHR( ORD('A')+ind-l ) , '[',vars[ind], '1 : ) ) ; READLN( varslindl 1; IF vars Kind] < > O THEN
vars [ ind] : = 1 m; WRITELN
END; 'EJ: BEGIN
WRITEL.N(con 1; FOR ind: =tot-vars JNWN'I'O 1 DO BEG I N
END; WRITELN(con 1; WRITE( 'FUNCION [l. .I, tot-func, '1 : ' ) ; READLN( ind ); IF Ind IN [l.. tot-fu?c] THEN
ELSE
WRITELN(con )
ELSE WRITE( CHR(7) )
WRITE(con, CHR( ORD(jA')+ind-l ) , I : ', varslind], ' ' 1;
WRITELN(con, IF), ind, I = ', val-nand( funcionlind] ) )
WRITELN(con, 'F'UNCION INEXISTENTE' );
END;
END f OF CASE J M I L UPCASE( opcion ) = IF1
EM>;
BEGIN f reducc1on-nand 1 WHITELN(con 1; WRITELN(con, REALIZACION NAND DOS EXTRADAS LOGICA T T L , ’ ); WRITELN(con 1; WRITELN(con, REAL1ZAl)ir POR: GUZMAN LOPEZ MIGUEL ANGEL’ ); WRITELN(con, SEPTIEMBRE / 1987 1; WRITELN(con 1; MakeFi le ( nand-dat, NANDDAT, s lzeof (compuerta) ); MakeIndex ( nand-ldx, NANDIDX, s lzeof (compuerta 1, O ); InltIndex; WRITE:( ’ CUANTAS FUNCIONES? : ’ 1; READL.N( tot-f une ); IF NOT( tot-func IN [ l . .hRIMFuNC] ) THEN
BEG IN W R I T E L N ( con, I NUMEXO ILEGAL DE FUNCIONES I 1; HALT m,
WRITE(’ CUMAS VARIABLES? : ’ 1; READLN( tot-vars 1; IF NOT( tot-vars IN [l. . N U M V A R I )I THEN
BEG IN WRITELN( con, NUMERO I L E G A L DE VARIABLES ); HALT
u1 t-nand: = N U W A R ; FOR nm-func: =l TO tot-func Do BEG I N
EM);
1 ee-datos; f unc ion [nun-f unc] : =or-a-nand ( 1, nm-prod ); WRITE(con, F ’ , nun-f unc, = ); escribe( funclon[num-funcl 1; WRITELN( con )
END; WRIIXLN(con ); resu 1 tados; evaluacíon; CloseFl le ( nand-dat 1; CloseIndex( nand-idx 1; ASSIGN(Fi IePtr, NANDDAT); ERASE(Fi1ePtr); ASSIGN(FilePtr, NANDIDX); ERASE (Fi 1 ePtr 1;
EM). f reduccion-nand 1
A P E N D I C E c REFERENCIAS BIBLIOGRAFXCAS
Mano, M. Morris. Digital Design, Englewood Cliffs, N. J. :
Prentice-Ha.11, Inc., iY84.
Hill, F. J. ¿I Peterson, G. R., Introduction to Switching
Theory 8, Logical Design, 3rd. Edition, New York: John Wiley
& Sons, Inc, 1981.
Kohavi, Z. Switching and Finite Automata Theory, 2nd.
Edition, New York: McGraw-Hill, Inc., i978.
- c. 1 -