A module is a bundle of definitions (type declarations and assignments) that can be reused. Much like a subroutine, a module may have formal parameters. When creating an instance of the module, actual signals or expressions are plugged in for the formal parameters, thus linking the module instance into the program. Most often the formal parameters of a module are declared to be either inputs or outputs. Inputs are expected to be assigned outside the module, whereas outputs are expected to be assigned inside the module.