Ports can be declared in the port list, or in the module body. Ports declared in the port list can optionally omit their type and only declare a name, to be specified within the body of the module:
Larger designs can be built by using multiple smaller modules.
Modules can be *instantiated* within other modules and ports, and these *instances* can be connected with other signals.
These port connections can be defined by an *ordered list*, or by *name*.
### By Ordered List
```verilog
module submodule (input x, y, z, output o);
// ------- snip -------
endmodule
module parent;
wire a, b, c;
wire o;
// Similar to C, the type of the module is first, followed by
// the name of the module instance.
submodule foo (a, b, c, o);
```
### By Name
Ports can also be joined by explicitly defining the name.
Syntactically, this is done with a dot (`.`), followed by the port name defined by the design, followed by the signal name to connect, wrapped in paranethesis (`.)