// Opensource ALF test file LIBRARY myLib { CELL myCombinational { CELLTYPE = combinational ; RESTRICT_CLASS { synthesis layout } PIN A { DIRECTION = input ; } PIN B { DIRECTION = input ; } PIN C { DIRECTION = input ; } PIN X { DIRECTION = output ; } PIN Y { DIRECTION = output ; } FUNCTION { BEHAVIOR { X = A && B ; Y = ! A || ! B ; } } } // end CELL myCombinational CELL myLatch { CELLTYPE = latch ; RESTRICT_CLASS { synthesis layout } PIN EN { DIRECTION = input ; } PIN S { DIRECTION = input ; SIGNALTYPE = set ; POLARITY = high ; ACTION = asynchronous ; } PIN R { DIRECTION = input ; SIGNALTYPE = clear ; POLARITY = high ; ACTION = asynchronous ; } PIN CN { DIRECTION = input ; SIGNALTYPE = clock ; POLARITY = low ; } PIN D { DIRECTION = input ; } PIN QI { DIRECTION = none ; } PIN Q { DIRECTION = output ; } PIN variable1 { VIEW = none ; ATTRIBUTE { non_inverted } } PIN variable2 { VIEW = none ; ATTRIBUTE { inverted } } FUNCTION { BEHAVIOR { @ ( S && R ) { variable1 = 1 ; variable2 = 1 ; } : ( R ) { variable1 = 0 ; variable2 = 1 ; } : ( S ) { variable1 = 1 ; variable2 = 0 ; } : ( ! CN ) { variable1 = D ; variable2 = ! D ; } QI = variable1 ; Q = QI && ! EN ; } } } // end CELL myLatch CELL myFlipflop { CELLTYPE = flipflop ; RESTRICT_CLASS { synthesis layout } PIN C { DIRECTION = input ; SIGNALTYPE = clock ; POLARITY = falling_edge ; } PIN SN { DIRECTION = input ; SIGNALTYPE = set ; POLARITY = low ; ACTION = asynchronous ; } PIN RN { DIRECTION = input ; SIGNALTYPE = clear ; POLARITY = low ; ACTION = asynchronous ; } PIN D { DIRECTION = input ; } PIN Q { DIRECTION = output ; } PIN QN { DIRECTION = output ; } PIN variable1 { VIEW = none ; ATTRIBUTE { non_inverted } } PIN variable2 { VIEW = none ; ATTRIBUTE { inverted } } FUNCTION { BEHAVIOR { @ ( ! SN && ! RN ) { variable2 = x ; variable1 = x ; } : ( ! RN ) { variable2 = 1 ; variable1 = 0 ; } : ( ! SN ) { variable2 = 0 ; variable1 = 1 ; } : ( 10 C ) { variable2 = ! D ; variable1 = D ; } Q = variable1 ; QN = variable2 ; } } } // end CELL myFlipflop CELL myFlipflop2 { CELLTYPE = flipflop ; PIN C { DIRECTION = input ; SIGNALTYPE = clock ; POLARITY = falling_edge ; } PIN SN { DIRECTION = input ; SIGNALTYPE = set ; POLARITY = low ; ACTION = asynchronous ; } PIN RN { DIRECTION = input ; SIGNALTYPE = clear ; POLARITY = low ; ACTION = asynchronous ; } PIN D { DIRECTION = input ; } PIN QN { DIRECTION = output ; } PIN variable1 { VIEW = none ; ATTRIBUTE { non_inverted } } PIN variable2 { VIEW = none ; ATTRIBUTE { inverted } } FUNCTION { BEHAVIOR { @ ( ! SN && ! RN ) { variable1 = 1 ; variable2 = 1 ; } : ( ! RN ) { variable1 = 0 ; variable2 = 1 ; } : ( ! SN ) { variable1 = 1 ; variable2 = 0 ; } : ( 10 C ) { variable1 = D ; variable2 = ! D ; } QN = variable2 ; } } } // end CELL myFlipflop2 CELL myScanFlipflop { CELLTYPE = flipflop ; RESTRICT_CLASS { synthesis layout } PIN C { DIRECTION = input ; SIGNALTYPE = clock ; POLARITY = rising_edge ; } PIN D { DIRECTION = input ; SIGNALTYPE = data ; } PIN SI { DIRECTION = input ; SIGNALTYPE = scan_data ; } PIN SE { DIRECTION = input ; SIGNALTYPE = scan_enable ; } PIN Q { DIRECTION = output ; SIGNALTYPE = data ; } PIN variable1 { VIEW = none ; ATTRIBUTE { non_inverted } } PIN variable2 { VIEW = none ; ATTRIBUTE { inverted } } FUNCTION { BEHAVIOR { @ ( 01 C ) { variable1 = SE && SI || ! SE && D ; variable2 = ! ( SE && SI || ! SE && D ) ; } Q = variable1 ; } } } // end CELL myScanFlipflop CELL myMasterSlaveFlipflop { CELLTYPE = flipflop ; RESTRICT_CLASS { synthesis layout } PIN MC { DIRECTION = input ; SIGNALTYPE = master_clock ; POLARITY = rising_edge ; } PIN SC { DIRECTION = input ; SIGNALTYPE = slave_clock ; POLARITY = falling_edge ; } PIN D { DIRECTION = input ; } PIN QN { DIRECTION = output ; } PIN variable1 { VIEW = none ; ATTRIBUTE { non_inverted } } PIN variable2 { VIEW = none ; ATTRIBUTE { inverted } } FUNCTION { BEHAVIOR { @ ( 01 MC ~> 10 SC ) { variable1 = D ; variable2 = ! D ; } QN = variable2 ; } } } // end CELL myMasterSlaveFlipflop CELL myMasterSlaveFlipflop2 { CELLTYPE = flipflop ; PIN C { DIRECTION = input ; SIGNALTYPE = clock ; POLARITY = double_edge ; } PIN D { DIRECTION = input ; } PIN QN { DIRECTION = output ; } PIN variable1 { VIEW = none ; ATTRIBUTE { non_inverted } } PIN variable2 { VIEW = none ; ATTRIBUTE { inverted } } FUNCTION { BEHAVIOR { @ ( 01 C ~> 10 C ) { variable1 = D ; variable2 = ! D ; } QN = variable2 ; } } } // end CELL myMasterSlaveFlipflop2 } // end LIBRARY myLib