| // type: ADDF |
| `timescale 1ns/10ps |
| `celldefine |
| module ADDFX1 (CO, S, A, B, CI); |
| output CO, S; |
| input A, B, CI; |
| |
| // Function |
| wire A__bar, B__bar, CI__bar; |
| wire int_fwire_0, int_fwire_1, int_fwire_2; |
| wire int_fwire_3, int_fwire_4, int_fwire_5; |
| wire int_fwire_6; |
| |
| and (int_fwire_0, B, CI); |
| and (int_fwire_1, A, CI); |
| and (int_fwire_2, A, B); |
| or (CO, int_fwire_2, int_fwire_1, int_fwire_0); |
| not (B__bar, B); |
| not (A__bar, A); |
| and (int_fwire_3, A__bar, B__bar, CI); |
| not (CI__bar, CI); |
| and (int_fwire_4, A__bar, B, CI__bar); |
| and (int_fwire_5, A, B__bar, CI__bar); |
| and (int_fwire_6, A, B, CI); |
| or (S, int_fwire_6, int_fwire_5, int_fwire_4, int_fwire_3); |
| |
| // Timing |
| specify |
| if ((B & ~CI)) |
| (A => CO) = 0; |
| if ((~B & CI)) |
| (A => CO) = 0; |
| ifnone (A => CO) = 0; |
| if ((A & ~CI)) |
| (B => CO) = 0; |
| if ((~A & CI)) |
| (B => CO) = 0; |
| ifnone (B => CO) = 0; |
| if ((A & ~B)) |
| (CI => CO) = 0; |
| if ((~A & B)) |
| (CI => CO) = 0; |
| ifnone (CI => CO) = 0; |
| if ((B & CI)) |
| (A => S) = 0; |
| if ((~B & ~CI)) |
| (A => S) = 0; |
| ifnone (A => S) = 0; |
| if ((B & ~CI)) |
| (A => S) = 0; |
| if ((~B & CI)) |
| (A => S) = 0; |
| if ((A & CI)) |
| (B => S) = 0; |
| if ((~A & ~CI)) |
| (B => S) = 0; |
| ifnone (B => S) = 0; |
| if ((A & ~CI)) |
| (B => S) = 0; |
| if ((~A & CI)) |
| (B => S) = 0; |
| if ((A & B)) |
| (CI => S) = 0; |
| if ((~A & ~B)) |
| (CI => S) = 0; |
| ifnone (CI => S) = 0; |
| if ((A & ~B)) |
| (CI => S) = 0; |
| if ((~A & B)) |
| (CI => S) = 0; |
| endspecify |
| endmodule |
| `endcelldefine |
| |