input
): la información
fluye hacia el
interior del módulo. Se indican con una flecha
apuntando hacia dentro del módulooutput
): la información
sale del
módulo. La flecha que los representa apunta hacia
el exteriorinout
): una
combinación de los
dos anteriores. La flecha tiene punta en ambos extremosLas reglas de conexión en Verilog dependen del tipo
de puerto. Las posibilidades de conexión
se muestran en la figura siguiente para los tres tipos de puertos
y los dos tipos de variables pertinentes (reg
y
wire
):
Podemos considerar a las puertas ya vistas como pequeños módulos predefinidos del lenguaje.
Como se puede observar, este módulo presenta dos entradas,
que denominaremos a
y b
, ambas de
un bit, y tres salidas, que llamaremos mayor
,
igual
y menor
, también todas
de un bit.
Cuando se define un módulo en Verilog, lo primero que hay que hacer es declarar su interfaz:
// MOdulo comparador de un bit module Comp1(output wire mayor, output wire igual, output wire menor, input wire a, input wire b); // AquI vendrA el cOdigo del mOdulo endmoduleEn el cuerpo del módulo hay que efectuar la conexiones entre las puertas. Para ello hay que nombrar cada una de ellas y, si es necesario, algunos cables auxiliares. Por ejemplo:
// MOdulo comparador de un bit module Comp1(output wire mayor, output wire igual, output wire menor, input wire a, input wire b); wire wArriba, wAbajo; not nArriba(wArriba,a); not nAbajo(wAbajo,b); and aArriba(mayor,a,wAbajo); and aAbajo(menor,b,wArriba); nor n(igual,mayor,menor); endmodulePara poder comprobar si el resultado es correcto, definimos un módulo auxiliar en el mismo fichero:
module TestComp1; reg a,b; wire M,m,igual; Comp1 c(M,igual,m,a,b); // Bloque de comportamiento initial begin $monitor($time," a=%b, b=%b, mayor=%b, igual=%b, menor=%b", a,b,M,igual,m); a=0; b=0; #5 a=0; b=1; #5 a=1; b=0; #5 a=1; b=1; end endmodule
La línea fundamental es la que dice:
Comp1 c(M,igual,m,a,b)
. En la parte anterior
definíamos la interfaz y el comportamiento
del módulo. En esta línea construimos
una instancia del módulo cuyo nombre
es c
. Una definición se puede
instanciar tantas veces como sea necesario. La salida
del programa es la siguiente:
0 a=0, b=0, mayor=0, igual=1, menor=0 5 a=0, b=1, mayor=0, igual=0, menor=1 10 a=1, b=0, mayor=1, igual=0, menor=0 15 a=1, b=1, mayor=0, igual=1, menor=0
Construir un módulo para comprobar todas las posibles
entradas (16). Úsense como entradas dos
variables de dos bits en lugar de cuatro variables de un bit,
esto es, todas las posibles combinaciones en las que
a
está en {0,1,2,3} y b
también en {0,1,2,3}
Comp1
definido más arriba
solamente para comparación de igualdad, la línea
de instanciación podría ser:
Comp1 c7(,igual,,a,b);En el ejemplo suponemos definidas tres variables
igual
,
a
y b
que es donde queremos realizar
las conexiones.
and a4(salida, entrada1, entrada2, entrada3, entrada4);
Añádase un línea de salida adicional, V, que se active cuando la salida sea válida, es decir, permanezca desactivada cuando no haya ninguna línea del codificador activa.
ls
cd
rm
man
cat