Wires
Wires aka nets are used to interconnect modules. They can be 1 bit or wider. Wire having more than one bit is called vector or bus. On other hand the wires carry output of one module to the input of other module. See how modules are interconnected here.
wire [7:0] test_wire ;
The above statement declares a wire named test_wire with a width of 8 bit.Regs
Regs are used in procedural statements. In procedural statements the output is assigned to Regs. The reg types can be either sequential or combinational. It can be single bit or vector type. Procedural statements are those statements which appear inside the always block
reg [7:0] test_reg ;
The declaration of a 8 bit reg named test_reg is as above.Ports
Inside a module the results or data is available on either Wires or Regs. Procedural statements keep the data in regs and assignment statements keep the values in wires. This data are tapped outside the module through ports, exactly output ports. Likewise input to a module is passed through port known as input port.
input [7:0] test_input ,
output [7:0] test_output ,
output reg [7:0] test_output_reg ,
The first one is a input port. The second one is output port of wire type and the last one
is output port of reg type.
output [7:0] test_output ,
output reg [7:0] test_output_reg ,