Compare commits
	
		
			3 Commits 
		
	
	
		
			3dfd0cb60d
			...
			09420fd72c
		
	
	| Author | SHA1 | Date | 
|---|---|---|
| 
							
							
								
								 | 
						09420fd72c | 2 days ago | 
| 
							
							
								
								 | 
						5bcc1c1d77 | 2 days ago | 
| 
							
							
								
								 | 
						df8a58f57b | 2 days ago | 
				 11 changed files with 368 additions and 14 deletions
			
			
		@ -0,0 +1,91 @@ | 
				
			|||||||
 | 
					// Benchmark "all_kyupy_primitives" written by ABC on Sat Nov  1 23:49:37 2025 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module all_kyupy_primitives (  | 
				
			||||||
 | 
					    i0, i1, i2, i3, | 
				
			||||||
 | 
					    \o[0] , \o[1] , \o[2] , \o[3] , \o[4] , \o[5] , \o[6] , \o[7] , \o[8] , | 
				
			||||||
 | 
					    \o[9] , \o[10] , \o[11] , \o[12] , \o[13] , \o[14] , \o[15] , \o[16] , | 
				
			||||||
 | 
					    \o[17] , \o[18] , \o[19] , \o[20] , \o[21] , \o[22] , \o[23] , \o[24] , | 
				
			||||||
 | 
					    \o[25] , \o[26] , \o[27] , \o[28] , \o[29]   ); | 
				
			||||||
 | 
					  input  i0, i1, i2, i3; | 
				
			||||||
 | 
					  output \o[0] , \o[1] , \o[2] , \o[3] , \o[4] , \o[5] , \o[6] , \o[7] , | 
				
			||||||
 | 
					    \o[8] , \o[9] , \o[10] , \o[11] , \o[12] , \o[13] , \o[14] , \o[15] , | 
				
			||||||
 | 
					    \o[16] , \o[17] , \o[18] , \o[19] , \o[20] , \o[21] , \o[22] , \o[23] , | 
				
			||||||
 | 
					    \o[24] , \o[25] , \o[26] , \o[27] , \o[28] , \o[29] ; | 
				
			||||||
 | 
					  wire new_n42, new_n45, new_n48, new_n51, new_n52, new_n53, new_n54, | 
				
			||||||
 | 
					    new_n55, new_n57, new_n58, new_n59, new_n60, new_n61, new_n62, new_n63, | 
				
			||||||
 | 
					    new_n64, new_n65, new_n66, new_n67, new_n69, new_n70, new_n71, new_n72, | 
				
			||||||
 | 
					    new_n73, new_n74, new_n75, new_n76, new_n77, new_n78, new_n79, new_n83, | 
				
			||||||
 | 
					    new_n84, new_n88, new_n89, new_n93, new_n96, new_n99, new_n100, | 
				
			||||||
 | 
					    new_n101; | 
				
			||||||
 | 
					  INV1 g00(.i0(i1), .o(\o[1] )); | 
				
			||||||
 | 
					  AND2 g01(.i0(i1), .i1(i0), .o(\o[2] )); | 
				
			||||||
 | 
					  AND2 g02(.i0(\o[2] ), .i1(i2), .o(\o[3] )); | 
				
			||||||
 | 
					  AND2 g03(.i0(\o[3] ), .i1(i3), .o(\o[4] )); | 
				
			||||||
 | 
					  INV1 g04(.i0(\o[2] ), .o(\o[5] )); | 
				
			||||||
 | 
					  INV1 g05(.i0(\o[3] ), .o(\o[6] )); | 
				
			||||||
 | 
					  INV1 g06(.i0(\o[4] ), .o(\o[7] )); | 
				
			||||||
 | 
					  INV1 g07(.i0(i0), .o(new_n42)); | 
				
			||||||
 | 
					  AND2 g08(.i0(\o[1] ), .i1(new_n42), .o(\o[11] )); | 
				
			||||||
 | 
					  INV1 g09(.i0(\o[11] ), .o(\o[8] )); | 
				
			||||||
 | 
					  INV1 g10(.i0(i2), .o(new_n45)); | 
				
			||||||
 | 
					  AND2 g11(.i0(\o[11] ), .i1(new_n45), .o(\o[12] )); | 
				
			||||||
 | 
					  INV1 g12(.i0(\o[12] ), .o(\o[9] )); | 
				
			||||||
 | 
					  INV1 g13(.i0(i3), .o(new_n48)); | 
				
			||||||
 | 
					  AND2 g14(.i0(\o[12] ), .i1(new_n48), .o(\o[13] )); | 
				
			||||||
 | 
					  INV1 g15(.i0(\o[13] ), .o(\o[10] )); | 
				
			||||||
 | 
					  AND2 g16(.i0(\o[1] ), .i1(i0), .o(new_n51)); | 
				
			||||||
 | 
					  INV1 g17(.i0(new_n51), .o(new_n52)); | 
				
			||||||
 | 
					  AND2 g18(.i0(i1), .i1(new_n42), .o(new_n53)); | 
				
			||||||
 | 
					  INV1 g19(.i0(new_n53), .o(new_n54)); | 
				
			||||||
 | 
					  AND2 g20(.i0(new_n54), .i1(new_n52), .o(new_n55)); | 
				
			||||||
 | 
					  INV1 g21(.i0(new_n55), .o(\o[14] )); | 
				
			||||||
 | 
					  AND2 g22(.i0(i2), .i1(i1), .o(new_n57)); | 
				
			||||||
 | 
					  INV1 g23(.i0(new_n57), .o(new_n58)); | 
				
			||||||
 | 
					  AND2 g24(.i0(new_n45), .i1(\o[1] ), .o(new_n59)); | 
				
			||||||
 | 
					  INV1 g25(.i0(new_n59), .o(new_n60)); | 
				
			||||||
 | 
					  AND2 g26(.i0(new_n60), .i1(new_n58), .o(new_n61)); | 
				
			||||||
 | 
					  INV1 g27(.i0(new_n61), .o(new_n62)); | 
				
			||||||
 | 
					  AND2 g28(.i0(new_n62), .i1(i0), .o(new_n63)); | 
				
			||||||
 | 
					  INV1 g29(.i0(new_n63), .o(new_n64)); | 
				
			||||||
 | 
					  AND2 g30(.i0(new_n61), .i1(new_n42), .o(new_n65)); | 
				
			||||||
 | 
					  INV1 g31(.i0(new_n65), .o(new_n66)); | 
				
			||||||
 | 
					  AND2 g32(.i0(new_n66), .i1(new_n64), .o(new_n67)); | 
				
			||||||
 | 
					  INV1 g33(.i0(new_n67), .o(\o[15] )); | 
				
			||||||
 | 
					  AND2 g34(.i0(i3), .i1(new_n45), .o(new_n69)); | 
				
			||||||
 | 
					  INV1 g35(.i0(new_n69), .o(new_n70)); | 
				
			||||||
 | 
					  AND2 g36(.i0(new_n48), .i1(i2), .o(new_n71)); | 
				
			||||||
 | 
					  INV1 g37(.i0(new_n71), .o(new_n72)); | 
				
			||||||
 | 
					  AND2 g38(.i0(new_n72), .i1(new_n70), .o(new_n73)); | 
				
			||||||
 | 
					  INV1 g39(.i0(new_n73), .o(new_n74)); | 
				
			||||||
 | 
					  AND2 g40(.i0(new_n74), .i1(new_n55), .o(new_n75)); | 
				
			||||||
 | 
					  INV1 g41(.i0(new_n75), .o(new_n76)); | 
				
			||||||
 | 
					  AND2 g42(.i0(new_n73), .i1(\o[14] ), .o(new_n77)); | 
				
			||||||
 | 
					  INV1 g43(.i0(new_n77), .o(new_n78)); | 
				
			||||||
 | 
					  AND2 g44(.i0(new_n78), .i1(new_n76), .o(new_n79)); | 
				
			||||||
 | 
					  INV1 g45(.i0(new_n79), .o(\o[16] )); | 
				
			||||||
 | 
					  AND2 g46(.i0(\o[5] ), .i1(new_n45), .o(\o[21] )); | 
				
			||||||
 | 
					  INV1 g47(.i0(\o[21] ), .o(\o[17] )); | 
				
			||||||
 | 
					  AND2 g48(.i0(i3), .i1(i2), .o(new_n83)); | 
				
			||||||
 | 
					  INV1 g49(.i0(new_n83), .o(new_n84)); | 
				
			||||||
 | 
					  AND2 g50(.i0(new_n84), .i1(\o[5] ), .o(\o[22] )); | 
				
			||||||
 | 
					  INV1 g51(.i0(\o[22] ), .o(\o[18] )); | 
				
			||||||
 | 
					  AND2 g52(.i0(\o[8] ), .i1(i2), .o(\o[19] )); | 
				
			||||||
 | 
					  AND2 g53(.i0(new_n48), .i1(new_n45), .o(new_n88)); | 
				
			||||||
 | 
					  INV1 g54(.i0(new_n88), .o(new_n89)); | 
				
			||||||
 | 
					  AND2 g55(.i0(new_n89), .i1(\o[8] ), .o(\o[20] )); | 
				
			||||||
 | 
					  INV1 g56(.i0(\o[19] ), .o(\o[23] )); | 
				
			||||||
 | 
					  INV1 g57(.i0(\o[20] ), .o(\o[24] )); | 
				
			||||||
 | 
					  AND2 g58(.i0(\o[5] ), .i1(new_n48), .o(new_n93)); | 
				
			||||||
 | 
					  AND2 g59(.i0(new_n93), .i1(new_n45), .o(\o[27] )); | 
				
			||||||
 | 
					  INV1 g60(.i0(\o[27] ), .o(\o[25] )); | 
				
			||||||
 | 
					  AND2 g61(.i0(\o[8] ), .i1(i3), .o(new_n96)); | 
				
			||||||
 | 
					  AND2 g62(.i0(new_n96), .i1(i2), .o(\o[26] )); | 
				
			||||||
 | 
					  INV1 g63(.i0(\o[26] ), .o(\o[28] )); | 
				
			||||||
 | 
					  AND2 g64(.i0(new_n45), .i1(i0), .o(new_n99)); | 
				
			||||||
 | 
					  INV1 g65(.i0(new_n99), .o(new_n100)); | 
				
			||||||
 | 
					  AND2 g66(.i0(new_n100), .i1(new_n58), .o(new_n101)); | 
				
			||||||
 | 
					  INV1 g67(.i0(new_n101), .o(\o[29] )); | 
				
			||||||
 | 
					  BUF1 g68(.i0(i0), .o(\o[0] )); | 
				
			||||||
 | 
					endmodule | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -0,0 +1,49 @@ | 
				
			|||||||
 | 
					module all_kyupy_primitives (i0, i1, i2, i3, o); | 
				
			||||||
 | 
					    input i0; | 
				
			||||||
 | 
					    input i1; | 
				
			||||||
 | 
					    input i2; | 
				
			||||||
 | 
					    input i3; | 
				
			||||||
 | 
					    output [29:0] o; | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    BUF1 buf1_0 (.i0(i0), .o(o[0])); | 
				
			||||||
 | 
					    INV1 inv1_0 (.i0(i1), .o(o[1])); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    AND2 and2_0 (.i0(i0), .i1(i1), .o(o[2])); | 
				
			||||||
 | 
					    AND3 and3_0 (.i0(i0), .i1(i1), .i2(i2), .o(o[3])); | 
				
			||||||
 | 
					    AND4 and4_0 (.i0(i0), .i1(i1), .i2(i2), .i3(i3), .o(o[4])); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    NAND2 nand2_0 (.i0(i0), .i1(i1), .o(o[5])); | 
				
			||||||
 | 
					    NAND3 nand3_0 (.i0(i0), .i1(i1), .i2(i2), .o(o[6])); | 
				
			||||||
 | 
					    NAND4 nand4_0 (.i0(i0), .i1(i1), .i2(i2), .i3(i3), .o(o[7])); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    OR2 or2_0 (.i0(i0), .i1(i1), .o(o[8])); | 
				
			||||||
 | 
					    OR3 or3_0 (.i0(i0), .i1(i1), .i2(i2), .o(o[9])); | 
				
			||||||
 | 
					    OR4 or4_0 (.i0(i0), .i1(i1), .i2(i2), .i3(i3), .o(o[10])); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    NOR2 nor2_0 (.i0(i0), .i1(i1), .o(o[11])); | 
				
			||||||
 | 
					    NOR3 nor3_0 (.i0(i0), .i1(i1), .i2(i2), .o(o[12])); | 
				
			||||||
 | 
					    NOR4 nor4_0 (.i0(i0), .i1(i1), .i2(i2), .i3(i3), .o(o[13])); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    XOR2 xor2_0 (.i0(i0), .i1(i1), .o(o[14])); | 
				
			||||||
 | 
					    XOR3 xor3_0 (.i0(i0), .i1(i1), .i2(i2), .o(o[15])); | 
				
			||||||
 | 
					    XOR4 xor4_0 (.i0(i0), .i1(i1), .i2(i2), .i3(i3), .o(o[16])); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    AO21 ao21_0 (.i0(i0), .i1(i1), .i2(i2), .o(o[17])); | 
				
			||||||
 | 
					    AO22 ao22_0 (.i0(i0), .i1(i1), .i2(i2), .i3(i3), .o(o[18])); | 
				
			||||||
 | 
					    OA21 oa21_0 (.i0(i0), .i1(i1), .i2(i2), .o(o[19])); | 
				
			||||||
 | 
					    OA22 oa22_0 (.i0(i0), .i1(i1), .i2(i2), .i3(i3), .o(o[20])); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    AOI21 aoi21_0 (.i0(i0), .i1(i1), .i2(i2), .o(o[21])); | 
				
			||||||
 | 
					    AOI22 aoi22_0 (.i0(i0), .i1(i1), .i2(i2), .i3(i3), .o(o[22])); | 
				
			||||||
 | 
					    OAI21 oai21_0 (.i0(i0), .i1(i1), .i2(i2), .o(o[23])); | 
				
			||||||
 | 
					    OAI22 oai22_0 (.i0(i0), .i1(i1), .i2(i2), .i3(i3), .o(o[24])); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    AO211 ao211_0 (.i0(i0), .i1(i1), .i2(i2), .i3(i3), .o(o[25])); | 
				
			||||||
 | 
					    OA211 oa211_0 (.i0(i0), .i1(i1), .i2(i2), .i3(i3), .o(o[26])); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    AOI211 aoi211_0 (.i0(i0), .i1(i1), .i2(i2), .i3(i3), .o(o[27])); | 
				
			||||||
 | 
					    OAI211 oai211_0 (.i0(i0), .i1(i1), .i2(i2), .i3(i3), .o(o[28])); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    MUX21 mux21_0 (.i0(i0), .i1(i1), .i2(i2), .o(o[29])); | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					endmodule | 
				
			||||||
