Transceptores y Multiplexores Jerarquías Puertas con n entradas Búferes triestado Con5ngencia de señales Asignación de señales Mul5plexores Jerarquía de módulos l l l Una de las caracterís5cas de los módulos es que pueden anidarse De este modo podemos crear jerarquías de módulos, con unos dentro de otros En el comparador de un bit de la sesión anterior ya teníamos una jerarquía: 2 Módulo raíz y accesos • Es el módulo que con5ene el bloque initial! • Se instancia directamente por Verilog • En el caso anterior, sería el módulo TestComp1! • Podemos acceder desde un módulo a componentes de sus módulos anidados, mediante el uso del punto (.) • En el caso anterior, desde TestComp1 podríamos acceder a la puerta aAbajo del circuito anidado c, usando c.aAbajo! 3 Puertas con más de 2 entradas • Es posible usar puertas lógicas de más de dos entradas en Verilog, por ejemplo una puerta AND de cuatro entradas • Para instanciar más puertas, simplemente se añaden argumentos en la línea de instanciación: • and a4(salida, entrada1, entrada2, entrada3, entrada4)! 4 Búferes triestado • En teoría se han visto los siguientes búferes con línea adicional de control, para poner la salida en alta impedancia: • Las instrucciones Verilog para instanciar estos búferes son, respec5vamente: bufif1 bIzquierda(Y,A,G);! bufif0 bDerecha(Y,A,G);! • También existen las equivalentes puertas NOT con control de triestado por alto y por bajo, que son, respec5vamente, notif1 y notif0! 5 Contingencia de señales • Puede que un cable reciba varias señales a la vez • En un cable wire, si recibe más de una señal, su valor es x! • Existen otros 5pos de cables que hacen un tratamiento dis5nto: • tri! • Igual que wire! • Se suele usar para indicar un cable que puede ir en dos sen5dos • tri0: como tri pero si todos son z, el valor es 0 (resistencia pull-­‐ down) • tri1: como tri pero si todos son z, el valor es 1 (resistencia pull-­‐ up) • wand o triand: basta un 0 para que el resultado sea 0 • wor o trior: basta un 1 para que el resultado sea 1 6 Contingencia de señales a b wire tri tri0 tri1 triand trior 0 0 0 0 0 0 0 0 0 1 x x x x 0 1 1 1 1 1 1 1 1 1 0 x x x x x 0 x 1 x x x x x x 1 x x x x x x x x z x x x x x x x 0 z 0 0 0 0 0 0 1 z 1 1 1 1 1 1 x z x x x x x x z z z z 0 1 z z 7 Asignación de señales • Podemos hacer una conexión permanente de un registro a un cable con la orden assign! • Así, el valor del registro está con5nuamente volcado en el cable wire w; ! reg r;! ! assign w=r;! 8 Ejercicio 5 • Aplicad lo aprendido en el siguiente ejemplo de un transmisor/ receptor de bus de un bit, visto en teoría 9 Ejercicio 5 (solución) • Necesitamos 4 cables auxiliares, • sa1 y sa2 para circuitería interna • ng y ndir para negaciones • Llamamos al módulo Transceiver! ! module Transceiver(inout tri a, inout tri b, input ! ! ! ! ! ! ! !wire g, input wire dir);! ! wire ng,ndir,sa1,sa2;! ! not (ng,g); //No hay referencia después => no ! ! ! ! ! !//damos nombres! not (ndir,dir);! and (sa1,ng,dir);! and (sa2,ng,ndir);! bufif1 (b,a,sa1);! bufif1 (a,b,sa2);! ! endmodule! ! 10 Ejercicio 5 (solución) • Ahora construimos el módulo de comprobación TestTransceiver que instancie un Transceiver (por ejemplo, de nombre t) y lo conecte su interfaz a dis5ntos registros t 11 module TestTransceiver;! ! igual que wire, es sólo una forma de indicar que el cable tri a,b;! puede tener contingencia/señales en dos o más sentidos reg g,dir;! reg ra,rb;! Transceiver t(a,b,g,dir);! los cables siempre van a estar assign a=ra; assign b=rb;! asociados a los registros ! // Bloque de comportamiento! initial! begin! $monitor($time," g=%b, dir=%b, a=%b, b=%b, ! ! ! !ra=%b, rb=%b”, g,dir,a,b,ra,rb);! ! //Con G=1, ambas partes están separadas! ! ra=0; rb=1; g=1; dir=‘bx;! //Ahora transmitimos de RB a A! //Pero A=X, porque todavía está conectado a RA!! #5 g=0; dir=0;! //Debemos “desconectar” RA, poniéndolo a Z! #5 ra=‘bz;! //Ahora, todo junto, en dirección contraria! ! !#5 ra=0; rb='bz; dir=1;! //Finalmente, separamos ambas partes! #5 g=1;! end! ! endmodule! ! 12 Ejercicio 6 • Constrúyase un módulo mul5plexor 4x1 con línea de control de salida OE, de modo que si dicha línea está inac5va, la salida Y esté en alta impedancia. En caso contrario, funciona como un mul5plexor normal. • Compruébese su funcionamiento con ayuda de un módulo auxiliar • Pista: podéis u5lizar el siguiente diseño 13 Ejercicio 6 (cont.) • Con dos mul5plexores 4x1 constrúyase otro módulo mul5plexor 8x1 según el esquema de la figura • Compruébese su funcionamiento con ayuda de un módulo auxiliar 14 15