|
|
Parameterized adder/subtractor megafunction. Altera® recommends using the lpm_add_sub function to replace all other types of adder/subtractor functions.
Altera also recommends instantiating this function as described in Using the MegaWizard® Plug-In Manager.
This topic contains the following information:
FUNCTION lpm_add_sub (cin, dataa[LPM_WIDTH-1..0], datab[LPM_WIDTH-1..0],
add_sub, clock, aclr, clken)
WITH (LPM_WIDTH, LPM_REPRESENTATION, LPM_DIRECTION, ONE_INPUT_IS_CONSTANT,
LPM_PIPELINE, MAXIMIZE_SPEED, USE_WYS) RETURNS (result[LPM_WIDTH-1..0], cout, overflow);
COMPONENT lpm_add_sub
GENERIC (LPM_WIDTH: POSITIVE;
LPM_DIRECTION: STRING := "UNUSED";
LPM_REPRESENTATION: STRING := "SIGNED";
LPM_PIPELINE: INTEGER := 0;
LPM_TYPE: STRING := "LPM_ADD_SUB";
LPM_HINT: STRING := "UNUSED"
ONE_INPUT_IS_CONSTANT: STRING := "NO";
MAXIMIZE_SPEED: INTEGER;
USE_WYS: STRING := "OFF");
PORT (dataa, datab: IN STD_LOGIC_VECTOR(LPM_WIDTH-1 DOWNTO 0);
aclr, clock, cin: IN STD_LOGIC := '0';
clken, add_sub: IN STD_LOGIC := '1';
result: OUT STD_LOGIC_VECTOR(LPM_WIDTH-1 DOWNTO 0);
cout, overflow: OUT STD_LOGIC);
END COMPONENT;
LIBRARY lpm; USE lpm.lpm_components.all;
INPUT PORTS
| Port Name | Required | Description | Comments |
|---|---|---|---|
cin |
No | Carry-in to the low-order bit. | If omitted, the default is 0. |
dataa[] |
Yes | Augend/Minuend | Input port LPM_WIDTH wide. |
datab[] |
Yes | Addend/Subtrahend | Input port LPM_WIDTH wide. |
add_sub |
No | If the signal is high, the operation = dataa[]+datab[]+cin.
If the signal is low, the operation = dataa[]-datab[]+cin-1. |
If the LPM_DIRECTION parameter is
used, add_sub cannot be used. If omitted, the default is "ADD".
Altera recommends that you use the LPM_DIRECTION parameter
to specify the operation of the lpm_add_sub function, rather
than assigning a constant to the add_sub port. |
clock |
No | Clock for pipelined usage. | The clock port provides pipelined
operation for the lpm_add_sub function. For LPM_PIPELINE
values other than 0 (default value), the clock port must be connected. |
clken |
No | Clock enable for pipelined usage. | If omitted, the default is 1. |
aclr |
No | Asynchronous clear for pipelined usage. | The pipeline initializes to an undefined (X)
logic level. The aclr port can be used at any time to reset
the pipeline to all 0s, asynchronously to the clock signal. |
OUTPUT PORTS
| Port Name | Required | Description | Comments |
|---|---|---|---|
result[] |
Yes | dataa[]+datab[]+cin or dataa[]-datab[]+cin-1. |
Output port LPM_WIDTH wide. |
cout |
No | Carry-out (borrow-in) of the MSB. Note (4) | The cout port has a physical interpretation
as the carry-out (borrow-in) of the MSB. The cout port is most meaningful
for detecting overflow in "UNSIGNED" operations. The cout port operates in the same manner for "SIGNED" and "UNSIGNED" operations. |
overflow |
No | Result exceeds available precision. Note (5) | The overflow port has a physical interpretation
as the XOR of the carry-in to the MSB with the carry-out of
the MSB. overflow is meaningful only when the LPM_REPRESENTATION
parameter value is "SIGNED". |
| Parameter | Type | Required | Description |
|---|---|---|---|
LPM_WIDTH |
Integer | Yes | Width of the dataa[],datab[],
and result[] ports. |
LPM_DIRECTION |
String | No | Values are "ADD", "SUB",
and "UNUSED".
If omitted, the default is "DEFAULT", which directs
the parameter to take its value from the add_sub port. The
add_sub port cannot be used if LPM_DIRECTION is
used. Altera recommends that you use the LPM_DIRECTION parameter
to specify the operation of the lpm_add_sub function, rather
than assigning a constant to the add_sub port. |
LPM_REPRESENTATION |
String | No | Type of addition performed: "SIGNED",
"UNSIGNED", or "UNUSED".
If omitted, the default is "SIGNED". The signed representation for all library of parameterized modules (LPM) megafunctions is two's complement. |
LPM_PIPELINE |
Integer | No | Specifies the number of Clock cycles of latency
associated with the result[] output. A value of zero (0) indicates
that no latency exists, and that a purely combinatorial function will be
instantiated. If omitted, the default is 0 (non-pipelined). |
LPM_HINT |
String | No | Allows you to specify Altera-specific
parameters in VHDL Design Files (.vhd).
The default is "UNUSED". |
LPM_TYPE |
String | No | Identifies the library of parameterized modules (LPM) entity name in VHDL Design Files. |
ONE_INPUT_ IS_CONSTANT |
String | No | Altera-specific
parameter. Values are "YES", "NO",
and "UNUSED".
Provides greater optimization if one input is constant. If omitted, the
default is "NO". |
MAXIMIZE_SPEED |
Integer | No | Altera-specific
parameter. You can specify a value between 0 and 10. If used, the Quartus® II software
attempts to optimize a specific instance of the lpm_add_sub
function for speed rather than routability, and overrides the setting of the Optimization
Technique option in the Assignment Organizer (Assignments menu). If MAXIMIZE_SPEED
is unused, the value of the Optimization Technique option is used
instead. If the setting for MAXIMIZE_SPEED is 6 or higher,
the Compiler optimizes lpm_add_sub megafunctions for higher
speed using carry chains; if the setting is 5 or less, the Compiler implements the design without carry chains. This parameter should be specified for APEX II and Mercury devices only when the USE_WYS parameter is not used. This parameter should be specified for Cyclone, Stratix, and Stratix GX devices only when the USE_WYS parameter and the add_sub port are not used. |
USE_WYS |
String | No | Specifies whether to construct an optimized accumulator with the data from the result[] port that cannot be merged with any other logic. Values are "ON" and "OFF". If omitted, the default is "OFF". For Cyclone, Stratix, and Stratix GX designs, if you turn on the add_sub port, this parameter setting must be "ON". This parameter is available for Cyclone, APEX II, Mercury, Stratix, and Stratix GX devices only. |
| UNSIGNED | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||||||||||||||||||
| SIGNED | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||||||||||||||||||
The following table summarizes the resource usage for an lpm_add_sub megafunction used to implement a 16-bit unsigned adder with a carry-in input and a carry-out output. Logic cell usage scales linearly in proportion to adder width.
| Design Goals | Design Results | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
Numbers of shared expanders used are shown in parentheses ( ).
| This topic prints best in Landscape orientation. |
|
- PLDWorld - |
|
|
| Created by chm2web html help conversion utility. |