************************************************************************************************
*esempi
*xnand1 0 node1 nodeZ nodeA nodeB NAND2_SUB       <--drive strength di default=1
*xnand2 0 node1 nodeZ nodeA nodeB NAND2_SUB XX=2  <--drive strength =2
*xxor1  0 node1 nodeZ nodeB nodeA XOR2_SUB


.subckt NOT4_SUB 1 2 3 4 XX=4
Mn1 3 4 1 1 nmos W={1*XX*Wmin} L={Lmin}
Mp1 3 4 2 2 pmos W={2*XX*Wmin} L={Lmin}
.ends




************************************************************************************************
* not
************************************************************************************************
* devono essere dichiarate nel listato chiamante Wmin, Lmin ed il modello per i mos 
*
*drive strength ---------+
*inA -----------------+  |
*uscita ------------+ |  |
*vdd -------------+ | |  |
*massa ---------+ | | |  |
*               | | | |  |
*               v v v v  v
.subckt NOT_SUB 1 2 3 4 XX=1
Mn1 3 4 1 1 nmos W={1*XX*Wmin} L={Lmin}
Mp1 3 4 2 2 pmos W={2*XX*Wmin} L={Lmin}
.ends
************************************************************************************************

************************************************************************************************
* nand2 
************************************************************************************************
* devono essere dichiarate nel listato chiamante Wmin, Lmin ed il modello per i mos

*drive strength ------------+
*inB ----mos uscita-------+ |
*inA ----mos massa------+ | |
*uscita --------------+ | | |
*vdd ---------------+ | | | |
*massa -----------+ | | | | |
*                 | | | | | |
*                 v v v v v v
.subckt NAND2_SUB 1 2 3 4 5 XX=1
Mn1 6 4 1 1 nmos W={2*XX*Wmin} L={Lmin}
Mn2 3 5 6 1 nmos W={2*XX*Wmin} L={Lmin}
Mp1 3 4 2 2 pmos W={2*XX*Wmin} L={Lmin}
Mp2 3 5 2 2 pmos W={2*XX*Wmin} L={Lmin}
.ends
************************************************************************************************

************************************************************************************************
* nand3
************************************************************************************************
*drive strength---------------+ 
*inC------------------------+ | 
*inB ---------------------+ | | 
*inA -------------------+ | | | 
*output --------------+ | | | | 
*vdd ---------------+ | | | | | 
*ground-----------+ | | | | | | 
*                 | | | | | | | 
*                 v v v v v v v 
.subckt NAND3_SUB 1 2 3 4 5 6 XX=1
Mn1 7 4 1 1 nmos W={3*XX*Wmin} L={Lmin}
Mn2 8 5 7 1 nmos W={3*XX*Wmin} L={Lmin}
Mn3 3 6 8 1 nmos W={3*XX*Wmin} L={Lmin}

Mp1 3 4 2 2 pmos W={2*XX*Wmin} L={Lmin}
Mp2 3 5 2 2 pmos W={2*XX*Wmin} L={Lmin}
Mp3 3 6 2 2 pmos W={2*XX*Wmin} L={Lmin}
.ends
************************************************************************************************

************************************************************************************************
* nand4
************************************************************************************************
*drive strengh------------------+
*inD--------------------------+ |
*inC------------------------+ | |
*inB ---------------------+ | | |
*inA -------------------+ | | | |
*output --------------+ | | | | |
*vdd ---------------+ | | | | | |
*ground-----------+ | | | | | | |
*                 | | | | | | | |
*                 v v v v v v v v
.subckt NAND4_SUB 1 2 3 4 5 6 7 XX=1
Mn1 8 4 1 1  nmos W={4*XX*Wmin} L={Lmin}
Mn2 9 5 8 1  nmos W={4*XX*Wmin} L={Lmin}
Mn3 10 6 9 1 nmos W={4*XX*Wmin} L={Lmin}
Mn4 3 7 10 1 nmos W={4*XX*Wmin} L={Lmin}

Mp1 3 4 2 2 pmos W={2*XX*Wmin} L={Lmin}
Mp2 3 5 2 2 pmos W={2*XX*Wmin} L={Lmin}
Mp3 3 6 2 2 pmos W={2*XX*Wmin} L={Lmin}
Mp4 3 7 2 2 pmos W={2*XX*Wmin} L={Lmin}

.ends
************************************************************************************************

************************************************************************************************
* nor2
************************************************************************************************
* devono essere dichiarate nel listato chiamante  Wmin, Lmin ed il modello per i mos

*drive strength -----------+
*inB ---mos uscita-------+ |
*inA ---mos vdd--------+ | |
*uscita -------------+ | | |
*vdd --------------+ | | | |
*massa ----------+ | | | | |
*                | | | | | |
*                v v v v v v
.subckt NOR2_SUB 1 2 3 4 5 XX=1
Mn1 3 4 1 1 nmos W={1*XX*Wmin} L={Lmin}
Mn2 3 5 1 1 nmos W={1*XX*Wmin} L={Lmin}
Mp1 6 4 2 2 pmos W={4*XX*Wmin} L={Lmin}
Mp2 3 5 6 2 pmos W={4*XX*Wmin} L={Lmin}
.ends
************************************************************************************************

************************************************************************************************
* nor3
************************************************************************************************
* devono essere dichiarate nel listato chiamante  Wmin, Lmin ed il modello per i mos
*
*drive strenght--------------+
*inC--- -------------------+ |
*inB --------------------+ | |
*inA ------------------+ | | |
*output -------------+ | | | |
*vdd --------------+ | | | | |
*ground----------+ | | | | | |
*                | | | | | | |
*                v v v v v v v
.subckt NOR3_SUB 1 2 3 4 5 6 XX=1

Mn1 3 4 1 1 nmos W={1*XX*Wmin} L={Lmin}
Mn2 3 5 1 1 nmos W={1*XX*Wmin} L={Lmin}
Mn3 3 6 1 1 nmos W={1*XX*Wmin} L={Lmin}
Mp1 7 4 2 2 pmos W={6*XX*Wmin} L={Lmin}
Mp2 8 5 7 2 pmos W={6*XX*Wmin} L={Lmin}
Mp3 3 6 8 2 pmos W={6*XX*Wmin} L={Lmin}

