Un módulo es la entidad de diseño principal de Verilog. La primera línea de una declaración de módulo especifica el nombre y la lista de puertos (argumentos), así como el tipo de entrada/salida y ancho de cada puerto (por defecto el ancho es 1-bit). Las variables del puerto deben ser declaradas como wire, wand, ..., reg, aunque por defecto toma el valor wire. Normalmente las entradas suelen ser wire, ya que se registran fuera del módulo, las salidas en cambio suelen ser de tipo reg si se almacenan dentro de bloques always o initial.
Sintaxis
module module_name (
input [msb:lsb] input_port_list,
output [msb:lsb] output_port_list,
inout [msb:lsb] inout_port_list
);
... statements ...
endmodule
Ejemplo
module small_block ( // Interfaz del módulo
input a, b, c,
output o1, o2
);
wire s; // Estructura y comportamiento
assign o1 = s | c; // or
assign s = a & b; // and
assign o2 = s ^ c; // xor
endmodule