#-----------------------------------------------------------------------
# List of standard gate symbols with mapping to liberty file fields
#
# Y, X	       refer to logic output pins
# C, S, ...    refer specifically to adder carry and sum output pins
# Q, QB	       refer specifically to flip-flop or latch output pins
# IQ, IQB      refers to function entries for flops.  "I" is literal.
# A, B, C, ... refer to input pins
# D, R, S, ... refer specifically to flip-flop input pins
# SD	       refers to scan data input pin for flip-flops
# CI	       refers specifically to full adder carry-in input
# Z	       refers to high-impedance state
# &	       means AND
# |	       means OR
# !	       means NOT
# ( )	       groups
#
# Symbol    Liberty	Liberty
# primitive file	field
# name	    field	value	    ...
#-----------------------------------------------------------------------
AND2	    function	Y=A&B
AND3	    function	Y=A&B&C
AND4	    function	Y=A&B&C&D
AND5	    function	Y=A&B&C&D&E
AND8	    function	Y=A&B&C&D&E&F&G&H

AND2I	    function	Y=!A&B

AO21	    function	Y=(A&B)|C
AO22	    function	Y=(A&B)|(C&D)

AOI21	    function	Y=!((A&B)|C)
AOI22	    function	Y=!((A&B)|(C&D))

NAND2	    function	Y=!(A&B)
NAND3	    function	Y=!(A&B&C)
NAND4	    function	Y=!(A&B&C&D)
NAND5	    function	Y=!(A&B&C&D&E)
NAND8	    function	Y=!(A&B&C&D&E&F&G&H)

NAND2I	    function	Y=!(!A&B)

OR2	    function	Y=A|B
OR3	    function	Y=A|B|C
OR4	    function	Y=A|B|C|D
OR5	    function	Y=A|B|C|D|E
OR8	    function	Y=A|B|C|D|E|F|G|H

OR2I	    function	Y=!A|B

OA21	    function	Y=(A|B)&C
OA22	    function	Y=(A|B)&(C|D)

OAI21	    function	Y=!((A|B)&C)
OAI22	    function	Y=!((A|B)&(C|D))

NOR2	    function	Y=!(A|B)
NOR3	    function	Y=!(A|B|C)
NOR4	    function	Y=!(A|B|C|D)
NOR5	    function	Y=!(A|B|C|D|E)
NOR8	    function	Y=!(A|B|C|D|E|F|G|H)

NOR2I	    function	Y=!(!A|B)

XOR2	    function	Y=(A&!B)|(!A&B)

XNOR2	    function	Y=(A&B)|(!A&!B)

INV	    function	Y=!A

BUF	    function	Y=A

TBUF	    function	Y=A	three_state	E

TBUFI	    function	Y=A	three_state	!E

MUX2	    function	Y=(A&C)|(B&!C)

MUX2I	    function	Y=!((A&!C)|(B&C))

MUX4	    function	Y=(A&!E&!F)|(B&!E&F)|(C&E&!F)|(D&E&F)

MUX4I	    function	Y=!((A&!E&!F)|(B&!E&F)|(C&E&!F)|(D&E&F))

HA	    function	C=A&B	function    S=(A&!B)|(!A&B)
FA	    function	C=(A&B)|(A&CI)|(B&CI)	function    S=(A&B&CI)|(!A&B&!CI)|(!A&!B&CI)|(A&B&CI)

LATCH	    function	Q=IQ	enable  E	data_in  D
LATCHI	    function	Q=IQ	enable  !E	data_in  D
LATCHR	    function	Q=IQ	enable  E	data_in  D	clear !R
LATCHIR	    function	Q=IQ	enable  !E	data_in  D	clear !R
LATCHSR	    function	Q=IQ	enable  E	data_in  D	preset !S   clear !R
LATCHISR    function	Q=IQ	enable  E	data_in  D	preset !S   clear !R

LATCHQ	    function	Q=IQ	QB=IQB	enable  E	data_in  D
LATCHIQ	    function	Q=IQ	QB=IQB	enable  !E	data_in  D
LATCHRQ	    function	Q=IQ	QB=IQB	enable  E	data_in  D	clear !R
LATCHIRQ    function	Q=IQ	QB=IQB	enable  !E	data_in  D	clear !R
LATCHSRQ    function	Q=IQ	QB=IQB	enable  E	data_in  D	preset !S   clear !R
LATCHISRQ   function	Q=IQ	QB=IQB	enable  E	data_in  D	preset !S   clear !R

DFF	    function	Q=IQ	clocked_on  C	    next_state  D
DFFQ	    function	Q=IQ	function    QB=IQB   clocked_on	C   next_state	D
DFFS	    function	Q=IQ	clocked_on  C	    next_state  D   preset	!S
DFFR	    function	Q=IQ	clocked_on  C	    next_state  D   clear	!R
DFFSR	    function	Q=IQ	clocked_on  C	    next_state	D   preset	!S  clear   !R
DFFSQ	    function	Q=IQ	function    QB=IQB   clocked_on  C   next_state  D   preset  !S
DFFRQ	    function	Q=IQ	function    QB=IQB   clocked_on  C   next_state  D   clear  !R
DFFSRQ	    function	Q=IQ	function    QB=IQB   clocked_on  C   next_state  D   clear  !R	preset !S
DFFI	    function	Q=IQ	clocked_on  !C	    next_state  D
DFFIQ	    function	Q=IQ	function    QB=IQB   clocked_on	!C   next_state	D
DFFIS	    function	Q=IQ	clocked_on  !C	    next_state  D   preset	!S
DFFIR	    function	Q=IQ	clocked_on  !C	    next_state  D   clear	!R
DFFISR	    function	Q=IQ	clocked_on  !C	    next_state	D   preset	!S  clear   !R
DFFISQ	    function	Q=IQ	function    QB=IQB   clocked_on  !C  next_state  D   preset  !S
DFFIRQ	    function	Q=IQ	function    QB=IQB   clocked_on  !C  next_state  D   clear  !R
DFFISRQ	    function	Q=IQ	function    QB=IQB   clocked_on  !C  next_state  D   clear  !R	preset !S

EDFF	    function	Q=IQ	clocked_on  C	    next_state  (D&E)|(IQ&!E)
EDFFQ	    function	Q=IQ	QB=IQB	clocked_on  C	    next_state  (D&E)|(IQ&!E)

SDFF	    function	Q=IQ	clocked_on  C	    next_state  (D&!E)|(SD&E)
SDFFQ	    function	Q=IQ	QB=IQB	clocked_on  C	    next_state  (D&!E)|(SD&E)
