Using I/Os ......................................................................................................................................... 1–6
Using Registers in Altera FPGAs ................................................................................................... 1–7
Creating Memory for Your Design ................................................................................................ 1–9
ivAltera Corporation
Designing with Low-Level Primitives User Guide
Page 5
About this User Guide
Document
Revision History
Date and
Document
Version
April 2007
v3.0
May 2006
v2.0
October 2005
v1.0
Made changes to the Guide:
● Added examples 1–8, 2–4, 2–6, 2–8
● Added these new sections:
“ALT_INBUF_DIFF” on page 2–11
“ALT_OUTBUF_DIFF” on page 2–13
“ALT_OUTBUF_TRI_DIFF” on page 2–14
“ALT_IOBUF_DIFF” on page 2–19
“ALT_BIDIR_DIFF” on page 2–22
“ALT_BIDIR_BUF” on page 2–25
● Removed most of the “Synthesis Attributes” on page 2–33
section, replaced with a reference to the Quartus II
Handbook.
Technical changes to coincide with changes to the Quartus II
software 6.0.0 release
Initial Release
How to Contact
Altera
The table below shows the revision history for this document.
Changes MadeSummary of Changes
Technical changes to
coincide with changes to
the Quartus II software
7.0.0 release
—
—
For the most up-to-date information about Altera® products, go to the
Altera world wide web site at www.altera.com. For technical support on
this product, go to www.altera.com/mysupport. For additional
information about Altera products, consult the sources shown below.
Information TypeResource
Technical supportwww.altera.com/mysupport/
Product literaturewww.altera.com
Altera literature servicesliterature@altera.com (1)
FTP siteftp.altera.com
Note to table:
(1) You can also contact your local Altera sales office or sales representative.
Altera Corporation v
April 2007Designing with Low-Level Primitives User Guide
Page 6
Typographic Conventions
Typographic
This document uses the typographic conventions shown below.
Conventions
Visual CueMeaning
Bold Type with Initial
Capital Letters
bold type External timing parameters, directory names, project names, disk drive names,
Italic Type with Initial Capital
Letters
Italic type Internal timing parameters and variables are shown in italic type.
Initial Capital LettersKeyboard keys and menu names are shown with initial capital letters. Examples:
“Subheading Title”References to sections within a document and titles of on-line help topics are
Courier type Signal and port names are shown in lowercase Courier type. Examples: data1,
1., 2., 3., and
a., b., c., etc.
● •Bullets are used in a list of items when the sequence of the items is not important.
■
v The checkmark indicates a procedure that consists of one step only.
1 The hand points to information that requires special attention.
c
w
r The angled arrow indicates you should press the Enter key.
f The feet direct you to more information on a particular topic.
Command names, dialog box titles, checkbox options, and dialog box options are
shown in bold, initial capital letters. Example: Save As dialog box.
filenames, filename extensions, and software utility names are shown in bold
type. Examples: f
Document titles are shown in italic type with initial capital letters. Example: AN
75: High-Speed Board Design.
Examples: t
Variable names are enclosed in angle brackets (< >) and shown in italic type.
Example: <file name>, <project name>.pof file.
Delete key, the Options menu.
shown in quotation marks. Example: “Typographic Conventions.”
tdi, input. Active-low signals are denoted by suffix n, e.g., resetn.
Anything that must be typed exactly as it appears is shown in Courier type. For
example:
actual file, such as a Report File, references to parts of files (e.g., the AHDL
keyword
Courier.
Numbered steps are used in a list of items when the sequence of the items is
important, such as the steps listed in a procedure.
A caution calls attention to a condition or possible situation that can damage or
destroy the product or the user’s work.
A warning calls attention to a condition or possible situation that can cause injury
to the user.
c:\qdesigns\tutorial\chiptrip.gdf. Also, sections of an
SUBDESIGN), as well as logic function names (e.g., TRI) are shown in
viAltera Corporation
Designing with Low-Level Primitives User GuideApril 2007
Page 7
1. Low-Level Primitive
Design
Introduction
Your hardware description language (HDL) coding style can have a
significant effect on the quality of results that you achieve for
programmable logic designs. Although synthesis tools optimize HDL
code for both logic utilization and performance, sometimes the best
optimizations require engineering knowledge of the design. Therefore, it
is important to consider the HDL coding style that you adopt when
creating your programmable logic design.
Low-level HDL design is the practice of using low-level primitives and
assignments in your HDL code to dictate a particular hardware
implementation for a piece of logic. Low-level primitives are small
architectural building blocks that assist you in creating your design. With
the Quartus
design techniques that can help you to achieve better resource utilization
or faster timing results.
Using low-level primitives in your design enables you to control the
hardware implementation for a cone of logic in your design. These cones
can be as small as an LCELL instantiation, which prevents the Quartus II
synthesis engine from performing optimizations, to larger, more complex
examples that specify the encoding method for a finite state machine
(FSM).
The Quartus II software can synthesize and place and route designs that
instantiate low-level primitives. This user guide describes the support
that the Quartus II software offers for creating a design with primitives
and includes the definition of each primitive, usage guidelines, and
example designs.
®
II software, you have the option of using low-level HDL
Using the Quartus II software, you can instantiate a Quartus II primitive
into your HDL design. The source files for Quartus II primitives are built
into the Quartus II software.
Altera Corporation 1–1
April 2007
Page 8
Low-Level Primitive Examples
Example 1–1 is a small Verilog example that shows an instantiation of a
DFF primitive and an ALT_OUTBUF_TRI primitive.
Example 1–1. Instantiation of a DFF Primitive and alt_outbuf_tri Primitive, Verilog
module compinst (data, clock, clearn, presetn,
input data, clock, clearn, presetn, a, b;
output q_out, t_out;
alt_outbuf_tri tri_inst (.i(b), .oe(a), .o(t_out))
// alt_outbuf_tri is a primitive
endmodule
a, b, q_out, t_out);
.clrn(clearn),.prn (presetn));
Low-Level
Primitive
Examples
The following sections provide examples of how you can implement
low-level primitives:
■“LCELL Primitive”
■“Using I/Os” on page 1–6
■“Using Registers in Altera FPGAs” on page 1–7
■“Creating Memory for Your Design” on page 1–9
■“Look-Up Table Buffer Primitives” on page 1–13
For detailed specification of the primitive’s ports used in these sections,
refer to “Primitives” on page 2–1.
LCELL Primitive
The LCELL primitive allows you to break up your design into
manageable parts and prevents the Quartus II synthesis engine from
merging logic. This is especially useful when you are trying to debug
your design at the implementation level.
1–2Altera Corporation
Designing with Low-Level Primitives User GuideApril 2007
Page 9
In Example 1–2, the LCELL primitive separates the logic in your design.
The first code example and the resulting view from the Quartus II
Technology Map Viewer (Figure 1–1) show that the logic is merged
during the synthesis process.
Altera Corporation 1–3
April 2007Designing with Low-Level Primitives User Guide
Page 10
Low-Level Primitive Examples
Figure 1–1. Logic Merged During the Process
By strategically placing the LCELLs, you can control how the Quartus II
synthesis engine splits your design into logic cells. This typically causes
your design to use more logic resources, so this primitive should be used
with care. In the following example, and the resulting view from the
Quartus II Technology Map Viewer (Figure 1–2), three LCELL primitive
instantiations are introduced between the combinational logic. Note that
“LCELL” is also the name that the Technology Map Viewer gives to the
logic cells in some device families, as shown in the figure.
1–4Altera Corporation
Designing with Low-Level Primitives User GuideApril 2007
Page 11
In Example 1–3, the address decoder logic is not merged with the
registers in the design.
Example 1–3. Address Decoder Logic Not Merged with Registers
dataout[2] <= temp_0;
end
always@(posedge clk)
begin
dataout[0] <= temp_8;
end
always@(posedge clk)
begin
dataout[1] <= temp_9;
end
endmodule
Altera Corporation 1–5
April 2007Designing with Low-Level Primitives User Guide
Page 12
Low-Level Primitive Examples
Figure 1–2. LCELL Primitive Instantiations
Using I/Os
With I/O primitives, you can make I/O assignments in your HDL file
instead of making them through the Assignment Editor in the Quartus II
software. Example 1–4 describes how to make an I/O standard
assignment to an input pin using the ALT_INBUF primitive in Verilog
HDL.
Example 1–4. Making an I/O Standard Assignment to an Input Pin Using the ALT_INBUF Primitive, Verilog
defparam my_inbuf.io_standard="1.8 V HSTL Class I";
assign data_out = !internal_sig;
endmodule
1–6Altera Corporation
Designing with Low-Level Primitives User GuideApril 2007
Page 13
Low-Level Primitive Design
For detailed specifications of the primitive’s ports used in these sections,
refer to “Primitives” on page 2–1.
I/O Attributes
There are no primitives available to define an I/O register that can be
implemented as a fast input, fast output, or fast output enable register.
However, registers associated with an input or output pin can be moved
into I/O registers using the following assignments in the Quartus II
software for those I/O pins:
■fast_input_register
■fast_output_register
■fast_output_enable_register
These assignments can be set by HDL synthesis attributes. Example 1–5
illustrates the fast_output_register synthesis attribute.
Example 1–5. The fast_output_register Synthesis Attribute
module fast_output(i,clk,o);
input i;
output o;
reg o /* synthesis altera_attribute = ”FAST_OUTPUT_REGISTER”
=ON */;
always @(posedge clk)
begin
o <= i;
end
endmodule
1For more information, refer to “Synthesis Attributes” on
page 2–33.
Using Registers in Altera FPGAs
The building blocks of FPGA architectures contain a combinational
component along with a register component. Each register component in
an Altera FPGA provides a number of secondary control signals (such as
clear, reset, and enable signals) that you can use to implement
control logic for each register without the use of extra logic cells. Device
families vary in their support for secondary signals, so you must consult
the device family data sheet to verify which signals are available in your
target device. Download the device family data sheets from the Literature
section of www.altera.com.
Altera Corporation 1–7
April 2007Designing with Low-Level Primitives User Guide
Page 14
Low-Level Primitive Examples
Inferring Registers Using HDL Code
To make the most efficient use of the signals in the device, your HDL code
should match the device architecture as closely as possible. Because of the
layout of the architecture, the control signals have a certain priority.
Therefore, your HDL code should follow that priority whenever possible.
If you do not follow the signal priority, your synthesis tool emulates the
control signals using additional logic resources. Therefore, creating
functionally correct results is always possible. However, if your design
requirements are flexible (in terms of which control signals are used and
in what priority), you can match your design to the target device
architecture to achieve the optimal performance and logic utilization
results.
There are certain cases where using extra logic resources to emulate
control signals can have an unintended impact. For example, a
_enable signal has priority over a synchronous_reset or a
clock
clear signal in the device architecture. The clock
disables the clock line in the logic array block (LAB), and the sclr signal
is synchronous. In the device architecture, the synchronous clear takes
effect only when a clock edge occurs.
If you code a register with a synchronous clear signal that has
priority over a clock enable signal, the software must emulate the
clock enable functionality using data inputs to the registers. Because the
signal does not use the clock enable port of a register, you cannot
apply a Clock Enable Multicycle constraint. In this case, following the
priority of signals available in the device is clearly the best choice for the
priority of these control signals because using a different priority causes
unexpected results with an assignment to the clock enable signal.
_enable signal
The signal order is the same for all Altera device families, although, as
mentioned earlier, not all device families provide every signal. In general,
use the signal order shown in Tab le 1– 1 .
Table 1–1. Signal Order (from Highest to Lowest Priority)
PrioritySignal
1
2
3
4
5
6
7
1–8Altera Corporation
Designing with Low-Level Primitives User GuideApril 2007
Asynchronous clear
Preset
Asynchronous load
Enable
Synchronous clear
Synchronous load
Data in
Page 15
Low-Level Primitive Design
The sclr signal is not inferred by Quartus Integrated Synthesis when
there are a large number of registers with different sclr signals.This
behavior makes it easier for the fitter to successfully route the design. If
you would like to force the use of the sclr signals, you can use the
following Quartus II synthesis settings.
fFor more details about these and other synthesis settings, refer to the
Quartus II Integrated Synthesis chapter in volume 1 of the Quartus II
Handbook.
■Force Use of Synchronous Clear Signals—Forces the compiler to
utilize synchronous clear signals in normal mode logic cells.
Turning on this option helps to reduce the total number of logic cells
used in the design, but might negatively impact the fitting because
synchronous control signals are shared by all the logic cells in a LAB.
■Allow Synchronous Control Signals—Allows the compiler to utilize
synchronous clear and/or synchronous load signals in normal
mode logic cells. Turning on this option helps to reduce the total
number of logic cells used in the design, but might negatively impact
the fitting because synchronous control signals are shared by all the
logic cells in a LAB.
fFor more information about inference guidelines for registers and on
secondary control signal inference rules, refer to the Recommended HDL
Coding Styles chapter in volume 1 of the Quartus II Handbook.
Using the DFFEAS Primitive
The DFFEAS primitive allows you to directly instantiate a register in your
design and gives you control over which secondary signals are used. The
DFFEAS primitive instantiations are always adhered to unless the
secondary control signals that you use are not supported by the device
family architecture. If you instantiate a DFFEAS primitive with
unsupported secondary control signals, they are converted into the
equivalent logic.
1For an example on instantiation of the DFFEAS primitive, refer
to the Primitive Reference and Synthesis Attributes chapter in this
user guide.
Creating Memory for Your Design
You can create RAM for your design in two ways. The first method
involves creating HDL code that infers a memory function. The second
method involves building a function using the MegaWizard
Manager and instantiating the resulting custom megafunction variation
file in your design.
Altera Corporation 1–9
April 2007Designing with Low-Level Primitives User Guide
®
Plug-In
Page 16
Low-Level Primitive Examples
fFor RAM inference guidelines, refer to the Recommended HDL Coding
Inferring RAM Functions from HDL Code
To infer RAM functions, synthesis tools detect sets of registers and logic
that can be replaced with the altsyncram or lpm_ram_dp megafunctions,
depending on the targeted device family. The Quartus II software usually
does not infer very small RAM blocks because they typically are
implemented more efficiently by using the registers in regular logic.
If your design contains a RAM block that your synthesis tool does not
recognize and infer, the design might require a large amount of system
memory, which can potentially cause run-time compilation problems.
Styles chapter of the Quartus II Handbook.
Using the MegaWizard Plug-In Manager
You can use the MegaWizard Plug-In Manager to create RAM functions.
The MegaWizard Plug-In Manager, located in the Tools menu in the
Quartus II software, allows you create or modify design files that contain
custom megafunction variations, which you can then instantiate in a
design file.
The GUI-based interface of the MegaWizard Plug-In Manager provides
an easy and intuitive interface that allows you to parameterize complex
functions such as memory. However, there are cases, particularly with
memory, where you simply want to modify a small component of the
megafunction. For example, your design can call for two types of memory
functions: a 32, 8-bit word single-port memory function and a 64, 8-bit
word single-port memory function. In this scenario, you can use the
MegaWizard Plug-In Manager to create one function and then use the
instantiation from the wizard-generated file to directly instantiate the
second variation. However, directly instantiating memory functions
should only be used when the modifications to the functions are minimal.
Example 1–6 shows a Verilog example for a 32, 8-bit word single-port
memory function.
1–10Altera Corporation
Designing with Low-Level Primitives User GuideApril 2007
Page 17
Example 1–6. A 32, 8-Bit Word Single-Port Memory Function, Verilog
1–12Altera Corporation
Designing with Low-Level Primitives User GuideApril 2007
Page 19
Look-Up Table Buffer Primitives
The look-up table (LUT) buffer primitives, LUT_INPUT and
LUT_OUTPUT, specify a LUT function in your design. These primitives
are single-input, single-output buffers that you use to create a LUT
directly in your design. The LUT_INPUT acts as an input to the
LUT_OUTPUT. If your design contains a LUT_OUTPUT primitive that is
not properly driven, the LUT_OUTPUT is ignored. By using LUT_INPUT
and LUT_OUTPUT, you can specify which LUT inputs are used. These
primitives are similar to the LCELL primitive; they give you control over
how the Quartus II synthesis engine breaks your design up into logic
cells. Because they give you full control of the inputs and outputs to a
logic cell, LUT_INPUT and LUT_OUTPUT primitives give you more
control over the synthesis process, but you must have more
understanding of the device architecture to use them successfully
Example 1–8 shows a primitive instantiation that creates a four-input
LUT that implements the function aw & bw ^ cw | dw.
Example 1–8. A Primitive Instantiation that Creates a Four-Input LUT
Altera Corporation 1–13
April 2007Designing with Low-Level Primitives User Guide
Page 20
Low-Level Primitive Examples
Example 1–9 is a more complex example using parameterized Verilog
and the LUT_INPUT and LUT_OUTPUT primitive buffers. This example
creates a LUT function to implement an arbitrary function in a single
LUT. The value of “out” is generated by the mask signal and uses the
LUT_INPUT and LUT_OUTPUT primitive buffers to build a single logic
cell that implements the functionality given by the LUT_MASK parameter.
Example 1–9. Parameterized Verilog and LUT_INPUT and LUT_OUTPUT Primitive Buffers
for (i=0; i<LUT_SIZE; i=i+1)
begin : liloop
lut_input li_buf (din[i],din_w[i]);
end
endgenerate
// build up the pterms for the LUT
wire [NUM_BITS-1:0] pterms;
generate
for (i=0; i<NUM_BITS; i=i+1)
begin : ploop
assign pterms[i] = ((din_w == i) & mask[i]);
end
endgenerate
// assign the pterms to the LUT function
wire result;
assign result = | pterms;
lut_output lo_buf (result,out);
endmodule
1–14Altera Corporation
Designing with Low-Level Primitives User GuideApril 2007
Page 21
Example 1–10 uses the LUT primitive to create LUTs that implement a
4-input AND and a 4-input OR function.
Example 1–10. Using the LUT Primitive
module luts (
input [3:0] in1, in2,
output out1, out2
);
lut_sub inst1 (in1, out1);
defparam inst1.mask = 16'H8000; // AND function
lut_sub inst2 (in2, out2);
defparam inst2.mask = 16'HFFFE; // OR function
endmodule
Low-Level Primitive Design
Altera Corporation 1–15
April 2007Designing with Low-Level Primitives User Guide
Page 22
Low-Level Primitive Examples
1–16Altera Corporation
Designing with Low-Level Primitives User GuideApril 2007
Page 23
2. Primitive Reference
Primitives
Using primitives with HDL is an efficient way to make assignments to
your design without using the Assignment Editor.
®
The Quartus
II software supports the following primitives, described on
the corresponding pages:
■“ALT_INBUF”
■“ALT_OUTBUF” on page 2–3
■“ALT_OUTBUF_TRI” on page 2–6
■“ALT_IOBUF” on page 2–8
■“ALT_INBUF_DIFF” on page 2–11(1)
■“ALT_OUTBUF_DIFF” on page 2–13(1)
■“ALT_OUTBUF_TRI_DIFF” on page 2–14(1)
■“ALT_IOBUF_DIFF” on page 2–19(1)
■“ALT_BIDIR_DIFF” on page 2–22(1)
■“ALT_BIDIR_BUF” on page 2–25(1)
■“LCELL” on page 2–27
■“DFF” on page 2–28
■“CARRY and CARRY_SUM” on page 2–29
■“CASCADE” on page 2–30
■“LUT_INPUT” on page 2–31
■“LUT_OUTPUT” on page 2–32
Note to the above list:
(1) These I/O primitives are supported only in Stratix®III and Cyclone®III device
families.
ALT_INBUF
The primitive allows you to make a location assignment, termination
assignment, and also lets you determine whether to use weak pull up
resistor, whether to enable bus-hold circuitry or an io_standard
assignment to an input pin from a lower-level entity. Table 2–1 describes
Altera Corporation 2–1
April 2007
Page 24
Primitives
the input and output ports and the parameters associated with
ALT_INBUF. If any other parameter is specified (for example,
current_strength) an error will result.
Table 2–1. ALT_INBUF Ports and Parameters
Port/ParameterDescription/Value
Input Ports
i
Connect this port to a chip input pin or to a wire to be connected to an input pin.
There must be no logic between the i port and the chip input pin. If there is, an
error results.
Output Ports
o
Connect this port to the logic in the design to receive the input signal.
Parameter
io_standard
location
A logic option that specifies the I/O standard of a pin. Different device families
support different I/O standards, and restrictions apply to placing pins with
different I/O standards together.
Any legal pin location for the current device.
enable_bus_holdAn option to enable bus-hold circuitry. Legal values are “on” and “off.”
weak_pull_up_resistor An option to enable the weak pull-up resistor. Legal values are “on” and “off.”
termination
Any legal on-chip-termination value for the current device. For GX families, this
parameter supports only regular termination, and not GXB termination. For GX
families, you must use Assignment Editor in the Quartus II software to set the
type of termination on high-speed transceivers.
This parameter is supported for Stratix III, Stratix II, Stratix II GX, HardCopy
and Cyclone II.
®
Example 2–1 shows a Verilog HDL example of an ALT_INBUF primitive
instantiation.
Example 2–1. ALT_INBUF Primitive Instantiation, Verilog HDL
2–2Altera Corporation
Designing with Low-Level Primitives User GuideApril 2007
II
Page 25
Example 2–2 shows a VHDL component declaration for an ALT_INBUF
primitive instantiation.
Example 2–2. ALT_INBUF Primitive Component Declaration, VHDL
COMPONENT ALT_INBUF
GENERIC
(IO_STANDARD :STRING :="NONE";
WEAK_PULL_UP_RESISTOR : STRING :="NONE";
LOCATION :STRING :="NONE";
ENABLE_BUS_HOLD:STRING :="NONE";
WEAK_PULL_UP_RESISTOR:STRING :="NONE";
TERMINATION :STRING :="NONE");
PORT (i : IN STD_LOGIC;
o : OUT STD_LOGIC);
END COMPONENT;
ALT_OUTBUF
The primitive allows you to make a location assignment,
io_standard assignment, current_strength assignments,
termination assignment, and also lets you determine whether to use weak
pull-up resistor, whether to enable bus-hold circuitry and/or a
slow_slew_rate assignment to an output pin from a lower-level entity.
Primitive Reference
Table 2–2 explains the ALT_OUTBUF input and output ports, and the
parameter options. If any other parameter is specified, an error will
result.
Altera Corporation 2–3
April 2007Designing with Low-Level Primitives User Guide
Page 26
Primitives
Table 2–2. ALT_OUTBUF Ports & Parameters
Port/ParameterDescription/Value
Input Ports
i
Connect this port to the logic in the design that generates the output signal.
Output Ports
o
Connect this port to a chip output pin or a wire to be connected to a chip output.
There must be no logic between the o port and the chip output pin. If there is,
an error results.
Parameter
io_standardAlogic option that specifies the I/O standard of a pin. Different device families
support different I/O standards, and restrictions apply to placing pins with
different I/O standards together.
current_strength
location
A logic option that sets the drive strength of a pin. Specific numerical strength
settings are appropriate only for pins with certain I/O standards. You can specify
any legal current strength value here (including “minimum current” or “maximum
current”).The parameter name
for backward compatibility.
Any legal pin location for the current device.
current_strength_new is also supported
enable_bus_holdAn option to enable bus-hold circuitry. Legal values are “on” and “off.”
weak_pull_up_resistor An option to enable the weak pull-up resistor. Legal values are “on” and “off.”
termination
slow_slew_rate
Any legal on-chip-termination value for the current device. For GX families, this
parameter supports only regular termination, and not GXB termination.
This parameter is supported for Stratix III, Stratix II, Stratix II GX, HardCopy II,
Cyclone III, and Cyclone II.
A logic option that implements slow low-to-high or high-to-low transitions on
output pins to help reduce switching noise. Current legal values are “
“
off.”
on” and
This assignment is ignored by the Fitter for Stratix II and Cyclone II devices.
This parameter is not supported for Stratix II GX or HardCopy II devices.
slew_rateThe slow_slew_rate parameter is not available for Stratix III and
Cyclone III. These two families support the
Accepts any positive integer value, including 0. The default value is –1, which
is equivalent to not using this parameter.
This parameter is available only for Stratix III and Cyclone III.
2–4Altera Corporation
Designing with Low-Level Primitives User GuideApril 2007
slew_rate parameter instead.
Page 27
Primitive Reference
Example 2–3 shows a Verilog HDL example of an ALT_OUTBUF primitive
instantiation.
Example 2–3. ALT_OUTBUF Primitive Instantiation, Verilog HDL
alt_outbuf my_outbuf (.i(internal_sig), .o(out)); //out must be declared as
an output pin
defparam my_outbuf.io_standard = "2.5 V";
defparam my_outbuf.slow_slew_rate = "on";
Altera Corporation 2–5
April 2007Designing with Low-Level Primitives User Guide
Page 28
Primitives
ALT_OUTBUF_TRI
The primitive allows you to make a location assignment, io_standard
assignment, current_strength assignment, termination assignment,
whether or not to use weak pull-up resistor, and allows you to determine
whether or not to enable bus-hold circuitry and/or a slow_slew_rate
assignment to a tri-stated output pin from a lower-level entity. Table 2–3
explains the ALT_OUTBUF_TRI input and output ports, as well as the
parameter options. If any other parameter is specified, an error will
result.
Example 2–5 shows a Verilog HDL example of an ALT_OUTBUF_TRI
primitive instantiation.
Example 2–5. ALT_OUTBUF_TRI Primitive Instantiation, Verilog HDL
alt_outbuf_tri my_outbuf tri (.i(internal_sig), .oe(enable_sig),
.o(out));
i : IN STD_LOGIC;
oe : IN STD_LOGIC;
o : OUT STD_LOGIC
);
END COMPONENT;
2–6Altera Corporation
Designing with Low-Level Primitives User GuideApril 2007
Page 29
Primitive Reference
Table 2–3. ALT_OUTBUF_TRI Ports & Parameters
Port/ParameterDescription/Value
Input Ports
i
oe
Connect this port to the logic in the design that generates the output signal.
Connect this port to the tristate output enable logic.
Output Ports
o
Connect this port to a chip output pin or a wire to be connected to a chip output.
There must be no logic between the
an error results.
o port and the chip output pin. If there is,
Parameters
io_standard
current_strength
location
A logic option that specifies the I/O standard of a pin. Different device families
support different I/O standards, and restrictions apply to placing pins with
different I/O standards together.
A logic option that sets the drive strength of a pin. Specific numerical strength
settings are appropriate only for pins with certain I/O standards. You can
specify any legal current strength value here (including “minimum current” or
“maximum current”). The parameter name
also supported for backward compatibility.
The location is any legal pin location for the current device.
current_strength_new is
enable_bus_holdAn option to enable bus-hold circuitry. Legal values are “on” and “off.”
weak_pull_up_resistor An option to enable the weak pull-up resistor. Legal values are “on” and “off.”
termination
slow_slew_rate
Any legal on-chip-termination value for the current device. For GX families, this
parameter supports only regular termination, and not GXB termination.
This parameter is supported for Stratix III, Stratix II, Stratix II GX, HardCopy II,
Cyclone III, and Cyclone II.
A logic option that implements slow low-to-high or high-to-low transitions on
output pins to help reduce switching noise. Current legal values are “
off.”
“
on” and
This assignment is ignored by the Fitter for Stratix II and Cyclone II devices.
This parameter is not supported for Stratix II GX or HardCopy II devices.
slew_rateThe slow_slew_rate parameter is not available for Stratix III and
Cyclone III. These two families support the
Accepts any positive integer value including 0. Default value is –1, which is
equivalent to not using this parameter. Available only for Stratix III and
Cyclone III.
Altera Corporation 2–7
April 2007Designing with Low-Level Primitives User Guide
slew_rate parameter instead.
Page 30
Primitives
ALT_IOBUF
The primitive allows you to make a location assignment,
io_standard assignment, current_strength assignment,
termination assignment, and allows you to determine whether or not to
use weak pull-up resistor, whether or not to enable bus-hold circuitry
and/or a slow_slew_rate assignment to a bidirectional pin from a
lower-level entity.
Table 2–4 lists the ports and parameters of the ALT_IOBUF primitive, and
their respective descriptions and possible values.
Example 2–7 shows a Verilog HDL example of an ALT_IOBUF primitive
instantiation.
Example 2–7. ALT_IOBUF Primitive Instantiation, Verilog HDL
alt_iobuf my_iobuf (.i(internal_sig1), .oe(enable_sig),
.o(internal_sig2), .io(bidir));
//bidir must be declared as an inout pin
defparam my_iobuf.io_standard = "3.3-V PCI";
defparam my_iobuf.current_strength = "minimum current";
defparam my_iobuf.slow_slew_rate = "on";
defparam my_iobuf.location = "iobank_1";
Example 2–8 shows a VHDL component declaration for an ALT_IOBUF
primitive instantiation.
2–8Altera Corporation
Designing with Low-Level Primitives User GuideApril 2007
Page 31
Primitive Reference
Table 2–4. ALT_IOBUF Ports and Parameters
Port/ParameterDescription/Value
Input Ports
i
oe
Connect this port to the logic in the design that generates the output signal.
Connect this port to the tri-state output enable logic.
Output Ports
o
Bidirectional Port
Connect this port to the logic in the design that receives the input signal
Connect this port to the chip bidir pin or an entity bidir port. There must
be no logic between the
results.
io port and the chip bidir pin. If there is, an error
Parameter
io_standard
current_strength
location
A logic option that specifies the I/O standard of a pin. Different device families
support different I/O standards, and restrictions apply to placing pins with
different I/O standards together.
A logic option that sets the drive strength of a pin. Specific numerical strength
settings are appropriate only for pins with certain I/O standards. You can
specify any legal current strength value here (including “minimum current” or
“maximum current”). The parameter name
supported for backward compatibility.
Any legal pin location for the current device.
current_strength_new is also
enable_bus_holdAn option to enable bus-hold circuitry. Legal values are “on” and “off.”
weak_pull_up_resistor An option to enable the weak pull-up resistor. Legal values are “on” and “off.”
termination
Any legal on-chip-termination value for the current device. For GX families, this
parameter supports only regular termination, and not GXB termination.
This parameter is supported for Stratix III, Stratix II, Stratix II GX, HardCopy II,
Cyclone III, and Cyclone II.
To set separate input and output values, use
input_termination and
output_termination parameters instead. This parameter can not be
used along with
This parameter sets both input termination value and output termination values
for Stratix III and Cyclone III devices. However, note that the Fitter ignores any
input termination parameters for Cyclone III devices.
To set separate input and output values, use
input_termination or output_termination.
input_termination and
output_termination parameters instead. This parameter can not be
used with
input_termination
Altera Corporation 2–9
April 2007Designing with Low-Level Primitives User Guide
Any legal input on-chip termination value for the current device. This parameter
cannot be used with the
supported in Stratix III devices only.
input_termination or output_termination.
termination parameter. This parameter is
Page 32
Primitives
Table 2–4. ALT_IOBUF Ports and Parameters
Port/ParameterDescription/Value
output_termination
slow_slew_rate
slew_rateThe slow_slew_rate parameter is not available for Stratix III and
Any legal output on-chip termination value for the current device. This
parameter cannot be used with the termination parameter. this parameter is
supported in Stratix III and Cyclone III devices.
A logic option that implements slow low-to-high or high-to-low transitions on
output pins to help reduce switching noise. Current legal values are “
off.”
“
This assignment is ignored by the Fitter for Stratix II and Cyclone II devices.
This parameter is not supported for Stratix II GX or HardCopy II devices.
Cyclone III. These two families support the
Accepts any positive integer value including 0. Default value is –1, which is
equivalent to not using this parameter. Available only for Stratix III and
Cyclone III.
slew_rate parameter instead.
Example 2–8. ALT_IOBUF Primitive Component Declaration, VHDL
i : IN STD_LOGIC;
oe: IN STD_LOGIC;
io : INOUT STD_LOGIC;
o : OUT STD_LOGIC );
on” and
END COMPONENT;
2–10Altera Corporation
Designing with Low-Level Primitives User GuideApril 2007
Page 33
Primitive Reference
ALT_INBUF_DIFF
This primitive allows you to name and connect positive and negative pins
when a differential I/O standard is used for an input pin. You can assign
I/O standard assignments, location assignments, termination
assignments, control bus hold circuitry, and enable weak pull up on the
input pins. An attempt to set any other parameter will result in an error.
Table 2–5 lists the ports and parameters of the ALT_INBUF_DIFF
primitive, and their respective descriptions and possible values.
Table 2–5. ALT_INBUF_DIFF Ports and Parameters
Port/ParameterDescription/Value
Input Ports
i
ibar
Output Ports
oConnect this port to the logic in the design to receive the input signal.
Parameter Name
io_standard
location
enable_bus_holdAn option to enable bus-hold circuitry. Legal values are “on” and “off.”
weak_pull_up_resistor An option to enable the weak pull-up resistor. Current legal values are “on” and
termination
This port represents the positive pin of a differential I/O standard.
Connect this port either to the device’s input pin or to a wire to be connected to
an input pin. There must be no logic between the
pin. The input pin cannot have any other fan-out.
This port represents the negative pin of a differential I/O standard.
Connect this port either to the device's input pin or to a wire to be connected to
an input pin. There must be no logic between the
pin. The input pin cannot have any other fan-out.
Any legal differential I/O standard value.
Any legal pin location for the current device.
off”.
“
Any legal on-chip-termination value for the current device. For GX families, this
parameter supports only regular termination, and not GXB termination. This
parameter is supported for Stratix III, Stratix II, Stratix II GX, HardCopy II, and
Cyclone II.
i port and the device's input
ibar port and the chip input
Note: The Fitter ignores this parameter for Cyclone III devices.
Each parameter also accepts the value “none”. Assigning the value
“none” to any parameter is equivalent to not setting the parameter. Note
that the primitive requires that all three ports (i, ibar, and o) are
connected. Also note that all parameters are optional.
Altera Corporation 2–11
April 2007Designing with Low-Level Primitives User Guide
Page 34
Primitives
Example 2–9 shows a VHDL component instantiation example of an
ALT_INBUF_DIFF primitive.
Example 2–9. ALT_INBUF_DIFF Primitive, VHDL Component Instantiation
library ieee;
use ieee.std_logic_1164.all;
library altera;
use altera.altera_primitives_components.all;
entity test_inbuf is
port (
in1,in2,in3 : in std_logic;
out1 : out std_logic
);
end test_inbuf;
architecture test of test_inbuf is
signal tmp1: std_logic;
begin
inst : ALT_INBUF_DIFF
generic map (
IO_STANDARD => "LVDS",7
LOCATION => "IOBANK_3"
)
port map (
i => in1,
ibar => in2,
o => tmp1
) ;
out1 <= in3 and tmp1;
end test;
2–12Altera Corporation
Designing with Low-Level Primitives User GuideApril 2007
Page 35
Primitive Reference
ALT_OUTBUF_DIFF
This primitive allows you to name and connect positive and negative pins
when a differential I/O standard is used for an output pin. You can assign
I/O standard, location, drive strength (current strength), slew rate, and
termination assignments, control bus hold circuitry, and enable weak
pull-up resistor on the output pins. An attempt to set any other parameter
will result in an error.
Table 2–6 lists the ports and parameters of the ALT_OUTBUF_DIFF
primitive, and their respective descriptions and possible values.
Table 2–6. ALT_OUTBUF_DIFF Ports and Parameters
Port/ParameterDescription/Value
Input Ports
i
Output Ports
o
obar
Parameter Name
io_standard
current_strengthAny legal value of the current_strength_new QSF assignment.
location
slew_rate
enable_bus_holdWhether or not to enable bus-hold circuitry. Current legal values are “on” and
weak_pull_up_resistor Whether or not to enable the weak pull-up resistor. Current legal values are “on”
termination
Connect this port to the logic in the design that generates the output signal.
This port represents the positive pin of a differential I/O standard.
Connect this port to the device’s output pin or a wire to be connected to the
device’s output. There must be no logic between the
pin. This port cannot have multiple fan-outs.
This port represents the negative pin of a differential I/O standard.
Connect this port to the device's output pin or a wire to be connected to the
device's output. There must be no logic between the
output pin. This port cannot have multiple fan-outs.
Any legal differential I/O standard value.
Any legal pin location for the current device.
Any legal slew rate value for the current device. This value must be a positive
integer (including
off”.
“
off”.
and “
Any legal on-chip-termination value for the current device.
0).
o port and the chip output
obar port and the chip
Each parameter except slew_rate also accepts the value “none”.
Assigning the value “none” to any such parameter is equivalent to not
setting the parameter. The parameter slew_rate accepts the value –1 as
Altera Corporation 2–13
April 2007Designing with Low-Level Primitives User Guide
Page 36
Primitives
the default. Assigning –1 to slew_rate is equivalent to not setting the
parameter. Note that the primitive requires that all three ports (i, o, and
obar) are connected. Also note that all parameters are optional.
Example 2–10 shows a VHDL component instantiation example of an
ALT_OUTBUF_DIFF primitive.
Example 2–10. ALT_OUTBUF_DIFF Primitive, VHDL Component Instantiation
library ieee;
use ieee.std_logic_1164.all;
library altera;
use altera.altera_primitives_components.all;
entity test_outbuf is
port (
in1, in2 : in std_logic;
out1, out1_n : out std_logic
);
end test_outbuf;
architecture test of test_outbuf is
signal tmp: std_logic;
begin
inst : ALT_OUTBUF_DIFF
generic map (
IO_STANDARD => "LVDS",
LOCATION=> "IOBANK_3"
)
port map (
i => tmp,
o => out1,
obar => out1_ n
) ;
tmp <= in1 and in2;
end test;
ALT_OUTBUF_TRI_DIFF
This primitive allows you to name and connect positive and negative pins
when a differential I/O standard is used for a tri-statable output pin. You
can assign I/O standard, location, drive strength (current strength), slew
rate, and termination assignments, control bus hold circuitry, and enable
weak pull-up resistor on the output pins. An attempt to set any other
parameter will result in an error.
2–14Altera Corporation
Designing with Low-Level Primitives User GuideApril 2007
Page 37
Primitive Reference
Table 2–7 lists the ports and parameters of the ALT_OUTBUF_TRI_DIFF
primitive, and their respective description and possible values.
Table 2–7. ALT_OUTBUF_TRI_DIFF Ports and Parameters
Port/ParameterDescription/Value
Input Ports
i
oe
Connect this port to the logic in the design that generates the output signal.
Connect this port to the tri-state output enable logic.
Output Ports
o
obar
This port represents the positive pin of a differential I/O standard.
Connect this port to the device’s output pin or a wire to be connected to the
device’s output. There must be no logic between the
pin. This port cannot have multiple fan-outs.
This port represents the negative pin of a differential I/O standard.
Connect this port to the device’s output pin or a wire to be connected to the
device’s output. There must be no logic between the
output pin. This port cannot have multiple fan-outs.
o port and the chip output
obar port and the chip
Parameter Name
io_standard
Any legal differential I/O standard value.
current_strengthAny legal value of the current_strength_new QSF assignment.
location
slew_rate
Any legal pin location for the current device.
Any legal slew rate value for the current device. This value must be a positive
integer (including
0).
enable_bus_holdWhether or not to enable bus-hold circuitry. Current legal values are “on” and
off”.
“
weak_pull_up_resistor
termination
Whether or not to enable the weak pull-up resistor. Current legal values are
on” and “off”.
“
Any legal on-chip-termination value for the current device.
Each parameter except slew_rate also accepts the value “none”.
Assigning the value “none” to any such parameter is equivalent to not
setting the parameter. The parameter slew_rate accepts the value –1 as
the default. Assigning –1 to slew_rate is equivalent to not setting the
parameter. Note that the primitive requires that all four ports (i, oe, o,
and obar) are connected. Also note that all parameters are optional.
Example 2–11 shows a Verilog HDL example and Example 2–12 shows a
VHDL example of an ALT_OUTBUF_TRI_DIFF.
Altera Corporation 2–15
April 2007Designing with Low-Level Primitives User Guide
Page 38
Primitives
Example 2–11. ALT_OUTBUF_TRI_DIFF Primitive Instantiation, Verilog HDL
Altera Corporation 2–17
April 2007Designing with Low-Level Primitives User Guide
Page 40
Primitives
inst : ALT_OUTBUF_TRI_DIFF
generic map (
IO_STANDARD => "LVDS",
LOCATION=> "IOBANK_3"
)
port map (
i => tmp_out,
oe => tmp_oe,
o => dataout,
obar => dataout_n
) ;
end test;
2–18Altera Corporation
Designing with Low-Level Primitives User GuideApril 2007
Page 41
ALT_IOBUF_DIFF
This primitive allows you to name and connect positive and negative pins
when a differential I/O standard is used for a bidirectional pin. You can
assign I/O standard, location, drive strength (current strength), slew rate,
and termination assignments, enable bus hold circuitry, and enable weak
pull-up resistor on the bidir pins. An attempt to set any other parameter
will result in an error.
Table 2–8 lists the ports and parameters of the ALT_IOBUF_DIFF
primitive, and their respective descriptions and possible values.
Table 2–8. ALT_IOBUF_DIFF Ports and Parameters (Part 1 of 2)
Port/ParameterDescription/Value
Input Port
i
oe
Output Ports
o
Bidirectional Port
io
Connect this port to the logic in the design that generates the output signal.
Connect this port to the tri-state output enable logic.
Connect this port to the logic in the design that receives the input signal.
This port represents the positive pin of a differential I/O standard.
Primitive Reference
bidir pin or an entity bidir port. There
io port and the chip bidir port.
bidir pin, or an entity bidir port. There
iobar port and the chip bidir port.
iobar
Connect this port to the device’s
must be no logic between the
This port represents the negative pin of a differential I/O standard.
Connect this port to the device’s
must be no logic between the
Parameter Name
io_standard
current_strengthAny legal value of the current_strength_new QSF assignment.
location
slew_rate
enable_bus_holdThe ability to enable bus-hold circuitry. Current legal values are “on” and “off”.
weak_pull_up_resistor The ability to enable the weak pull-up resistor. Current legal values are “on” and
Altera Corporation 2–19
April 2007Designing with Low-Level Primitives User Guide
Any legal differential I/O standard value.
Any legal pin location for the current device.
Any legal slew rate value for the current device. This value must be a positive
integer (including 0).
off”.
“
Page 42
Primitives
Table 2–8. ALT_IOBUF_DIFF Ports and Parameters (Part 2 of 2)
Port/ParameterDescription/Value
termination
Any legal on-chip-termination value for the current device. This value is set as
the input as well as the output termination value for the current device. To set
separate input and output values, use
output_termination parameters instead.
input_termination and
input_termination
output_termination
This parameter cannot be used with
output_termination.
Any legal input on-chip-termination value for the current device. This parameter
cannot be used with the
Note: The Fitter ignores this parameter for Cyclone III devices.
Any legal output on-chip-termination value for the current device. This
parameter cannot be used with the
termination parameter.
input_termination or
termination parameter.
Each parameter except slew_rate also accepts the value “none”.
Assigning the value “none” to any such parameter is equivalent to not
setting the parameter. The parameter slew_rate accepts the value –1 as
the default. Assigning –1 to slew_rate is equivalent to not setting the
parameter. Note that the primitive requires that all five ports (i, oe, o, io,
and iobar) are connected. Also note that all parameters are optional.
Example 2–13 shows an example of a VHDL component instantiation,
and Example 2–14 shows a Verilog HDL example of an ALT_IOBUF_DIFF primitive instantiation.
2–20Altera Corporation
Designing with Low-Level Primitives User GuideApril 2007
Page 43
Example 2–13. ALT_IOBUF_DIFF Primitive, VHDL Component Instantiation
library ieee;
use ieee.std_logic_1164.all;
library altera;
use altera.altera_primitives_components.all;
entity test_iobuf is
port (
in1, in2, oe : in std_logic;
bidir, bidir_n : inout std_logic;
out : out std_logic
);
end test_iobuf;
architecture test of test_iobuf is
signal tmp1: std_logic;
tmp1 <= in1 and in2;
begin
inst : ALT_IOBUF_DIFF
generic map (
IO_STANDARD => "LVDS",
LOCATION=> "IOBANK_3"
)
port map (
i => tmp1,
oe => oe,
o => out,
io => bidir,
iobar => bidir_n
) ;
Primitive Reference
end test;
Altera Corporation 2–21
April 2007Designing with Low-Level Primitives User Guide
Page 44
Primitives
Example 2–14. ALT_IOBUF_DIFF Primitive Instantiation, Verilog HDL
This primitive allows you to name and connect positive and negative pins
when the altddio_bidir megafunction is used your design. You can assign
I/O standard, location, drive strength (current strength), slew rate, and
termination assignments, control bus hold circuitry, and enable weak
pull-up resistor on the bidir pins. An attempt to set any other parameter
will result in an error.
Table 2–9 lists the ports and parameters of the ALT_BIDIR_DIFF
primitive, and their respective description and possible values.
Table 2–9. ALT_BIDIR_DIFF Ports and Parameters (Part 1 of 2)
Port/ParameterDescription/Value
Input Ports
oeConnect this port to the oe_out port of the altddio_bidir megafunction.
Bidirectional Port
bidirinConnect this port to the padio port of the altddio_bidir megafunction. The
padio port should not have any other fan-outs.
io
iobar
2–22Altera Corporation
Designing with Low-Level Primitives User GuideApril 2007
This port represents the positive pin of a differential I/O standard.
Connect this port to the device’s
must be no logic between the
This port represents the negative pin of a differential I/O standard.
Connect this port to the device's
must be no logic between the
bidir pin or an entity bidir port. There
io port and the chip bidir port.
bidir pin or an entity bidir port. There
iobar port and the chip bidir port.
Page 45
Primitive Reference
Table 2–9. ALT_BIDIR_DIFF Ports and Parameters (Part 2 of 2)
Port/ParameterDescription/Value
Parameter Name
io_standard
Any legal differential I/O standard value.
current_strengthAny legal value of the current_strength_new QSF assignment.
location
slew_rate
Any legal pin location for the current device.
Any legal slew rate value for the current device. This value must be a positive
integer (including 0).
enable_bus_holdWhether to enable bus-hold circuitry. Current legal values are “on” and “off ”.
weak_pull_up_resistor Whether or not to enable the weak pull-up resistor. Current legal values are “on”
off”.
and “
termination
Any legal on-chip-termination value for the current device. This value is set as
the input as well as the output termination value for the current device. To set
separate input and output values, use the
input_termination and
output_termination parameters instead.
input_termination
output_termination
This parameter cannot be used along with
input_termination or
output_termination.
Any legal input on-chip-termination value for the current device. This parameter
can not be used along with the “
Note: The Fitter ignores this parameter for Cyclone III devices.
Any legal output on-chip-termination value for the current device. This
parameter can not be used along with the “
termination” parameter.
termination” parameter.
Each parameter except slew_rate also accepts the value “none”.
Assigning the value “none” to any such parameter is equivalent to not
setting the parameter. The parameter slew_rate accepts the value –1 as
the default. Assigning –1 to slew_rate is equivalent to not setting the
parameter. Note that the primitive requires that all four ports (oe, bidirin, io, and iobar) are connected. Also note that all parameters
are optional. This primitive can only be used with an altddio_bidir
megafunction, and with the port connections described above; using it in
any other configuration will result in an error.
Altera Corporation 2–23
April 2007Designing with Low-Level Primitives User Guide
Page 46
Primitives
Example 2–15 shows an example of a Verilog HDL primitive
instantiation, and Example 2–16 shows a VHDL example of an
ALT_BIDIR_DIFF component declaration.
Example 2–15. ALT_BIDIR_DIFF Primitive Instantiation, Verilog HDL
This primitive allows you to create a location assignment, io_standard
assignment, drive strength (current strength) assignment and/or
slew_rate assignment to the bidirectional pin connected to an
altddio_bidir megafunction. The legal configuration of the primitive and
the complete list of supported parameters are described in Table 2–10. If
the primitive is used in any other configuration or with any other
parameter, an error will be given.
Primitive Reference
Table 2–10. ALT_BIDIR_BUF Ports and Parameters (Part 1 of 2)
Port/ParameterDescription/Value
Input Port
oeConnect this port to the oe_out port of the altddio_bidir megafunction.
Bidirectional Port
bidirinConnect this port to the padio port of the altddio_bidir megafunction. The
padio port should not have any other fan-outs.
ioConnect this port to the device’s bidir pin or an entity bidir port. There
must be no logic between the
io port and the chip bidir port.
Parameter Name
io_standard
current_strengthAny legal value of the current_strength_new QSF assignment.
location
Altera Corporation 2–25
April 2007Designing with Low-Level Primitives User Guide
Any legal I/O standard value.
Any legal pin location for the current device.
Page 48
Primitives
Table 2–10. ALT_BIDIR_BUF Ports and Parameters (Part 2 of 2)
Port/ParameterDescription/Value
slew_rate
Any legal slew rate value for the current device. This value must be a positive
integer (including 0).
enable_bus_holdWhether to enable bus-hold circuitry. Current legal values are “on” and “off ”.
weak_pull_up_resistor Whether or not to enable the weak pull-up resistor. Current legal values are “on”
off”.
and “
termination
Any legal on-chip-termination value for the current device. This value is set as
the input as well as the output termination value for the current device. To set
separate input and output values, use the
input_termination and
output_termination parameters instead.
input_termination
output_termination
This parameter cannot be used with
input_termination or
output_termination.
Any legal input on-chip-termination value for the current device. This parameter
cannot be used along with the “
Note: The Fitter ignores this parameter for Cyclone III devices.
Any legal output on-chip-termination value for the current device. This
parameter cannot be used along with the “
termination” parameter.
termination” parameter.
Each parameter except slew_rate also accepts the value “none”.
Assigning the value “none” to any such parameter is equivalent to not
setting the parameter. The parameter slew_rate accepts the value –1 as
the default. Assigning –1 to slew_rate is equivalent to not setting the
parameter. Note that the primitive requires that all three ports (oe, bidirin, and io) are connected. Also note that all parameters are
optional.
Example 2–17 shows a VHDL example of an ALT_BIDIR_BUF
component declaration.
2–26Altera Corporation
Designing with Low-Level Primitives User GuideApril 2007
Page 49
Example 2–17. ALT_BIDIR_BUF Primitive, VHDL Component Declaration
The instantiation of an LCELL primitive buffer allocates one logic cell for
your design. When you instantiate an LCELL buffer in your design, the
Quartus II software preserves the assignment and does not remove it
during the synthesis process. The name that you assign the LCELL is also
preserved.
Primitive Reference
You should not use
LCELL primitives to create an intentional delay or
asynchronous pulse in your design. The delay of these elements varies
with temperature, power supply voltage, and device fabrication process.
Race conditions may occur that result in an unreliable circuit.
When you turn on the Implement as Output of Logic Cell option, or use
the synthesis attribute KEEP, an LCELL buffer is automatically inserted
by the Quartus II synthesis engine into your design.
Example 2–18 shows a Verilog HDL example of an LCELL primitive
instantiation.
Example 2–18. LCELL Primitive Instantiation, Verilog HDL
2–28Altera Corporation
Designing with Low-Level Primitives User GuideApril 2007
Page 51
Example 2–21 shows a VHDL component declaration for a DFF primitive
instantiation.
Example 2–21. DFF Primitive Instantiation, VHDL
COMPONENT DFFEAS
PORT (d : IN STD_LOGIC;
clk : IN STD_LOGIC;
clrn : IN STD_LOGIC;
prn : IN STD_LOGIC;
ena : IN STD_LOGIC;
asdata : IN STD_LOGIC;
aload : IN STD_LOGIC;
sclr : IN STD_LOGIC;
sload : IN STD_LOGIC;
q : OUT STD_LOGIC );
END COMPONENT;
CARRY and CARRY_SUM
The CARRY_SUM primitive is a two-input, two-output primitive that
designates the carry-out and sum-out logic for a function. The cout port
of the primitive acts as the carry-in for the next element of the carry chain.
This CARRY function also implements fast carry-chain logic for functions
such as adders and counters. The CARRY_SUM primitive does not
generate the carry or sum logic, but indicates to the compiler that the
wires connected to it should be placed on the fast carry-chain logic wires
if possible.
Primitive Reference
When you use a CARRY_SUM primitive, you must observe the following
rules:
■The cout port of the CARRY_SUM primitive can feed one or two
cones of logic. If the CARRY_SUM primitive feeds two cones of logic,
one and only one of the cones of logic must be buffered by another
CARRY_SUM primitive. In this case, both cones of logic are
implemented in the same logic cell. You must follow this rule to tie
down the sum and carry-out functions for the first stage of an adder
or counter.
■A cone of logic that feeds the cin port of a CARRY_SUM primitive can
have up to two inputs. A third input is allowed only if it is a
CARRY_SUM input or a q feedback from the register.
■The cout port of the CARRY_SUM primitive cannot feed an output
pin.
■The cin port of the CARRY_SUM primitive cannot be fed by an input
pin.
■The cout port of two different CARRY_SUM primitives cannot feed
the same gate.
Altera Corporation 2–29
April 2007Designing with Low-Level Primitives User Guide
Page 52
Primitives
The CARRY primitive is supported for backward-compatibility with old
designs; new designs should use the CARRY_SUM primitive. If you use
either primitive incorrectly, it is ignored, and the Quartus II software
issues a warning message in the Message processor.
Example 2–22 shows a Verilog HDL example of a CARRY_SUM primitive
instantiation.
Example 2–22. CARRY_SUM Primitive Instantiation, Verilog HDL
Example 2–23 shows a VHDL component declaration for a CARRY_SUM
primitive instantiation.
Example 2–23. CARRY_SUM Primitive Instantiation, VHDL Component Declaration
COMPONENT CARRY_SUM
PORT (sin, cin : IN STD_LOGIC;
sout, cout : OUT STD_LOGIC);
END COMPONENT;
CASCADE
The CASCADE buffer enables the cascade-out function from one logic cell
and acts as a cascade-in to another logic cell. The cascade-in function
allows a cascade, which is a fast output located on each combinational
logic cell, to be OR’d or AND’d with the output of an adjacent
combinational logic cell within the FPGA.
®
The CASCADE primitive is only supported with the FLEX 10K
APEX™ family of FPGAs. If you attempt to use the CASCADE primitive
with a non-supported FPGA family, an error message occurs.
When you use a CASCADE primitive, you must observe the following
rules:
■A CASCADE primitive can feed or be fed only by a single gate, which
must be an AND or an OR gate.
■An inverted OR gate is treated as an AND gate and vice-versa.
Logical equivalents of AND gates are BAND, BNAND, and NOR.
Logical equivalents of OR gates are BOR, BNOR, and NAND.
■Tw o CASCADE primitives cannot feed the same gate.
■A CASCADE primitive cannot feed an XOR gate.
2–30Altera Corporation
Designing with Low-Level Primitives User GuideApril 2007
and
Page 53
■A CASCADE primitive cannot feed an OUTPUT pin primitive or a
register.
■The De Morgan’s inversion theorem implementation of cascaded
AND and OR gates requires all primitives in a cascaded chain to be
of the same type. A cascaded-AND gate cannot feed a cascaded-OR
gate, and vice-versa.
■If you use the CASCADE primitive incorrectly, it is ignored and the
compiler issues a warning.
■When you turn on the Auto Cascade Chains logic option, the
compiler automatically inserts CASCADE primitives during logic
synthesis. When you turn on the Ignore CASCADE Buffers logic
option, the compiler converts all CASCADE buffers to wire
primitives.
Example 2–24 shows a Verilog HDL example of a CASCADE primitive
instantiation.
Example 2–24. CASCADE Primitive Instantiation, Verilog HDL
Example 2–27 shows a VHDL component declaration for a LUT_INPUT
primitive instantiation.
Example 2–27. LUT_INPUT Primitive Instantiation, VHDL Component Declaration
COMPONENT LUT_INPUT
PORT (a_in : IN STD_LOGIC;
a_out: OUT STD_LOGIC);
END COMPONENT;
LUT_OUTPUT
The LUT_OUTPUT buffer specifies a LUT function. The LUT_OUTPUT
buffer works like an LCELL buffer with the additional detail of specifying
the inputs and without the requirement that the LUT function has
become a hard output. The LUT_INPUT buffer is the input for a
LUT_OUTPUT buffer. The logical functionality of the LUT_OUTPUT and
LUT_INPUT buffers is a simple wire, but together they identify LUT
boundaries.
Example 2–28 shows a Verilog HDL example of a LUT_OUTPUT primitive
instantiation.
Example 2–28. LUT_OUTPUT Primitive Instantiation, Verilog HDL
Example 2–29 shows a VHDL component declaration for a LUT_OUTPUT
primitive instantiation.
Example 2–29. LUT_OUTPUT Primitive Instantiation, VHDL Component Declaration
COMPONENT LUT_OUTPUT
PORT (a_in : IN STD_LOGIC;
a_out : OUT STD_LOGIC);
END COMPONENT;
2–32Altera Corporation
Designing with Low-Level Primitives User GuideApril 2007
Page 55
Primitive Reference
Synthesis
Attributes
Using synthesis attributes in HDL is an easy way to make assignments to
your design instead of using the Assignment Editor. Synthesis attributes
are also commonly called “pragmas”.
fFor more information, refer to the Quartus II Integrated Synthesis chapter
in volume 1 of the Quartus II Handbook.
Altera Corporation 2–33
April 2007Designing with Low-Level Primitives User Guide
Page 56
Synthesis Attributes
2–34Altera Corporation
Designing with Low-Level Primitives User GuideApril 2007
Loading...
+ hidden pages
You need points to download manuals.
1 point = 1 manual.
You can buy points or you can get point for every manual you upload.