|
An in-line logic function reference is a Boolean equation that implements a logic function. It is a shorthand method for implementing a logic function that uses only one line of the Logic Section and does not require an Instance Declaration in the Variable Section.
When you wish to implement an instance of a megafunction or macrofunction with an in-line logic function reference, you must first ensure that the function's logic is defined in its own design file and a Function Prototype Statement specifies the ports and parameters of the function.
You can also implement an instance of a primitive with an in-line logic function reference. However, in contrast to megafunctions and macrofunctions, primitive logic is predefined, so you do not need to define the primitive logic in a separate design file. In most cases, a Function Prototype Statement is not needed. See Function Prototype Statement for more information.
Instance Declarations provide named nodes that are useful for entering resource assignments and simulating a project. In contrast, when an in-line logic function reference does not define an instance name, the instance's node nameswhich are based on the instance namemay change as the project logic changes. Node names do not change for an in-line logic function reference that defines an instance name. |
The following examples show the Function Prototypes for the compare
and lpm_add_sub
functions. The compare
function has input ports a[3..0]
and b[3..0]
and output ports less
, equal
, and greater
; the lpm_add_sub
function has the input ports dataa[LPM_WIDTH-1..0]
, datab[LPM_WIDTH-1..0]
, cin
, and add_sub
, and output ports result[LPM_WIDTH-1..0]
, cout
, and overflow
.
FUNCTION compare (a[3..0], b[3..0]) RETURNS (less, equal, greater); FUNCTION lpm_add_sub (cin, dataa[LPM_WIDTH-1..0], datab[LPM_WIDTH-1..0], add_sub) WITH (LPM_WIDTH, LPM_REPRESENTATION) RETURNS (result[LPM_WIDTH-1..0], cout, overflow);
The in-line logic function references for the compare
and lpm_add_sub
functions appear on the right of the equations below. The instance name of the compare
function is compare1
.
(clockwise, , counterclockwise) = compare1: compare(position[], target[]); sum[] = lpm_add_sub (.datab[] = b[], .dataa[] = a[]) WITH (LPM_WIDTH = 8) RETURNS (.result[]);
The in-line logic function reference for the DFF primitive appears on the right of the equation below. The instance name of the DFF primitive is dffex
.
q = dffex: dff (d, clk, clrn, prn)
The in-line logic function reference for a logic function has the following characteristics:
The symbolic name and colon (:
) immediately to the right of the equals symbol (=
) defines an instance name for a Quartus® II primitive or user-defined megafunction or macrofunction. In the compare
example shown above, compare1:
defines the instance name of the compare
function as compare1
. Similarly, in the dff
example shown above, dffex:
defines the instance name of the DFF primitive as dffex
.
The function name on the right of the symbolic name and colon
is followed by a signal list enclosed in parentheses ()
, containing
symbolic names, decimal
numbers, or groups, separated by commas
(,
). These items correspond to the input ports of the function.
When you specify the function name, you can use the name substitution feature to specify a text string for the name that is replaced by a different text string when the design is compiled. Before you can use the name substitution feature, you must turn on the NAME_SUBSTITUTION
option in the TDF's Options Statement and specify the replacement string for the name in the TDF's Parameters Statement. You can then specify the text string to be replaced in the in-line logic function using the format @
<text string>. Example
In the signal list, port names can be given through positional port association or named port association:
In the compare
example shown above, the a[3..0]
and b[3..0]
inputs of compare
are connected to the variables
named position[]
and target[]
, respectively,
through positional port association. When you use positional port association,
you can use commas as placeholders for outputs that are not connected
to a variable. In compare
, the equal
output
is not connected to any variable, so an extra comma is needed to hold
its place in the group on the left of the equation.
In the lpm_add_sub
example shown above, the .datab[]
and .dataa[]
inputs of lpm_add_sub
are connected
to the variables b[]
and a[]
, respectively,
through named port association. Port names are connected to variables
with an equals symbol (=
).
|
In a parameterized function, the keyword WITH
and the parameter
name list follows the input port list. The list is enclosed in parentheses;
parameter names are separated by commas. Only the parameters used by the
instance are declared; optional parameter values are separated from parameter
names by an equals symbol. In the lpm_add_sub
example shown
above, the LPM_WIDTH
parameter is assigned a value of 8
.
If no parameter values are assigned in the in-line logic function reference, the Compiler
searches for them in the parameter value search
order.
On the left of the in-line logic function reference, the outputs of the function
are connected to variables. In the compare
example shown above,
the function's less
and greater
outputs are connected
to the variables clockwise
and counterclockwise
,
respectively, through positional port association. Similarly, in the lpm_add_sub
example, the function's sum[]
outputs are connected through
positional port association.
The values of the variables, which are determined elsewhere in the Logic
Section, feed the associated inputs and outputs. In the compare
example
shown above, the values of position[]
and target[]
feed the inputs of compare
. The values of output ports less
and greater
feed clockwise
and counterclockwise
,
respectively. These variables may be used in other operations in the Logic
Section.
The in-line logic function reference can contain an optional RETURNS
clause, which is based on the RETURNS
clause in the Function Prototype. The RETURNS
clause lists the subset of the function's outputs that is used in the instance. In the lpm_add_sub
example shown above, the RETURNS
clause does not contain the cout
and overflow
outputs of lpm_add_sub
; therefore, only the sum[]
output is used on the left of the in-line logic function reference and comma placeholders are not required for cout
and overflow
.
- PLDWorld - |
|
Created by chm2web html help conversion utility. |