Module Instantiation
  
    
    
     
   
   Formal Definition
  
   Module instantiation provides a means of nesting modules descriptions. 
  
   Simplified Syntax
  
   module_name [parameter_value_assignment] module_instance ; 
  
   Description
  
   Modules can be instantiated from within other modules. When a module 
   is instantiated, connections to the ports of the module must be 
   specified. There are two ways to make port connections. One is 
   connection by name, in which variables connected to each of module 
   inputs or outputs are specified in a set of parenthesis following the 
   name of the ports. In this method order of connections is not 
   significant. See Example 1. 
  
   The second method is called ordered connection. In this method the 
   order of the ports must match the order appearing in the instantiated 
   module. See Example 2. When 
   ports are connected by name it is illegal to leave any ports 
   unconnected. This may occur when ports are connected by order. See Example
    3. 
  
   What happens if you leave a port unconnected depends on the type of 
   the port. If you are connecting net type ports, unconnected bits are 
   driven with high impedance. In other cases, bits are driven with 
   unknown values. 
  
   Module instantiations can create an array of instances. To create 
   theses instances, range specifications have to be declared after the 
   module name. The array of instances can save you time in writing code 
   and provide a way to enrich your readability, see Example
    4 
  
   Examples
  
   Example 1 
  
   module dff (clk, d, q); 
   input clk, d; 
   output q; 
   reg q; 
   always @(posedge clk) q = d; 
   endmodule 
     
   module top; 
   reg data, clock; 
   wire q_out, net_1; 
     dff inst_1 (.d(data), .q(net_1), .clk(clock)); 
     dff inst_2 (.clk(clock), .d(net_1), .q(q_out)); 
   endmodule 
  
   In the top module there are two instantiations of the 'dff' module. 
   In both cases port connections are done by name, so the port order is 
   insignificant. The first port is input port 'd', the second is output 
   'q' and the last is the clock in the 'inst_1'. In the dff module the 
   order of ports is different than either of the two instantiations. 
  
   Example 2 
  
   module dff (clk, d, q); 
   input clk, d; 
   output q; 
   reg q; 
   always @(posedge clk) q = d; 
   endmodule 
     
   module top; 
   reg data, clock; 
   wire q_out, net_1; 
     dff inst_1 (clock, data, net_1); 
     dff inst_2 (clock, net_1, q_out); 
   endmodule 
  
   Example 3 
  
   dff inst_1 (clock, , net_1); 
  
   Second port is unconnected and has the value Z because it is of the 
   net type. 
  
   Example 4 
  
   module my_module (a, b, c); 
   input a, b; 
   output c; 
     assign c = a & b ; 
   endmodule 
     
   module top (a, b, c) ; 
   input [3:0] a, b; 
   output [3:0] c; 
     my_module inst [3:0] (a, b, c); 
   endmodule 
  
   Important Notes
  
  
    
 
    |