//****************************************************** // // DFT Library for the Asic Design Kit (ADK) // // v1.6.1 Release //****************************************************** model and02(A0, A1, Y) ( cell_type = AND; input(A0, A1) () output(Y) (primitive = _and(A0, A1, Y);) ) model and03(A0, A1, A2, Y) ( input(A0, A1, A2) () output(Y) (primitive = _and(A0, A1, A2, Y);) ) model and04(A0, A1, A2, A3, Y) ( input(A0, A1, A2, A3) () output(Y) (primitive = _and(A0, A1, A2, A3, Y);) ) model ao21(A0, A1, B0, Y) ( input(A0, A1, B0) () intern(INT_RES_0) (primitive = _and(A0, A1, INT_RES_0);) output(Y) (primitive = _or(INT_RES_0, B0, Y);) ) model ao22(A0, A1, B0, B1, Y) ( input(A0, A1, B0, B1) () intern(INT_RES_0) (primitive = _and(A0, A1, INT_RES_0);) intern(INT_RES_1) (primitive = _and(B0, B1, INT_RES_1);) output(Y) (primitive = _or(INT_RES_0, INT_RES_1, Y);) ) model ao221(A0, A1, B0, B1, C0, Y) ( input(A0, A1, B0, B1, C0) () intern(INT_RES_0) (primitive = _and(A0, A1, INT_RES_0);) intern(INT_RES_1) (primitive = _and(B0, B1, INT_RES_1);) output(Y) (primitive = _or(INT_RES_0, INT_RES_1, C0, Y);) ) model ao32(A0, A1, A2, B0, B1, Y) ( input(A0, A1, A2, B0, B1) () intern(INT_RES_0) (primitive = _and(A0, A1, A2, INT_RES_0);) intern(INT_RES_1) (primitive = _and(B0, B1, INT_RES_1);) output(Y) (primitive = _or(INT_RES_0, INT_RES_1, Y);) ) model aoi21(A0, A1, B0, Y) ( input(A0, A1, B0) () intern(INT_RES_0) (primitive = _and(A0, A1, INT_RES_0);) output(Y) (primitive = _nor(INT_RES_0, B0, Y);) ) model aoi22(A0, A1, B0, B1, Y) ( input(A0, A1, B0, B1) () intern(INT_RES_0) (primitive = _and(A0, A1, INT_RES_0);) intern(INT_RES_1) (primitive = _and(B0, B1, INT_RES_1);) output(Y) (primitive = _nor(INT_RES_0, INT_RES_1, Y);) ) model aoi221(A0, A1, B0, B1, C0, Y) ( input(A0, A1, B0, B1, C0) () intern(INT_RES_0) (primitive = _and(A0, A1, INT_RES_0);) intern(INT_RES_1) (primitive = _and(B0, B1, INT_RES_1);) output(Y) (primitive = _nor(INT_RES_0, INT_RES_1, C0, Y);) ) model aoi222(A0, A1, B0, B1, C0, C1, Y) ( input(A0, A1, B0, B1, C0, C1) () intern(INT_RES_0) (primitive = _and(A0, A1, INT_RES_0);) intern(INT_RES_1) (primitive = _and(B0, B1, INT_RES_1);) intern(INT_RES_2) (primitive = _and(C0, C1, INT_RES_2);) output(Y) (primitive = _nor(INT_RES_0, INT_RES_1, INT_RES_2, Y);) ) model aoi32(A0, A1, A2, B0, B1, Y) ( input(A0, A1, A2, B0, B1) () intern(INT_RES_0) (primitive = _and(A0, A1, A2, INT_RES_0);) intern(INT_RES_1) (primitive = _and(B0, B1, INT_RES_1);) output(Y) (primitive = _nor(INT_RES_0, INT_RES_1, Y);) ) model aoi321(A0, A1, A2, B0, B1, C0, Y) ( input(A0, A1, A2, B0, B1, C0) () intern(INT_RES_0) (primitive = _and(A0, A1, A2, INT_RES_0);) intern(INT_RES_1) (primitive = _and(B0, B1, INT_RES_1);) output(Y) (primitive = _nor(INT_RES_0, INT_RES_1, C0, Y);) ) model aoi322(A0, A1, A2, B0, B1, C0, C1, Y) ( input(A0, A1, A2, B0, B1, C0, C1) () intern(INT_RES_0) (primitive = _and(A0, A1, A2, INT_RES_0);) intern(INT_RES_1) (primitive = _and(B0, B1, INT_RES_1);) intern(INT_RES_2) (primitive = _and(C0, C1, INT_RES_2);) output(Y) (primitive = _nor(INT_RES_0, INT_RES_1, INT_RES_2, Y);) ) model aoi33(A0, A1, A2, B0, B1, B2, Y) ( input(A0, A1, A2, B0, B1, B2) () intern(INT_RES_0) (primitive = _and(A0, A1, A2, INT_RES_0);) intern(INT_RES_1) (primitive = _and(B0, B1, B2, INT_RES_1);) output(Y) (primitive = _nor(INT_RES_0, INT_RES_1, Y);) ) model aoi332(A0, A1, A2, B0, B1, B2, C0, C1, Y) ( input(A0, A1, A2, B0, B1, B2, C0, C1) () intern(INT_RES_0) (primitive = _and(A0, A1, A2, INT_RES_0);) intern(INT_RES_1) (primitive = _and(B0, B1, B2, INT_RES_1);) intern(INT_RES_2) (primitive = _and(C0, C1, INT_RES_2);) output(Y) (primitive = _nor(INT_RES_0, INT_RES_1, INT_RES_2, Y);) ) model aoi333(A0, A1, A2, B0, B1, B2, C0, C1, C2, Y) ( input(A0, A1, A2, B0, B1, B2, C0, C1, C2) () intern(INT_RES_0) (primitive = _and(A0, A1, A2, INT_RES_0);) intern(INT_RES_1) (primitive = _and(B0, B1, B2, INT_RES_1);) intern(INT_RES_2) (primitive = _and(C0, C1, C2, INT_RES_2);) output(Y) (primitive = _nor(INT_RES_0, INT_RES_1, INT_RES_2, Y);) ) model aoi422(A0, A1, A2, A3, B0, B1, C0, C1, Y) ( input(A0, A1, A2, A3, B0, B1, C0, C1) () intern(INT_RES_0) (primitive = _and(A0, A1, A2, A3, INT_RES_0);) intern(INT_RES_1) (primitive = _and(B0, B1, INT_RES_1);) intern(INT_RES_2) (primitive = _and(C0, C1, INT_RES_2);) output(Y) (primitive = _nor(INT_RES_0, INT_RES_1, INT_RES_2, Y);) ) model aoi43(A0, A1, A2, A3, B0, B1, B2, Y) ( input(A0, A1, A2, A3, B0, B1, B2) () intern(INT_RES_0) (primitive = _and(A0, A1, A2, A3, INT_RES_0);) intern(INT_RES_1) (primitive = _and(B0, B1, B2, INT_RES_1);) output(Y) (primitive = _nor(INT_RES_0, INT_RES_1, Y);) ) model aoi44(A0, A1, A2, A3, B0, B1, B2, B3, Y) ( input(A0, A1, A2, A3, B0, B1, B2, B3) () intern(INT_RES_0) (primitive = _and(A0, A1, A2, A3, INT_RES_0);) intern(INT_RES_1) (primitive = _and(B0, B1, B2, B3, INT_RES_1);) output(Y) (primitive = _nor(INT_RES_0, INT_RES_1, Y);) ) model buf02(A, Y) ( cell_type = BUF; input(A) () output(Y) (primitive = _buf(A, Y);) ) model buf04(A, Y) ( input(A) () output(Y) (primitive = _buf(A, Y);) ) model buf08(A, Y) ( input(A) () output(Y) (primitive = _buf(A, Y);) ) model buf12(A, Y) ( input(A) () output(Y) (primitive = _buf(A, Y);) ) model buf16(A, Y) ( cell_type = CLKBUF; input(A) () output(Y) (primitive = _buf(A, Y);) ) model dff (D, CLK, Q, QB) ( input (D, CLK) () intern(INT_RES_0) (primitive = _dff(, , CLK, D, , INT_RES_0);) output(QB) (primitive = _buf(INT_RES_0, QB);) output(Q) (primitive = _inv(QB, Q);) ) model dffr (D, CLK, R, Q, QB) ( input (D, CLK, R) () output(Q, QB) (primitive = _dff(, R, CLK, D, Q, QB);) ) model dffs (D, CLK, S, Q, QB) ( input (D, CLK, S) () intern(INT_RES_0) (primitive = _inv(S, INT_RES_0);) output(Q, QB) (primitive = _dff(INT_RES_0, , CLK, D, Q, QB);) ) model dffsr (D, CLK, S, R, Q, QB) ( input (D, CLK, S, R) () intern(INT_RES_0) (primitive = _inv(S, INT_RES_0);) output(Q, QB) (primitive = _dff(INT_RES_0, R, CLK, D, Q, QB);) ) model fadd1(A, B, CI, S, CO) ( input(A, B, CI) () output(S) (primitive = _xor(A, B, CI, S);) intern(INT_RES_0) (primitive = _and(A, B, INT_RES_0);) intern(INT_RES_1) (primitive = _and(A, CI, INT_RES_1);) intern(INT_RES_2) (primitive = _and(B, CI, INT_RES_2);) output(CO) (primitive = _or(INT_RES_0, INT_RES_1, INT_RES_2, CO);) ) model hadd1(A, B, S, CO) ( input(A, B) () output(S) (primitive = _xor(A, B, S);) output(CO) (primitive = _and(A, B, CO);) ) model inv01(A, Y) ( cell_type = INV; input(A) () output(Y) (primitive = _inv(A, Y);) ) model inv02(A, Y) ( input(A) () output(Y) (primitive = _inv(A, Y);) ) model inv04(A, Y) ( input(A) () output(Y) (primitive = _inv(A, Y);) ) model inv08(A, Y) ( input(A) () output(Y) (primitive = _inv(A, Y);) ) model inv12(A, Y) ( input(A) () output(Y) (primitive = _inv(A, Y);) ) model inv16(A, Y) ( input(A) () output(Y) (primitive = _inv(A, Y);) ) model latch (D, CLK, Q) ( input (D, CLK) () intern(INT_RES_0) (primitive = _dlat(, , CLK, D, INT_RES_0, );) output(Q) (primitive = _buf(INT_RES_0, Q);) ) model latchr (D, CLK, R, QB) ( input (D, CLK, R) () intern(INT_RES_0) (primitive = _dlat(, R, CLK, D, , INT_RES_0);) output(QB) (primitive = _buf(INT_RES_0, QB);) ) model latchs (D, CLK, S, QB) ( input (D, CLK, S) () intern(INT_RES_0) (primitive = _inv(S, INT_RES_0);) intern(INT_RES_1) (primitive = _dlat(INT_RES_0, , CLK, D, , INT_RES_1);) output(QB) (primitive = _buf(INT_RES_1, QB);) ) model latchsr (D, CLK, S, R, QB) ( input (D, CLK, S, R) () intern(INT_RES_0) (primitive = _inv(S, INT_RES_0);) intern(INT_RES_1) (primitive = _dlat(INT_RES_0, R, CLK, D, , INT_RES_1);) output(QB) (primitive = _buf(INT_RES_1, QB);) ) model mux21(A0, A1, S0, Y) ( input(A0, A1, S0) () intern(mux1) (primitive = _mux(A0, A1, S0, mux1);) output(Y) (primitive = _inv(mux1, Y);) ) // // A non-inverting mux is required when inserting test logic. // macro mux21_macro (A0, A1, S0, Y) ( cell_type = MUX S0 A0 A1; input(A0, A1, S0) () intern(Y_int) (instance = mux21 MUX (A0, A1, S0, Y_int);) output(Y) (instance = inv01 INV (Y_int, Y);) ) model nand02(A0, A1, Y) ( cell_type = NAND; input(A0, A1) () output(Y) (primitive = _nand(A0, A1, Y);) ) model nand03(A0, A1, A2, Y) ( input(A0, A1, A2) () output(Y) (primitive = _nand(A0, A1, A2, Y);) ) model nand04(A0, A1, A2, A3, Y) ( input(A0, A1, A2, A3) () output(Y) (primitive = _nand(A0, A1, A2, A3, Y);) ) model nor02(A0, A1, Y) ( cell_type = NOR; input(A0, A1) () output(Y) (primitive = _nor(A0, A1, Y);) ) model nor03(A0, A1, A2, Y) ( input(A0, A1, A2) () output(Y) (primitive = _nor(A0, A1, A2, Y);) ) model nor04(A0, A1, A2, A3, Y) ( input(A0, A1, A2, A3) () output(Y) (primitive = _nor(A0, A1, A2, A3, Y);) ) model oai21(A0, A1, B0, Y) ( input(A0, A1, B0) () intern(INT_RES_0) (primitive = _or(A0, A1, INT_RES_0);) output(Y) (primitive = _nand(INT_RES_0, B0, Y);) ) model oai22(A0, A1, B0, B1, Y) ( input(A0, A1, B0, B1) () intern(INT_RES_0) (primitive = _or(A0, A1, INT_RES_0);) intern(INT_RES_1) (primitive = _or(B0, B1, INT_RES_1);) output(Y) (primitive = _nand(INT_RES_0, INT_RES_1, Y);) ) model oai221(A0, A1, B0, B1, C0, Y) ( input(A0, A1, B0, B1, C0) () intern(INT_RES_0) (primitive = _or(A0, A1, INT_RES_0);) intern(INT_RES_1) (primitive = _or(B0, B1, INT_RES_1);) output(Y) (primitive = _nand(INT_RES_0, INT_RES_1, C0, Y);) ) model oai222(A0, A1, B0, B1, C0, C1, Y) ( input(A0, A1, B0, B1, C0, C1) () intern(INT_RES_0) (primitive = _or(A0, A1, INT_RES_0);) intern(INT_RES_1) (primitive = _or(B0, B1, INT_RES_1);) intern(INT_RES_2) (primitive = _or(C0, C1, INT_RES_2);) output(Y) (primitive = _nand(INT_RES_0, INT_RES_1, INT_RES_2, Y);) ) model oai32(A0, A1, A2, B0, B1, Y) ( input(A0, A1, A2, B0, B1) () intern(INT_RES_0) (primitive = _or(A0, A1, A2, INT_RES_0);) intern(INT_RES_1) (primitive = _or(B0, B1, INT_RES_1);) output(Y) (primitive = _nand(INT_RES_0, INT_RES_1, Y);) ) model oai321(A0, A1, A2, B0, B1, C0, Y) ( input(A0, A1, A2, B0, B1, C0) () intern(INT_RES_0) (primitive = _or(A0, A1, A2, INT_RES_0);) intern(INT_RES_1) (primitive = _or(B0, B1, INT_RES_1);) output(Y) (primitive = _nand(INT_RES_0, INT_RES_1, C0, Y);) ) model oai322(A0, A1, A2, B0, B1, C0, C1, Y) ( input(A0, A1, A2, B0, B1, C0, C1) () intern(INT_RES_0) (primitive = _or(A0, A1, A2, INT_RES_0);) intern(INT_RES_1) (primitive = _or(B0, B1, INT_RES_1);) intern(INT_RES_2) (primitive = _or(C0, C1, INT_RES_2);) output(Y) (primitive = _nand(INT_RES_0, INT_RES_1, INT_RES_2, Y);) ) model oai33(A0, A1, A2, B0, B1, B2, Y) ( input(A0, A1, A2, B0, B1, B2) () intern(INT_RES_0) (primitive = _or(A0, A1, A2, INT_RES_0);) intern(INT_RES_1) (primitive = _or(B0, B1, B2, INT_RES_1);) output(Y) (primitive = _nand(INT_RES_0, INT_RES_1, Y);) ) model oai332(A0, A1, A2, B0, B1, B2, C0, C1, Y) ( input(A0, A1, A2, B0, B1, B2, C0, C1) () intern(INT_RES_0) (primitive = _or(A0, A1, A2, INT_RES_0);) intern(INT_RES_1) (primitive = _or(B0, B1, B2, INT_RES_1);) intern(INT_RES_2) (primitive = _or(C0, C1, INT_RES_2);) output(Y) (primitive = _nand(INT_RES_0, INT_RES_1, INT_RES_2, Y);) ) model oai333(A0, A1, A2, B0, B1, B2, C0, C1, C2, Y) ( input(A0, A1, A2, B0, B1, B2, C0, C1, C2) () intern(INT_RES_0) (primitive = _or(A0, A1, A2, INT_RES_0);) intern(INT_RES_1) (primitive = _or(B0, B1, B2, INT_RES_1);) intern(INT_RES_2) (primitive = _or(C0, C1, C2, INT_RES_2);) output(Y) (primitive = _nand(INT_RES_0, INT_RES_1, INT_RES_2, Y);) ) model oai422(A0, A1, A2, A3, B0, B1, C0, C1, Y) ( input(A0, A1, A2, A3, B0, B1, C0, C1) () intern(INT_RES_0) (primitive = _or(A0, A1, A2, A3, INT_RES_0);) intern(INT_RES_1) (primitive = _or(B0, B1, INT_RES_1);) intern(INT_RES_2) (primitive = _or(C0, C1, INT_RES_2);) output(Y) (primitive = _nand(INT_RES_0, INT_RES_1, INT_RES_2, Y);) ) model oai43(A0, A1, A2, A3, B0, B1, B2, Y) ( input(A0, A1, A2, A3, B0, B1, B2) () intern(INT_RES_0) (primitive = _or(A0, A1, A2, A3, INT_RES_0);) intern(INT_RES_1) (primitive = _or(B0, B1, B2, INT_RES_1);) output(Y) (primitive = _nand(INT_RES_0, INT_RES_1, Y);) ) model oai44(A0, A1, A2, A3, B0, B1, B2, B3, Y) ( input(A0, A1, A2, A3, B0, B1, B2, B3) () intern(INT_RES_0) (primitive = _or(A0, A1, A2, A3, INT_RES_0);) intern(INT_RES_1) (primitive = _or(B0, B1, B2, B3, INT_RES_1);) output(Y) (primitive = _nand(INT_RES_0, INT_RES_1, Y);) ) model or02(A0, A1, Y) ( input(A0, A1) () output(Y) (primitive = _or(A0, A1, Y);) ) model or03(A0, A1, A2, Y) ( input(A0, A1, A2) () output(Y) (primitive = _or(A0, A1, A2, Y);) ) model or04(A0, A1, A2, A3, Y) ( cell_type = OR; input(A0, A1, A2, A3) () output(Y) (primitive = _or(A0, A1, A2, A3, Y);) ) model sff (D, SI, SE, CLK, Q, QB) ( scan_definition ( type = mux_scan; data_in = D; scan_in = SI; scan_enable = SE; scan_out = Q, QB; non_scan_model = dff (D, CLK, Q, QB); ) input (D, SI, SE, CLK) () intern(_D) (primitive = _mux (D, SI, SE, _D);) output(Q, QB) (primitive = _dff(, , CLK, _D, Q, QB);) ) model sffr (D, SI, SE, CLK, R, Q, QB) ( scan_definition ( type = mux_scan; data_in = D; scan_in = SI; scan_enable = SE; offstate_inverted = R; scan_out = Q, QB; // Need to use macro due to inversion on reset line // non_scan_model = dffr (D, CLK, R, Q, QB); ) input (D, SI, SE, CLK, R) () intern(INT_RES_1) (primitive = _inv(R, INT_RES_1);) intern(_D) (primitive = _mux (D, SI, SE, _D);) output(Q, QB) (primitive = _dff(, INT_RES_1, CLK, _D, Q, QB);) ) macro sffr_macro (D, SI, SE, CLK, R, Q, QB) ( scan_definition ( type = mux_scan; data_in = D; scan_in = SI; scan_enable = SE; offstate_inverted = R; scan_out = Q, QB; non_scan_model = dffr (D, CLK, R, Q, QB); ) input (D, SI, SE, CLK, R) () intern(INT_RES_1) (instance = inv01 INV (R, INT_RES_1);) output(Q, QB) (instance = sffr SFFR (D, SI, SE, CLK, INT_RES_1, Q, QB);) ) model sffs (D, SI, SE, CLK, S, Q, QB) ( scan_definition ( type = mux_scan; data_in = D; scan_in = SI; scan_enable = SE; scan_out = Q, QB; // Need to use macro due to inversion on reset line // non_scan_model = dffs (D, CLK, S, Q, QB); ) input (D, SI, SE, CLK, S) () intern(_D) (primitive = _mux (D, SI, SE, _D);) output(Q, QB) (primitive = _dff(S, , CLK, _D, Q, QB);) ) macro sffs_macro (D, SI, SE, CLK, S, Q, QB) ( scan_definition ( type = mux_scan; data_in = D; scan_in = SI; scan_enable = SE; offstate_inverted = S; scan_out = Q, QB; non_scan_model = dffs (D, CLK, S, Q, QB); ) input (D, SI, SE, CLK, S) () intern(INT_RES_1) (instance = inv01 INV (S, INT_RES_1);) output(Q, QB) (instance = sffs SFFS (D, SI, SE, CLK, INT_RES_1, Q, QB);) ) model sffsr (D, SI, SE, CLK, S, R, Q, QB) ( scan_definition ( type = mux_scan; data_in = D; scan_in = SI; scan_enable = SE; scan_out = Q, QB; // Need to use macro due to inversion on reset line // non_scan_model = dffsr (D, CLK, S, R, Q, QB); ) input (D, SI, SE, CLK, S, R) () intern(INT_RES_0) (primitive = _inv(R, INT_RES_0);) intern(INT_RES_1) (primitive = _inv(S, INT_RES_1);) intern(_D) (primitive = _mux (D, SI, SE, _D);) output(Q, QB) (primitive = _dff(INT_RES_1, INT_RES_0, CLK, _D, Q, QB);) ) macro sffsr_macro (D, SI, SE, CLK, S, R, Q, QB) ( scan_definition ( type = mux_scan; data_in = D; scan_in = SI; scan_enable = SE; scan_out = Q, QB; non_scan_model = dffsr (D, CLK, S, R, Q, QB); ) input (D, SI, SE, CLK, S, R) () intern(INT_RES_0) (instance = inv01 INV0 (R, INT_RES_0);) intern(INT_RES_1) (instance = inv01 INV1 (S, INT_RES_1);) output(Q, QB) (instance = sffsr SFFSR (D, SI, SE, CLK, INT_RES_1, INT_RES_0, Q, QB) ;) ) model tri01(A, E, Y) ( input(A, E) () intern(INT_RES_0) (primitive = _inv(A, INT_RES_0);) output(Y) (primitive = _tsh(INT_RES_0, E, Y);) ) model trib04(A, E, Y) ( input(A, E) () output(Y) (primitive = _tsh(A, E, Y);) ) model trib08(A, E, Y) ( input (A, E) () intern(INT_RES_0) (primitive = _inv(A, INT_RES_0);) output(Y) (primitive = _tsh(INT_RES_0, E, Y);) ) model xnor2(A0, A1, Y) ( input(A0, A1) () output(Y) (primitive = _xnor(A0, A1, Y);) ) model xor2(A0, A1, Y) ( cell_type = XOR; input(A0, A1) () output(Y) (primitive = _xor(A0, A1, Y);) ) // Add VCC and GROUND. alias supply1 fake_vcc model fake_vcc(Y)( output(Y) (primitive = _tie1(Y);) ) alias supply0 fake_gnd model fake_gnd(Y)( output(Y) (primitive = _tie0(Y);) )