{-# OPTIONS_GHC -fno-warn-missing-fields #-} -- | -- Copyright : Copyright (c) 2008, Emil Axelsson -- License : BSD3 -- Maintainer : Emil Axelsson -- Stability : experimental -- -- Lava interface to the Nangate45 library. -- -- The data in this file is derived from Nangate's Open Cell Library, -- and is subject to the license restrictions stated in -- "Libs.Nangate45.LICENSE". module Libs.Nangate45.Lava ( -- * Library type Nangate45 -- * Cells , and2_x1 , and2_x2 , and2_x4 , buf_x1 , buf_x16 , buf_x2 , buf_x32 , buf_x4 , buf_x8 , fa_x1 , fillcell_x1 , fillcell_x16 , fillcell_x2 , fillcell_x32 , fillcell_x4 , fillcell_x8 , ha_x1 , inv_x1 , inv_x16 , inv_x2 , inv_x32 , inv_x4 , inv_x8 , logic0_x1 , logic1_x1 , nand2_x1 , nand2_x2 , nand2_x4 , nor2_x1 , nor2_x2 , nor2_x4 , or2_x1 , or2_x2 , or2_x4 , xnor2_x1 , xnor2_x2 , xor2_x1 , xor2_x2 ) where import Data.Hardware.Internal import Lava.Internal import Lava import Analysis.Timing.Library import Libs.Nangate45.Timing import qualified Lava2000 as L import qualified Lava2000.Arithmetic as L data Nangate45 = AND2_X1 | AND2_X2 | AND2_X4 | BUF_X1 | BUF_X16 | BUF_X2 | BUF_X32 | BUF_X4 | BUF_X8 | FA_X1 | FILLCELL_X1 | FILLCELL_X16 | FILLCELL_X2 | FILLCELL_X32 | FILLCELL_X4 | FILLCELL_X8 | HA_X1 | INV_X1 | INV_X16 | INV_X2 | INV_X32 | INV_X4 | INV_X8 | LOGIC0_X1 | LOGIC1_X1 | NAND2_X1 | NAND2_X2 | NAND2_X4 | NOR2_X1 | NOR2_X2 | NOR2_X4 | OR2_X1 | OR2_X2 | OR2_X4 | XNOR2_X1 | XNOR2_X2 | XOR2_X1 | XOR2_X2 deriving (Eq, Show) instance CellLibrary Nangate45 where numIns AND2_X1 = 2 numIns AND2_X2 = 2 numIns AND2_X4 = 2 numIns BUF_X1 = 1 numIns BUF_X16 = 1 numIns BUF_X2 = 1 numIns BUF_X32 = 1 numIns BUF_X4 = 1 numIns BUF_X8 = 1 numIns FA_X1 = 3 numIns FILLCELL_X1 = 0 numIns FILLCELL_X16 = 0 numIns FILLCELL_X2 = 0 numIns FILLCELL_X32 = 0 numIns FILLCELL_X4 = 0 numIns FILLCELL_X8 = 0 numIns HA_X1 = 2 numIns INV_X1 = 1 numIns INV_X16 = 1 numIns INV_X2 = 1 numIns INV_X32 = 1 numIns INV_X4 = 1 numIns INV_X8 = 1 numIns LOGIC0_X1 = 0 numIns LOGIC1_X1 = 0 numIns NAND2_X1 = 2 numIns NAND2_X2 = 2 numIns NAND2_X4 = 2 numIns NOR2_X1 = 2 numIns NOR2_X2 = 2 numIns NOR2_X4 = 2 numIns OR2_X1 = 2 numIns OR2_X2 = 2 numIns OR2_X4 = 2 numIns XNOR2_X1 = 2 numIns XNOR2_X2 = 2 numIns XOR2_X1 = 2 numIns XOR2_X2 = 2 numOuts AND2_X1 = 1 numOuts AND2_X2 = 1 numOuts AND2_X4 = 1 numOuts BUF_X1 = 1 numOuts BUF_X16 = 1 numOuts BUF_X2 = 1 numOuts BUF_X32 = 1 numOuts BUF_X4 = 1 numOuts BUF_X8 = 1 numOuts FA_X1 = 2 numOuts FILLCELL_X1 = 0 numOuts FILLCELL_X16 = 0 numOuts FILLCELL_X2 = 0 numOuts FILLCELL_X32 = 0 numOuts FILLCELL_X4 = 0 numOuts FILLCELL_X8 = 0 numOuts HA_X1 = 2 numOuts INV_X1 = 1 numOuts INV_X16 = 1 numOuts INV_X2 = 1 numOuts INV_X32 = 1 numOuts INV_X4 = 1 numOuts INV_X8 = 1 numOuts LOGIC0_X1 = 1 numOuts LOGIC1_X1 = 1 numOuts NAND2_X1 = 1 numOuts NAND2_X2 = 1 numOuts NAND2_X4 = 1 numOuts NOR2_X1 = 1 numOuts NOR2_X2 = 1 numOuts NOR2_X4 = 1 numOuts OR2_X1 = 1 numOuts OR2_X2 = 1 numOuts OR2_X4 = 1 numOuts XNOR2_X1 = 1 numOuts XNOR2_X2 = 1 numOuts XOR2_X1 = 1 numOuts XOR2_X2 = 1 inPinName AND2_X1 0 = "A1" inPinName AND2_X1 1 = "A2" inPinName AND2_X2 0 = "A1" inPinName AND2_X2 1 = "A2" inPinName AND2_X4 0 = "A1" inPinName AND2_X4 1 = "A2" inPinName BUF_X1 0 = "A" inPinName BUF_X16 0 = "A" inPinName BUF_X2 0 = "A" inPinName BUF_X32 0 = "A" inPinName BUF_X4 0 = "A" inPinName BUF_X8 0 = "A" inPinName FA_X1 0 = "CI" inPinName FA_X1 1 = "A" inPinName FA_X1 2 = "B" inPinName HA_X1 0 = "A" inPinName HA_X1 1 = "B" inPinName INV_X1 0 = "A" inPinName INV_X16 0 = "A" inPinName INV_X2 0 = "A" inPinName INV_X32 0 = "A" inPinName INV_X4 0 = "A" inPinName INV_X8 0 = "A" inPinName NAND2_X1 0 = "A1" inPinName NAND2_X1 1 = "A2" inPinName NAND2_X2 0 = "A1" inPinName NAND2_X2 1 = "A2" inPinName NAND2_X4 0 = "A1" inPinName NAND2_X4 1 = "A2" inPinName NOR2_X1 0 = "A1" inPinName NOR2_X1 1 = "A2" inPinName NOR2_X2 0 = "A1" inPinName NOR2_X2 1 = "A2" inPinName NOR2_X4 0 = "A1" inPinName NOR2_X4 1 = "A2" inPinName OR2_X1 0 = "A1" inPinName OR2_X1 1 = "A2" inPinName OR2_X2 0 = "A1" inPinName OR2_X2 1 = "A2" inPinName OR2_X4 0 = "A1" inPinName OR2_X4 1 = "A2" inPinName XNOR2_X1 0 = "A" inPinName XNOR2_X1 1 = "B" inPinName XNOR2_X2 0 = "A" inPinName XNOR2_X2 1 = "B" inPinName XOR2_X1 0 = "A" inPinName XOR2_X1 1 = "B" inPinName XOR2_X2 0 = "A" inPinName XOR2_X2 1 = "B" outPinName AND2_X1 0 = "ZN" outPinName AND2_X2 0 = "ZN" outPinName AND2_X4 0 = "ZN" outPinName BUF_X1 0 = "Z" outPinName BUF_X16 0 = "Z" outPinName BUF_X2 0 = "Z" outPinName BUF_X32 0 = "Z" outPinName BUF_X4 0 = "Z" outPinName BUF_X8 0 = "Z" outPinName FA_X1 0 = "S" outPinName FA_X1 1 = "CO" outPinName HA_X1 0 = "S" outPinName HA_X1 1 = "CO" outPinName INV_X1 0 = "ZN" outPinName INV_X16 0 = "ZN" outPinName INV_X2 0 = "ZN" outPinName INV_X32 0 = "ZN" outPinName INV_X4 0 = "ZN" outPinName INV_X8 0 = "ZN" outPinName LOGIC0_X1 0 = "Z" outPinName LOGIC1_X1 0 = "Z" outPinName NAND2_X1 0 = "ZN" outPinName NAND2_X2 0 = "ZN" outPinName NAND2_X4 0 = "ZN" outPinName NOR2_X1 0 = "ZN" outPinName NOR2_X2 0 = "ZN" outPinName NOR2_X4 0 = "ZN" outPinName OR2_X1 0 = "ZN" outPinName OR2_X2 0 = "ZN" outPinName OR2_X4 0 = "ZN" outPinName XNOR2_X1 0 = "ZN" outPinName XNOR2_X2 0 = "ZN" outPinName XOR2_X1 0 = "Z" outPinName XOR2_X2 0 = "Z" inPinId AND2_X1 "A1" = 0 inPinId AND2_X1 "A2" = 1 inPinId AND2_X2 "A1" = 0 inPinId AND2_X2 "A2" = 1 inPinId AND2_X4 "A1" = 0 inPinId AND2_X4 "A2" = 1 inPinId BUF_X1 "A" = 0 inPinId BUF_X16 "A" = 0 inPinId BUF_X2 "A" = 0 inPinId BUF_X32 "A" = 0 inPinId BUF_X4 "A" = 0 inPinId BUF_X8 "A" = 0 inPinId FA_X1 "CI" = 0 inPinId FA_X1 "A" = 1 inPinId FA_X1 "B" = 2 inPinId HA_X1 "A" = 0 inPinId HA_X1 "B" = 1 inPinId INV_X1 "A" = 0 inPinId INV_X16 "A" = 0 inPinId INV_X2 "A" = 0 inPinId INV_X32 "A" = 0 inPinId INV_X4 "A" = 0 inPinId INV_X8 "A" = 0 inPinId NAND2_X1 "A1" = 0 inPinId NAND2_X1 "A2" = 1 inPinId NAND2_X2 "A1" = 0 inPinId NAND2_X2 "A2" = 1 inPinId NAND2_X4 "A1" = 0 inPinId NAND2_X4 "A2" = 1 inPinId NOR2_X1 "A1" = 0 inPinId NOR2_X1 "A2" = 1 inPinId NOR2_X2 "A1" = 0 inPinId NOR2_X2 "A2" = 1 inPinId NOR2_X4 "A1" = 0 inPinId NOR2_X4 "A2" = 1 inPinId OR2_X1 "A1" = 0 inPinId OR2_X1 "A2" = 1 inPinId OR2_X2 "A1" = 0 inPinId OR2_X2 "A2" = 1 inPinId OR2_X4 "A1" = 0 inPinId OR2_X4 "A2" = 1 inPinId XNOR2_X1 "A" = 0 inPinId XNOR2_X1 "B" = 1 inPinId XNOR2_X2 "A" = 0 inPinId XNOR2_X2 "B" = 1 inPinId XOR2_X1 "A" = 0 inPinId XOR2_X1 "B" = 1 inPinId XOR2_X2 "A" = 0 inPinId XOR2_X2 "B" = 1 outPinId AND2_X1 "ZN" = 0 outPinId AND2_X2 "ZN" = 0 outPinId AND2_X4 "ZN" = 0 outPinId BUF_X1 "Z" = 0 outPinId BUF_X16 "Z" = 0 outPinId BUF_X2 "Z" = 0 outPinId BUF_X32 "Z" = 0 outPinId BUF_X4 "Z" = 0 outPinId BUF_X8 "Z" = 0 outPinId FA_X1 "S" = 0 outPinId FA_X1 "CO" = 1 outPinId HA_X1 "S" = 0 outPinId HA_X1 "CO" = 1 outPinId INV_X1 "ZN" = 0 outPinId INV_X16 "ZN" = 0 outPinId INV_X2 "ZN" = 0 outPinId INV_X32 "ZN" = 0 outPinId INV_X4 "ZN" = 0 outPinId INV_X8 "ZN" = 0 outPinId LOGIC0_X1 "Z" = 0 outPinId LOGIC1_X1 "Z" = 0 outPinId NAND2_X1 "ZN" = 0 outPinId NAND2_X2 "ZN" = 0 outPinId NAND2_X4 "ZN" = 0 outPinId NOR2_X1 "ZN" = 0 outPinId NOR2_X2 "ZN" = 0 outPinId NOR2_X4 "ZN" = 0 outPinId OR2_X1 "ZN" = 0 outPinId OR2_X2 "ZN" = 0 outPinId OR2_X4 "ZN" = 0 outPinId XNOR2_X1 "ZN" = 0 outPinId XNOR2_X2 "ZN" = 0 outPinId XOR2_X1 "Z" = 0 outPinId XOR2_X2 "Z" = 0 isFlop AND2_X1 = False isFlop AND2_X2 = False isFlop AND2_X4 = False isFlop BUF_X1 = False isFlop BUF_X16 = False isFlop BUF_X2 = False isFlop BUF_X32 = False isFlop BUF_X4 = False isFlop BUF_X8 = False isFlop FA_X1 = False isFlop FILLCELL_X1 = False isFlop FILLCELL_X16 = False isFlop FILLCELL_X2 = False isFlop FILLCELL_X32 = False isFlop FILLCELL_X4 = False isFlop FILLCELL_X8 = False isFlop HA_X1 = False isFlop INV_X1 = False isFlop INV_X16 = False isFlop INV_X2 = False isFlop INV_X32 = False isFlop INV_X4 = False isFlop INV_X8 = False isFlop LOGIC0_X1 = False isFlop LOGIC1_X1 = False isFlop NAND2_X1 = False isFlop NAND2_X2 = False isFlop NAND2_X4 = False isFlop NOR2_X1 = False isFlop NOR2_X2 = False isFlop NOR2_X4 = False isFlop OR2_X1 = False isFlop OR2_X2 = False isFlop OR2_X4 = False isFlop XNOR2_X1 = False isFlop XNOR2_X2 = False isFlop XOR2_X1 = False isFlop XOR2_X2 = False lava2000Interp = Interp { defaultVal = error "Undefined signal" , propagator = prop } where prop AND2_X1 = \[_, iA1, iA2] -> [Just (L.andl [iA1, iA2]), Nothing, Nothing] prop AND2_X2 = \[_, iA1, iA2] -> [Just (L.andl [iA1, iA2]), Nothing, Nothing] prop AND2_X4 = \[_, iA1, iA2] -> [Just (L.andl [iA1, iA2]), Nothing, Nothing] prop BUF_X1 = \[_, iA] -> [Just (iA), Nothing] prop BUF_X16 = \[_, iA] -> [Just (iA), Nothing] prop BUF_X2 = \[_, iA] -> [Just (iA), Nothing] prop BUF_X32 = \[_, iA] -> [Just (iA), Nothing] prop BUF_X4 = \[_, iA] -> [Just (iA), Nothing] prop BUF_X8 = \[_, iA] -> [Just (iA), Nothing] prop FA_X1 = \[_, _, iCI, iA, iB] -> [Just (L.orl [L.andl [L.orl [L.andl [iA, L.inv (iB)], L.andl [L.inv (iA), iB]], L.inv (iCI)], L.andl [L.inv (L.orl [L.andl [iA, L.inv (iB)], L.andl [L.inv (iA), iB]]), iCI]]), Just (L.orl [L.andl [iA, iB], L.andl [iA, iCI], L.andl [iB, iCI]]), Nothing, Nothing, Nothing] prop FILLCELL_X1 = \[] -> [] prop FILLCELL_X16 = \[] -> [] prop FILLCELL_X2 = \[] -> [] prop FILLCELL_X32 = \[] -> [] prop FILLCELL_X4 = \[] -> [] prop FILLCELL_X8 = \[] -> [] prop HA_X1 = \[_, _, iA, iB] -> [Just (L.orl [L.andl [iA, L.inv (iB)], L.andl [L.inv (iA), iB]]), Just (L.andl [iA, iB]), Nothing, Nothing] prop INV_X1 = \[_, iA] -> [Just (L.inv (iA)), Nothing] prop INV_X16 = \[_, iA] -> [Just (L.inv (iA)), Nothing] prop INV_X2 = \[_, iA] -> [Just (L.inv (iA)), Nothing] prop INV_X32 = \[_, iA] -> [Just (L.inv (iA)), Nothing] prop INV_X4 = \[_, iA] -> [Just (L.inv (iA)), Nothing] prop INV_X8 = \[_, iA] -> [Just (L.inv (iA)), Nothing] prop LOGIC0_X1 = \[_] -> [Just (L.low)] prop LOGIC1_X1 = \[_] -> [Just (L.high)] prop NAND2_X1 = \[_, iA1, iA2] -> [Just (L.inv (L.andl [iA1, iA2])), Nothing, Nothing] prop NAND2_X2 = \[_, iA1, iA2] -> [Just (L.inv (L.andl [iA1, iA2])), Nothing, Nothing] prop NAND2_X4 = \[_, iA1, iA2] -> [Just (L.inv (L.andl [iA1, iA2])), Nothing, Nothing] prop NOR2_X1 = \[_, iA1, iA2] -> [Just (L.inv (L.orl [iA1, iA2])), Nothing, Nothing] prop NOR2_X2 = \[_, iA1, iA2] -> [Just (L.inv (L.orl [iA1, iA2])), Nothing, Nothing] prop NOR2_X4 = \[_, iA1, iA2] -> [Just (L.inv (L.orl [iA1, iA2])), Nothing, Nothing] prop OR2_X1 = \[_, iA1, iA2] -> [Just (L.orl [iA1, iA2]), Nothing, Nothing] prop OR2_X2 = \[_, iA1, iA2] -> [Just (L.orl [iA1, iA2]), Nothing, Nothing] prop OR2_X4 = \[_, iA1, iA2] -> [Just (L.orl [iA1, iA2]), Nothing, Nothing] prop XNOR2_X1 = \[_, iA, iB] -> [Just (L.inv (L.orl [L.andl [iA, L.inv (iB)], L.andl [L.inv (iA), iB]])), Nothing, Nothing] prop XNOR2_X2 = \[_, iA, iB] -> [Just (L.inv (L.orl [L.andl [iA, L.inv (iB)], L.andl [L.inv (iA), iB]])), Nothing, Nothing] prop XOR2_X1 = \[_, iA, iB] -> [Just (L.orl [L.andl [iA, L.inv (iB)], L.andl [L.inv (iA), iB]]), Nothing, Nothing] prop XOR2_X2 = \[_, iA, iB] -> [Just (L.orl [L.andl [iA, L.inv (iB)], L.andl [L.inv (iA), iB]]), Nothing, Nothing] instance TimingLibrary Nangate45 where loadCaps AND2_X1 = [5.05e-16, 5.25e-16] loadCaps AND2_X2 = [5.1e-16, 5.41e-16] loadCaps AND2_X4 = [4.85e-16, 5.37e-16] loadCaps BUF_X1 = [5.04e-16] loadCaps BUF_X16 = [4.3399999999999995e-16] loadCaps BUF_X2 = [5.109999999999999e-16] loadCaps BUF_X32 = [4.519999999999999e-16] loadCaps BUF_X4 = [4.66e-16] loadCaps BUF_X8 = [4.650000000000001e-16] loadCaps FA_X1 = [2.1610000000000002e-15, 2.8769999999999996e-15, 3.0339999999999996e-15] loadCaps FILLCELL_X1 = [] loadCaps FILLCELL_X16 = [] loadCaps FILLCELL_X2 = [] loadCaps FILLCELL_X32 = [] loadCaps FILLCELL_X4 = [] loadCaps FILLCELL_X8 = [] loadCaps HA_X1 = [2.9650000000000003e-15, 1.697e-15] loadCaps INV_X1 = [4.37e-16] loadCaps INV_X16 = [5.511e-15] loadCaps INV_X2 = [7.839999999999999e-16] loadCaps INV_X32 = [1.0717000000000001e-14] loadCaps INV_X4 = [1.4630000000000001e-15] loadCaps INV_X8 = [2.8129999999999998e-15] loadCaps LOGIC0_X1 = [] loadCaps LOGIC1_X1 = [] loadCaps NAND2_X1 = [4.939999999999999e-16, 4.6e-16] loadCaps NAND2_X2 = [8.95e-16, 8.63e-16] loadCaps NAND2_X4 = [1.7149999999999999e-15, 2.472e-15] loadCaps NOR2_X1 = [4.809999999999999e-16, 4.979999999999999e-16] loadCaps NOR2_X2 = [8.97e-16, 9.24e-16] loadCaps NOR2_X4 = [1.777e-15, 2.05e-15] loadCaps OR2_X1 = [5.57e-16, 5.34e-16] loadCaps OR2_X2 = [6.089999999999999e-16, 5.299999999999999e-16] loadCaps OR2_X4 = [5.779999999999999e-16, 5.31e-16] loadCaps XNOR2_X1 = [1.029e-15, 1.151e-15] loadCaps XNOR2_X2 = [1.395e-15, 1.586e-15] loadCaps XOR2_X1 = [1.059e-15, 1.118e-15] loadCaps XOR2_X2 = [1.4369999999999999e-15, 1.576e-15] delay AND2_X1 0 0 Falling = tableDelay table_AND2_X1_A1_ZN_fallingDelay table_AND2_X1_A1_ZN_fallingTransition delay AND2_X1 0 0 Rising = tableDelay table_AND2_X1_A1_ZN_risingDelay table_AND2_X1_A1_ZN_risingTransition delay AND2_X1 1 0 Falling = tableDelay table_AND2_X1_A2_ZN_fallingDelay table_AND2_X1_A2_ZN_fallingTransition delay AND2_X1 1 0 Rising = tableDelay table_AND2_X1_A2_ZN_risingDelay table_AND2_X1_A2_ZN_risingTransition delay AND2_X2 0 0 Falling = tableDelay table_AND2_X2_A1_ZN_fallingDelay table_AND2_X2_A1_ZN_fallingTransition delay AND2_X2 0 0 Rising = tableDelay table_AND2_X2_A1_ZN_risingDelay table_AND2_X2_A1_ZN_risingTransition delay AND2_X2 1 0 Falling = tableDelay table_AND2_X2_A2_ZN_fallingDelay table_AND2_X2_A2_ZN_fallingTransition delay AND2_X2 1 0 Rising = tableDelay table_AND2_X2_A2_ZN_risingDelay table_AND2_X2_A2_ZN_risingTransition delay AND2_X4 0 0 Falling = tableDelay table_AND2_X4_A1_ZN_fallingDelay table_AND2_X4_A1_ZN_fallingTransition delay AND2_X4 0 0 Rising = tableDelay table_AND2_X4_A1_ZN_risingDelay table_AND2_X4_A1_ZN_risingTransition delay AND2_X4 1 0 Falling = tableDelay table_AND2_X4_A2_ZN_fallingDelay table_AND2_X4_A2_ZN_fallingTransition delay AND2_X4 1 0 Rising = tableDelay table_AND2_X4_A2_ZN_risingDelay table_AND2_X4_A2_ZN_risingTransition delay BUF_X1 0 0 Falling = tableDelay table_BUF_X1_A_Z_fallingDelay table_BUF_X1_A_Z_fallingTransition delay BUF_X1 0 0 Rising = tableDelay table_BUF_X1_A_Z_risingDelay table_BUF_X1_A_Z_risingTransition delay BUF_X16 0 0 Falling = tableDelay table_BUF_X16_A_Z_fallingDelay table_BUF_X16_A_Z_fallingTransition delay BUF_X16 0 0 Rising = tableDelay table_BUF_X16_A_Z_risingDelay table_BUF_X16_A_Z_risingTransition delay BUF_X2 0 0 Falling = tableDelay table_BUF_X2_A_Z_fallingDelay table_BUF_X2_A_Z_fallingTransition delay BUF_X2 0 0 Rising = tableDelay table_BUF_X2_A_Z_risingDelay table_BUF_X2_A_Z_risingTransition delay BUF_X32 0 0 Falling = tableDelay table_BUF_X32_A_Z_fallingDelay table_BUF_X32_A_Z_fallingTransition delay BUF_X32 0 0 Rising = tableDelay table_BUF_X32_A_Z_risingDelay table_BUF_X32_A_Z_risingTransition delay BUF_X4 0 0 Falling = tableDelay table_BUF_X4_A_Z_fallingDelay table_BUF_X4_A_Z_fallingTransition delay BUF_X4 0 0 Rising = tableDelay table_BUF_X4_A_Z_risingDelay table_BUF_X4_A_Z_risingTransition delay BUF_X8 0 0 Falling = tableDelay table_BUF_X8_A_Z_fallingDelay table_BUF_X8_A_Z_fallingTransition delay BUF_X8 0 0 Rising = tableDelay table_BUF_X8_A_Z_risingDelay table_BUF_X8_A_Z_risingTransition delay FA_X1 0 0 Falling = tableDelay table_FA_X1_CI_S_fallingDelay table_FA_X1_CI_S_fallingTransition delay FA_X1 0 0 Rising = tableDelay table_FA_X1_CI_S_risingDelay table_FA_X1_CI_S_risingTransition delay FA_X1 0 1 Falling = tableDelay table_FA_X1_CI_CO_fallingDelay table_FA_X1_CI_CO_fallingTransition delay FA_X1 0 1 Rising = tableDelay table_FA_X1_CI_CO_risingDelay table_FA_X1_CI_CO_risingTransition delay FA_X1 1 0 Falling = tableDelay table_FA_X1_A_S_fallingDelay table_FA_X1_A_S_fallingTransition delay FA_X1 1 0 Rising = tableDelay table_FA_X1_A_S_risingDelay table_FA_X1_A_S_risingTransition delay FA_X1 1 1 Falling = tableDelay table_FA_X1_A_CO_fallingDelay table_FA_X1_A_CO_fallingTransition delay FA_X1 1 1 Rising = tableDelay table_FA_X1_A_CO_risingDelay table_FA_X1_A_CO_risingTransition delay FA_X1 2 0 Falling = tableDelay table_FA_X1_B_S_fallingDelay table_FA_X1_B_S_fallingTransition delay FA_X1 2 0 Rising = tableDelay table_FA_X1_B_S_risingDelay table_FA_X1_B_S_risingTransition delay FA_X1 2 1 Falling = tableDelay table_FA_X1_B_CO_fallingDelay table_FA_X1_B_CO_fallingTransition delay FA_X1 2 1 Rising = tableDelay table_FA_X1_B_CO_risingDelay table_FA_X1_B_CO_risingTransition delay HA_X1 0 0 Falling = tableDelay table_HA_X1_A_S_fallingDelay table_HA_X1_A_S_fallingTransition delay HA_X1 0 0 Rising = tableDelay table_HA_X1_A_S_risingDelay table_HA_X1_A_S_risingTransition delay HA_X1 0 1 Falling = tableDelay table_HA_X1_A_CO_fallingDelay table_HA_X1_A_CO_fallingTransition delay HA_X1 0 1 Rising = tableDelay table_HA_X1_A_CO_risingDelay table_HA_X1_A_CO_risingTransition delay HA_X1 1 0 Falling = tableDelay table_HA_X1_B_S_fallingDelay table_HA_X1_B_S_fallingTransition delay HA_X1 1 0 Rising = tableDelay table_HA_X1_B_S_risingDelay table_HA_X1_B_S_risingTransition delay HA_X1 1 1 Falling = tableDelay table_HA_X1_B_CO_fallingDelay table_HA_X1_B_CO_fallingTransition delay HA_X1 1 1 Rising = tableDelay table_HA_X1_B_CO_risingDelay table_HA_X1_B_CO_risingTransition delay INV_X1 0 0 Falling = tableDelay table_INV_X1_A_ZN_fallingDelay table_INV_X1_A_ZN_fallingTransition delay INV_X1 0 0 Rising = tableDelay table_INV_X1_A_ZN_risingDelay table_INV_X1_A_ZN_risingTransition delay INV_X16 0 0 Falling = tableDelay table_INV_X16_A_ZN_fallingDelay table_INV_X16_A_ZN_fallingTransition delay INV_X16 0 0 Rising = tableDelay table_INV_X16_A_ZN_risingDelay table_INV_X16_A_ZN_risingTransition delay INV_X2 0 0 Falling = tableDelay table_INV_X2_A_ZN_fallingDelay table_INV_X2_A_ZN_fallingTransition delay INV_X2 0 0 Rising = tableDelay table_INV_X2_A_ZN_risingDelay table_INV_X2_A_ZN_risingTransition delay INV_X32 0 0 Falling = tableDelay table_INV_X32_A_ZN_fallingDelay table_INV_X32_A_ZN_fallingTransition delay INV_X32 0 0 Rising = tableDelay table_INV_X32_A_ZN_risingDelay table_INV_X32_A_ZN_risingTransition delay INV_X4 0 0 Falling = tableDelay table_INV_X4_A_ZN_fallingDelay table_INV_X4_A_ZN_fallingTransition delay INV_X4 0 0 Rising = tableDelay table_INV_X4_A_ZN_risingDelay table_INV_X4_A_ZN_risingTransition delay INV_X8 0 0 Falling = tableDelay table_INV_X8_A_ZN_fallingDelay table_INV_X8_A_ZN_fallingTransition delay INV_X8 0 0 Rising = tableDelay table_INV_X8_A_ZN_risingDelay table_INV_X8_A_ZN_risingTransition delay NAND2_X1 0 0 Falling = tableDelay table_NAND2_X1_A1_ZN_fallingDelay table_NAND2_X1_A1_ZN_fallingTransition delay NAND2_X1 0 0 Rising = tableDelay table_NAND2_X1_A1_ZN_risingDelay table_NAND2_X1_A1_ZN_risingTransition delay NAND2_X1 1 0 Falling = tableDelay table_NAND2_X1_A2_ZN_fallingDelay table_NAND2_X1_A2_ZN_fallingTransition delay NAND2_X1 1 0 Rising = tableDelay table_NAND2_X1_A2_ZN_risingDelay table_NAND2_X1_A2_ZN_risingTransition delay NAND2_X2 0 0 Falling = tableDelay table_NAND2_X2_A1_ZN_fallingDelay table_NAND2_X2_A1_ZN_fallingTransition delay NAND2_X2 0 0 Rising = tableDelay table_NAND2_X2_A1_ZN_risingDelay table_NAND2_X2_A1_ZN_risingTransition delay NAND2_X2 1 0 Falling = tableDelay table_NAND2_X2_A2_ZN_fallingDelay table_NAND2_X2_A2_ZN_fallingTransition delay NAND2_X2 1 0 Rising = tableDelay table_NAND2_X2_A2_ZN_risingDelay table_NAND2_X2_A2_ZN_risingTransition delay NAND2_X4 0 0 Falling = tableDelay table_NAND2_X4_A1_ZN_fallingDelay table_NAND2_X4_A1_ZN_fallingTransition delay NAND2_X4 0 0 Rising = tableDelay table_NAND2_X4_A1_ZN_risingDelay table_NAND2_X4_A1_ZN_risingTransition delay NAND2_X4 1 0 Falling = tableDelay table_NAND2_X4_A2_ZN_fallingDelay table_NAND2_X4_A2_ZN_fallingTransition delay NAND2_X4 1 0 Rising = tableDelay table_NAND2_X4_A2_ZN_risingDelay table_NAND2_X4_A2_ZN_risingTransition delay NOR2_X1 0 0 Falling = tableDelay table_NOR2_X1_A1_ZN_fallingDelay table_NOR2_X1_A1_ZN_fallingTransition delay NOR2_X1 0 0 Rising = tableDelay table_NOR2_X1_A1_ZN_risingDelay table_NOR2_X1_A1_ZN_risingTransition delay NOR2_X1 1 0 Falling = tableDelay table_NOR2_X1_A2_ZN_fallingDelay table_NOR2_X1_A2_ZN_fallingTransition delay NOR2_X1 1 0 Rising = tableDelay table_NOR2_X1_A2_ZN_risingDelay table_NOR2_X1_A2_ZN_risingTransition delay NOR2_X2 0 0 Falling = tableDelay table_NOR2_X2_A1_ZN_fallingDelay table_NOR2_X2_A1_ZN_fallingTransition delay NOR2_X2 0 0 Rising = tableDelay table_NOR2_X2_A1_ZN_risingDelay table_NOR2_X2_A1_ZN_risingTransition delay NOR2_X2 1 0 Falling = tableDelay table_NOR2_X2_A2_ZN_fallingDelay table_NOR2_X2_A2_ZN_fallingTransition delay NOR2_X2 1 0 Rising = tableDelay table_NOR2_X2_A2_ZN_risingDelay table_NOR2_X2_A2_ZN_risingTransition delay NOR2_X4 0 0 Falling = tableDelay table_NOR2_X4_A1_ZN_fallingDelay table_NOR2_X4_A1_ZN_fallingTransition delay NOR2_X4 0 0 Rising = tableDelay table_NOR2_X4_A1_ZN_risingDelay table_NOR2_X4_A1_ZN_risingTransition delay NOR2_X4 1 0 Falling = tableDelay table_NOR2_X4_A2_ZN_fallingDelay table_NOR2_X4_A2_ZN_fallingTransition delay NOR2_X4 1 0 Rising = tableDelay table_NOR2_X4_A2_ZN_risingDelay table_NOR2_X4_A2_ZN_risingTransition delay OR2_X1 0 0 Falling = tableDelay table_OR2_X1_A1_ZN_fallingDelay table_OR2_X1_A1_ZN_fallingTransition delay OR2_X1 0 0 Rising = tableDelay table_OR2_X1_A1_ZN_risingDelay table_OR2_X1_A1_ZN_risingTransition delay OR2_X1 1 0 Falling = tableDelay table_OR2_X1_A2_ZN_fallingDelay table_OR2_X1_A2_ZN_fallingTransition delay OR2_X1 1 0 Rising = tableDelay table_OR2_X1_A2_ZN_risingDelay table_OR2_X1_A2_ZN_risingTransition delay OR2_X2 0 0 Falling = tableDelay table_OR2_X2_A1_ZN_fallingDelay table_OR2_X2_A1_ZN_fallingTransition delay OR2_X2 0 0 Rising = tableDelay table_OR2_X2_A1_ZN_risingDelay table_OR2_X2_A1_ZN_risingTransition delay OR2_X2 1 0 Falling = tableDelay table_OR2_X2_A2_ZN_fallingDelay table_OR2_X2_A2_ZN_fallingTransition delay OR2_X2 1 0 Rising = tableDelay table_OR2_X2_A2_ZN_risingDelay table_OR2_X2_A2_ZN_risingTransition delay OR2_X4 0 0 Falling = tableDelay table_OR2_X4_A1_ZN_fallingDelay table_OR2_X4_A1_ZN_fallingTransition delay OR2_X4 0 0 Rising = tableDelay table_OR2_X4_A1_ZN_risingDelay table_OR2_X4_A1_ZN_risingTransition delay OR2_X4 1 0 Falling = tableDelay table_OR2_X4_A2_ZN_fallingDelay table_OR2_X4_A2_ZN_fallingTransition delay OR2_X4 1 0 Rising = tableDelay table_OR2_X4_A2_ZN_risingDelay table_OR2_X4_A2_ZN_risingTransition delay XNOR2_X1 0 0 Falling = tableDelay table_XNOR2_X1_A_ZN_fallingDelay table_XNOR2_X1_A_ZN_fallingTransition delay XNOR2_X1 0 0 Rising = tableDelay table_XNOR2_X1_A_ZN_risingDelay table_XNOR2_X1_A_ZN_risingTransition delay XNOR2_X1 1 0 Falling = tableDelay table_XNOR2_X1_B_ZN_fallingDelay table_XNOR2_X1_B_ZN_fallingTransition delay XNOR2_X1 1 0 Rising = tableDelay table_XNOR2_X1_B_ZN_risingDelay table_XNOR2_X1_B_ZN_risingTransition delay XNOR2_X2 0 0 Falling = tableDelay table_XNOR2_X2_A_ZN_fallingDelay table_XNOR2_X2_A_ZN_fallingTransition delay XNOR2_X2 0 0 Rising = tableDelay table_XNOR2_X2_A_ZN_risingDelay table_XNOR2_X2_A_ZN_risingTransition delay XNOR2_X2 1 0 Falling = tableDelay table_XNOR2_X2_B_ZN_fallingDelay table_XNOR2_X2_B_ZN_fallingTransition delay XNOR2_X2 1 0 Rising = tableDelay table_XNOR2_X2_B_ZN_risingDelay table_XNOR2_X2_B_ZN_risingTransition delay XOR2_X1 0 0 Falling = tableDelay table_XOR2_X1_A_Z_fallingDelay table_XOR2_X1_A_Z_fallingTransition delay XOR2_X1 0 0 Rising = tableDelay table_XOR2_X1_A_Z_risingDelay table_XOR2_X1_A_Z_risingTransition delay XOR2_X1 1 0 Falling = tableDelay table_XOR2_X1_B_Z_fallingDelay table_XOR2_X1_B_Z_fallingTransition delay XOR2_X1 1 0 Rising = tableDelay table_XOR2_X1_B_Z_risingDelay table_XOR2_X1_B_Z_risingTransition delay XOR2_X2 0 0 Falling = tableDelay table_XOR2_X2_A_Z_fallingDelay table_XOR2_X2_A_Z_fallingTransition delay XOR2_X2 0 0 Rising = tableDelay table_XOR2_X2_A_Z_risingDelay table_XOR2_X2_A_Z_risingTransition delay XOR2_X2 1 0 Falling = tableDelay table_XOR2_X2_B_Z_fallingDelay table_XOR2_X2_B_Z_fallingTransition delay XOR2_X2 1 0 Rising = tableDelay table_XOR2_X2_B_Z_risingDelay table_XOR2_X2_B_Z_risingTransition -- | Interface: -- -- > (A1, A2) -> ZN -- -- Function: -- -- > ZN = and [A1, A2] and2_x1 :: MonadLava Nangate45 m => (Signal, Signal) -> m Signal and2_x1 = cell AND2_X1 -- | Interface: -- -- > (A1, A2) -> ZN -- -- Function: -- -- > ZN = and [A1, A2] and2_x2 :: MonadLava Nangate45 m => (Signal, Signal) -> m Signal and2_x2 = cell AND2_X2 -- | Interface: -- -- > (A1, A2) -> ZN -- -- Function: -- -- > ZN = and [A1, A2] and2_x4 :: MonadLava Nangate45 m => (Signal, Signal) -> m Signal and2_x4 = cell AND2_X4 -- | Interface: -- -- > A -> Z -- -- Function: -- -- > Z = A buf_x1 :: MonadLava Nangate45 m => Signal -> m Signal buf_x1 = cell BUF_X1 -- | Interface: -- -- > A -> Z -- -- Function: -- -- > Z = A buf_x16 :: MonadLava Nangate45 m => Signal -> m Signal buf_x16 = cell BUF_X16 -- | Interface: -- -- > A -> Z -- -- Function: -- -- > Z = A buf_x2 :: MonadLava Nangate45 m => Signal -> m Signal buf_x2 = cell BUF_X2 -- | Interface: -- -- > A -> Z -- -- Function: -- -- > Z = A buf_x32 :: MonadLava Nangate45 m => Signal -> m Signal buf_x32 = cell BUF_X32 -- | Interface: -- -- > A -> Z -- -- Function: -- -- > Z = A buf_x4 :: MonadLava Nangate45 m => Signal -> m Signal buf_x4 = cell BUF_X4 -- | Interface: -- -- > A -> Z -- -- Function: -- -- > Z = A buf_x8 :: MonadLava Nangate45 m => Signal -> m Signal buf_x8 = cell BUF_X8 -- | Interface: -- -- > (CI, (A, B)) -> (S, CO) -- -- Function: -- -- > S = or [and [or [and [A, B'], and [A', B]], CI'], and [(or [and [A, B'], and [A', B]])', CI]] -- > CO = or [and [A, B], and [A, CI], and [B, CI]] fa_x1 :: MonadLava Nangate45 m => (Signal, (Signal, Signal)) -> m (Signal, Signal) fa_x1 = cell FA_X1 fillcell_x1 :: MonadLava Nangate45 m => a -> m a fillcell_x1 = physCell FILLCELL_X1 fillcell_x16 :: MonadLava Nangate45 m => a -> m a fillcell_x16 = physCell FILLCELL_X16 fillcell_x2 :: MonadLava Nangate45 m => a -> m a fillcell_x2 = physCell FILLCELL_X2 fillcell_x32 :: MonadLava Nangate45 m => a -> m a fillcell_x32 = physCell FILLCELL_X32 fillcell_x4 :: MonadLava Nangate45 m => a -> m a fillcell_x4 = physCell FILLCELL_X4 fillcell_x8 :: MonadLava Nangate45 m => a -> m a fillcell_x8 = physCell FILLCELL_X8 -- | Interface: -- -- > (A, B) -> (S, CO) -- -- Function: -- -- > S = or [and [A, B'], and [A', B]] -- > CO = and [A, B] ha_x1 :: MonadLava Nangate45 m => (Signal, Signal) -> m (Signal, Signal) ha_x1 = cell HA_X1 -- | Interface: -- -- > A -> ZN -- -- Function: -- -- > ZN = A' inv_x1 :: MonadLava Nangate45 m => Signal -> m Signal inv_x1 = cell INV_X1 -- | Interface: -- -- > A -> ZN -- -- Function: -- -- > ZN = A' inv_x16 :: MonadLava Nangate45 m => Signal -> m Signal inv_x16 = cell INV_X16 -- | Interface: -- -- > A -> ZN -- -- Function: -- -- > ZN = A' inv_x2 :: MonadLava Nangate45 m => Signal -> m Signal inv_x2 = cell INV_X2 -- | Interface: -- -- > A -> ZN -- -- Function: -- -- > ZN = A' inv_x32 :: MonadLava Nangate45 m => Signal -> m Signal inv_x32 = cell INV_X32 -- | Interface: -- -- > A -> ZN -- -- Function: -- -- > ZN = A' inv_x4 :: MonadLava Nangate45 m => Signal -> m Signal inv_x4 = cell INV_X4 -- | Interface: -- -- > A -> ZN -- -- Function: -- -- > ZN = A' inv_x8 :: MonadLava Nangate45 m => Signal -> m Signal inv_x8 = cell INV_X8 -- | Interface: -- -- > Z -- -- Function: -- -- > Z = 0 logic0_x1 :: MonadLava Nangate45 m => m Signal logic0_x1 = sourceCell LOGIC0_X1 -- | Interface: -- -- > Z -- -- Function: -- -- > Z = 1 logic1_x1 :: MonadLava Nangate45 m => m Signal logic1_x1 = sourceCell LOGIC1_X1 -- | Interface: -- -- > (A1, A2) -> ZN -- -- Function: -- -- > ZN = (and [A1, A2])' nand2_x1 :: MonadLava Nangate45 m => (Signal, Signal) -> m Signal nand2_x1 = cell NAND2_X1 -- | Interface: -- -- > (A1, A2) -> ZN -- -- Function: -- -- > ZN = (and [A1, A2])' nand2_x2 :: MonadLava Nangate45 m => (Signal, Signal) -> m Signal nand2_x2 = cell NAND2_X2 -- | Interface: -- -- > (A1, A2) -> ZN -- -- Function: -- -- > ZN = (and [A1, A2])' nand2_x4 :: MonadLava Nangate45 m => (Signal, Signal) -> m Signal nand2_x4 = cell NAND2_X4 -- | Interface: -- -- > (A1, A2) -> ZN -- -- Function: -- -- > ZN = (or [A1, A2])' nor2_x1 :: MonadLava Nangate45 m => (Signal, Signal) -> m Signal nor2_x1 = cell NOR2_X1 -- | Interface: -- -- > (A1, A2) -> ZN -- -- Function: -- -- > ZN = (or [A1, A2])' nor2_x2 :: MonadLava Nangate45 m => (Signal, Signal) -> m Signal nor2_x2 = cell NOR2_X2 -- | Interface: -- -- > (A1, A2) -> ZN -- -- Function: -- -- > ZN = (or [A1, A2])' nor2_x4 :: MonadLava Nangate45 m => (Signal, Signal) -> m Signal nor2_x4 = cell NOR2_X4 -- | Interface: -- -- > (A1, A2) -> ZN -- -- Function: -- -- > ZN = or [A1, A2] or2_x1 :: MonadLava Nangate45 m => (Signal, Signal) -> m Signal or2_x1 = cell OR2_X1 -- | Interface: -- -- > (A1, A2) -> ZN -- -- Function: -- -- > ZN = or [A1, A2] or2_x2 :: MonadLava Nangate45 m => (Signal, Signal) -> m Signal or2_x2 = cell OR2_X2 -- | Interface: -- -- > (A1, A2) -> ZN -- -- Function: -- -- > ZN = or [A1, A2] or2_x4 :: MonadLava Nangate45 m => (Signal, Signal) -> m Signal or2_x4 = cell OR2_X4 -- | Interface: -- -- > (A, B) -> ZN -- -- Function: -- -- > ZN = (or [and [A, B'], and [A', B]])' xnor2_x1 :: MonadLava Nangate45 m => (Signal, Signal) -> m Signal xnor2_x1 = cell XNOR2_X1 -- | Interface: -- -- > (A, B) -> ZN -- -- Function: -- -- > ZN = (or [and [A, B'], and [A', B]])' xnor2_x2 :: MonadLava Nangate45 m => (Signal, Signal) -> m Signal xnor2_x2 = cell XNOR2_X2 -- | Interface: -- -- > (A, B) -> Z -- -- Function: -- -- > Z = or [and [A, B'], and [A', B]] xor2_x1 :: MonadLava Nangate45 m => (Signal, Signal) -> m Signal xor2_x1 = cell XOR2_X1 -- | Interface: -- -- > (A, B) -> Z -- -- Function: -- -- > Z = or [and [A, B'], and [A', B]] xor2_x2 :: MonadLava Nangate45 m => (Signal, Signal) -> m Signal xor2_x2 = cell XOR2_X2