@ -0,0 +1,34 @@ | 
				
			|||||||
 | 
					# library of all KyuPy simulation primitives defined in kyupy.sim | 
				
			||||||
 | 
					GATE BUF1     1  o=i0;                         PIN * NONINV 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE INV1     1  o=!i0;                        PIN * INV 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE AND2     1  o=i0*i1;                      PIN * NONINV 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE AND3     1  o=i0*i1*i2;                   PIN * NONINV 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE AND4     1  o=i0*i1*i2*i3;                PIN * NONINV 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE NAND2    1  o=!(i0*i1);                   PIN * INV 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE NAND3    1  o=!(i0*i1*i2);                PIN * INV 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE NAND4    1  o=!(i0*i1*i2*i3);             PIN * INV 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE OR2      1  o=i0+i1;                      PIN * NONINV 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE OR3      1  o=i0+i1+i2;                   PIN * NONINV 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE OR4      1  o=i0+i1+i2+i3;                PIN * NONINV 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE NOR2     1  o=!(i0+i1);                   PIN * INV 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE NOR3     1  o=!(i0+i1+i2);                PIN * INV 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE NOR4     1  o=!(i0+i1+i2+i3);             PIN * INV 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE XOR2     1  o=i0^i1;                      PIN * UNKNOWN 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE XOR3     1  o=i0^i1^i2;                   PIN * UNKNOWN 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE XOR4     1  o=i0^i1^i2^i3;                PIN * UNKNOWN 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE XNOR2    1  o=!(i0^i1);                   PIN * UNKNOWN 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE XNOR3    1  o=!(i0^i1^i2);                PIN * UNKNOWN 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE XNOR4    1  o=!(i0^i1^i2^i3);             PIN * UNKNOWN 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE AO21     1  o=(i0*i1)+i2;                 PIN * NONINV 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE AO22     1  o=(i0*i1)+(i2*i3);            PIN * NONINV 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE OA21     1  o=(i0+i1)*i2;                 PIN * NONINV 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE OA22     1  o=(i0+i1)*(i2+i3);            PIN * NONINV 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE AOI21    1  o=!( (i0*i1)+i2 );            PIN * INV 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE AOI22    1  o=!( (i0*i1)+(i2*i3) );       PIN * INV 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE OAI21    1  o=!( (i0+i1)*i2 );            PIN * INV 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE OAI22    1  o=!( (i0+i1)*(i2+i3) );       PIN * INV 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE AO211    1  o=(i0*i1)+i2+i3;              PIN * NONINV 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE OA211    1  o=(i0+i1)*i2*i3;              PIN * NONINV 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE AOI211   1  o=!( (i0*i1)+i2+i3 );         PIN * INV 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE OAI211   1  o=!( (i0+i1)*i2*i3 );         PIN * INV 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE MUX21    1  o=(i0*!i2)+(i1*i2);           PIN * UNKNOWN 1 999 1 0 1 0 | 
				
			||||||
@ -0,0 +1,6 @@ | 
				
			|||||||
 | 
					read kyupy_simprims.genlib | 
				
			||||||
 | 
					read -m all_kyupy_simprims.v | 
				
			||||||
 | 
					fraig | 
				
			||||||
 | 
					read minimal.genlib | 
				
			||||||
 | 
					map | 
				
			||||||
 | 
					write all_kyupy_simprims.minimal.v | 
				
			||||||
@ -0,0 +1,5 @@ | 
				
			|||||||
 | 
					# A minimal library for generating logically equivalent circuits with | 
				
			||||||
 | 
					# minimum number of gate types. | 
				
			||||||
 | 
					GATE BUF1     1  o=i0;                         PIN * NONINV 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE INV1     1  o=!i0;                        PIN * INV 1 999 1 0 1 0 | 
				
			||||||
 | 
					GATE AND2     1  o=i0*i1;                      PIN * NONINV 1 999 1 0 1 0 | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue