From 83445e2bbda1b080580709562ee3d6e49efdcd0f Mon Sep 17 00:00:00 2001 From: Stefan Holst Date: Fri, 21 Jul 2023 22:14:29 +0900 Subject: [PATCH] support for newer NANGATE lib --- src/kyupy/techlib.py | 39 +++++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/src/kyupy/techlib.py b/src/kyupy/techlib.py index c79a3cd..8a9886a 100644 --- a/src/kyupy/techlib.py +++ b/src/kyupy/techlib.py @@ -92,7 +92,7 @@ class TechLibNew: return self.cells[kind][1][pin][1] -NANGATE = TechLibNew(r""" +_nangate_common = r""" FILLCELL_X{1,2,4,8,16,32} ; LOGIC0_X1 output(Z) Z=__const0__() ; @@ -100,22 +100,13 @@ LOGIC1_X1 output(Z) Z=__const1__() ; BUF_X{1,2,4,8,16,32} input(A) output(Z) Z=BUF1(A) ; CLKBUF_X{1,2,3} input(A) output(Z) Z=BUF1(A) ; -INV_X{1,2,4,8,16,32} input(A) output(ZN) ZN=INV1(A) ; -AND2_X{1,2,4} input(A1,A2) output(ZN) ZN=AND2(A1,A2) ; -AND3_X{1,2,4} input(A1,A2,A3) output(ZN) ZN=AND3(A1,A2,A3) ; -AND4_X{1,2,4} input(A1,A2,A3,A4) output(ZN) ZN=AND4(A1,A2,A3,A4) ; NAND2_X{1,2,4} input(A1,A2) output(ZN) ZN=NAND2(A1,A2) ; NAND3_X{1,2,4} input(A1,A2,A3) output(ZN) ZN=NAND3(A1,A2,A3) ; NAND4_X{1,2,4} input(A1,A2,A3,A4) output(ZN) ZN=NAND4(A1,A2,A3,A4) ; -OR2_X{1,2,4} input(A1,A2) output(ZN) ZN=OR2(A1,A2) ; -OR3_X{1,2,4} input(A1,A2,A3) output(ZN) ZN=OR3(A1,A2,A3) ; -OR4_X{1,2,4} input(A1,A2,A3,A4) output(ZN) ZN=OR4(A1,A2,A3,A4) ; NOR2_X{1,2,4} input(A1,A2) output(ZN) ZN=NOR2(A1,A2) ; NOR3_X{1,2,4} input(A1,A2,A3) output(ZN) ZN=NOR3(A1,A2,A3) ; NOR4_X{1,2,4} input(A1,A2,A3,A4) output(ZN) ZN=NOR4(A1,A2,A3,A4) ; -XOR2_X{1,2} input(A,B) output(Z) Z=XOR2(A,B) ; -XNOR2_X{1,2} input(A,B) output(ZN) ZN=XNOR2(A,B) ; AOI21_X{1,2,4} input(A,B1,B2) output(ZN) ZN=AOI21(B1,B2,A) ; OAI21_X{1,2,4} input(A,B1,B2) output(ZN) ZN=OAI21(B1,B2,A) ; @@ -159,6 +150,34 @@ TLAT_X1 input(D,G,OE) output(Q) Q=LATCH(D,G) ; DLH_X{1,2} input(D,G) output(Q) Q=LATCH(D,G) ; DLL_X{1,2} input(D,GN) output(Q) G=INV1(GN) Q=LATCH(D,G) ; +""" + + +NANGATE_ZN = TechLibNew(_nangate_common + r""" +INV_X{1,2,4,8,16,32} input(A) output(ZN) ZN=INV1(A) ; + +AND2_X{1,2,4} input(A1,A2) output(ZN) ZN=AND2(A1,A2) ; +AND3_X{1,2,4} input(A1,A2,A3) output(ZN) ZN=AND3(A1,A2,A3) ; +AND4_X{1,2,4} input(A1,A2,A3,A4) output(ZN) ZN=AND4(A1,A2,A3,A4) ; +OR2_X{1,2,4} input(A1,A2) output(ZN) ZN=OR2(A1,A2) ; +OR3_X{1,2,4} input(A1,A2,A3) output(ZN) ZN=OR3(A1,A2,A3) ; +OR4_X{1,2,4} input(A1,A2,A3,A4) output(ZN) ZN=OR4(A1,A2,A3,A4) ; +XOR2_X{1,2} input(A,B) output(Z) Z=XOR2(A,B) ; +XNOR2_X{1,2} input(A,B) output(ZN) ZN=XNOR2(A,B) ; +""") + + +NANGATE = TechLibNew(_nangate_common + r""" +INV_X{1,2,4,8,16,32} input(I) output(ZN) ZN=INV1(I) ; + +AND2_X{1,2,4} input(A1,A2) output(Z) Z=AND2(A1,A2) ; +AND3_X{1,2,4} input(A1,A2,A3) output(Z) Z=AND3(A1,A2,A3) ; +AND4_X{1,2,4} input(A1,A2,A3,A4) output(Z) Z=AND4(A1,A2,A3,A4) ; +OR2_X{1,2,4} input(A1,A2) output(Z) Z=OR2(A1,A2) ; +OR3_X{1,2,4} input(A1,A2,A3) output(Z) Z=OR3(A1,A2,A3) ; +OR4_X{1,2,4} input(A1,A2,A3,A4) output(Z) Z=OR4(A1,A2,A3,A4) ; +XOR2_X{1,2} input(A1,A2) output(Z) Z=XOR2(A1,A2) ; +XNOR2_X{1,2} input(A1,A2) output(ZN) ZN=XNOR2(A1,A2) ; """)