|
A register is implemented implicitly with a Register Inference. Register Inferences in Quartus® II VHDL support any combination of clear, preset, clock enable, and asynchronous load signals. The Quartus II software can infer memory elements from the following VHDL statements, all of which are used within a Process Statement:
If Statements can be used to imply registers for signals and variables in the clauses of the If Statement.
Wait Statements can be used to imply registers in a synthesized circuit. The Compiler creates flipflops for all signals and some variables that are assigned values in any process with a Wait Statement. If you use a Wait Statement, it must be listed at the beginning of the Process Statement.
During logic synthesis, the Compiler automatically inserts an instance of the register and connects it as specified in the If and/or Wait Statement(s).
You can also implement registers explicitly with Component Instantiation Statements. For more information on Component Instantiations, see Creating Hierarchical Projects. |
Unlike Component Instantiations, Register Inferences are technology-independent. When registers are inferred, the Quartus II software can select them from the library you are currently using.
The following example shows methods of inferring registers that are controlled by a clock and asynchronous clear, preset, and load signals.
ENTITY reginf IS PORT ( d, clk, clr, pre, load, data : IN STD_LOGIC; q1, q2, q3, q4, q5, q6, q7 : OUT STD_LOGIC ); END reginf; ARCHITECTURE maxpld OF reginf IS BEGIN -- Register with active-high clock PROCESS BEGIN WAIT UNTIL clk = '1'; q1 <= d; END PROCESS; -- Register with active-low clock PROCESS BEGIN WAIT UNTIL clk = '0'; q2 <= d; END PROCESS; -- Register with active-high clock & asynchronous clear PROCESS (clk, clr) BEGIN IF clr = '1' THEN q3 <= '0'; ELSIF clk'EVENT AND clk = '1' THEN q3 <= d; END IF; END PROCESS; -- Register with active-low clock & asynchronous clear PROCESS (clk, clr) BEGIN IF clr = '0' THEN q4 <= '0'; ELSIF clk'EVENT AND clk = '0' THEN q4 <= d; END IF; END PROCESS; -- Register with active-high clock & asynchronous Preset PROCESS (clk, pre) BEGIN IF pre = '1' THEN q5 <= '1'; ELSIF clk'EVENT AND clk = '1' THEN q5 <= d; END IF; END PROCESS; -- Register with active-high clock & asynchronous load PROCESS (clk, load, data) BEGIN IF load = '1' THEN q6 <= data; ELSIF clk'EVENT AND clk = '1' THEN q6 <= d; END IF; END PROCESS; -- Register with active-high clock & asynchronous clear & preset PROCESS (clk, clr, pre) BEGIN IF clr = '1' THEN q7 <= '0'; ELSIF pre = '1' THEN q7 <= '1'; ELSIF clk'EVENT AND clk = '1' THEN q7 <= d; END IF; END PROCESS; END maxpld;
In this example, all seven processes are sensitive only to changes on the control signals--that is,
clk
, clr
, pre
, and load
--and to changes on the data signal data
.
The first two Process Statements use Wait Statements to detect changes on the clk
signal. The
first process waits for a rising edge on the clk
signal (that is, until clk = '1'
) and assigns the value
d
to the signal q1
. The second process waits for a falling clk
edge and assigns the value d
to
q2
.
The rest of the Process Statements use an If Statement to give the asynchronous controls priority
over the clk
signal. This prioritization ensures that the asynchronous control signal is
implemented as an asynchronous control of the D flipflop, rather than as logic connected to the D
input of the flipflop.
The third and fourth Process Statements have sensitivity lists that detect changes in the clk
and
clr
control signals and give the clr
signal the higher priority. The circuit waits for an event on
clk
or clr
, then sets q3
and q4
to '0
' if clr
is '1
' or '0
'. Otherwise, clk'EVENT
and clk
are evaluated to determine whether clk
is rising or falling. When clk
rises, the value of d
is
assigned to q3
; when clk
falls, the value of d
is assigned to q4
.
The fifth Process Statement is sensitive to clk
and pre
. The circuit waits for an event on clk
or
pre
, then sets q5
to '1
' if pre
is '1
'. Otherwise, clk'EVENT
and clk
are evaluated to
determine whether clk
is rising. When clk
rises, the value of d
is assigned to q5
.
The sixth Process Statement is sensitive to clk
, load
, and data
. The circuit waits for an event
on any of these signals, then sets q6
to data
if load
is '1
'. Otherwise, clk'EVENT
and clk
are evaluated to determine whether clk
is rising. When clk
rises, the value of d
is assigned to
q6
.
The seventh Process Statement is sensitive to clk
, clr
, and pre
. The circuit waits for an event
on any of these signals, then sets q7
to '0
' if clr
is '1
' and to '1
' if pre
is '1
'. Otherwise,
clk'EVENT
and clk
are evaluated to determine whether clk
is rising. When clk
rises, the
value of d
is assigned to q7
.
For more information, see the following sections of the IEEE Std 1076-1993 IEEE Standard VHDL Language Reference Manual:
- PLDWorld - |
|
Created by chm2web html help conversion utility. |