Puertas lógicas Puerta AND Otras puertas Interconexión de puertas Puerta AND l Comportamiento de una puerta AND ·∙ 0 1 AND FALSE TRUE 0 0 0 FALSE FALSE FALSE 1 0 1 TRUE FALSE TRUE a b a·b 2 Puerta AND en verilog /* ComprobaciOn de puerta AND: TestAnd.v */! ! module TestAnd;! ! a reg a,b; // Entradas! salida a1 wire salida;! ! b and a1(salida,a,b);! ! // Bloque de comportamiento! initial! begin! $monitor($time," a=%b, b=%b, a.b=%b", a,b,salida);! 0 a=0, b=0, a=0; b=0;! 5 a=0, b=1, #5 a=0; b=1;! 10 a=1, b=0, 15 a=1, b=1, #5 a=1; b=0;! #5 a=1; b=1;! end! ! endmodule! a.b=0! a.b=0! a.b=0! a.b=1! 3 Ejercicio 2 • Completar la tabla de la puerta AND añadiendo como posibles entradas: • x (indefinido) • z (alta impedancia) • Tiene que haber, por tanto, dieciséis líneas en la tabla 4 Otras puertas l l Puerta OR: or(salida, a, b)! + 0 1 OR FALSE TRUE 0 0 1 FALSE FALSE TRUE 1 1 1 TRUE TRUE TRUE a b a+b Puerta NOT: not(salida, a)! -­‐ 0 1 1 0 NOT FALSE TRUE TRUE FALSE a a 5 Otras puertas l l Puerta NAND: nand(salida, a, b)! a b NAND 0 0 1 0 1 1 1 0 1 1 1 0 a b a·b Puerta NOR: nor(salida, a)! a b NOR 0 0 1 0 1 0 1 0 0 1 1 0 a b a+b 6 Otras puertas l l Puerta XOR: xor(salida, a, b)! a b XOR 0 0 0 0 1 1 1 0 1 1 1 0 a b ⊗ a b Puerta XNOR: xnor(salida, a)! a b XNOR 0 0 1 0 1 0 1 0 0 1 1 1 a b a¤b 7 Otras puertas l Puerta BUFFER: buf(salida, a)! BUF l 0 0 1 1 a a Aunque parece poco interesante, va a resultar muy úSl para introducir retardos o mantener valores en los cables 8 Ejercicio 4 • Probad alguna de las otras puertas (OR, XOR, NAND, NOR, XNOR, NOT, BUFFER) con las disSntas combinaciones de entradas (0,1,x,z). • Si quisieras probar todas las puertas con todas las combinaciones, ¿cuántas líneas de código necesitarías? 9 Interconexión de puertas l l La salida de una puerta puede ser entrada de otra puerta En general: l l l La salida de una puerta lógica siempre debe ser un cable (wire) La entrada de una puerta lógica puede ser un cable o registro Ejemplo: construir la tabla de verdad de f2(a,b,c)=ab+c 10 Interconexión de puertas // Tabla de verdad de f2(a,b,c)=ab+c! module f2;! reg [2:0] r; // Entradas: a=r[2], b=r[1], c=r[0]! wire salida, ab;! conexión e d le b a c l e s e ab ! and a1(ab,r[2],r[1]);! or o1(salida,ab,r[0]);! ! // Bloque de comportamiento! initial! begin! $display(" a b c | f2");! $display(" ----------");! $monitor($time," %b %b %b | %b", r[2],r[1], r[0], salida);! r=0; // r=000 => a=0, b=0, c=0! while (r!='b111) #5 r=r+1;! 11 bucle para ir recorriendo los valores end! de 000 a 111 endmodule! Interconexión de puertas • Tabla de verdad de f2 a b c f2 0 0 0 0 0 0 1 1 0 1 0 0 0 1 1 1 1 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 0 5 10 15 20 25 30 35 a b c | f2 ----------! 0 0 0 | 0! 0 0 1 | 1! 0 1 0 | 0! 0 1 1 | 1! 1 0 0 | 0! 1 0 1 | 1! 1 1 0 | 1! 1 1 1 | 1! 12 Ejercicio 8 • Constrúyase la tabla de verdad de la función f3 vista en teoría y cuyo diagrama con puertas es el que se muestra a conSnuación 13 Ejercicio 9 • Comprobad, mediante un programa Verilog, que la función f3 es equivalente a esta otra elaborada sólo con puertas NAND 14 15