|
|||||||||||
| 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.contrib.modgen.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,
boolean virtexMult,
int pipedepth)
The latency method gives the latency in clock cycles of the module with the given input parameters. |
static int |
numOfStages(int yWidth,
boolean virtexMult)
Method that calculates the number of pipelinable logic stages (stages consist of mulitplier/adder units). |
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. |