edu.byu.ece.edif.arch.xilinx
Class XilinxTools

java.lang.Object
  extended by edu.byu.ece.edif.arch.xilinx.XilinxTools

public class XilinxTools
extends java.lang.Object


Field Summary
private static java.util.Collection<java.lang.String> _lutValues
           
private static java.util.Collection<java.lang.String> _multValues
           
private static java.util.Collection<java.lang.String> _muxcyValues
           
private static java.util.Collection<java.lang.String> _muxf5Values
           
static java.lang.String[] clkPorts
          A list of all the clock port names for any given register
static java.util.List<java.lang.String> clkPortsList
           
static java.lang.String[] constantEdifCells
          A list of the constant source EdifCells
static java.util.List<java.lang.String> constantEdifCellsList
           
static java.lang.String[] constantGNDFFPorts
          A list of all the register input ports that often are connected to GND
static java.util.List<java.lang.String> constantGNDFFPortsList
           
static java.lang.String[] constantVCCFFPorts
          A list of all the register input ports that are often connected to VCC
static java.util.List<java.lang.String> constantVCCFFPortsList
           
static java.lang.String[] fakeFFInputPorts
          A list of all FF input ports that lead to 'fake' edges
static java.util.List<java.lang.String> fakeFFInputPortsList
           
static java.lang.String LUT1
          Xilinx CLB primitives
static java.lang.String LUT1_D
           
static java.lang.String LUT1_L
           
static java.lang.String LUT2
           
static java.lang.String LUT2_D
           
static java.lang.String LUT2_L
           
static java.lang.String LUT3
           
static java.lang.String LUT3_D
           
static java.lang.String LUT3_L
           
static java.lang.String LUT4
           
static java.lang.String LUT4_D
           
static java.lang.String LUT4_L
           
static java.lang.String MULT_AND
           
static java.lang.String MUXCY
           
static java.lang.String MUXCY_D
           
static java.lang.String MUXCY_L
           
static java.lang.String MUXF5
           
static java.lang.String MUXF5_D
           
static java.lang.String MUXF5_L
           
static java.lang.String MUXF6
           
static java.lang.String MUXF6_D
           
static java.lang.String MUXF6_L
           
static java.lang.String MUXF7
           
static java.lang.String MUXF7_D
           
static java.lang.String MUXF7_L
           
static java.lang.String MUXF8
           
static java.lang.String MUXF8_D
           
static java.lang.String MUXF8_L
           
static java.lang.String ORCY
           
static java.util.List<java.lang.String> registerList
           
static java.lang.String[] registers
          An array of all the Xilinx primitives that act as a register
static java.util.HashMap<java.lang.String,java.util.Collection<java.lang.String>> restrictedMap
          In order to determine 'illegal' src-sink links for edge cutting, retiming FF locations etc.
static java.util.List<java.lang.String> specialRegisterList
           
static java.lang.String[] specialRegisters
          A list of all the Xilinx 'special' registers.
static java.lang.String XORCY
           
static java.lang.String XORCY_D
           
static java.lang.String XORCY_L
           
 
Constructor Summary
XilinxTools()
           
 
Method Summary
static EdifSingleBitPort getClkPort(EdifCellInstance eci)
           
static EdifSingleBitPort getRegisterOutputPort(EdifCell cell)
          Get the output EdifSingleBitPort for the FF EdifCell NOTE: We make the following 2 assumptions: a FF sink will have ONLY one output port the single output port will ALWAYS be one bit wide.
static java.util.Collection<EdifPortRef> getSinkInputPortRefs(EdifCellInstance eci)
          Collect the input EdifPortRefs that the given EdifCellInstance drives
static java.util.Collection<EdifPortRef> getSourceOutputPortRefs(EdifCellInstance eci)
          Collect the output EdifPortRefs that drive the given EdifCellInstance
static boolean hasClockPort(EdifCell cell)
          This method simply determines if there is a clock port of any kind associated with the given EdifCell.
static boolean isClockNet(EdifNet net)
          Finds out if the given EdifNet is used as a clock net anywhere.
