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
endmodule
En 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);
endmodule
Para 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
![]() |
![]() |
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
|
// 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);
endmodule
|
El módulo raíz no tiene nombre y es instanciado por
Verilog automáticamente. Para hacer referencia a un objeto
directamente perteneciente al módulo raíz desde sí
mismo, simplemente se pone el nombre del objeto como ya hemos visto.
¿Pero qué hacer si queremos acceder desde el
módulo raíz a la puerta aAbajo del
módulo c? La respuesta es que se usa un
punto (.) para descender por la jerarquía de objetos.
Por consiguiente, para acceder a dicha puerta, se pondría
c.aAbajo. El esquema se generaliza cuando hay más
niveles.

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.
lscdrmmancat