Cheatsheet Ejercicios Tema 2

1.- Creación de los datos que usaremos en la tabla

🔎
Pasos
  1. Desarrollar las operaciones para ver que valores tienen los operadores si 0, 1 o X
  1. Añadir columna A, añadir columna B
  1. Añadir columna Cin,
    1. 0 → SUMAS
    2. 1 → RESTAS
    3. X → AND, OR, XOR, DESP…..
  1. Añadir columna ENABLE A, añadir columna ENABLE B
    1. 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
🔎
Sen~al S2Señal\ S2
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

  1. Operandos A y B con sus respectivos multiplexores y puertas not
  1. ENABLE A, ENABLE B bien controlados por sus respectivas señales(S2, S1, S0)
  1. Sumador completo
  1. Puertas lógicas
  1. MULTIPLEXOR DE RESULTADO, (con todas las señales)

4.- PSEUDOCÓDIGO MINI-ALU

💡
ESQUEMA DE PSEUDOCÓDIGO
  1. (salidas) NOMBRE(ALU_1_bit) (entradas)
  1. Declaraciones de Mux de A Y B
    1. finaliza con bit a = Mux2a1(entradasMux2a1_a, SEÑAL, ENABLE A 1)
  1. bit couti, s, ri;
  1. Llamada al sumador
    1. (couti, s) = sumadorCompleto_1_bit(a, b, cini);
    2. (SALIDAS) = NOMBRE (ENTRADAS)
  1. Creacion MUX8a1
    1. bit [ ] = entradasMux8a1 = new bit[8];
    2. bit [ ] = NOMBRE = new bit[ nº de resultados]
    3. ASIGNACION A CADA POSICION entradas Mux8a1[0] = a AND b
  1. ri = mux8a1(entradasMux8a1, s, 1)
  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

  1. (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;
    }