Capitulo 4 Proyectos Winculp

63
Proyectos en WINCUPL 60 3. PROYECTOS EN WINCUPL

Transcript of Capitulo 4 Proyectos Winculp

Page 1: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

60

3.

PROYECTOS EN WINCUPL

Page 2: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

61

4.1. Compuertas lógicas

Código Name Gates;

Partno 01;

Revision 00;

Date 02/07/2012;

Designer Teth;

Company ITS Zapopan;

Location None;

Assembly None;

Device g16v8a;

/* Inputs: define inputs to build simple gates from */

Pin 1 = a;

Pin 2 = b;

/* Outputs: define outputs as active HI levels */

Pin 12 = inva;

Pin 13 = invb;

Pin 14 = and;

Pin 15 = nand;

Pin 16 = or;

Pin 17 = nor;

Pin 18 = xor;

Pin 19 = xnor;

/* Logic: examples of simple gates expressed in CUPL */

inva = !a; /* NOT inverters */

invb = !b;

and = a & b; /* AND gate */

nand = !(a & b); /* NAND gate */

or = a # b; /* OR gate */

nor = !(a # b); /* NOR gate */

xor = a $ b; /* XOR exclusive or gate */

xnor = !(a $ b); /* XNOR exclusive nor gate */

Observe la identificación de símbolos para cada compuerta, NOT !, AND &, OR # y XOR $, las funciones negadas de estas compuerta solo están acompañadas del símbolo de negación ! seguido de paréntesis.

Page 3: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

62

Simulación

Tabla de verdad

a b inva invb and nand or nor xor xnor

0 0 1 1 0 1 0 1 0 1 0 1 1 0 0 1 1 0 1 0 1 0 0 1 0 1 1 0 1 0 1 1 0 0 1 0 1 0 0 1

En la simulación los vectores verticales 1, 2, 3, y 4 cambian sucesivamente los valores asignados a las variables a y b, para cada vector las salidas asignadas a cada compuerta lógica modifica su valor según estas variables, por ejemplo en el vector 2 a = 0 y b = 1, el resultado de la compuerta lógica AND es 0, se observa que la línea de la grafica de tiempos esta en bajo para esta condición.

Page 4: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

63

Page 5: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

64

4.2. Ecuaciones lógicas

Código Name ECULOG1 ;

PartNo 00 ;

Date 02/07/2012 ;

Revision 01 ;

Designer Teth Cortes ;

Company ITS ZAPOPAN ;

Assembly NA ;

Location NA ;

Device g16v8a ;

/* *************** INPUT PINS *********************/

PIN 1 = A;

PIN 2 = B;

PIN 3 = C;

/* *************** OUTPUT PINS *********************/

PIN 19 = Ecu1;

PIN 18 = Ecu2;

/* ************** LOGIC EQUATIONS *****************/

Ecu1 = (!A&!B&C)#(!A&B&!C)#(A&B&!C)#(A&B&C);

Ecu2 = (!A&!B&C)#(!A&B&C)#(A&!B&C)#(A&B&!C);

El código que se muestra arriba presenta las ecuaciones lógicas en la forma de suma de productos SOP, para su fácil identificación cada producto está encerrado entre paréntesis, de esta forma también se garantiza que cada producto AND se realice primero antes de la sentencia OR.

En ambos casos las ecuaciones tienen como entradas de excitación las mismas variables identificadas como A, B y C.

Page 6: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

65

Simulación

En la simulación se observa que las 8 posibles combinaciones para A, B y C están cambiando sucesivamente en los vectores, modificando las salidas de las ecuaciones lógicas identificadas como Ecu1 y Ecu2.

( )

( )

Tabla de verdad

A B C Ecu1 Ecu2

0 0 0 0 0 0 0 1 1 1 0 1 0 1 0 0 1 1 0 1 1 0 0 0 0 1 0 1 0 1 1 1 0 1 1 1 1 1 1 0

Observe que las ecuaciones lógicas están expresadas en la forma de suma

de productos y su transformación en sumatoria de minterminos (Ecu1 =

1,2,6,7; Ecu2 = 1,3,5,6) corresponde con la presencia de 1 lógico en la configuración de las entradas ABC.

Page 7: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

66

Page 8: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

67

4.3. Sumador completo

Código Name FA ;

PartNo 00 ;

Date 03/07/2012 ;

Revision 01 ;

Designer Teth Cortes ;

Company ITS ZAPOPAN ;

Assembly None ;

Location NA ;

Device g16v8a ;

/**************** INPUT PINS *********************/

PIN 1 = A;

PIN 2 = B;

PIN 3 = Cin;

/**************** OUTPUT PINS *********************/

PIN 19 = S;

PIN 18 = Cout;

/************** LOGIC EQUATIONS *******************/

S= A$B$Cin;

Cout= (B&Cin) # (A&Cin) # (A&B);

Ecuaciones lógicas para los bits de salida:

( )

El sumador completo es un circuito que recibe dos bits sumando A y B, además de un bit de acarreo de entrada Cin, genera un bit de suma S y un bit de acarreo de salida Cout.

Page 9: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

68

Simulación

Tabla de verdad del sumador

Bit sumando Bit sumando Bit acarreo Bit de suma salida

Bit de acarreo salida

A B Cin S Cout 0 0 0 0 0

0 0 1 1 0

0 1 0 1 0

0 1 1 0 1

1 0 0 1 0

1 0 1 0 1

1 1 0 0 1

1 1 1 1 1 Cuando uno de los dos sumando es 1 la variable S muestra 1, cuando ambos sumando tienen 1 la variable S muestra 0 y 1 en el bit de acarreo de salida. El acarreo de entrada es un sumando que se agrega a las entradas A y B. Cuando A, B y Cin tienen 1, la salida es S = 1 y Cout = 1. Si analizamos esta entrada desde numeración decimal la suma de tres sumandos en 1 da 3, 3 en binario se expresa como 11. Note que el bit de acarreo Cout es el bit más significativo.

Page 10: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

69

Page 11: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

70

4.4. Sumador completo de 4 bits

Código Name Adder;

Partno 001;

Date 02/07/2012;

Rev 01;

Designer Teth Cortes;

Company ITS;

Assembly NA;

Location NA;

Device G16V8;

/** Inputs **/

Pin [1..4] = [X1..4]; /* First 4-bit number */

Pin [5..8] = [Y1..4]; /* Second 4-bit number */

/** Outputs **/

Pin [12..15] = [Z1..4]; /* 4-bit sum */

Pin [16..18] = [C1..3]; /* Intermediate carry values */

Pin 19 = Carry; /* Carry for 4-bit sum */

/* Adder-slice circuit - add 2, 1-bit, numbers with carry */

function adder_slice(X, Y, Cin, Cout) {

Cout = Cin & X /* Compute carry */

# Cin & Y

# X & Y;

adder_slice = Cin $ (X $ Y); /* Compute sum */

}

/* Perform 4, 1-bit, additions and keep the final carry */

Z1 = adder_slice(X1, Y1, 'h'0, C1); /* Initial carry = 'h'0 */

Z2 = adder_slice(X2, Y2, C1, C2);

Z3 = adder_slice(X3, Y3, C2, C3);

Z4 = adder_slice(X4, Y4, C3, Carry); /*Get final carry value*/

Page 12: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

71

Simulación

El sumador completo de 4 bits está conformado por cuatro sumadores completos conectados entre sí, donde el acarreo de salida del primero se enlaza al acarreo de entrada del segundo y así sucesivamente. Los cuatro bit de los dos sumandos X y Y entran en paralelo. Observe que el circuito no tiene el acarreo de entrada en el primer sumador y el acarreo de salida del cuarto, representa el acarreo total del circuito. En la simulación las entradas y las salidas se muestran como hexágonos enlazados y representan un bus de 4 bits, para observar su valor es necesario seleccionar la señal y el vector para la intersección deseada.

Page 13: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

72

Page 14: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

73

4.5. Decodificador paralelo de 2 bits

Código Name Dec2 ;

PartNo 00 ;

Date 03/07/2012 ;

Revision 01 ;

Designer Teth Cortes ;

Company ITS ZAPOPAN ;

Assembly NA ;

Location NA ;

Device g16v8a ;

/**************** INPUT PINS *********************/

PIN 1 = A;

PIN 2 = B;

/**************** OUTPUT PINS *********************/

PIN 19 = M0;

PIN 18 = M1;

PIN 17 = M2;

PIN 16 = M3;

/************* LOGIC EQUATIONS *******************/

M0 = !A & !B;

M1 = !A & B;

M2 = A & !B;

M3 = A & B;

El decodificador paralelo de 2 bits es un circuito muy simple que se construye con cuatro ecuaciones lógicas. Para las cuatro posibles combinaciones de las entradas A y B se debe activar en alto una y solo una de las cuatro salidas identificadas en el código como M0, M1, M2 y M3.

Page 15: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

74

Simulación

Tabla de verdad

A B Mo M1 M2 M3 0 0 1 0 0 0

0 1 0 1 0 0

1 0 0 0 1 0

1 1 0 0 0 1

Observe la correspondencia entre la grafica de tiempos de la simulación y la tabla de verdad que describe el funcionamiento del circuito. Las ecuaciones lógicas descritas en el código están modeladas por minterminos, es decir:

Page 16: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

75

Page 17: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

76

4.6. Decodificador paralelo de 3 bits

Código Name DEC3;

PartNo 00;

Date 03/07/2012;

Revision 01;

Designer Teth Cortes;

Company ITS ZAPOPAN;

Assembly NA;

Location NA;

Device g16v8a;

/**************** INPUT PINS *********************/

PIN 1 = C; /* MSB */

PIN 2 = B;

PIN 3 = A; /* LSB */

/**************** OUTPUT PINS *********************/

PIN 19 =M0;

PIN 18 =M1;

PIN 17 =M2;

PIN 16 =M3;

PIN 15 =M4;

PIN 14 =M5;

PIN 13 =M6;

PIN 12 =M7;

/************** LOGIC EQUATIONS ******************/

M0 = !C & !B & !A;

M1 = !C & !B & A;

M2 = !C & B & !A;

M3 = !C & B & A;

M4 = C & !B & !A;

M5 = C & !B & A;

M6 = C & B & !A;

M7 = C & B & A;

Page 18: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

77

Simulación

Tabla de verdad

C B CA M0 M1 M2 M3 M4 M5 M6 M7 0 0 0 1 0 0 0 0 0 0 0

0 0 1 0 1 0 0 0 0 0 0

0 1 0 0 0 1 0 0 0 0 0

0 1 1 0 0 0 1 0 0 0 0

1 0 0 0 0 0 0 1 0 0 0

1 0 1 0 0 0 0 0 1 0 0

1 1 0 0 0 0 0 0 0 1 0

1 1 1 0 0 0 0 0 0 0 1

El circuito decodificador paralelo de tres bits exhibe un comportamiento similar al decodificador de dos bits, pero en esta ocasión se utilizan tres bits de selección C, B y A para colocar en alto uno y solo uno de los ocho bit de salida identificados como M0, M1, M2, M3, M4, M5, M6 y M7; como se observa en la grafica de tiempos de la simulación y la tabla de verdad.

Page 19: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

78

Page 20: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

79

4.7. Decodificador BCD a 7 segmentos

Código Name DECBCD;

PartNo 00;

Date 03/07/2012;

Revision 01;

Designer Teth Cortes;

Company ITS ZAPOPAN;

Assembly NA;

Location NA;

Device g16v8a;

/**************** INPUT PINS *********************/

PIN 2 = A0; /* LSB */

PIN 3 = A1;

PIN 4 = A2;

PIN 5 = A3; /* MSB */

/**************** OUTPUT PINS *********************/

PIN 12 = a;

PIN 13 = b;

PIN 14 = c;

PIN 15 = d;

PIN 16 = e;

PIN 17 = f;

PIN 18 = g;

/************ LOGIC EQUATIONS *********************/

TABLE A3,A2,A1,A0 => a,b,c,d,e,f,g {

'h'0=> 'b'1111110;

'h'1=> 'b'0110000;

'h'2=> 'b'1101101;

'h'3=> 'b'1111001;

'h'4=> 'b'0110011;

'h'5=> 'b'1011011;

'h'6=> 'b'0011111;

'h'7=> 'b'1110000;

'h'8=> 'b'1111111;

'h'9=> 'b'1110011;

Page 21: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

80

'h'A=> 'b'0000000;

'h'B=> 'b'0000000;

'h'C=> 'b'0000000;

'h'D=> 'b'0000000;

'h'E=> 'b'0000000;

'h'F=> 'b'0000000;

}

Simulación

El circuito decodificador BCD a 7 segmentos recibe como entrada un número binario de cuatro bits de A0 como el bit menos significativo LSB hasta A3 como el bit más significativo MSB, y genera siete salidas a, b, c, d, e, f, y g que encienden o apagan un arreglo de leds que forman un carácter numérico en un dispositivo conocido como display de 7 segmentos. En la figura de la derecha DP es un punto que acompaña al carácter, en el código DP se omite.

Page 22: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

81

Tabla de verdad

A3 A2 A1 A0 a b c d e f g 0 0 0 0 1 1 1 1 1 1 0

0 0 0 1 0 1 1 0 0 0 0

0 0 1 0 1 1 0 1 1 0 1

0 0 1 1 1 1 1 1 0 0 1

0 1 0 0 0 1 1 0 0 1 1

0 1 0 1 1 0 1 1 0 1 1

0 1 1 0 0 0 1 1 1 1 1

0 1 1 1 1 1 1 0 0 0 0

1 0 0 0 1 1 1 1 1 1 1

1 0 0 1 1 1 1 0 0 1 1

1 0 1 0 0 0 0 0 0 0 0

1 0 1 1 0 0 0 0 0 0 0

1 1 0 0 0 0 0 0 0 0 0

1 1 0 1 0 0 0 0 0 0 0

1 1 1 0 0 0 0 0 0 0 0

1 1 1 1 0 0 0 0 0 0 0

Observe que todas las posibles combinaciones de A0, A1, A2 y A3 están presentes en la tabla de verdad, sin embargo solo se despliega un valor en el display de 0 (0000) a 9 (1001), después a partir de 10 (1010) hasta 15 (1111) las salidas se asignan en cero. En el caso de desear continuar la cuenta en hexadecimal, desplegando los caracteres alfabéticos a, b, c, d, e y f es necesario configurar las salidas desde 1010 hasta 1111 para que se enciendan los leds correspondientes a cada carácter. Observe que en el código la palabra reservada table realiza una asignación de las salidas en función de las entradas simplificando la programación, de otra forma se debe definir una ecuación lógica por cada una de las salidas.

Page 23: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

82

Page 24: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

83

4.8. Codificador de 8 posiciones a binario

Código Name COD8 ;

PartNo 00 ;

Date 03/07/2012 ;

Revision 01 ;

Designer Teth Azrael ;

Company ITS ZAPOPAN ;

Assembly NA ;

Location NA ;

Device g16v8a ;

/**************** INPUT PINS *********************/

PIN 2 = E0;

PIN 3 = E1;

PIN 4 = E2;

PIN 5 = E3;

PIN 6 = E4;

PIN 7 = E5;

PIN 8 = E6;

PIN 9 = E7;

/**************** OUTPUT PINS *********************/

PIN 19 = S0; /* LSB */

PIN 18 = S1;

PIN 17 = S2; /* MSB */

/************ LOGIC EQUATIONS *********************/

TABLE E7,E6,E5,E4,E3,E2,E1,E0 => S2,S1,S0 {

'b'00000001 => 'b'000;

'b'00000010 => 'b'001;

'b'00000100 => 'b'010;

'b'00001000 => 'b'011;

'b'00010000 => 'b'100;

'b'00100000 => 'b'101;

'b'01000000 => 'b'110;

'b'10000000 => 'b'111;

}

Page 25: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

84

Simulación

El circuito codificador de 8 posiciones a binario, en palabras simples, funciona de manera inversa al decodificador de tres bits. Es decir tiene ocho entradas y cuando una y solo una de ellas se activa en alto la salida muestra el número binario correspondiente. En la grafica de tiempos se observa como se fue activando sucesivamente cada una de las entradas y consecuentemente la cuenta binaria en S0-S2 fue incrementando, hasta llegar a 111. En el diagrama del circuito electrónico de prueba se propone colocar un conmutador rotativo de ocho posiciones, para evitar que ocurran dos o más entradas en alto, de lo contrario el circuito va hacia una situación no definida.

Page 26: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

85

Page 27: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

86

4.9. Multiplexor de 4 a 1

Código Name MUX4A1 ;

PartNo 00 ;

Date 03/07/2012 ;

Revision 01 ;

Designer Teth Cortes ;

Company ITS ZAPOPAN ;

Assembly NA ;

Location NA ;

Device g16v8a ;

/**************** INPUT PINS *********************/

PIN 1 = G; /* Senal de habilitacion estroboscopica */

PIN 2 = D0; /* Senal de dato 0 */

PIN 3 = D1; /* Senal de dato 1 */

PIN 4 = D2; /* Senal de dato 2 */

PIN 5 = D3; /* Senal de dato 3 */

PIN 6 = A; /* LSB del codigo de seleccion */

PIN 7 = B; /* MSB del codigo de seleccion */

/**************** OUTPUT PINS *********************/

PIN 19 = Y; /* salida del muxtiplexor de 4 a 1 */

/************** LOGIC EQUATIONS *******************/

Y = !B&!A&D0&G # !B&A&D1&G # B&!A&D2&G # B&A&D3&G;

El multiplexor de 4 a 1 es un circuito que coloca un bit de dato de cuatro señales de datos identificados como D0, D1, D2 y D3 en el bit de salida Y. La señal de habilitación G es un estrobo que indica el tiempo en el que se muestrea el dato de las líneas de entrada. La ecuación lógica es:

( ) ( ) ( ) ( )

Page 28: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

87

Simulación

En el vector 1, B=0, A=0 y G=0, la salida se coloca en Y=0 porque la señal de habilitación inhibe que el dato de D0 se transfiera hacia Y. Por el contrario en el vector 2 B=0, A=0 y G=1, la selección de línea corresponde a D0 con 1 por lo tanto la salida Y=1, es decir Y tiene asignado el valor de D0 (Y=D0). En los vectores 3, 5 y 7 la señal de habilitación esta en cero G=0 y no existe muestreo de la señal de datos, la salida Y exhibe un valor en bajo. En el vector 4 con B=0, A=1 y G=1, la selección corresponde a la línea de datos D1, que muestra un 0, así la salida Y= D1=0. En el vector 6 con B=1, A=0 y G=1, la selección corresponde a la línea de datos D2, que muestra un 1, así la salida Y=D2=1. Finalmente en el vector 8 con B=1, A=1 y G=1, la selección corresponde a la línea de datos D3, que muestra un 1, así la salida Y=D3=1.

Page 29: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

88

Page 30: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

89

4.10. Multiplexor de 8 a 1

Código Name MUX8a1 ;

PartNo 00 ;

Date 03/07/2012 ;

Revision 01 ;

Designer Teth Cortes ;

Company ITS ZAPOPAN ;

Assembly NA ;

Location NA ;

Device g16v8a ;

/**************** INPUT PINS *********************/

PIN 1 = G;

PIN 2 = D0;

PIN 3 = D1;

PIN 4 = D2;

PIN 5 = D3;

PIN 6 = D4;

PIN 7 = D5;

PIN 8 = D6;

PIN 9 = D7;

PIN 12 = A; /* LSB */

PIN 13 = B;

PIN 14 = C; /* MSB */

/**************** OUTPUT PINS *********************/

PIN 19 = Y; /* salida del multiplexor de 8 a 1 */

/************** LOGIC EQUATIONS *******************/

Y = !C&!B&!A&D0&G # !C&!B&A&D1&G # !C&B&!A&D2&G # !C&B&A&D3&G

# C&!B&!A&D4&G # C&!B&A&D5&G # C&B&!A&D6&G # C&B&A&D7&G;

El multiplexor de 8 a 1 es similar al multiplexor de 4 a 1. Transfiere un dato hacia el bit de salida Y de una selección de líneas, en este caso son ocho las líneas de datos de D0 a D7 y son tres los bits de selección C, B y A, donde C es el bit más significativo y A es el bit menos significativo.

Page 31: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

90

Simulación

En la simulación los vectores impares tienen la señal de habilitación en bajo, en consecuencia no existe muestreo en las señales de datos, la salida es Y=0. Por el contrario en los vectores pares se transfiere el dato de las líneas D0 a D7 según el código de selección en CBA, como se muestra en la siguiente tabla:

C B A Y 0 0 0 Y=D0

0 0 1 Y=D1

0 1 0 Y=D2

0 1 1 Y=D3

1 0 0 Y=D4

1 0 1 Y=D5

1 1 0 Y=D6

1 1 1 Y=D7

Page 32: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

91

Page 33: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

92

4.11. Comparador de magnitud de dos palabras

Código Name COMP2 ;

PartNo 00 ;

Date 03/07/2012 ;

Revision 01 ;

Designer Teth Cortes ;

Company ITS ZAPOPAN ;

Assembly NA ;

Location NA ;

Device g16v8a ;

/**************** INPUT PINS *********************/

PIN 1 = A0;

PIN 2 = A1;

PIN 3 = B0;

PIN 4 = B1;

/**************** OUTPUT PINS *********************/

PIN 19 = F1; /* Ecuacion A menor que B */

PIN 18 = F2; /* Ecuacion A igual que B */

PIN 17 = F3; /* Ecuacion A mayor que B */

/************** LOGIC EQUATION ********************/

F1 = !A1&B1 # !A1&!A0&B0 # !A0&B1&B0;

F2 = !A1&!A0&!B1&!B0 # !A1&A0&!B1&B0 # A1&!A0&B1&!B0 #

A1&A0&B1&B0;

F3 = A1&!B1 # A0&!B1&!B0 # A1&A0&!B0;

Este circuito compara dos palabras binarias de dos bits cada una, identificadas como A y B, donde A0 y B0 son los bits menos significativos. Son tres los posibles resultados, A>B solo F3 se coloca en alto, A=B solo F2 se coloca en alto y A<B solo F1 se coloca en alto. Las ecuaciones lógicas de las funciones de salida son:

Page 34: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

93

Simulación

Tabla de verdad

A1 A0 B1 B0 F1

A<B F2

A=B F3

A>B 0 0 0 0 0 1 0

0 0 0 1 1 0 0

0 0 1 0 1 0 0

0 0 1 1 1 0 0

0 1 0 0 0 0 1

0 1 0 1 0 1 0

0 1 1 0 1 0 0

0 1 1 1 1 0 0

1 0 0 0 0 0 1

1 0 0 1 0 0 1

1 0 1 0 0 1 0

1 0 1 1 1 0 0

1 1 0 0 0 0 1

1 1 0 1 0 0 1

1 1 1 0 0 0 1

1 1 1 1 0 1 0

Entre la tabla de verdad y la simulación se observa la relación de las tres comparaciones.

Page 35: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

94

Page 36: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

95

4.12. Contador de décadas

Código Name Count10;

Partno 001;

Date 02/07/12;

Revision 02;

Designer Teth Cortes;

Company ITSZ;

Assembly NA;

Location NA;

Device g16v8a;

/** Inputs **/

Pin 1 = clk; /* Counter clock */

Pin 2 = clr; /* Counter clear input */

Pin 3 = dir; /* Counter direction input */

Pin 11 = !oe; /* Register output enable */

/** Outputs **/

Pin [14..17] = [Q3..0]; /* Counter outputs */

Pin 18 = carry; /* Ripple carry out */

/** Declarations and Intermediate Variable Definitions **/

field count = [Q3..0]; /* declare counter bit field */

$define S0 'b'0000 /* define counter states */

$define S1 'b'0001

$define S2 'b'0010

$define S3 'b'0011

$define S4 'b'0100

$define S5 'b'0101

$define S6 'b'0110

$define S7 'b'0111

$define S8 'b'1000

$define S9 'b'1001

field mode = [clr,dir]; /* declare mode control field */

up = mode:0; /* define count up mode */

down = mode:1; /* define count down mode */

clear = mode:[2..3]; /* define count clear mode */

/** Logic Equations **/

Page 37: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

96

Sequenced count { /* free running counter */

present S0 if up next S1;

if down next S9;

if clear next S0;

if down out carry;

present S1 if up next S2;

if down next S0;

if clear next S0;

present S2 if up next S3;

if down next S1;

if clear next S0;

present S3 if up next S4;

if down next S2;

if clear next S0;

present S4 if up next S5;

if down next S3;

if clear next S0;

present S5 if up next S6;

if down next S4;

if clear next S0;

present S6 if up next S7;

if down next S5;

if clear next S0;

present S7 if up next S8;

if down next S6;

if clear next S0;

present S8 if up next S9;

if down next S7;

if clear next S0;

present S9 if up next S0;

if down next S8;

if clear next S0;

if up out carry; /* carry output */

}

Simulación

Page 38: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

97

El circuito contador de décadas realiza una cuenta de 0 a 9 en sentido ascendente o descendente, cuando la entrada dir=0 la cuenta es ascendente, si dir=1 entonces la cuenta es descendente. En la simulación los hexágonos llevan la cuenta que se muestra en la casilla value, para ver resultado se debe seleccionar el renglón [Q3..Q0] y el vector deseado. Se comienza por definir en el código los diez estados, después a través de la función sequenced se determina la transición entre los estados según el valor de dir y en respuesta a cada pulso de la señal de reloj.

Diagrama de estados

S0

S1

S2

S3

S4 S5

S6

S7

S8

S9 dir=0

dir=0

dir=0

dir=0

dir=0

dir=0

dir=0

dir=0

dir=0

dir=0

dir=1 dir=1 dir=1

dir=1 dir=1

dir=1

dir=1 dir=1

dir=1

dir=1

Page 39: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

98

Page 40: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

99

4.13. Detector de secuencia

Código Name FSM2 ;

PartNo 00 ;

Date 04/07/2012 ;

Revision 01 ;

Designer Teth Cortes ;

Company ITS ZAPOPAN ;

Assembly None ;

Location ;

Device g16v8a ;

/* *************** INPUT PINS *********************/

PIN 1 = clock ;

PIN 2 = s ; /* data input */

PIN 3 = !enable ;

/* *************** OUTPUT PINS *********************/

PIN [14..15] = [Q1..0];

PIN 19 = found;

field STATE = [Q1..0];

$define S0 'b'00

$define S1 'b'01

$define S2 'b'10

$define S3 'b'11

SEQUENCE STATE {

present S0 if s next S1;

default next S0;

present S1 if s next S2;

default next S1;

present S2 if s next S3;

default next S1;

present S3 if s next S0;

out found;

default next S0;

}

Page 41: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

100

SO 00

S1 01

S2 10

S3 11

0 0

0

0

1

1 1 1

Simulación

Diagrama de estados

Este circuito tiene implementado una maquina de estados para detectar la secuencia 0111. Cuando es detectada found se coloca en alto de lo contrario found permanece en bajo. El diagrama de estados esta modelado en el código a través de la instrucción sequence que determina las transiciones de un estado a otro en respuesta al bit se entrada s. En la simulación se observa la llegada de s de dos secuencias 0111 una después de la otra y la activación en alto de found en el último bit se la secuencia.

Page 42: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

101

Page 43: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

102

4.14. Generador de secuencia

Código Name FSM3 ;

PartNo 00 ;

Date 05/07/2012 ;

Revision 01 ;

Designer Teth Cortes ;

Company ITS ZAPOPAN ;

Assembly NA ;

Location NA ;

Device g16v8a ;

/* *************** INPUT PINS *********************/

PIN 1 = clock ;

PIN 2 = s ; /* data input */

PIN 11 = !enable ;

/* *************** OUTPUT PINS *********************/

PIN [14..15] = [Q1..0];

PIN 19 = sal;

field STATE = [Q1..0];

$define S0 'b'00

$define S1 'b'01

$define S2 'b'10

$define S3 'b'11

SEQUENCE STATE {

present S0 if s next S1 ;

default next S0;

present S1 if s next S2 out sal;

default next S0;

present S2 if s next S3 out sal;

default next S2;

present S3 if s next S0 out sal;

default next S0;

}

Este circuito es la implementación de una maquina de estados que genera en la salida sal la secuencia 0111 con la llegada de los pulsos de reloj y la transición entre los estados.

Page 44: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

103

Secuencia

Tabla de excitación

S 0 1

S0 S0 / 0 S1 / 0

S1 S0 / 0 S2 / 1

S2 S0 / 0 S3 / 1

S3 S0 / 0 S0 / 1

En la tabla de excitación se deduce lo siguiente: cuando la entrada s es igual a 0 todas las transiciones son hacia el estado S0 con la sal en 0, por otro lado cuando la entrada s es igual a 1 las transiciones ocurren de S0 hacia S1 con sal en 0, de S1 hacia S2 con sal en 1, de S2 hacia S3 con sal en 1 y de S3 hacia S0 con sal en 1. En el circuito electrónico s se propone como un botón pulsador, mientras permanezca oprimido el circuito genera de forma ininterrumpida la secuencia 0111, cuando el botón deje de oprimirse la secuencia no se genera, es decir sal es 0 y el estado actual fija en S0.

Page 45: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

104

Page 46: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

105

4.15. Contador de anillo

Código Name CONTADOR ;

PartNo 00 ;

Date 05/07/2012 ;

Revision 01 ;

Designer Teth Cortes ;

Company ITS ZAPOPAN ;

Assembly NA ;

Location NA ;

Device g16v8a ;

/** Inputs **/

Pin 1 = clk;

Pin 2 = clr;

Pin 3 = dir;

Pin 11 = !oe; /* Register output enable */

/** Outputs **/

Pin [14..17] = [Q3..0]; /* Counter outputs */

/** Declarations and Intermediate Variable Definitions **/

field count = [Q3..0]; /* declare counter bit field */

$define S0 'b'0000 /* define counter states */

$define S1 'b'0001

$define S2 'b'0010

$define S3 'b'0100

$define S4 'b'1000

field mode = [clr,dir]; /* declare mode control field */

anillo_up = mode:0;

anillo_dw = mode:1;

clear = mode:[2..3]; /* define count clear mode */

Page 47: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

106

/** Logic Equations **/

Sequenced count {

present S0 if anillo_up next S1;

if anillo_dw next S4;

if clear next S0;

present S1 if anillo_up next S2;

if anillo_dw next S4;

if clear next S0;

present S2 if anillo_up next S3;

if anillo_dw next S1;

if clear next S0;

present S3 if anillo_up next S4;

if anillo_dw next S2;

if clear next S0;

present S4 if anillo_up next S1;

if anillo_dw next S3;

if clear next S0;

}

Simulación

El contador de anillo va colocando en alto cada uno de los bits de forma sucesiva, como se observa en la tabla de verdad. En el diagrama electrónico construido con flip flops tipo D la salida Q del cuarto dispositivo alimenta la entrada D del primero.

Page 48: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

107

Page 49: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

108

4.16. Contador Johnson

Código Name johnson ;

PartNo 00 ;

Date 05/07/2012 ;

Revision 01 ;

Designer Teth Cortes ;

Company ITS ZAPOPAN ;

Assembly NA ;

Location NA ;

Device g16v8a ;

/** Inputs **/

Pin 1 = clk;

Pin 2 = clr;

Pin 3 = dir;

Pin 11 = !oe; /* Register output enable

*/

/** Outputs **/

Pin [14..17] = [Q3..0]; /* Counter outputs */

/** Declarations and Intermediate Variable Definitions **/

field count = [Q3..0]; /* declare counter bit field */

$define S0 'b'0000 /* define counter states */

$define S1 'b'0001

$define S2 'b'0011

$define S3 'b'0111

$define S4 'b'1111

field mode = [clr,dir]; /* declare mode control field */

anillo_up = mode:0;

anillo_dw = mode:1;

clear = mode:[2..3]; /* define count clear mode */

Page 50: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

109

/** Logic Equations **/

Sequenced count {

present S0 if anillo_up next S1;

if anillo_dw next S4;

if clear next S0;

present S1 if anillo_up next S2;

if anillo_dw next S4;

if clear next S0;

present S2 if anillo_up next S3;

if anillo_dw next S1;

if clear next S0;

present S3 if anillo_up next S4;

if anillo_dw next S2;

if clear next S0;

present S4 if anillo_up next S1;

if anillo_dw next S3;

if clear next S0;

}

Simulación

El contador de Johnson va colocando en alto sucesivamente los bits hasta completar los cuatro bits, como se observa en la tabla de verdad. En el

diagrama electrónico construido con flip flops tipo D la salida del cuarto dispositivo alimenta la entrada D del primero.

Page 51: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

110

Page 52: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

111

Anillo Johnson

CLK Q0 Q1 Q2 Q3 Q0 Q1 Q2 Q3

1 0 0 0 1 0 0 0

0 1 0 0 1 1 0 0

0 0 1 0 1 1 1 0

0 0 0 1 1 1 1 1

1 0 0 0 1 0 0 0

0 1 0 0 1 1 0 0

0 0 1 0 1 1 1 0

0 0 0 1 1 1 1 1

Los contadores de anillo y Johnson se consideran como registros simples de corrimiento (shift register).

El diagrama electrónico mostrado arriba representa un circuito SIPO serial-in parallel-out, Su funcionamiento es el siguiente, entra un dato de forma serial que se va recorriendo de Q1 hacia Q4 con la llegada de cada pulso de la señal de reloj. Este circuito es un ejemplo de la importancia de los registros de corrimiento en los sistemas digitales, ya que permiten manejar flujos de datos entre formatos serie y paralelo.

Page 53: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

112

4.17. Control de motores a pasos

Código Name Stepper;

Partno 01;

Date 14/04/11;

Revision 01;

Designer ELECTRONICA 2;

Company ITS ZAPOPAN;

Assembly None;

Location None;

Device g16v8a;

/** Inputs **/

Pin 1 = clk; /* Step advance */

Pin 2 = motor; /* Select which motor to step */

Pin 3 = dir; /* Step direction input */

/* Pin 11 = !oe;*/ /* Register output enable */

/** Outputs **/

Pin [19..16] = [A3..0]; /* Stepper A outputs */

Pin [15..12] = [B3..0]; /* Stepper B outputs */

/** Declarations and Intermediate Variable Definitions **/

field stepA = [A3..0]; /* declare stepper bit field */

field stepB = [B3..0];

$define S0 'b'0011 /* define stepper excitation states */

$define S1 'b'0010

$define S2 'b'0110

$define S3 'b'0100

$define S4 'b'1100

$define S5 'b'1000

$define S6 'b'1001

$define S7 'b'0001

$define SI 'b'1111 /* the power-on state */

field mode = [motor,dir]; /* declare mode control field */

upA = mode:1;

downA = mode:0;

upB = mode:3;

downB = mode:2;

Page 54: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

113

/** Logic Equations **/

Sequenced stepA { /* stepper A counter */

present SI default next S0;

present S0 if upA next S1;

if downA next S7;

default next S0;

present S1 if upA next S2;

if downA next S0;

default next S1;

present S2 if upA next S3;

if downA next S1;

default next S2;

present S3 if upA next S4;

if downA next S2;

default next S3;

present S4 if upA next S5;

if downA next S3;

default next S4;

present S5 if upA next S6;

if downA next S4;

default next S5;

present S6 if upA next S7;

if downA next S5;

default next S6;

present S7 if upA next S0;

if downA next S6;

default next S7;

}

Sequenced stepB { /* stepper B counter */

present SI default next S0;

present S0 if upB next S1;

if downB next S7;

default next S0;

present S1 if upB next S2;

if downB next S0;

default next S1;

present S2 if upB next S3;

if downB next S1;

default next S2;

present S3 if upB next S4;

if downB next S2;

default next S3;

present S4 if upB next S5;

if downB next S3;

default next S4;

present S5 if upB next S6;

if downB next S4;

default next S5;

present S6 if upB next S7;

Page 55: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

114

if downB next S5;

default next S6;

present S7 if upB next S0;

if downB next S6;

default next S7;

}

El circuito controla de manera alternada dos motores a pasos identificados en el código dentro de las secuencias como A y B. El pin 2 permite seleccionar cual de los dos motores estará activado, es importante recalcar que el código no permite que los dos motores trabajen de forma simultanea. El pin 3 selecciona el sentido de giro del motor invirtiendo la transición de estados según el valor almacenado en las variables up y down. field mode = [motor,dir]; /* declare mode control field */

upA = mode:1;

downA = mode:0;

upB = mode:3;

downB = mode:2;

El segmento de código reproducido arriba es una parte importante de la estructura del código, su análisis es el siguiente: Las variables motor y dir configuradas a través de los pines 2 y 3 del circuito integrado se almacenan en un campo de dos variables. El campo mode determina las cuatro posibles opciones de operación del circuito descritas en la siguiente tabla.

mode motor dir Descripción mode:0 0 0 downA Motor A activado con giro reverso

mode:1 0 1 upA Motor A activado con giro directo

mode:2 1 0 downB Motor B activado con giro reverso

mode:3 1 1 upB Motor B activado con giro directo

Según el valor del campo mode se carga en alto el valor de una de las variables upA, upB, downA y downB, que posteriormente son evaluadas en las sentencias if que configuran la transiciones de estados dentro de las dos instrucciones sequenced asignada cada una para el control de un motor distinto.

Page 56: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

115

Page 57: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

116

En el proyecto se propone el control de un motor a pasos unipolar con secuencia de medio paso, sin embargo existen otras dos formas de secuencia. A continuación se describen sus características principales.

Secuencia de medio paso. Se obtiene un paso más corto activando dos bobinas y luego sólo una y así sucesivamente.

Paso Bobina

A B C D

1 1 0 0 0

2 1 1 0 0

3 0 1 0 0

4 0 1 1 0

5 0 0 1 0

6 0 0 1 1

7 0 0 0 1

8 1 0 0 1

Page 58: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

117

Secuencia de paso completo. Consiste en activar cada una de las bobinas de forma independiente, lo que provoca que el eje del motor se oriente hacia la bobina activada. En algunos motores esto brinda un funcionamiento más suave. Su desventaja es que al estar solo una bobina activada el par de paso y de retención es menor.

Paso Bobina

A B C D

1 1 0 0 0

2 0 1 0 0

3 0 0 1 0

4 0 0 0 1

Impulsor (motor) unipolar Unipolar significa que cada extremo de bobina tiene solamente una polaridad. Una bobina unipolar cuenta con dos bobinas. De forma alternativa, la corriente circula a través de una de estas bobinas y en una dirección. Comparado con un motor bipolar, sólo se utiliza la mitad de cobre. El devanado en fase del motor debe tener una derivación central. Con frecuencia se utiliza un diodo Zener adicional para asegurar un rápido decaimiento de corriente en la bobina apagada. Esto proporcionará un par motor mayor, especialmente en frecuencias más altas.

Page 59: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

118

Secuencia de paso completo doble. Consiste en tener activadas dos bobinas al mismo tiempo, ambas consecutivas, de modo que el eje del motor se oriente hacia el punto medio de ambas bobinas. Esta es la secuencia más usada y la que generalmente recomienda el fabricante. Con esta secuencia se obtiene un alto par de paso y de retención.

Paso Bobina

A B C D

1 1 1 0 0

2 0 1 1 0

3 0 0 1 1

4 1 0 0 1

Velocidad de rotación Revoluciones del motor por minuto se calculan mediante

, donde f = frecuencia de pasos, α = ángulo de paso.

Paso Movimiento rotativo del rotor a través de un ángulo de paso. Ángulo de paso Ángulo rotativo a través del cual el eje del motor gira por un pulso controlado. Frecuencia de pasos Número de pasos del motor (paso a paso) en un segundo.

Page 60: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

119

4.18. Control de un torniquete de paso

Código Name turnstile1 ;

PartNo 02 ;

Date 29/06/2012 ;

Revision 01 ;

Designer Engineer ;

Company ITS ZAPOPAN ;

Assembly None ;

Location Zapopan ;

Device g16v8 ;

/** INPUT PINS **/

PIN 1 = clock;

PIN 2 = Walk_Thru;

PIN 3 = coin;

/** OUTPUT PINS **/

PIN 14 = CNT_PULSE;

PIN 15 = LOCK;

$define LOCKED 'b'0

$define OPEN 'b'1

/** State Machine **/

Sequenced LOCK {

Present LOCKED

if coin next OPEN;

if !coin next LOCKED;

Present OPEN

if Walk_Thru next LOCKED;

Default next OPEN;

Out CNT_PULSE;

}

El código es la implementación de una maquina de estados para el control de un torniquete de paso para el acceso de personas. Su funcionamiento es muy simple, si el usuario deposita una moneda, el torniquete se desbloquea y permite el paso, después se vuelve a bloquear y envía un pulso en alto para realizar una cuenta del transito de las personas.

Page 61: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

120

Diagrama de estados

En el estado LOCKED pueden ocurrir dos situaciones, mientras no se detecte una moneda (coin) el sistema se mantiene en el mismo estado, cuando se detecta una moneda existe una transición del estado LOCKED hacia OPEN, el torniquete esta desbloqueado esperando que una persona pase a través de él. Mientras no se detecte el transito de una persona por un giro del torniquete el sistema permanece en OPEN. La variable CNT_PULSE (contador de pulsos) se coloca en alto para enviar la señal a otro circuito externo para que realice la cuenta del número de veces que el sistema estuvo en OPEN como la interpretación del número de personas que pasaron por el torniquete. Si la variable walk_thru se coloca en alto, está es la señal del transito de una persona por el giro del torniquete, en consecuencia el siguiente estado es LOCKED y el sistema bloquea el torniquete hasta que no se vuelva a recibir una moneda.

LOCKED 0

OPEN 1

!coin

coin walk_thru

!walk_thru

CNT_PULSE

Page 62: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

121

Simulación

Del análisis del código de control de un torniquete de paso se deduce lo siguiente: En el vector 1 se recibe en alto las señal coin y la señal de salida LOCK está en alto desbloqueando el pasador magnético del torniquete y este queda libre para girar. En el vector 2 se mantiene el estado OPEN. En el vector 3 se activa en alto la señal Walk_Thru está puede ser generada por un interruptor electromecánico o un sensor de presencia que detecte el giro del torniquete ciertos grados, inmediatamente ocurre una transición de estados hacia LOCKED bloqueando el pasador, quedando el sistema en espera de una nueva señal de coin. El proceso se vuelve a replicar a partir del vector 6. Cabe señalar que la señal CNT_PULSE va reproduciendo los valores de LOCK sin embargo sus aplicaciones son diferentes. La señal LOCK se utiliza para controlar el pasador magnético que bloquea el giro del torniquete, por otro lado CNT_PULSE produce una señal de pulsos hacia un circuito contador externo, con las conexiones correctas es posible visualizar en un display el número de personas que han transitado a través del torniquete.

Page 63: Capitulo 4 Proyectos Winculp

Proyectos en WINCUPL

122