|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectbyucc.jhdl.base.Nameable
byucc.jhdl.base.Node
byucc.jhdl.base.Cell
byucc.jhdl.base.Structural
byucc.jhdl.Logic.LogicGates
byucc.jhdl.Logic.LogicStatic
byucc.jhdl.Logic.Logic
byucc.jhdl.Xilinx.XC4000.Modules.arrayMult
Variable width array multiplier with the option of signed or unsigned multiply and generic pipeline depth.
Copyright (c) 1998-2000 Brigham Young University. All rights reserved. Reproduction in whole or in part in any form or medium without express permission of Brigham Young University is prohibited.
As seen in the diagram, the multiplier will multiply the two inputs on the buses x and y and produce a product outputted on the pout bus. If the width of the pout (product) bus is less than the sum of the width of the x and y buses, then the most significant bits will be outputted with the least significant bits truncated off.
Other characterics of note:
pipedepth
parameter of this divider does NOT represent
the latency of the divider but the frequency of a pipeline register.
pipedepth=0
means fully-combinational multiplier
pipedepth=1
means fully-pipelined multiplier
(one pipeline register per logic stage).
pipedepth=2
means place a pipeline register every
other stage
pipedepth=3
means place a pipeline register every
third stage
latency
method or by using the
getLatency
method once a multiplier has been constructed.
The number of pipeline stages (registers between multiplier stages)
can be calculated by following formula:
(Y=width(y) P=pipedepth and the operator '/' is
an integer divide (throw away remainder))
if P=0: pipline registers=0
otherwise: pipeline registers=
((Y-1)/P) + 1
NOTE: To minimize area and speed for a pipelined divider
(pipedepth > 0) one should make the width of the y input less
than that of the x input. For example, if you had a 18x8
multiplier pass the 8-bit wire into the y input and the 18-bit
wire into the x input (if you do it the other way, the area
about doubles when pipedepth is 2). A warning message will be
given if a multiplier with the width of the y input is greater
than the width of the x input. If this warning message is not
desired one can set the static variable
disableWarning
to true
(i.e. arrayMult.disableWarning = true;
).
Field Summary | |
static CellInterface[] |
cell_interface
Standard JHDL CellInterface. |
static boolean |
disableWarning
Field that will turn off the warning message that is given when the width of the y input is greater than the width of the x input in a pipelined multiplier. |
static int |
SIGNED
definition of SIGNED used in arrayMult |
static int |
UNSIGNED
definition of UNSIGNED used in arrayMult |
static boolean |
verbose
Field to turn on verbose creation of multipliers (tells the size of the multiplier, whether is is signed or not and the pipedepth). |
Fields inherited from class byucc.jhdl.Logic.Logic |
ABOVE, ALIGN_BOTTOM, ALIGN_CENTER, ALIGN_LEFT, ALIGN_LSB, ALIGN_MSB, ALIGN_RIGHT, ALIGN_TOP, BELOW, DOWN, EAST_OF, LEFT_OF, MAX_PACK, NORTH_OF, ON, ONTOP, ONTOP_OF, RIGHT_OF, SOUTH_OF, TOLEFT, TORIGHT, UNCONSTRAINED, UP, WEST_OF |
Fields inherited from class byucc.jhdl.Logic.LogicGates |
tech_mapper |
Constructor Summary | |
arrayMult(Node parent,
Wire x,
Wire y,
Wire clk_en,
Wire pout,
int sign,
int pipedepth)
Constructor without an instance name parameter. |
|
arrayMult(Node parent,
Wire x,
Wire y,
Wire clk_en,
Wire pout,
int sign,
int pipedepth,
java.lang.String instanceName)
Constructor with an instance name parameter. |
Method Summary | |
boolean |
cellInterfaceDeterminesUniqueNetlistStructure()
Method to indicate that the netlister can assume that the wires and the bound parameters in the cell interface uniquely determine a cell structure. |
void |
clock()
Clock method is used for behavioral pipelined similuation. |
static long |
compute(long x,
int lx,
long y,
int ly,
int lp,
int sign)
Compute method will provide a mathematically correct answer to what the multiplier would compute with the given parameters and inputs. |
boolean |
defaultSimulationModelIsBehavioral()
The default simulation model is behavioral. |
int |
getLatency()
Method to get the latency of a multiplier is already constructed. |
int |
getNumOfStages()
Method to get the number of pipelinable logic stages of a multiplier that is already constructed. |
void |
initUserDefinedNode(UserDefinedNode udn)
init method needed for UserDefinedSchematic interface. |
static int |
latency(int yWidth,
int pipedepth)
The latency method gives the latency in clock cycles of the module with the given input parameters. |
void |
paint(UserDefinedNode udn)
paint method for UserDefinedSchematic interface. |
void |
propagate()
Propagate method for combinational behavioral simulation (no registers). |
void |
reset()
Reset method simply puts zeros onto pout wire and clears behavioral delay array. |
Methods inherited from class byucc.jhdl.base.Node |
addObservable, addSimulatorCallback, checkAll, delete, getBuildingFlag, getChildren, getChildrenEnumeration, getInstanceName, getParent, getParentCell, getRelatives, getSystem, getWires, optimize, orphanAllowed, printAllChildren, printTree, removeSimulatorCallback, setDefaultClock |
Methods inherited from class byucc.jhdl.base.Nameable |
caseSensitivity, caseSensitivity, disableNameClashChecking, getFullName, getFullNameNoTestBench, getHierNameNoTestBench, getInstanceNo, getInstanceNumber, getLeafName, getLeafName, getRelativeName, getUserName, getUserName, hasUserSpecifiedName, isDescendantOf, setInstanceNumber |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
public static boolean verbose
public static boolean disableWarning
public static final int UNSIGNED
public static final int SIGNED
public static CellInterface[] cell_interface
Constructor Detail |
public arrayMult(Node parent, Wire x, Wire y, Wire clk_en, Wire pout, int sign, int pipedepth)
arrayMultException
- Thrown when multiplier parameters
are invalid, impossible to implement, or when either
the x
or y
wire width is less
than 3 bits.public arrayMult(Node parent, Wire x, Wire y, Wire clk_en, Wire pout, int sign, int pipedepth, java.lang.String instanceName)
arrayMultException
- Thrown when multiplier parameters
are invalid, impossible to implement, or when either
the x
or y
wire width is less
than 3 bits.Method Detail |
public boolean cellInterfaceDeterminesUniqueNetlistStructure()
cellInterfaceDeterminesUniqueNetlistStructure
in class Cell
public void initUserDefinedNode(UserDefinedNode udn)
initUserDefinedNode
in interface UserDefinedSchematic
public void paint(UserDefinedNode udn)
paint
in interface UserDefinedSchematic
public static int latency(int yWidth, int pipedepth)
public int getLatency()
public int getNumOfStages()
public boolean defaultSimulationModelIsBehavioral()
defaultSimulationModelIsBehavioral
in class Structural
public void reset()
reset
in interface Clockable
reset
in class Structural
public void clock()
clock
in interface Clockable
clock
in class Structural
public void propagate()
propagate
in interface byucc.jhdl.base.Propagateable
propagate
in class Structural
public static long compute(long x, int lx, long y, int ly, int lp, int sign)
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |