Cheatsheet Ejercicios Tema 2
1.- Creación de los datos que usaremos en la tabla
Pasos
- Desarrollar las operaciones para ver que valores tienen los operadores si 0, 1 o X
- Añadir columna A, añadir columna B
- Añadir columna Cin,
- 0 → SUMAS
- 1 → RESTAS
- X → AND, OR, XOR, DESP…..
- Añadir columna ENABLE A, añadir columna ENABLE B
- 1 → cuando se necesita de su valor cuando “participa”
S2 | S1 | S0 | OPERACIÓN | a | b | Cin | ENABLE A | ENABLE B |
0 | 0 | 0 | A AND B | x | x | x | x | x |
0 | 0 | 1 | A OR B | x | x | x | x | x |
0 | 1 | 0 | A+B = A +B +0 | 0 | 0 | 0 | 1 | 1 |
0 | 1 | 1 | A-B = A + B(neg) +1 | 0 | 1 | 1 | 1 | 1 |
1 | 0 | 0 | - A = 0+ Ā+1 | 1 | x | 1 | 1 | 0 |
1 | 0 | 1 | - B = 0 +B(neg) +1 | x | 1 | 1 | 0 | 1 |
1 | 1 | 0 | A<<1 | x | x | x | x | x |
1 | 1 | 1 | A>>1 | x | x | x | x | x |
2.- MAPAS DE KARNAUGH
Pasos
Calculamos los mapas de karnaugh en caso de que sean necesarios de A, B, ENABLE A, ENABLE B, Cin (lo usamos en la ALU final)
Operando A
S1S0 / S2 | 00 | 01 | 11 | 10 |
0 | x | x | 0 | 0 |
1 | 1 | x | x | x |
Para el operando B
S1S / S2 | 00 | 01 | 11 | 10 |
0 | x | x | 1 | 0 |
1 | x | 1 | x | x |
SEÑAL = S0
Para la señal Enable A
S1S0 / S2 | 00 | 01 | 11 | 10 | 10 |
0 | x | x | 1 | 1 | 1 |
1 | 1 | 0 | x | x | x |
SEÑAL: S0(neg) + S1
Para la señal enable B
S1S0 / S2 | 00 | 01 | 11 | 11 | 10 |
0 | x | X | 1 | 1 | 1 |
1 | 0 | 1 | x | x | x |
Para la señal Cin (ADELANTAMOS AUNQUE SE PUEDE HACER DESPUES DE LA MINI ALU)
S1S0 / S2 | 00 | 01 | 01 | 11 | 10 |
0 | x | x | x | 1 | 0 |
1 | 1 | 1 | 1 | x | x |
SEÑAL: S0 + S1
3.- DIBUJO MINI ALU
- Operandos A y B con sus respectivos multiplexores y puertas not
- ENABLE A, ENABLE B bien controlados por sus respectivas señales(S2, S1, S0)
- Sumador completo
- Puertas lógicas
- MULTIPLEXOR DE RESULTADO, (con todas las señales)
4.- PSEUDOCÓDIGO MINI-ALU
ESQUEMA DE PSEUDOCÓDIGO
- (salidas) NOMBRE(ALU_1_bit) (entradas)
- Declaraciones de Mux de A Y B
- finaliza con bit a = Mux2a1(entradasMux2a1_a, SEÑAL, ENABLE A 1)
- bit couti, s, ri;
- Llamada al sumador
- (couti, s) = sumadorCompleto_1_bit(a, b, cini);
- (SALIDAS) = NOMBRE (ENTRADAS)
- Creacion MUX8a1
- bit [ ] = entradasMux8a1 = new bit[8];
- bit [ ] = NOMBRE = new bit[ nº de resultados]
- ASIGNACION A CADA POSICION entradas Mux8a1[0] = a AND b
- ri = mux8a1(entradasMux8a1, s, 1)
- return (Couti, ri)
(bit Couti, bitri) ALU_1_bit (bit ai, bit bi, Cin, bit s[3], (otras entradas del ejercicio))
{
bit [] entradasMux2a1_a = new bit[2];
entradasMux2a1_a[0] = ai;
entradasMux2a1_a[1] = NOT ai;
bit a = Mux2a1(entradasMux2a1_a, s[2], 1);
bit[ ] entradasMux2a1_b = new bit[2];
entradasMux2a1_b[0] = bi;
entradasMux2a1_b[1] = NOT bi;
bit b = mux2a1(entradasMux2a1_b, s[0], 1)
bit couti, s, ri;
(couti, s) = sumadorCompleto_1_bit(a, b, cini);
bit[ ] entradasMux8a1 = new bit[8];
entradasMux8a1[0] = ai AND bi;
entradasMux8a1[1] = ai OR bi;
entradasMux8a1[2] = s
entradasMux8a1[3] = s;
entradasMux8a1[4] = s;
entradasMux8a1[5] = s;
entradasMux8a1[6] = ai(i-1);
entradasMux8a1[7] = ai(i+1);
ri = mux8a1(entradasMux8a1, s[], 1);
return (Couti, ri);
}
5.- PSEUDOCÓDIGO ALU GRANDE
- (SALIDAS) NOMBRE (ENTRADAS) {
ESQUEMA PSEUDOCÓDIGO
(bit r[4]) ALU_4_bits (bit a[4], bit b[4], bit s[3] *revisar )
{
bit[] r = new bit[4];
bit[] cout = new bit[4];
(cout[0], r [0]) = ALU_1_bit( bit a[0], bit b[0], s[señalcin], s);
for (i=1; i<4; i++) {
(cout[i], r[i]) = ALU_1_bit( a[i], b[i], cout[i-1], s[]);
}
return r;
}