|
|
A register is implemented implicitly with a Register Inference. Register Inferences in
Quartus® II Verilog HDL can create clocked registers with any combination of clear,
preset, load, and synchronous clock enable signals. The Compiler
creates registers for the register (or "reg") variables in all non-blocking and some blocking
Procedural Assignments of any Always Construct that is sensitive to a rising or falling
edge (i.e. posedge or negedge) of a clock. The sensitivity of the Always Construct is
defined in the Event Control, which must be listed after the always keyword in the
Always Construct.
|
During logic synthesis, the Compiler automatically inserts an instance of the flipflop and connects it as specified in the Procedural Assignment.
You can also implement registers explicitly with Module Instantiations. However, unlike Module Instantiations, Register Inferences are architecture-independent. For more information on Module Instantiations, see Creating Hierarchical Projects.
The example below shows seven processes to infer registers that are controlled by asynchronous clear, preset, and load signals.
module reginf (d, clk, clr, pre, load, data,
q1, q2, q3, q4, q5, q6, q7);
input d, clk, clr, pre, load, data;
output q1, q2, q3, q4, q5, q6, q7;
reg q1, q2, q3, q4, q5, q6, q7;
// Register with active-high clock
always @ (posedge clk)
q1 <= d;
// Register with active-low clock
always @ (negedge clk)
q2 <= d;
// Register with active-high clock & asynchronous clear
always @ (posedge clk or posedge clr) begin
if (clr)
q3 <= 0;
else
q3 <= d;
end
// Register with active-low clock & asynchronous clear
always @ (negedge clk or negedge clr) begin
if (!clr)
q4 <= 0;
else
q4 <= d;
end
// Register with active-high clock & asynchronous preset
always @ (posedge clk or posedge pre) begin
if (pre)
q5 <= 1;
else
q5 <= d;
end
// Register with active-high clock & asynchronous load
always @(posedge clk or posedge load) begin
if (load)
q6 <= data;
else
q6 <= d;
end
// Register with active-high clock & asynchronous clear &
preset
always @ (posedge clk or posedge clr or posedge pre) begin
if (clr)
q7 <= 0;
else if (pre)
q7 <= 1;
else
q7 <= d;
end
endmodule
In the example above, all seven processes are sensitive only to changes on the control
signals--i.e., clk, clr, pre, and load.
As defined in the Event Control, the first two Always Constructs detect changes on the
clk signal only. Because clk is not used in the rest of the Always Construct, it is used
as the clock for the register the Compiler creates. The first process waits for a rising clk edge (i.e., posedge
clk) and assigns the value d to the signal q1. The second process waits for a falling clk
edge (i.e., negedge clk) and assigns the value d to q2.
The remaining five Always Constructs detect changes on the clk signal and on one or
more asynchronous control signals. These Always Constructs also use Conditional ("If-Else")
Statements 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 Always Constructs 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, respectively. Otherwise, the circuit sets
either q3 or q4 to the value d, depending on whether a posedge clk activated the third
Always Construct, or a negedge clk activated the fourth Always Construct.
The fifth Always Construct 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, the circuit sets q5 to d.
The sixth Always Construct is sensitive to clk or load. The circuit waits for an event on
either of these signals, then sets q6 to data if load is 1. Otherwise, the circuit sets q6 to
d.
The seventh Always Construct 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 or to 1 if pre is 1. Otherwise,
the circuit sets q7 to d.
For more information, see the following sections of the IEEE Std 1364-1995 IEEE Hardware Description Language Based on the Verilog Hardware Description Language manual:
|
- PLDWorld - |
|
|
| Created by chm2web html help conversion utility. |