static boolean isClockPort(EdifSingleBitPort port)
          This method simply determines if the given port is a clock port
static boolean isClockSourceCell(EdifCellInstance eci)
          Determines if the given EdifCellInstance is used to drive any clock ports.
static boolean isConstantInput(EdifCell cell)
          Determines if the given EdifCell is a constant '1' or '0' (IE: GND or VCC).
static boolean isPossibleClockNet(EdifNet net)
           
static boolean isRegisterCell(EdifCell cell)
          Determines if the given EdifCell is a register of any kind.
static boolean isRestrictedPair(EdifCellInstance src, EdifCellInstance sink)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

registers

public static java.lang.String[] registers
An array of all the Xilinx primitives that act as a register


registerList

public static java.util.List<java.lang.String> registerList

specialRegisters

public static java.lang.String[] specialRegisters
A list of all the Xilinx 'special' registers. A register is special if it is not merely a flip-flop of sorts.


specialRegisterList

public static java.util.List<java.lang.String> specialRegisterList

constantGNDFFPorts

public static java.lang.String[] constantGNDFFPorts
A list of all the register input ports that often are connected to GND


constantGNDFFPortsList

public static java.util.List<java.lang.String> constantGNDFFPortsList

constantVCCFFPorts

public static java.lang.String[] constantVCCFFPorts
A list of all the register input ports that are often connected to VCC


constantVCCFFPortsList

public static java.util.List<java.lang.String> constantVCCFFPortsList

fakeFFInputPorts

public static java.lang.String[] fakeFFInputPorts
A list of all FF input ports that lead to 'fake' edges


fakeFFInputPortsList

public static java.util.List<java.lang.String> fakeFFInputPortsList

clkPorts

public static java.lang.String[] clkPorts
A list of all the clock port names for any given register


clkPortsList

public static java.util.List<java.lang.String> clkPortsList

constantEdifCells

public static java.lang.String[] constantEdifCells
A list of the constant source EdifCells


constantEdifCellsList

public static java.util.List<java.lang.String> constantEdifCellsList

LUT1

public static final java.lang.String LUT1
Xilinx CLB primitives

See Also:
Constant Field Values

LUT1_L

public static final java.lang.String LUT1_L
See Also:
Constant Field Values

LUT1_D

public static final java.lang.String LUT1_D
See Also:
Constant Field Values

LUT2

public static final java.lang.String LUT2
See Also:
Constant Field Values

LUT2_L

public static final java.lang.String LUT2_L
See Also:
Constant Field Values

LUT2_D

public static final java.lang.String LUT2_D
See Also:
Constant Field Values

LUT3

public static final java.lang.String LUT3
See Also:
Constant Field Values

LUT3_L

public static final java.lang.String LUT3_L
See Also:
Constant Field Values

LUT3_D

public static final java.lang.String LUT3_D
See Also:
Constant Field Values

LUT4

public static final java.lang.String LUT4
See Also:
Constant Field Values

LUT4_L

public static final java.lang.String LUT4_L
See Also:
Constant Field Values

LUT4_D

public static final java.lang.String LUT4_D
See Also:
Constant Field Values

MUXCY

public static final java.lang.String MUXCY
See Also:
Constant Field Values

MUXCY_L

public static final java.lang.String MUXCY_L
See Also:
Constant Field Values

MUXCY_D

public static final java.lang.String MUXCY_D
See Also:
Constant Field Values

XORCY

public static final java.lang.String XORCY
See Also:
Constant Field Values

XORCY_L

public static final java.lang.String XORCY_L
See Also:
Constant Field Values

XORCY_D

public static final java.lang.String XORCY_D
See Also:
Constant Field Values

MUXF5

public static final java.lang.String MUXF5
See Also:
Constant Field Values

MUXF5_L

public static final java.lang.String MUXF5_L
See Also:
Constant Field Values

MUXF5_D

public static final java.lang.String MUXF5_D
See Also:
Constant Field Values

MUXF6

public static final java.lang.String MUXF6
See Also:
Constant Field Values

MUXF6_L

public static final java.lang.String MUXF6_L
See Also:
Constant Field Values

MUXF6_D

public static final java.lang.String MUXF6_D
See Also:
Constant Field Values

MUXF7

public static final java.lang.String MUXF7
See Also:
Constant Field Values

MUXF7_L

public static final java.lang.String MUXF7_L
See Also:
Constant Field Values

MUXF7_D

public static final java.lang.String MUXF7_D
See Also:
Constant Field Values

MUXF8

public static final java.lang.String MUXF8
See Also:
Constant Field Values

MUXF8_L

public static final java.lang.String MUXF8_L
See Also:
Constant Field Values

MUXF8_D

public static final java.lang.String MUXF8_D
See Also:
Constant Field Values

MULT_AND

public static final java.lang.String MULT_AND
See Also:
Constant Field Values

ORCY

public static final java.lang.String ORCY
See Also:
Constant Field Values

restrictedMap

public static java.util.HashMap<java.lang.String,java.util.Collection<java.lang.String>> restrictedMap
In order to determine 'illegal' src-sink links for edge cutting, retiming FF locations etc. a HashMap is created (restrictedMap) which has:

To create this restricted Map, some helper Collections are used.


_multValues

private static java.util.Collection<java.lang.String> _multValues

_lutValues

private static java.util.Collection<java.lang.String> _lutValues

_muxf5Values

private static java.util.Collection<java.lang.String> _muxf5Values

_muxcyValues

private static java.util.Collection<java.lang.String> _muxcyValues
Constructor Detail

XilinxTools

public XilinxTools()
Method Detail

getClkPort

public static EdifSingleBitPort getClkPort(EdifCellInstance eci)

getSinkInputPortRefs

public static java.util.Collection<EdifPortRef> getSinkInputPortRefs(EdifCellInstance eci)
Collect the input EdifPortRefs that the given EdifCellInstance drives

Parameters:
eci -
Returns:

getSourceOutputPortRefs

public static java.util.Collection<EdifPortRef> getSourceOutputPortRefs(EdifCellInstance eci)
Collect the output EdifPortRefs that drive the given EdifCellInstance

Parameters:
eci -
Returns:

getRegisterOutputPort

public static EdifSingleBitPort getRegisterOutputPort(EdifCell cell)
Get the output EdifSingleBitPort for the FF EdifCell NOTE: We make the following 2 assumptions:
  1. a FF sink will have ONLY one output port
  2. the single output port will ALWAYS be one bit wide.


hasClockPort

public static boolean hasClockPort(EdifCell cell)
This method simply determines if there is a clock port of any kind associated with the given EdifCell. In other words, we want to know if this EdifCell is a register.

Parameters:
cell -
Returns:

isClockNet

public static boolean isClockNet(EdifNet net)
Finds out if the given EdifNet is used as a clock net anywhere. TODO: Tighten up the definition of a Clock Net. This method would currently match a Net driving any port with the name "c," for example. Check for known sequential elements? Check driver instead? (this would cause a global reset using a BUFG to register as a clock net, though)

Parameters:
net -
Returns:

isPossibleClockNet

public static boolean isPossibleClockNet(EdifNet net)

isClockPort

public static boolean isClockPort(EdifSingleBitPort port)
This method simply determines if the given port is a clock port

Parameters:
port -
Returns:

isClockSourceCell

public static boolean isClockSourceCell(EdifCellInstance eci)
Determines if the given EdifCellInstance is used to drive any clock ports.

Parameters:
eci -
Returns:

isConstantInput

public static boolean isConstantInput(EdifCell cell)
Determines if the given EdifCell is a constant '1' or '0' (IE: GND or VCC).

Parameters:
cell -
Returns:

isRegisterCell

public static boolean isRegisterCell(EdifCell cell)
Determines if the given EdifCell is a register of any kind.

Parameters:
cell -
Returns:

isRestrictedPair

public static boolean isRestrictedPair(EdifCellInstance src,
                                       EdifCellInstance sink)