FPGEN(1)

NAME
fpgen - Procedural language for Data-Path synthesis based upon C.

SYNOPSIS
fpgen [--no-exec] [--keep-exec] [-v] <SourceFile> [-e <Args>]

DESCRIPTION
    fpgen is a set of C functions dedicated to data-path synthesis. It provide a large set of vectorized operators, in the following, the C functions which generates such data-path components are called Macro-functions. fpgen create a hierarchical NetList that can be given to the data-path place and route tool dpr(1).

MISCELLANEOUS FUNCTIONS
DP_DEFLOFIG()    Open a new logical figure and set data-path
context to its default configuration.
DP_SAVLOFIG()    Close and save on disk the current logical figure.
DP_TRACE()    Enable/disable trace mode.
DP_LOCON()    Define a connector.
DP_IMPORT()    Instanciate a data-path compatible component.

MACRO-FUNCTIONS
    The behavior of all the macro-functions can be described by the four following steps :
I)    Reading arguments and performing some checks.
II)    Looking for a previously generated model with the same
set of parameters as actually required, in an internal table. If the model has already been generated, jump to step IV).
III)    At this point, the model is created by a call
to the generator associated to this macro-function. Then the new model is stored in the internal table.
    Notice that the model name is not accessible by the designer. The macro-function encode the parameters and the context in order to build this name.
IV)    A new instance of the model is added to the current
working figure.
    As in GENLIB(1) each of the signals given as arguments are connected to an instance connector. The connectors are implicitly matched from the order of the signal on the list. The supply connectors are automatically added by the macro-function, thus they have not to appear in the call.
    In all the macro-function descriptions, it is shown that connectors have two different types. The Data (noted DATA) and the Control (noted CTRL) types.
-    DATA    :    Corresponds to a virtual connector used in horizontal
connections in fplib cells to interconnect data signals.
-    CTRL    :    Corresponds to a North or South connector generally used to
introduce vertical control signals in fplib cells.
All the C macro-function calls have the followings common arguments :
-    InstName    :    Name of the new instance in the operator.
-    Width    :    Width of the operator bus, in bits.
-    Slice    :    Bottom slice of the operator(i.e. the slice where the LSB will be set).
    All view of the Macro-Function are stored in the directory given by the FPGEN_LIB environement variable. The associated CATAL file is automatically updated

  MODEL NAMES
    fpgen generate itself the operator model names and give them special meanings. So, designers must avoid to use same names. The reserved names are listed below (using regular expression syntax) :
        [a-z0-9]*_[0-9x]*[lm]_cl
        [a-z0-9]*_[0-9x]*[lm]_bk
    At the opposite, when the designer wants to create a custom operator, with GenLib or logical synthetizer scmap(1) he must gave to his operator model name the suffix "_us".

  AVALAIBLE MACRO-FUNCTIONS
Booleans:
DP_INV()    Inverter.
DP_BUFF()    Buffer.
DP_AND2()    Logical and, two inputs.
DP_NAND2()    Logical and, two inputs, complemented output.
DP_AND3()    Logical and, three inputs.
DP_NAND3()    Logical and, three inputs, complemented output.
DP_OR2()    Logical or, two inputs.
DP_NOR2()    Logical or, two inputs, complemented output.
DP_OR3()    Logical or, three inputs.
DP_NOR3()    Logical or, three inputs, complemented output.
DP_XOR2()    Logical exclusive or, two inputs.
DP_XNOR2()    Logical exclusive or, two inputs, complemented output.
Masks :
DP_NAND2MASK()    Logical and mask, complemented output.
DP_NOR2MASK()    Logical or mask, complemented output.
DP_XNOR2MASK()    Logical exclusive or mask, complemented output.
Multiplexers :
DP_NMUX2CS()    Multiplexer, 2 inputs, complemented output.
DP_MUX2CS()    Multiplexer, 2 inputs.
DP_MUX3Cs()    Multiplexer, 3 inputs.
DP_MUX4Cs()    Multiplexer, 4 inputs.
DP_MUX5Cs()    Multiplexer, 5 inputs.
DP_NBUSE()    Tristate, complemented output.
DP_BUSE()    Tristate.
Arithmetic:
DP_ADD2F    fast adder, two operands.
DP_ADSB2F()    Controlable adder substractor, 2 operands (need rsa
dedicated leaf cell library).
DP_SHIFT()    Barrel shifter (need bsg dedicated leaf cells
library).
DP_MULT()    Unpipelined array multiplier (need amg
dedicated leaf cell library).
DP_MULTP()    Pipelined array multiplier (need amg
dedicated leaf cell library).
Miscellaneous:
DP_NUL()    Zero detect.
DP_CONST()    Constant generator.
Registers:
DP_PDFF()    D flip-flop with write enable.
DP_PDFFR()    D flip-flop with write enable and reset.
DP_PDFFT()    D flip-flop with write enable and scan.
DP_PDFFRT()    D flip-flop with write enable, scan and reset.
DP_RGF1CC()    D Register file, one read bus.
DP_RGF1C0()    D Register file, one read bus, R0 <= 0.
DP_RGF2CC()    D Register file, two read bus.
DP_RGF2C0()    D Register file, two read bus, R0 <= 0.
(need rfg dedicated leaf cells library).

OPTIONS
-v    Verbose mode. fpgen will show one message per processing
step.
--keep-exec    Do not erase the executable after run.
--no-exec    Skip the execution step.
SourceFile    Name of the file containing the fpgen specific
C source progam.
-e <Args>    All arguments following -e are passed to the executable.

ENVIRONMENT VARIABLES
MBK_CATA_LIB    Contain the list of directories path holding the
leaf cells libraries. All macro-funcions uses the fplib(5) library, and a few others need additionnal one.
FPGEN_LIB    The path were FpGen will store all the generated
models, and their associated CATAL. If not set MBK_WORK_LIB will be used. Notice that this library path must also be part of the MBK_CATA_LIB list.

SEE ALSO
genlib(1) , fpgen(1), dpr(1), genlib(1), mbk(1), DP_DEFLOFIG(3), DP_SAVLOFIG(3), DP_LOCON(3), DP_IMPORT(3), DP_INV(3), DP_BUSE(3), DP_AND2(3), DP_NAND2(3), DP_AND3(3), DP_NAND3(3), DP_OR2(3), DP_NOR2(3), DP_OR3(3), DP_NOR3(3), DP_XOR2(3), DP_XNOR2(3), DP_NAND2MASK(3), DP_NOR2MASK(3), DP_XNOR2MASK(3), DP_CONST(3), DP_NMUX2CS(3), DP_MUX2CS(3), DP_MUX3CS(3), DP_MUX4CS(3), DP_MUX5CS(3), DP_BUSE(3), DP_NBUSE(3), DP_ADD2F(3), DP_ADSB2F(3), DP_SHIFT(3), DP_MULT(3), DP_MULTP(3), DP_NUL(3), DP_PDFF(3), DP_PDFFR(3), DP_PDFFT(3), DP_PDFFRT(3), DP_RFG1C0(3), DP_RFG1CC(3), DP_RFG2C0(3), DP_RFG2CC(3) ,