diff --git a/src/kyupy/techlib.py b/src/kyupy/techlib.py index aac15a6..472e263 100644 --- a/src/kyupy/techlib.py +++ b/src/kyupy/techlib.py @@ -204,7 +204,8 @@ DLL_X{1,2} input(D,GN) output(Q) G=INV1(GN) Q=LATCH(D,G) ; """) -# SAED90nm library. unsupported: negative-edge flip-flops, tri-state, latches, clock gating, level shifters +# SAED90nm and SAED32nm libraries. +# not included here: negative-edge flip-flops, tri-state, latches, clock gating, level shifters saed90 = TechLibNew(r""" NBUFFX{2,4,8,16,32}$ input(INP) output(Z) Z=BUF1(INP) ; @@ -288,4 +289,93 @@ SDFFASRX{1,2}$ input(D,CLK,RSTB,SETB,SE,SI) output(Q,QN) DR=AND2(D,RSTB) SET=IN SDFFASX{1,2}$ input(D,CLK,SETB,SE,SI) output(Q,QN) SET=INV1(SETB) DS=OR2(D,SET) DI=MUX21(DS,SI,SE) Q=DFF(DI,CLK) QN=INV1(Q) ; SDFFSSRX{1,2}$ input(CLK,D,RSTB,SETB,SI,SE) output(Q,QN) DR=AND2(D,RSTB) SET=INV1(SETB) DRS=OR2(DR,SET) DI=MUX21(DRS,SI,SE) Q=DFF(DI,CLK) QN=INV1(Q) ; SDFFX{1,2}$ input(D,CLK,SE,SI) output(Q,QN) DI=MUX21(D,SI,SE) Q=DFF(DI,CLK) QN=INV1(Q) ; -""".replace('$','{,_LVT,_HVT}')) \ No newline at end of file +""".replace('$','{,_LVT,_HVT}')) + + +saed32 = TechLibNew(r""" +NBUFFX{2,4,8,16,32}$ input(A) output(Y) Y=BUF1(A) ; +AOBUFX{1,2,4}$ input(A) output(Y) Y=BUF1(A) ; +DELLN{1,2,3}X2$ input(A) output(Y) Y=BUF1(A) ; + +INVX{0,1,2,4,8,16,32}$ input(A) output(Y) Y=INV1(A) ; +AOINVX{1,2,4}$ input(A) output(Y) Y=INV1(A) ; +IBUFFX{2,4,8,16,32}$ input(A) output(Y) Y=INV1(A) ; + +TIEH$ output(Y) Y=__const1__() ; +TIEL$ output(Y) Y=__const0__() ; + +HEAD2X{2,4,8,16,32}$ input(SLEEP) output(SLEEPOUT) SLEEPOUT=BUF1(SLEEP) ; +HEADX{2,4,8,16,32}$ input(SLEEP) ; + +FOOT2X{2,4,8,16,32}$ input(SLEEP) output(SLEEPOUT) SLEEPOUT=BUF1(SLEEP) ; +FOOTX{2,4,8,16,32}$ input(SLEEP) ; + +ANTENNA$ input(INP) ; +CLOAD1$ input(A) ; +DCAP$ ; +DHFILLH2$ ; +DHFILLHL2$ ; +DHFILLHLHLS11$ ; +SHFILL{1,2,3,64,128}$ ; + +AND2X{1,2,4}$ input(A1,A2) output(Y) Y=AND2(A1,A2) ; +AND3X{1,2,4}$ input(A1,A2,A3) output(Y) Y=AND3(A1,A2,A3) ; +AND4X{1,2,4}$ input(A1,A2,A3,A4) output(Y) Y=AND4(A1,A2,A3,A4) ; +OR2X{1,2,4}$ input(A1,A2) output(Y) Y=OR2(A1,A2) ; +OR3X{1,2,4}$ input(A1,A2,A3) output(Y) Y=OR3(A1,A2,A3) ; +OR4X{1,2,4}$ input(A1,A2,A3,A4) output(Y) Y=OR4(A1,A2,A3,A4) ; +XOR2X{1,2}$ input(A1,A2) output(Y) Y=XOR2(A1,A2) ; +XOR3X{1,2}$ input(A1,A2,A3) output(Y) Y=XOR3(A1,A2,A3) ; +NAND2X{0,1,2,4}$ input(A1,A2) output(Y) Y=NAND2(A1,A2) ; +NAND3X{0,1,2,4}$ input(A1,A2,A3) output(Y) Y=NAND3(A1,A2,A3) ; +NAND4X{0,1}$ input(A1,A2,A3,A4) output(Y) Y=NAND4(A1,A2,A3,A4) ; +NOR2X{0,1,2,4}$ input(A1,A2) output(Y) Y=NOR2(A1,A2) ; +NOR3X{0,1,2,4}$ input(A1,A2,A3) output(Y) Y=NOR3(A1,A2,A3) ; +NOR4X{0,1}$ input(A1,A2,A3,A4) output(Y) Y=NOR4(A1,A2,A3,A4) ; +XNOR2X{1,2}$ input(A1,A2) output(Y) Y=XNOR2(A1,A2) ; +XNOR3X{1,2}$ input(A1,A2,A3) output(Y) Y=XNOR3(A1,A2,A3) ; + +ISOLAND{,AO}X{1,2,4,8}$ input(ISO,D) output(Q) ISOB=NOT1(ISO) Q=AND2(ISOB,D) ; +ISOLOR{,AO}X{1,2,4,8}$ input(ISO,D) output(Q) Q=OR2(ISO,D) ; + +AO21X{1,2}$ input(A1,A2,A3) output(Y) Y=AO21(A1,A2,A3) ; +OA21X{1,2}$ input(A1,A2,A3) output(Y) Y=OA21(A1,A2,A3) ; +AOI21X{1,2}$ input(A1,A2,A3) output(Y) Y=AOI21(A1,A2,A3) ; +OAI21X{1,2}$ input(A1,A2,A3) output(Y) Y=OAI21(A1,A2,A3) ; + +AO22X{1,2}$ input(A1,A2,A3,A4) output(Y) Y=AO22(A1,A2,A3,A4) ; +OA22X{1,2}$ input(A1,A2,A3,A4) output(Y) Y=OA22(A1,A2,A3,A4) ; +AOI22X{1,2}$ input(A1,A2,A3,A4) output(Y) Y=AOI22(A1,A2,A3,A4) ; +OAI22X{1,2}$ input(A1,A2,A3,A4) output(Y) Y=OAI22(A1,A2,A3,A4) ; + +MUX21X{1,2}$ input(A1,A2,S0) output(Y) Y=MUX21(A1,A2,S0) ; + +AO221X{1,2}$ input(A1,A2,A3,A4,A5) output(Y) A=AO22(A1,A2,A3,A4) Y=OR2(A5,A) ; +OA221X{1,2}$ input(A1,A2,A3,A4,A5) output(Y) A=OA22(A1,A2,A3,A4) Y=AND2(A5,A) ; +AOI221X{1,2}$ input(A1,A2,A3,A4,A5) output(Y) A=AO22(A1,A2,A3,A4) Y=NOR2(A5,A) ; +OAI221X{1,2}$ input(A1,A2,A3,A4,A5) output(Y) A=OA22(A1,A2,A3,A4) Y=NAND2(A5,A) ; + +AO222X{1,2}$ input(A1,A2,A3,A4,A5,A6) output(Y) A=AO22(A1,A2,A3,A4) Y=AO21(A5,A6,A) ; +OA222X{1,2}$ input(A1,A2,A3,A4,A5,A6) output(Y) A=OA22(A1,A2,A3,A4) Y=OA21(A5,A6,A) ; +AOI222X{1,2}$ input(A1,A2,A3,A4,A5,A6) output(Y) A=AO22(A1,A2,A3,A4) Y=AOI21(A5,A6,A) ; +OAI222X{1,2}$ input(A1,A2,A3,A4,A5,A6) output(Y) A=OA22(A1,A2,A3,A4) Y=OAI21(A5,A6,A) ; + +MUX41X{1,2}$ input(A1,A2,A3,A4,S0,S1) output(Y) A=MUX21(A1,A2,S0) B=MUX21(A3,A4,S0) Y=MUX21(A,B,S1) ; + +DEC24X{1,2}$ input(A0,A1) output(Y0,Y1,Y2,Y3) A0B=INV1(A0) A1B=INV1(A1) Y0=NOR2(A0,A1) Y1=AND(A0,A1B) Y2=AND(A0B,A1) Y3=AND(A0,A1) ; +FADDX{1,2}$ input(A,B,CI) output(S,CO) AB=XOR2(A,B) CO=XOR(AB,CI) S=AO22(AB,CI,A,B) ; +HADDX{1,2}$ input(A0,B0) output(SO,C1) C1=XOR2(A0,B0) SO=AND2(A0,B0) ; + +{,AO}DFFARX{1,2}$ input(D,CLK,RSTB) output(Q,QN) DR=AND2(D,RSTB) Q=DFF(DR,CLK) QN=INV1(Q) ; +DFFASRX{1,2}$ input(D,CLK,RSTB,SETB) output(Q,QN) DR=AND2(D,RSTB) SET=INV1(SETB) DRS=OR2(DR,SET) Q=DFF(DRS,CLK) QN=INV1(Q) ; +DFFASX{1,2}$ input(D,CLK,SETB) output(Q,QN) SET=INV1(SETB) DS=OR2(D,SET) Q=DFF(DS,CLK) QN=INV1(Q) ; +DFFSSRX{1,2}$ input(CLK,D,RSTB,SETB) output(Q,QN) DR=AND2(D,RSTB) SET=INV1(SETB) DRS=OR2(DR,SET) Q=DFF(DRS,CLK) QN=INV1(Q) ; +DFFX{1,2}$ input(D,CLK) output(Q,QN) Q=DFF(D,CLK) QN=INV1(Q) ; + +SDFFARX{1,2}$ input(D,CLK,RSTB,SE,SI) output(Q,QN) DR=AND2(D,RSTB) DI=MUX21(DR,SI,SE) Q=DFF(DI,CLK) QN=INV1(Q) ; +SDFFASRSX{1,2}$ input(D,CLK,RSTB,SETB,SE,SI) output(Q,QN,SO) DR=AND2(D,RSTB) SET=INV1(SETB) DRS=OR2(DR,SET) DI=MUX21(DRS,SI,SE) Q=DFF(DI,CLK) QN=INV1(Q) SO=BUF1(Q) ; +SDFFASRX{1,2}$ input(D,CLK,RSTB,SETB,SE,SI) output(Q,QN) DR=AND2(D,RSTB) SET=INV1(SETB) DRS=OR2(DR,SET) DI=MUX21(DRS,SI,SE) Q=DFF(DI,CLK) QN=INV1(Q) ; +SDFFASX{1,2}$ input(D,CLK,SETB,SE,SI) output(Q,QN) SET=INV1(SETB) DS=OR2(D,SET) DI=MUX21(DS,SI,SE) Q=DFF(DI,CLK) QN=INV1(Q) ; +SDFFSSRX{1,2}$ input(CLK,D,RSTB,SETB,SI,SE) output(Q,QN) DR=AND2(D,RSTB) SET=INV1(SETB) DRS=OR2(DR,SET) DI=MUX21(DRS,SI,SE) Q=DFF(DI,CLK) QN=INV1(Q) ; +SDFFX{1,2}$ input(D,CLK,SE,SI) output(Q,QN) DI=MUX21(D,SI,SE) Q=DFF(DI,CLK) QN=INV1(Q) ; +""".replace('$','_RVT')) \ No newline at end of file