.ends
************************************************************************************************

************************************************************************************************
* nor4
************************************************************************************************
* devono essere dichiarate nel listato chiamante  Wmin, Lmin ed il modello per i mos
*
*drive strenght------------------+
*in4-------------------------+   |
*in3--- -------------------+ |   |
*in2 --------------------+ | |   |
*in1 ------------------+ | | |   |
*output -------------+ | | | |   |
*vdd --------------+ | | | | |   |
*ground----------+ | | | | | |   |
*                | | | | | | |   |
*                v v v v v v v   v
.subckt NOR4_SUB 1 2 3 4 5 6 7  XX=1
Mn1 3 4 1 1 nmos W={1*XX*Wmin} L={Lmin}
Mn2 3 5 1 1 nmos W={1*XX*Wmin} L={Lmin}
Mn3 3 6 1 1 nmos W={1*XX*Wmin} L={Lmin}
Mn4 3 7 1 1 nmos W={1*XX*Wmin} L={Lmin}
Mp1 10 4 2 2 pmos W={8*XX*Wmin} L={Lmin}
Mp2 9 5 10 2 pmos W={8*XX*Wmin} L={Lmin}
Mp3 8 6 9 2 pmos W={8*XX*Wmin} L={Lmin}
Mp4 3 7 8 2 pmos W={8*XX*Wmin} L={Lmin}

.ends
************************************************************************************************

************************************************************************************************
* xor2
************************************************************************************************
* devono essere dichiarate nel listato chiamante  Wmin, Lmin ed il modello per i mos
*
*drive strength -------------+
*inB --------------------+   |
*inA ------------------+ |   |
*uscita -------------+ | |   |
*vdd --------------+ | | |   |
*massa ----------+ | | | |   |
*                | | | | |   |
*                v v v v v   v
.subckt XOR2_SUB 1 2 3 4 5  XX=1
*NOT
Mp5 node5n 5 2 2 pmos L={Lmin} W={2*XX*Wmin}         
Mn5 node5n 5 1 1 nmos L={Lmin} W={XX*Wmin}         
Mp6 node4n 4 2 2 pmos L={Lmin} W={2*XX*Wmin}         
Mn6 node4n 4 1 1 nmos L={Lmin} W={XX*Wmin}         
 
*PULL UP
Mp1 3      4     int4  2 pmos L={Lmin}  W={4*XX*Wmin} 
Mp2 3    node4n  int1  2 pmos L={Lmin}  W={4*XX*Wmin}         
Mp3 int4 node5n   2    2 pmos L={Lmin}  W={4*XX*Wmin}          
Mp4 int1   5      2    2 pmos L={Lmin}  W={4*XX*Wmin}          

*PULL DOWN
Mn4 6 4 1 1 nmos L={Lmin} W={2*XX*Wmin} 
Mn3 3 5 6 1 nmos L={Lmin} W={2*XX*Wmin}          
Mn2 int3 node4n 1 1 nmos L={Lmin} W={2*XX*Wmin}          
Mn1 3 node5n int3 1 nmos L={Lmin} W={2*XX*Wmin}  
.ends
************************************************************************************************

************************************************************************************************
* and2 
************************************************************************************************
* devono essere dichiarate nel listato chiamante Wmin, Lmin ed il modello per i mos
*
*drive strength--------------+
*inB ----mos uscita-------+  |
*inA ----mos massa------+ |  |
*uscita --------------+ | |  |
*vdd ---------------+ | | |  |  
*massa -----------+ | | | |  |  
*                 | | | | |  |  
*                 v v v v v  v 
.subckt AND2_SUB  1 2 3 4 5  XX=1
Mn1 6 4 1 1 nmos W={2*XX*Wmin} L={Lmin}
Mn2 7 5 6 1 nmos W={2*XX*Wmin} L={Lmin}
Mp1 7 4 2 2 pmos W={2*XX*Wmin} L={Lmin}
Mp2 7 5 2 2 pmos W={2*XX*Wmin} L={Lmin}

Mp3 3 7 2 2 pmos W={2*XX*Wmin} L={Lmin}
Mn3 3 7 1 1 nmos W={1*XX*Wmin} L={Lmin}

.ends
************************************************************************************************

************************************************************************************************
* and3 
************************************************************************************************
* devono essere dichiarate nel listato chiamante Wmin, Lmin ed il modello per i mos
*
*drive strength----------------+
*inC------------------------+  |
*inB ----mos output-------+ |  |
*inA ----mos ground-----+ | |  |
*output --------------+ | | |  |
*vdd ---------------+ | | | |  |
*groung-----------+ | | | | |  |
*                 | | | | | |  |
*                 v v v v v v  v
.subckt AND3_SUB  1 2 3 4 5 6  XX=1

Mn1 7 4 1 1 nmos W={3*XX*Wmin} L={Lmin}
Mn2 8 5 7 1 nmos W={3*XX*Wmin} L={Lmin}
Mn3 9 6 8 1 nmos W={3*XX*Wmin} L={Lmin}
Mp1 9 4 2 2 pmos W={2*XX*Wmin} L={Lmin}
Mp2 9 5 2 2 pmos W={2*XX*Wmin} L={Lmin}
Mp3 9 6 2 2 pmos W={2*XX*Wmin} L={Lmin}

Mp4 3 9 2 2 pmos W={2*XX*Wmin} L={Lmin}
Mn4 3 9 1 1 nmos W={1*XX*Wmin} L={Lmin}

.ends
************************************************************************************************

************************************************************************************************
* and4 
************************************************************************************************
* devono essere dichiarate nel listato chiamante Wmin, Lmin ed il modello per i mos
*
*drive strength------------------+
*inD--------------------------+  |
*inC------------------------+ |  |
*inB ----mos output-------+ | |  |
*inA ----mos ground-----+ | | |  |
*output --------------+ | | | |  | 
*vdd ---------------+ | | | | |  |
*groung-----------+ | | | | | |  |
*                 | | | | | | |  |
*                 v v v v v v v  v
.subckt AND4_SUB  1 2 3 4 5 6 7 XX=1

