After spending some quality time in the ASIC world for 107. Choosing the gates, it was time to practice a bit. The target of choice is of course the INC8 unit, which has been significantly modified after a little session with circuitjs :
The circuit starts with buffers so ensure that the fan-in is 1 for all the bits. And since simple buffers invert, the rest of the circuit uses a negative logic and the AND trees are replaced with ORs.
The fanout needs to be "micromanaged" unlike with FPGAs. "Normal" gates are supposed to have a fanout of 1 and some buffers provide x2 and x4 strength, but they invert again...
Apart from the ORs directly tied to the final XORs (which can be combined into AX1D ) we find 2×NOR3, 2×OR3 and 1×OR2. The fanout buffer is merged into the final inverter of the ORs, except where a large fanout (6) is needed : there, the NOR2 has a strength of 2 to drive two buffers with strength 4. The "combined" variant with OR is kept in some places to keep the diagram & code compact.
For the AX1D ( Y=(A or B) xor C, also named xoon21 in the some libraries) the OR is easily merged as a NOR instead of INV of one of the inputs.
Overall, the circuit has grown in complexity, or in fact : better details. There is no use of the new fancy 4-input gates but the AX1D is very welcome... We'll see how the ALU is influenced later !
So I added some extra features to test the circuit easily :-) see INC8_ASIC_test.cjs
The VHDL version was easy to adapt. The first results are nice though are not very nuanced :
Latency of the 9 outputs : Output#0 : 2 Output#1 : 3 Output#2 : 3 Output#3 : 5 Output#4 : 5 Output#5 : 5 Output#6 : 5 Output#7 : 5 Output#8 : 5 Fanout: Count: .........|........ 1 : 17 - ***************** 2 : 6 - ****** 3 : 5 - ***** 4 : 2 - ** Depth: Gates: .........|....... 0 : 8 - ******** 1 : 8 - ******** 2 : 5 - ***** 3 : 3 - *** 4 : 6 - ******
The latency is OK and balanced. Most MSB depend on the result of a high-fanout signal, which has been broken into 2 parallel sub-signals. In the grand ASIC scheme of things, that amounts to about 2 gates delays (easily) so it's not inaccurate. Anyway this helps synchronise most MSB as their results arrive at about the same time, with a critical datapath that has been spread/smeared across the circuit.