Mn1 10 4 1 1 nmos W={4*XX*Wmin} L={Lmin}
Mn2 9 5 10 1 nmos W={4*XX*Wmin} L={Lmin}
Mn3 8 6 9 1 nmos W={4*XX*Wmin} L={Lmin}
Mn4 11 7 8 1 nmos W={4*XX*Wmin} L={Lmin}

Mp1 11 4 2 2 pmos W={2*XX*Wmin} L={Lmin}
Mp2 11 5 2 2 pmos W={2*XX*Wmin} L={Lmin}
Mp3 11 6 2 2 pmos W={2*XX*Wmin} L={Lmin}
Mp4 11 7 2 2 pmos W={2*XX*Wmin} L={Lmin}

Mp5 3 11 2 2 pmos W={2*XX*Wmin} L={Lmin}
Mn5 3 11 1 1 nmos W={1*XX*Wmin} L={Lmin}

.ends
************************************************************************************************

************************************************************************************************
* mux21
************************************************************************************************
*drive strength--------------------------------------+
*inC-(nodeS0)---------------------------------+      |
*inB-(nodeD1)---------------------------+     |	     |
*inA-(nodeD0)---------------------+     |     |      |
*output---------------------+     |     |     |      |
*vdd -----------------+     |     |     |     |      |   
*ground-----------+   |     |     |     |     |      | 
*                 |   |     |     |     |     |      | 
*                 v   v     v     v     v     v      v
.subckt mux21_SUB 0 node1 nodez nodea nodeb nodec   XX=1

*RETE PASS TRANSISTOR
Mn4 nodea nodecn nodeu 0 nmos W={2*XX*Wmin} L={Lmin}
Mn5 nodeb nodec nodeu 0 nmos W={2*XX*Wmin} L={Lmin}  
Mp4 nodea nodec nodeu node1 pmos W={2*XX*Wmin} L={Lmin} 
Mp5 nodeb nodecn nodeu node1 pmos W={2*XX*Wmin} L={Lmin}  

*INVERTER FINALI
Mn3 nodez nodeun 0 0 nmos W={XX*Wmin} L={Lmin} 
Mp3 nodez nodeun node1 node1 pmos W={2*XX*Wmin} L={Lmin}
Mn2 nodeun nodeu 0 0 nmos W={XX*Wmin} L={Lmin} 
Mp2 nodeun nodeu node1 node1 pmos W={2*XX*Wmin} L={Lmin} 

*NOT
Mp1 nodecn nodec node1 node1 pmos W={2*XX*Wmin} L={Lmin} 
Mn1 nodecn nodec 0 0 nmos W={XX*Wmin} L={Lmin}
.ends

************************************************************************************************

************************************************************************************************
* mux31
************************************************************************************************
*drive strength----------------------------------------------------+
*in5-(nodeS1)----------------------------------------------+       |
*in4-(nodeS0)----------------------------------------+     |       |
*in3-(nodeD2)---------------------------------+      |     |       |
*in2-(nodeD1)---------------------------+     |	     |     |       |
*in1-(nodeD0)---------------------+     |     |      |     |       |
*output---------------------+     |     |     |      |     |       |
*vdd -----------------+     |     |     |     |      |     |       |
*ground-----------+   |     |     |     |     |      |     |       |
*                 |   |     |     |     |     |      |     |       |
*                 v   v     v     v     v     v      v     v       v
.subckt mux31_SUB 0 node1 nodeZ nodeA nodeB nodeC nodeD nodeE   XX=1

Mp8 nodeU1 nodee nodeU2 node1 pmos W={3*XX*Wmin} L={Lmin} 
Mp3 nodea noded nodeU1 node1 pmos W={3*XX*Wmin} L={Lmin} 
Mp2 nodeeN nodee node1 node1 pmos W={2*XX*Wmin} L={Lmin} 
Mp1 nodedN noded node1 node1 pmos W={2*XX*Wmin} L={Lmin} 
Mp4 nodeb nodedN nodeU1 node1 pmos W={3*XX*Wmin} L={Lmin} 
Mn3 nodea nodedN nodeU1 0 nmos W={3*XX*Wmin} L={Lmin} 
Mn8 nodeU1 nodeeN nodeU2 0 nmos W={3*XX*Wmin} L={Lmin} 
Mn4 nodeb noded nodeU1 0 nmos W={3*XX*Wmin} L={Lmin} 

Mn7 nodez 1 0 0 nmos W={XX*Wmin} L={Lmin} 
Mp7 nodez 1 node1 node1 pmos W={2*XX*Wmin} L={Lmin} 
Mn6 1 nodeU2 0 0 nmos W={XX*Wmin} L={Lmin} 

Mp6 1 nodeU2 node1 node1 pmos W={2*XX*Wmin} L={Lmin} 
Mp5 nodec nodeeN nodeU2 node1 pmos W={2*XX*Wmin} L={Lmin} 
Mn2 nodeeN nodee 0 0 nmos W={XX*Wmin} L={Lmin} 

Mn1 nodedN noded 0 0 nmos W={XX*Wmin} L={Lmin} 
Mn5 nodec nodee nodeU2 0 nmos W={2*XX*Wmin} L={Lmin} 

.ends
************************************************************************************************

************************************************************************************************
* mux41
************************************************************************************************
*drive strength--------------------------------------------------------+
*in6-(nodeS1)--------------------------------------------------+       |
*in5-(nodeS0)----------------------------------------------+   |       |
*in4-(nodeD3)----------------------------------------+     |   |       |	
*in3-(nodeD2)---------------------------------+      |     |   |       |
*in2-(nodeD1)---------------------------+     |	     |     |   |       |
*in1-(nodeD0)---------------------+     |     |      |     |   |       |
*output---------------------+     |     |     |      |     |   |       |
*vdd -----------------+     |     |     |     |      |     |   |       |
*ground-----------+   |     |     |     |     |      |     |   |       |
*                 |   |     |     |     |     |      |     |   |       |
*                 v   v     v     v     v     v      v     v   v       v
.subckt mux41_SUB 0 node1 nodeZ nodeA nodeB nodeC nodeD nodeE nodeF   XX=1

Mn1 nodeeN nodee 0 0 nmos W={XX*Wmin} L={Lmin} 
Mp1 nodeeN nodee node1 node1 pmos W={2*XX*Wmin} L={Lmin} 
Mn2 nodefN nodef 0 0 nmos W={XX*Wmin} L={Lmin} 
Mp2 nodefN nodef node1 node1 pmos W={2*XX*Wmin} L={Lmin} 
Mp3 nodea  nodee nodeU1 node1 pmos W={3*XX*Wmin} L={Lmin} 
Mn3 nodea  nodeeN nodeU1 0 nmos W={3*XX*Wmin} L={Lmin} 
Mn4 nodeb  nodee nodeU1 0 nmos W={3*XX*Wmin} L={Lmin} 
Mp4 nodeb  nodeeN nodeU1 node1 pmos W={3*XX*Wmin} L={Lmin} 
Mp5 nodec  nodee nodeU2 node1 pmos W={3*XX*Wmin} L={Lmin} 
Mn5 nodec  nodeeN nodeU2 0 nmos W={3*XX*Wmin} L={Lmin} 
Mp6 noded  nodeeN nodeU2 node1 pmos W={3*XX*Wmin} L={Lmin} 
Mn6 noded  nodee nodeU2 0 nmos W={3*XX*Wmin} L={Lmin} 
Mp7 nodeU1  nodef nodez node1 pmos W={3*XX*Wmin} L={Lmin} 
Mn7 nodeU1  nodefN nodeU3 0 nmos W={3*XX*Wmin} L={Lmin} 
Mp8 nodeU2  nodefN nodez node1 pmos W={3*XX*Wmin} L={Lmin} 
Mn8 nodeU2  nodef nodeU3 0 nmos W={3*XX*Wmin} L={Lmin} 

Mp9 1 nodeU3 node1 node1 pmos W={2*XX*Wmin} L={Lmin} 
Mn9 1 nodeU3 0 0 nmos W={XX*Wmin} L={Lmin} 

Mn10 nodez 1 0 0 nmos W={XX*Wmin} L={Lmin} 
Mp10 nodez 1 node1 node1 pmos W={2*XX*Wmin} L={Lmin} 
.ends
************************************************************************************************

************************************************************************************************
* DLatch
************************************************************************************************
*drive strength--------------------------------+      
*inB ---(like i/p)-nodeD-----------------+     |      
*inA ---(like clk)-nodeG-----------+     |     |      
*output----------------------+     |     |     |      
*vdd ------------------+     |     |     |     |         
*ground------------+   |     |     |     |     |       
*                  |   |     |     |     |     |       
*                  v   v     v     v     v     v      
.subckt DLatch_SUB 0 node1 nodeZ nodea nodeb XX=1   

Mp41 nodeb nodeaN node21 node1 		pmos W={2*XX*Wmin} L={Lmin} 
Mn4 nodeb nodea node21 0 		nmos W={2*XX*Wmin} L={Lmin}
Mn3 nodez 1 0 0 			nmos W={XX*Wmin} L={Lmin} 
Mp3 nodez 1 node1 node1 		pmos W={2*XX*Wmin} L={Lmin} 

*REAZIONE +
Mn1 node21 1 0 0 			nmos W={XX*Wmin} L={2*Lmin} 
Mp1 node21 1 node1 node1 		pmos W={XX*Wmin} L={2*Lmin} 
Mn2 1 node21 0 0 			nmos W={1*XX*Wmin} L={Lmin} 
Mp2 1 node21 node1 node1 		pmos W={2*XX*Wmin} L={Lmin} 

*G NEGATO
Mp5 nodeaN nodea node1 node1 		pmos W={2*XX*Wmin} L={Lmin}
Mn5 nodeaN nodea 0 0 			nmos W={XX*Wmin} L={Lmin}
.ends
************************************************************************************************

************************************************************************************************
* AO12
************************************************************************************************
* devono essere dichiarate nel listato chiamante Wmin, Lmin ed il modello per i mos
*
*drive strength---------------+
*inC ----mos out-gnd--------+ |
*inB ----mos Vdd-gnd------+ | |
*inA ----mos Vdd-out----+ | | |
*uscita --------------+ | | | |
*vdd ---------------+ | | | | |  
*massa -----------+ | | | | | |  
*                 | | | | | | |  
*                 v v v v v v v 
.subckt AO12_SUB  1 2 3 4 5 6 XX=1
Mn1 9 4 8 1 nmos W={2*XX*Wmin} L={Lmin} 
Mn2 8 5 1 1 nmos W={2*XX*Wmin} L={Lmin} 
Mn3 9 6 1 1 nmos W={1*XX*Wmin} L={Lmin}

Mp1 7 4 2 2 pmos W={4*XX*Wmin} L={Lmin} 
Mp2 7 5 2 2 pmos W={4*XX*Wmin} L={Lmin}
Mp3 9 6 7 2 pmos W={4*XX*Wmin} L={Lmin} 

Mn4 3 9 1 1 nmos W={XX*Wmin} L={Lmin} 
Mp4 3 9 2 2 pmos W={2*XX*Wmin} L={Lmin} 
.ends
************************************************************************************************

************************************************************************************************
* AO22
************************************************************************************************
* devono essere dichiarate nel listato chiamante Wmin, Lmin ed il modello per i mos
*
*drive strength-----------------+
*inD ----mos Vdd-gnd----------+ | 
*inC ----mos Vdd-out--------+ | | 
*inB ----mos out-gnd------+ | | | 
*inA ----mos out-out----+ | | | | 
*uscita --------------+ | | | | | 
*vdd ---------------+ | | | | | | 
*massa -----------+ | | | | | | | 
*                 | | | | | | | | 
*                 v v v v v v v v 
.subckt AO22_SUB  1 2 3 4 5 6 7 XX=1
*   D  G  S  B  Name W L
*PULL DOWN
Mn1 11 4  9  1  nmos W={2*XX*Wmin} L={Lmin}
Mn2 9  5  1  1  nmos W={2*XX*Wmin} L={Lmin} 

Mn3 11 6  10 1  nmos W={2*XX*Wmin} L={Lmin}
Mn4 10 7  1  1  nmos W={2*XX*Wmin} L={Lmin}

*PULL UP
Mp1 11 4  8  2  pmos w={4*XX*Wmin} L={Lmin}                                                                         
Mp2 11 5  8  2  pmos W={4*XX*Wmin} L={Lmin}   

Mp3 8  6  2  2  pmos W={4*XX*Wmin} L={Lmin} 
Mp4 8  7  2  2  pmos W={4*XX*Wmin} L={Lmin}

*USCITA
Mn5 3  11 1  1  nmos W={Wmin} L={Lmin}
Mp5 3  11 2  2  pmos W={2*Wmin} L={Lmin}

.ends
************************************************************************************************

************************************************************************************************
* AO31
************************************************************************************************
* devono essere dichiarate nel listato chiamante Wmin, Lmin ed il modello per i mos
*
*drive strength---------------------+
*inD ----mos out-out--------------+ | 
*inC ----mos Vdd-gnd------------+ | | 
*inB ----mos Vdd-mid,mid------+ | | | 
*inA ----mos Vdd-out--------+ | | | | 
*uscita ------------------+ | | | | | 
*vdd -------------------+ | | | | | | 
*massa ---------------+ | | | | | | | 
*                     | | | | | | | | 
*                     v v v v v v v v 
.subckt AO31_SUB      1 2 3 4 5 6 7 XX=1
*   D  G  S  B  Name W L

Mn1 9  4  10 1  nmos W={3*XX*Wmin} L={Lmin} 
Mn2 10 5  11 1  nmos W={3*XX*Wmin} L={Lmin} 
Mn3 11 6  1  1  nmos W={3*XX*Wmin} L={Lmin} 
Mn4 9  7  1  1  nmos W={1*XX*Wmin} L={Lmin} 

Mp1 8  4  2  2  pmos W={4*XX*Wmin} L={Lmin} 
Mp2 8  5  2  2  pmos W={4*XX*Wmin} L={Lmin} 
Mp3 8  6  2  2  pmos W={4*XX*Wmin} L={Lmin} 
Mp4 9  7  8  2  pmos W={4*XX*Wmin} L={Lmin} 

Mn5 3  9  1  1  nmos W={1*XX*Wmin} L={Lmin} 
Mp5 3  9  2  2  pmos W={2*XX*Wmin} L={Lmin} 
.ends
************************************************************************************************

************************************************************************************************
* AO32
************************************************************************************************
* devono essere dichiarate nel listato chiamante Wmin, Lmin ed il modello per i mos
*
*drive strength------------------------+
*inE ----mos out-gnd----------------+  |
*inD ----mos out-out--------------+ |  |
*inC ----mos Vdd-gnd------------+ | |  |
*inB ----mos Vdd-mid,mid------+ | | |  |
*inA ----mos Vdd-out--------+ | | | |  |
*uscita ------------------+ | | | | |  | 
*vdd -------------------+ | | | | | |  |
*massa ---------------+ | | | | | | |  |
*                     | | | | | | | |  |
*                     v v v v v v v v  V 
.subckt AO32_SUB      1 2 3 4 5 6 7 8 XX=1
*    D  G  S  B  Name W L

Mn6  3  10 1  1  nmos W={XX*Wmin} L={Lmin}
Mp6  3  10 2  2  pmos W={2*XX*Wmin} L={Lmin}

Mn1  10 4  11 1  nmos W={3*XX*Wmin} L={Lmin}
Mn2  11 5  12 1  nmos W={3*XX*Wmin} L={Lmin}    
Mn3  12 6  1  1  nmos W={3*XX*Wmin} L={Lmin}                            
Mn4  10 7  13 1  nmos W={2*XX*Wmin} L={Lmin}    
Mn5  13 8  1  1  nmos W={2*XX*Wmin} L={Lmin} 
 
Mp1  10 7  9  2  pmos W={4*XX*Wmin} L={Lmin}  
Mp2  10 8  9  2  pmos W={4*XX*Wmin} L={Lmin}    
Mp3  9  4  2  2  pmos W={4*XX*Wmin} L={Lmin}
Mp4  9  5  2  2  pmos W={4*XX*Wmin} L={Lmin}
Mp5  9  6  2  2  pmos W={4*XX*Wmin} L={Lmin}    

.ends
************************************************************************************************

************************************************************************************************
* AO33
************************************************************************************************
* devono essere dichiarate nel listato chiamante Wmin, Lmin ed il modello per i mos
*
*drive strength--------------------------+
*inF ----mos out-gnd------------------+  |
*inE ----mos out-mid,mid------------+ |  |
*inD ----mos out-out--------------+ | |  |
*inC ----mos Vdd-gnd------------+ | | |  |
*inB ----mos Vdd-mid,mid------+ | | | |  |
*inA ----mos Vdd-out--------+ | | | | |  |
*uscita ------------------+ | | | | | |  |
*vdd -------------------+ | | | | | | |  |
*massa ---------------+ | | | | | | | |  |  
*                     | | | | | | | | |  |  
*                     v v v v v v v v v  v 
.subckt AO33_SUB      1 2 3 4 5 6 7 8 9  XX=1
*   D  G  S  B  Name W L
Mn1 11 4  12 1  nmos W={3*XX*Wmin} L={Lmin} 
Mn2 12 5  13 1  nmos W={3*XX*Wmin} L={Lmin} 
Mn3 13 6  1  1  nmos W={3*XX*Wmin} L={Lmin} 
Mn4 11 7  14 1  nmos W={3*XX*Wmin} L={Lmin} 
Mn5 14 8  15 1  nmos W={3*XX*Wmin} L={Lmin} 
Mn6 15 9  1  1  nmos W={3*XX*Wmin} L={Lmin} 

Mp1 10 4  2  2  pmos W={4*XX*Wmin} L={Lmin} 
Mp2 10 5  2  2  pmos W={4*XX*Wmin} L={Lmin} 
Mp3 10 6  2  2  pmos W={4*XX*Wmin} L={Lmin} 
Mp4 11 7  10 2  pmos W={4*XX*Wmin} L={Lmin} 
Mp5 11 8  10 2  pmos W={4*XX*Wmin} L={Lmin} 
Mp6 11 9  10 2  pmos W={4*XX*Wmin} L={Lmin} 

Mn7 3  11 1  1  nmos W={XX*Wmin} L={Lmin} 
Mp7 3  11 2  2  pmos W={2*XX*Wmin} L={Lmin} 
.ends
************************************************************************************************

************************************************************************************************
* AO112
************************************************************************************************
* devono essere dichiarate nel listato chiamante Wmin, Lmin ed il modello per i mos
*
*drive strength---------------------+
*inD ----mos out-out--------------+ |
*inC ----mos mid,mid-gnd--------+ | |
*inB ----mos Vdd-gnd----------+ | | |
*inA ----mos Vdd-out--------+ | | | |
*uscita ------------------+ | | | | |
*vdd -------------------+ | | | | | |
*massa ---------------+ | | | | | | |  
*                     | | | | | | | |  
*                     v v v v v v v v 
.subckt AO112_SUB     1 2 3 4 5 6 7 XX=1
*   D  G  S  B  Name W L

Mn1 10 4  11 1  nmos W={2*XX*Wmin} L={Lmin} 
Mn2 11 5  1  1  nmos W={2*XX*Wmin} L={Lmin} 
Mn3 10 6  1  1  nmos W={1*XX*Wmin} L={Lmin} 
Mn4 10 7  1  1  nmos W={1*XX*Wmin} L={Lmin} 

Mp1 8  4  2  2  pmos W={6*XX*Wmin} L={Lmin} 
Mp2 8  5  2  2  pmos W={6*XX*Wmin} L={Lmin} 
Mp3 9  6  8  2  pmos W={6*XX*Wmin} L={Lmin} 
Mp4 10 7  9  2  pmos W={6*XX*Wmin} L={Lmin} 

Mn5 3  10 1  1  nmos W={XX*Wmin} L={Lmin} 
Mp5 3  10 2  2  pmos W={2*XX*Wmin} L={Lmin} 
.ends
************************************************************************************************

************************************************************************************************
* AO212
************************************************************************************************
* devono essere dichiarate nel listato chiamante Wmin, Lmin ed il modello per i mos
*
*drive strength-----------------------+
*inE ----mos out-gnd----------------+ |
*inD ----mos Vdd-gnd--------------+ | |
*inC ----mos Vdd-out------------+ | | |
*inB ----mos mid,mid-gnd------+ | | | |
*inA ----mos Vdd-out--------+ | | | | |
*uscita ------------------+ | | | | | |
*vdd -------------------+ | | | | | | |
*massa ---------------+ | | | | | | | | 
*                     | | | | | | | | | 
*                     v v v v v v v v v
.subckt AO212_SUB     1 2 3 4 5 6 7 8 XX=1
*   D  G  S  B  Name W L

Mn1 12 4  13 1  nmos W={2*XX*Wmin} L={Lmin} 
Mn2 13 5  1  1  nmos W={2*XX*Wmin} L={Lmin} 
Mn3 12 6  14 1  nmos W={2*XX*Wmin} L={Lmin} 
Mn4 14 7  1  1  nmos W={2*XX*Wmin} L={Lmin} 
Mn5 12 8  1  1  nmos W={XX*Wmin} L={Lmin} 

Mp1 11 4  9  2  pmos W={6*XX*Wmin} L={Lmin} 
Mp2 11 5  9  2  pmos W={6*XX*Wmin} L={Lmin} 
Mp3 9  6  2  2  pmos W={6*XX*Wmin} L={Lmin} 
Mp4 9  7  2  2  pmos W={6*XX*Wmin} L={Lmin} 
Mp5 12 8  11 2  pmos W={6*XX*Wmin} L={Lmin} 

Mn7 3  12 1  1  nmos W={XX*Wmin} L={Lmin} 
Mp7 3  12 2  2  pmos W={2*XX*Wmin} L={Lmin} 

.ends
*************************************************************************************************

*************************************************************************************************
* AO222
*************************************************************************************************
* devono essere dichiarate nel listato chiamante Wmin, Lmin ed il modello per i mos
*
*drive strength-------------------------+
*inF ----mos Vdd-gnd------------------+ |
*inE ----mos Vdd-out----------------+ | |
*inD ----mos mid,mid-gnd----------+ | | |
*inC ----mos mid,mid-out--------+ | | | |
*inB ----mos out-gnd----------+ | | | | |
*inA ----mos out-out--------+ | | | | | |
*uscita ------------------+ | | | | | | |
*vdd -------------------+ | | | | | | | |
*massa ---------------+ | | | | | | | | |
*                     | | | | | | | | | |
*                     v v v v v v v v v v
.subckt AO222_SUB     1 2 3 4 5 6 7 8 9 XX=1
*   D  G  S  B  Name W L

Mn1 12 4  13 1  nmos W={2*XX*Wmin} L={Lmin} 
Mn2 13 5  1  1  nmos W={2*XX*Wmin} L={Lmin} 
Mn3 12 6  14 1  nmos W={2*XX*Wmin} L={Lmin} 
Mn4 14 7  1  1  nmos W={2*XX*Wmin} L={Lmin} 
Mn5 12 8  15 1  nmos W={2*XX*Wmin} L={Lmin} 
Mn6 15 9  1  1  nmos W={2*XX*Wmin} L={Lmin} 

Mp1 12 4  11 2  pmos W={6*XX*Wmin} L={Lmin} 
Mp2 12 5  11 2  pmos W={6*XX*Wmin} L={Lmin} 
Mp3 11 6  10 2  pmos W={6*XX*Wmin} L={Lmin} 
Mp4 11 7  10 2  pmos W={6*XX*Wmin} L={Lmin} 
Mp5 10 8  2  2  pmos W={6*XX*Wmin} L={Lmin} 
Mp6 10 9  2  2  pmos W={6*XX*Wmin} L={Lmin} 

Mn7 3  12 1  1  nmos W={XX*Wmin} L={Lmin} 
Mp7 3  12 2  2  pmos W={2*XX*Wmin} L={Lmin} 

.ends
************************************************************************************************

************************************************************************************************
* DFPQ
************************************************************************************************
*drive strength---------------------------------+      
*inB ---(like i/p)-nodeD------------------+     |      
*inA ---(like clk)-nodeA-----------+      |     |      
*output----------------------+     |      |     |      
*vdd ------------------+     |     |      |     |         
*ground------------+   |     |     |      |     |       
*                  |   |     |     |      |     |       
*                  v   v     v     v      v     v      
.subckt DFPQ_SUB   0 node1 nodeZ nodeCP noded XX=1   
 
Mp41 noded nodeCP node21 node1 	pmos W={2*XX*Wmin} L={Lmin}  
Mn4  noded nodeCPn node21 0 	nmos W={2*XX*Wmin} L={Lmin} 

Mn5  noded5 nodeCP node51 0 	nmos W={2*XX*Wmin} L={Lmin}  
Mp51 noded5 nodeCPn node51 node1 pmos W={2*XX*Wmin} L={Lmin} 

Mn11 nodeCPn nodeCP 0 	0 	nmos W={1*XX*Wmin} L={Lmin}  
Mp11 nodeCPn nodeCP node1 node1 pmos W={2*XX*Wmin} L={Lmin} 

Mp1 node21 noded5 node1 node1 	pmos W={1*XX*Wmin} L={2*Lmin} 
Mn1 node21 noded5 0 0 		nmos W={1*XX*Wmin} L={2*Lmin}  

Mp2 noded5 node21 node1 node1   pmos W={2*Wmin} L={Lmin} 
Mn2 noded5 node21 0 0 		nmos W={1*Wmin} L={Lmin}  

Mp6 nodez  node51 node1 node1   pmos W={2*XX*Wmin} L={Lmin}  
Mn6 nodez  node51 0 0 		nmos W={1*XX*Wmin} L={Lmin}  

Mp7 node51 nodez node1 node1    pmos W={1*XX*Wmin} L={Lmin}  
Mn7 node51 nodez 0 0 		nmos W={1*XX*Wmin} L={Lmin} 
.ends 
*************************************************************************************************

*************************************************************************************************
* DFPRQN
*************************************************************************************************
*drive strength-----------------------------------------+
*in3----(like resest)-nodeRN-----------------------+    |  
*in2 ---(like i/p)-nodeD---------------------+     |    |  
*in1 ---(like clk)-nodeCP-------------+      |     |    |  
*output-------------------------+     |      |     |    |  
*vdd ---------------------+     |     |      |     |    |     
*ground--------------+   |      |     |      |     |    |   
*                    |   |      |     |      |     |    |   
*                    v   v      v     v      v     v    v  
.subckt DFPRQN_SUB   0 node1  nodez nodeCP noded nodeRN XX=1   

*REACTION + 
Mn8 nodez  node22 0     0     nmos W={2*XX*Wmin}   L={Lmin}  
Mp8 nodez  node22 node1 node1 pmos W={4*XX*Wmin}   L={Lmin}  
Mn7 node22 nodez  0 	0     nmos W={1*XX*Wmin}   L={Lmin}                
Mp7 node22 nodez  node1 node1 pmos W={1*XX*Wmin}   L={Lmin}  
Mn2 1 	   node21 0 	0     nmos W={2*XX*Wmin}   L={Lmin} 
Mp2 1 	   node21 node1 node1 pmos W={4*XX*Wmin}   L={Lmin}  
Mn1 node21 1 	0 	0     nmos W={1*XX*Wmin}   L={2*Lmin}  
Mp1 node21 1 	node1   node1 pmos W={1*XX*Wmin}   L={2*Lmin}

*TRANSMISSION GATE
Mp41 noded nodeCP node21 node1 pmos W={2*XX*Wmin} L={Lmin}
Mn4 noded nodeCPN node21 0     nmos W={2*XX*Wmin} L={Lmin}  
Mn5 2 nodeCP node22 0          nmos W={2*XX*Wmin} L={Lmin} 
Mp51 2 nodeCPN node22 node1    pmos W={2*XX*Wmin} L={Lmin}
*RESET  
Mn21 3 nodeRN 0 0              nmos W={4*XX*Wmin} L={Lmin}  
Mn20 2 1 3 0 		      nmos W={4*XX*Wmin} L={Lmin}  
Mp12 node22 nodeRN node1 node1 pmos W={2*XX*Wmin} L={Lmin}  
Mp11 2 nodeRN node1 node1      pmos W={4*XX*Wmin} L={Lmin}  
Mp10 2 1 node1 node1          pmos W={4*XX*Wmin} L={Lmin}
*
Mn3 nodeCPN nodeCP 0 0          nmos W={1*XX*Wmin} L={Lmin}
Mp3 nodeCPN nodeCP node1 node1  pmos W={2*XX*Wmin} L={Lmin}  

.ends
************************************************************************************************

************************************************************************************************
* DFPHQ
************************************************************************************************
*drive strength-----------------------------------------+
*in3----(like i/p)-nodeD---------------------------+    |  
*in2 ---(like clk)-nodeCP--------------------+     |    |  
*in1 ---(like enable)-nodeE-----------+      |     |    |  
*output-------------------------+     |      |     |    |  
*vdd ---------------------+     |     |      |     |    |     
*ground--------------+   |      |     |      |     |    |   
*                    |   |      |     |      |     |    |   
*                    v   v      v     v      v     v    v  
.subckt DFPHQ_SUB   0 node1  nodeZ nodeE nodeCP nodeD XX=1   

Mn6 nodeD nodeEN 1 0 			nmos W={3*XX*Wmin} L={Lmin} 
Mp9 nodeEN nodeE node1 node1 		pmos W={2*XX*Wmin} L={Lmin} 
Mn5 noded2 nodeCP node22 0 		nmos W={2*XX*Wmin} L={Lmin} 
Mp41 1 nodeCP node21 node1 		pmos W={3*XX*Wmin} L={Lmin} 
Mp8 nodeZ node22 node1 node1 		pmos W={4*XX*Wmin} L={Lmin} 
Mn4 1 nodeCPN node21 0 			nmos W={3*XX*Wmin} L={Lmin} 
Mp7 node22 nodeZ node1 node1 		pmos W={1*XX*Wmin} L={Lmin} 
Mn3 nodeCPN nodeCP 0 0 			nmos W={1*XX*Wmin} L={Lmin} 
Mp51 noded2 nodeCPN node22 node1 	pmos W={2*XX*Wmin} L={Lmin} 
Mn2 noded2 node21 0 0 			nmos W={2*XX*Wmin} L={Lmin} 
Mn1 node21 noded2 0 0 			nmos W={1*XX*Wmin} L={2*Lmin} 
Mp61 nodeD nodeE 1 node1 		pmos W={3*XX*Wmin} L={Lmin} 
Mp3 nodeCPN nodeCP node1 node1 		pmos W={2*XX*Wmin} L={Lmin} 
Mn9 nodeEN nodeE 0 0 			nmos W={1*XX*Wmin} L={Lmin} 
Mp2 noded2 node21 node1 node1 		pmos W={4*XX*Wmin} L={Lmin} 
Mn8 nodeZ node22 0 0 			nmos W={2*XX*Wmin} L={Lmin} 
Mp1 node21 noded2 node1 node1 		pmos W={1*XX*Wmin} L={2*Lmin} 
Mn7 node22 nodeZ 0 0 			nmos W={1*XX*Wmin} L={Lmin} 

.ends
************************************************************************************************

************************************************************************************************
* Full Adder
************************************************************************************************
*drive strength------------------------------------------------+
*in3---------------------------nodeA--------------------+      |  
*in2 --------------------nodeB---------------------+    |      |  
*in1 -------------nodeC----------------------+     |    |      |  
*output2-(Carry)----------------------+      |     |    |      |
*output1-(sum)------------------+     |      |     |    |      |
*vdd ---------------------+     |     |      |     |    |      |
*ground--------------+   |      |     |      |     |    |      |
*                    |   |      |     |      |     |    |      |
*                    v   v      v     v      v     v    v      v 
.subckt FA_SUB       0 node1 nodeSo nodeCo nodeC nodeB nodeA   XX=1

Mn1 nodecon 	nodea 	node4 	0 	nmos W={2*XX*Wmin} L={Lmin}
Mp1 1 		nodea 	node1 	node1 	pmos W={4*XX*Wmin} L={Lmin}

Mn2 node4 	nodeb 	0 	0 	nmos W={2*XX*Wmin} L={Lmin}
Mp2 1 		nodeb 	node1 	node1 	pmos W={4*XX*Wmin} L={Lmin}


Mn3 5 		nodea 	0 	0 	nmos W={2*XX*Wmin} L={Lmin}

Mp3 4 		nodeb 	node1 	node1 	pmos W={4*XX*Wmin} L={Lmin}
Mp4  nodecon 	nodea 	4 	node1 	pmos W={4*XX*Wmin} L={Lmin}

Mn4 5 		nodeb 	0 	0 	nmos W={2*XX*Wmin} L={Lmin}

Mp5 nodecon 	nodec 	1 	node1 	pmos W={4*XX*Wmin} L={Lmin}
Mn5 nodecon 	nodec 	5 	0 	nmos W={2*XX*Wmin} L={Lmin}

Mp6 2 		nodea 	node1 	node1 	pmos W={4*XX*Wmin} L={Lmin}

Mn6 3 		nodea 	0 	0 	nmos W={2*XX*Wmin} L={Lmin} 
Mp7 2 		nodeb 	node1 	node1 	pmos W={4*XX*Wmin} L={Lmin}

Mn7 3 		nodeb 	0 	0 	nmos W={2*XX*Wmin} L={Lmin} 

Mp8 2 		nodec 	node1 	node1 	pmos W={4*XX*Wmin} L={Lmin} 

Mn8 3 		nodec 	0 	0 	nmos W={2*XX*Wmin} L={Lmin}  

Mp9 nodeson 	nodecon 2 	node1 	pmos W={4*XX*Wmin} L={Lmin}
 
Mn9 nodeson	nodecon 3 	0 	nmos W={2*XX*Wmin} L={Lmin} 

Mp10 9 		nodea 	node1 	node1 	pmos W={6*XX*Wmin} L={Lmin} 
Mn10 7 		nodea 	0 	0 	nmos W={3*XX*Wmin} L={Lmin} 
Mp11 8 		nodeb 	9 	node1 	pmos W={6*XX*Wmin} L={Lmin} 

Mn11 6 		nodeb 	7 	0 	nmos W={3*XX*Wmin} L={Lmin} 
Mp12 nodeSon 	nodec 	8 	node1 	pmos W={6*XX*Wmin} L={Lmin} 

Mn12 nodeSon 	nodec 	6 	0 	nmos W={3*XX*Wmin} L={Lmin}

Mp13 nodeCo 	nodecon node1 	node1 	pmos W={4*XX*Wmin} L={Lmin} 
Mn13 nodeCo 	nodecon 0 	0 	nmos W={2*XX*Wmin} L={Lmin}   

Mp14 nodeSo 	nodeSon node1 	node1 	pmos W={4*XX*Wmin} L={Lmin}  

Mn14 nodeSo 	nodeSon 0 	0 	nmos W={2*XX*Wmin} L={Lmin}
.ends

