Rosetta Demostrator Project MASC, Adelaide University and
Download
Report
Transcript Rosetta Demostrator Project MASC, Adelaide University and
Digital Design:
An Embedded Systems
Approach Using Verilog
Chapter 4
Sequential Basics
Portions of this work are from the book, Digital Design: An Embedded
Systems Approach Using Verilog, by Peter J. Ashenden, published by Morgan
Kaufmann Publishers, Copyright 2007 Elsevier Inc. All rights reserved.
Verilog
Sequential Basics
Sequential circuits
Outputs depend on current inputs and
previous inputs
Store state: an abstraction of the history of
inputs
Usually governed by a periodic clock
signal
Digital Design — Chapter 4 — Sequential Basics
2
Verilog
D-Flipflops
1-bit storage element
We will treat it as a basic component
D
Q
clk
Other kinds of flipflops
SR (set/reset), JK, T (toggle)
Digital Design — Chapter 4 — Sequential Basics
3
Verilog
Registers
Store a multi-bit encoded value
One D-flipflop per bit
Stores a new value on
each clock cycle
d(0)
D
q(0)
Q
q(1)
clk
d(1)
wire [n:0] d;
reg [n:0] q;
...
Q
D
clk
d(n)
clk
nonblocking
asignment
Digital Design — Chapter 4 — Sequential Basics
D
…
…
always @(posedge clk)
q <= d;
…
event list
q(n)
Q
clk
n
D
Q
n
clk
4
Verilog
Pipelines Using Registers
Total delay = Delay1 + Delay2 + Delay3
Interval between outputs > Total delay
combinational
circuit 1
d_in
d_in
combinational
circuit 1
D
Q
clk
combinational
circuit 2
combinational
circuit 2
combinational
circuit 3
D
clk
Q
d_out
combinational
circuit 3
D
Q
d_out
clk
clk
Clock period = max(Delay1, Delay2, Delay3)
Total delay = 3 × clock period
Interval between outputs = 1 clock period
Digital Design — Chapter 4 — Sequential Basics
5
Verilog
Pipeline Example
Compute the average of corresponding
numbers in three input streams
New values arrive on each clock edge
module average_pipeline ( output reg signed [5:-8] avg,
input
signed [5:-8] a, b, c,
input
clk );
wire signed [5:-8] a_plus_b, sum, sum_div_3;
reg signed [5:-8] saved_a_plus_b, saved_c, saved_sum;
...
Digital Design — Chapter 4 — Sequential Basics
6
Verilog
Pipeline Example
...
assign a_plus_b = a + b;
always @(posedge clk) begin // Pipeline register 1
saved_a_plus_b <= a_plus_b;
saved_c
<= c;
end
assign sum = saved_a_plus_b + saved_c;
always @(posedge clk)
saved_sum <= sum;
// Pipeline register 2
assign sum_div_3 = saved_sum * 14'b00000001010101;
always @(posedge clk)
avg <= sum_div_3;
// Pipeline register 3
endmodule
Digital Design — Chapter 4 — Sequential Basics
7
Verilog
D-Flipflop with Enable
Storage controlled by a clock-enable
stores only when CE = 1 on a rising edge
of the clock
D
Q
CE
clk
CE is a synchronous control input
Digital Design — Chapter 4 — Sequential Basics
8
Verilog
Register with Enable
One flipflop per bit
clk and CE wired in common
wire [n:0] d;
wire
ce;
reg [n:0] q;
...
always @(posedge clk)
if (ce) q <= d;
Digital Design — Chapter 4 — Sequential Basics
9
Verilog
Register with Synchronous Reset
Reset input forces stored value to 0
reset input must be stable around rising
edge of clk
D
Q
CE
reset
clk
always @(posedge clk)
if
(reset) q <= 0;
else if (ce)
q <= d;
Digital Design — Chapter 4 — Sequential Basics
10
Verilog
Register with Asynchronous Reset
Reset input forces stored value to 0
reset can become 1 at any time, and effect
is immediate
reset should return to 0 synchronously
D
Q
CE
reset
clk
Digital Design — Chapter 4 — Sequential Basics
11
Verilog
Asynch Reset in Verilog
always @(posedge clk or posedge reset)
if
(reset) q <= 0;
else if (ce)
q <= d;
reset is an asynchronous control input here
include it in the event list so that the process
responds to changes immediately
Digital Design — Chapter 4 — Sequential Basics
12
Verilog
Example: Accumulator
Sum a sequence of signed numbers
A new number arrives when data_en = 1
Clear sum to 0 on synch reset
module accumulator
( output reg signed [7:-12] data_out,
input
signed [3:-12] data_in,
input
data_en, clk, reset );
wire signed [7:-12] new_sum;
assign new_sum = data_out + data_in;
always @(posedge clk)
if
(reset)
data_out <= 20'b0;
else if (data_en) data_out <= new_sum;
endmodule
Digital Design — Chapter 4 — Sequential Basics
13
Verilog
Flipflop and Register Variations
module flip_flop_n ( output reg Q,
output
Q_n,
input
pre_n, clr_n, D,
input
clk_n, CE );
pre
D
Q
CE
clk Q
clr
always @( negedge clk_n or
negedge pre_n or negedge clr_n ) begin
if ( !pre_n && !clr_n)
$display("Illegal inputs: pre_n and clr_n both 0");
if
(!pre_n) Q <= 1'b1;
else if (!clr_n) Q <= 1'b0;
else if (CE)
Q <= D;
end
assign Q_n = ~Q;
endmodule
Digital Design — Chapter 4 — Sequential Basics
14
Verilog
Shift Registers
Performs shift operation on stored data
Arithmetic scaling
Serial transfer
of data
D_in
D
Q
load_en
CE
clk
Digital Design — Chapter 4 — Sequential Basics
15
Verilog
Example: Sequential Multiplier
16×16 multiply over 16 clock cycles, using
one adder
y(15...0)
y_load_en
y_ce
Shift register for multiplier bits
Shift register for lsb’s of accumulated product
16-bit
shift reg
D_in
D
Q
load_en
CE
clk
0
16-bit
adder
x
c16
y
16-bit reg
x(15...0)
x_ce
D
CE
clk
P_reset
P_ce
clk
c0
s
16
15...0
17-bit reg
31...16
D
15
Q
P(31...15)
reset
CE
clk
Q
15-bit
shift reg
D_in Q
P(14...0)
CE
clk
Digital Design — Chapter 4 — Sequential Basics
16
Verilog
Latches
Level-sensitive storage
Data transmitted while enable is '1'
transparent latch
Data stored while enable is '0'
D
Q
LE
Digital Design — Chapter 4 — Sequential Basics
17
Verilog
Feedback Latches
Feedback in gate circuits produces
latching behavior
Example: reset/set (RS) latch
+V
R
S
Q
Q
R
S
Q
Current RTL synthesis tools don’t accept
Verilog models with unclocked feedback
Digital Design — Chapter 4 — Sequential Basics
18
Verilog
Latches in Verilog
Latching behavior is usually an error!
always @*
if (~sel) begin
z1 <= a1; z2 <= b1;
end
else begin
z1 <= a2; z3 <= b2;
end
Oops!
Should be
z2 <= ...
Values must be stored
for z2 while sel = 1
for z3 while sel = 0
Digital Design — Chapter 4 — Sequential Basics
19
Verilog
Counters
Stores an unsigned integer value
Used to count occurrences of
increments or decrements the value
events
repetitions of a processing step
Used as timers
count elapsed time intervals by
incrementing periodically
Digital Design — Chapter 4 — Sequential Basics
20
Verilog
Free-Running Counter
+1
clk
Q
Q
clk
Increments every rising edge of clk
D
up to 2n–1, then wraps back to 0
i.e., counts modulo 2n
This counter is synchronous
all outputs governed by clock edge
Digital Design — Chapter 4 — Sequential Basics
21
Verilog
Example: Periodic Control Signal
Count modulo 16 clock cycles
Control output = 1 every 8th and 12th cycle
decode count values 0111 and 1011
0
D
Q
0
clk
1
D
+1
2
Q
1
clk
D
ctrl
Q
2
clk
3
clk
D
Q
3
clk
Digital Design — Chapter 4 — Sequential Basics
22
Verilog
Example: Periodic Control Signal
module decoded_counter ( output ctrl,
input clk );
reg [3:0] count_value;
always @(posedge clk)
count_value <= count_value + 1;
assign ctrl = count_value == 4'b0111 ||
count_value == 4'b1011;
endmodule
Digital Design — Chapter 4 — Sequential Basics
23
Verilog
Count Enable and Reset
Use a register with control inputs
+1
D
CE
reset
clk
Q
Q
CE
reset
clk
Increments when CE = 1 on rising clock
edge
Reset: synch or asynch
Digital Design — Chapter 4 — Sequential Basics
24
Verilog
Terminal Count
Status signal indicating final count value
counter
…
…
…
Q0
Q1
TC
clk Qn
TC is 1 for one cycle in every 2n cycles
frequency = clock frequency / 2n
Called a clock divider
Digital Design — Chapter 4 — Sequential Basics
25
Verilog
Divider Example
Alarm clock beep: 500Hz from 1MHz clock
10-bit
counter
Q
clk
clk
TC
count
tone2
D
Q
tone
CE
clk
Digital Design — Chapter 4 — Sequential Basics
26
Verilog
Divide by k
Decode k–1 as terminal count and reset
counter register
Counter increments modulo k
Example: decade counter
Terminal count = 9
counter
clk
clk
Q0
Q1
Q2
reset Q3
Q0
Q1
Q2
Q3
Digital Design — Chapter 4 — Sequential Basics
27
Verilog
Decade Counter in Verilog
module decade_counter ( output reg [3:0] q,
input
clk );
always @(posedge clk)
q <= q == 9 ? 0 : q + 1;
endmodule
Digital Design — Chapter 4 — Sequential Basics
28
Verilog
Down Counter with Load
Load a starting value, then decrement
Terminal count = 0
Useful for interval timer
–1
0
1
D
load
clk
D
Q
Q
clk
=0?
TC
Digital Design — Chapter 4 — Sequential Basics
29
Verilog
Loadable Counter in Verilog
module interval_timer_rtl ( output
tc,
input [9:0] data,
input
load, clk );
reg [9:0] count_value;
always @(posedge clk)
if (load) count_value <= data;
else
count_value <= count_value - 1;
assign tc = count_value == 0;
endmodule
Digital Design — Chapter 4 — Sequential Basics
30
Verilog
Reloading Counter in Verilog
module interval_timer_repetitive ( output
tc,
input [9:0] data,
input
load, clk );
reg [9:0] load_value, count_value;
always @(posedge clk)
if (load) begin
load_value <= data;
count_value <= data;
end
else if (count_value == 0)
count_value <= load_value;
else
count_value <= count_value - 1;
assign tc = count_value == 0;
endmodule
Digital Design — Chapter 4 — Sequential Basics
31
Verilog
Ripple Counter
Each bit toggles between 0 and 1
when previous bit changes from 1 to 0
Digital Design — Chapter 4 — Sequential Basics
32
Verilog
Ripple or Synch Counter?
Ripple counter is ok if
length is short
clock period long relative to flipflop delay
transient wrong values can be tolerated
area must be minimal
E.g., alarm clock
Otherwise use a synchronous counter
Digital Design — Chapter 4 — Sequential Basics
33
Verilog
Datapaths and Control
Digital systems perform sequences of
operations on encoded data
Datapath
Combinational circuits for operations
Registers for storing intermediate results
Control section: control sequencing
Generates control signals
Selecting operations to perform
Enabling registers at the right times
Uses status signals from datapath
Digital Design — Chapter 4 — Sequential Basics
34
Verilog
Example: Complex Multiplier
Cartesian form, fixed-point
operands: 4 pre-, 12 post-binary-point bits
result: 8 pre-, 24 post-binary-point bits
Subject to tight area constraints
a ar jai
b br jbi
p ab pr jpi (ar br aibi ) j(ar bi aibr )
4 multiplies, 1 add, 1 subtract
Perform sequentially using 1 multiplier, 1
adder/subtracter
Digital Design — Chapter 4 — Sequential Basics
35
Verilog
Complex Multiplier Datapath
a_r
0
D
a_i
a_sel
1
CE
b_r
b_i
b_sel
pp1_ce
pp2_ce
0
×
1
Q
Q
p_r
Q
p_i
CE
clk
D
D
±
Q
CE
clk
clk
D
CE
clk
sub
p_r_ce
p_i_ce
clk
Digital Design — Chapter 4 — Sequential Basics
36
Verilog
Complex Multiplier in Verilog
module multiplier
( output reg signed [7:-24] p_r, p_i,
input
signed [3:-12] a_r, a_i, b_r, b_i,
input
clk, reset, input_rdy );
reg a_sel, b_sel, pp1_ce, pp2_ce, sub, p_r_ce, p_i_ce;
wire signed [3:-12] a_operand, b_operand;
wire signed [7:-24] pp, sum
reg signed [7:-24] pp1, pp2;
...
Digital Design — Chapter 4 — Sequential Basics
37
Verilog
Complex Multiplier in Verilog
assign a_operand = ~a_sel ? a_r : a_i;
assign b_operand = ~b_sel ? b_r : b_i;
assign pp = {{4{a_operand[3]}}, a_operand, 12'b0} *
{{4{b_operand[3]}}, b_operand, 12'b0};
always @(posedge clk) // Partial product 1 register
if (pp1_ce) pp1 <= pp;
always @(posedge clk) // Partial product 2 register
if (pp2_ce) pp2 <= pp;
assign sum = ~sub ? pp1 + pp2 : pp1 - pp2;
always @(posedge clk) // Product real-part register
if (p_r_ce) p_r <= sum;
always @(posedge clk) // Product imaginary-part register
if (p_i_ce) p_i <= sum;
...
endmodule
Digital Design — Chapter 4 — Sequential Basics
38
Verilog
Multiplier Control Sequence
Avoid resource conflict
First attempt
1.
2.
3.
4.
5.
6.
a_r * b_r → pp1_reg
a_i * b_i → pp2_reg
pp1 – pp2 → p_r_reg
a_r * b_i → pp1_reg
a_i * b_r → pp2_reg
pp1 + pp2 → p_i_reg
Takes 6 clock cycles
Digital Design — Chapter 4 — Sequential Basics
39
Verilog
Multiplier Control Sequence
Merge steps where no resource conflict
Revised attempt
1. a_r * b_r → pp1_reg
2. a_i * b_i → pp2_reg
3. pp1 – pp2 → p_r_reg
a_r * b_i → pp1_reg
4. a_i * b_r → pp2_reg
5. pp1 + pp2 → p_i_reg
Takes 5 clock cycles
Digital Design — Chapter 4 — Sequential Basics
40
Verilog
Multiplier Control Signals
Step
a_sel
b_sel
pp1_ce pp2_ce
sub
p_r_ce
p_i_ce
1
0
0
1
0
–
0
0
2
1
1
0
1
–
0
0
3
0
1
1
0
1
1
0
4
1
0
0
1
–
0
0
5
–
–
0
0
0
0
1
Digital Design — Chapter 4 — Sequential Basics
41
Verilog
Finite-State Machines
Used the implement control sequencing
Based on mathematical automaton theory
A FSM is defined by
set of inputs: Σ
set of outputs: Γ
set of states: S
initial state: s0 S
transition function: δ: S × Σ → S
output function: ω: S × Σ → Γ or ω: S → Γ
Digital Design — Chapter 4 — Sequential Basics
42
Verilog
FSM in Hardware
Mealy FSM
only
Mealy FSM: ω: S × Σ → Γ
Moore FSM: ω: S → Γ
Digital Design — Chapter 4 — Sequential Basics
43
Verilog
FSM Example: Multiplier Control
One state per step
Separate idle state?
Use step 1 as idle state
Wait for input_rdy = 1
Then proceed to steps 1, 2, ...
But this wastes a cycle!
Repeat step 1 if input_rdy ≠ 1
Proceed to step 2 otherwise
Output function
Defined by table on slide 43
Moore or Mealy?
Transition function
current_
state
input_
rdy
next_
state
step1
0
step1
step1
1
step2
step2
–
step3
step3
–
step4
step4
–
step5
step5
–
step1
Digital Design — Chapter 4 — Sequential Basics
44
Verilog
State Encoding
Encoded in binary
Encoded value used in circuits for transition
and output function
encoding affects circuit complexity
Optimal encoding is hard to find
N states: use at least log2N bits
CAD tools can do this well
One-hot works well in FPGAs
Often use 000...0 for idle state
reset state register to idle
Digital Design — Chapter 4 — Sequential Basics
45
Verilog
FSMs in Verilog
Use parameters for state values
Synthesis tool can choose an alternative
encoding
parameter [2:0] step1 = 3'b000, step2 = 3'b001,
step3 = 3'b010, step4 = 3'b011,
step5 = 3'b100;
reg [2:0] current_state, next_state ;
...
Digital Design — Chapter 4 — Sequential Basics
46
Verilog
Multiplier Control in Verilog
always @(posedge clk or posedge reset) // State register
if (reset) current_state <= step1;
else
current_state <= next_state;
always @* // Next-state logic
case (current_state)
step1: if (!input_rdy) next_state
else
next_state
step2:
next_state
step3:
next_state
step4:
next_state
step5:
next_state
endcase
=
=
=
=
=
=
step1;
step2;
step3;
step4;
step5;
step1;
Digital Design — Chapter 4 — Sequential Basics
47
Verilog
Multiplier Control in Verilog
always @* begin // Output_logic
a_sel = 1'b0; b_sel = 1'b0; pp1_ce = 1'b0; pp2_ce = 1'b0;
sub = 1'b0;
p_r_ce = 1'b0; p_i_ce = 1'b0;
case (current_state)
step1: begin
pp1_ce = 1'b1;
end
step2: begin
a_sel = 1'b1; b_sel = 1'b1; pp2_ce = 1'b1;
end
step3: begin
b_sel = 1'b1; pp1_ce = 1'b1;
sub = 1'b1;
p_r_ce = 1'b1;
end
step4: begin
a_sel = 1'b1; pp2_ce = 1'b1;
end
step5: begin
p_i_ce = 1'b1;
end
endcase
end
Digital Design — Chapter 4 — Sequential Basics
48
Verilog
State Transition Diagrams
Bubbles to represent states
Arcs to represent transitions
0, 0
Example
0, 1
S = {s1, s2, s3}
Inputs (a1, a2):
Σ = {(0,0), (0,1), (1,0), (1,1)}
δ defined by diagram
1, 0
s1
s2
1, 1
0, 0
s3
0, 1
1, 1
1, 0
Digital Design — Chapter 4 — Sequential Basics
49
Verilog
State Transition Diagrams
Annotate diagram to
define output
function
Annotate states for
Moore-style outputs
Annotate arcs for
Mealy-style outputs
Example
0, 1 / 0, 1, 1
0, 0 / 0, 0, 0
1, 0 / 1, 0, 0
s1
s2
1, 0
0, 0
1, 1 / 1, 1, 1
/ 0, 1, 1
0, 0 / 0, 0, 0
x1, x2: Moore-style
y1, y2, y3: Mealy-style
s3
0, 1 / 0, 1, 1
0, 1
1, 1 / 1, 1, 1
Digital Design — Chapter 4 — Sequential Basics
1, 0 / 1, 0, 0
50
Verilog
Multiplier Control Diagram
Input: input_rdy
Outputs
a_sel, b_sel, pp1_ce, pp2_ce, sub, p_r_ce, p_i_ce
0
step1
1
0, 0, 1, 0, –, 0, 0
step5
1, 1, 0, 1, –, 0, 0
step4
–, –, 0, 0, 0, 0, 1
step2
1, 0, 0, 1, –, 0, 0
step3
0, 1, 1, 0, 1, 1, 0
Digital Design — Chapter 4 — Sequential Basics
51
Verilog
Bubble Diagrams or Verilog?
Many CAD tools provide editors for
bubble diagrams
Diagrams are visually appealing
Automatically generate Verilog for
simulation and synthesis
but can become unwieldy for complex
FSMs
Your choice...
or your manager's!
Digital Design — Chapter 4 — Sequential Basics
52
Verilog
Register Transfer Level
RTL — a level of abstraction
data stored in registers
transferred via circuits that operate on data
outputs
inputs
control section
Digital Design — Chapter 4 — Sequential Basics
53
Verilog
Clocked Synchronous Timing
Registers driven by a common clock
tco
Q1
Combinational circuits operate during clock
cycles (between rising clock edges)
tpd
D2
tsu
tco + tpd + tsu < tc
Digital Design — Chapter 4 — Sequential Basics
54
Verilog
Control Path Timing
tco
tsu
tpd-s
tco + tpd-s + tpd-o + tpd-c + tsu < tc
tpd-c
tco + tpd-s + tpd-ns + tsu < tc
tpd-o
tpd-ns
tsu
Ignore tpd-s for a Moore FSM
Digital Design — Chapter 4 — Sequential Basics
55
Verilog
Timing Constraints
Inequalities must hold for all paths
If tco and tsu the same for all paths
Critical path
Combinational delays make the difference
The combinational path between registers with
the longest delay
Determines minimum clock period for the entire
system
Focus on it to improve performance
Reducing delay may make another path critical
Digital Design — Chapter 4 — Sequential Basics
56
Verilog
Interpretation of Constraints
1. Clock period depends on delays
System can operate at any frequency up
to a maximum
OK for systems where high performance
is not the main requirement
2. Delays must fit within a target clock
period
Optimize critical paths to reduce delays if
necessary
May require revising RTL organization
Digital Design — Chapter 4 — Sequential Basics
57
Verilog
Clock Skew
Q1
D2
Need to ensure clock edges arrive at all
registers at the same time
Use CAD tools to insert clock buffers and
route clock signal paths
Digital Design — Chapter 4 — Sequential Basics
58
Verilog
Off-Chip Connections
Delays going off-chip and inter-chip
Input and output pad delays, wire delays
Same timing rules apply
Use input and output registers to avoid
adding external delay to critical path
Digital Design — Chapter 4 — Sequential Basics
59
Verilog
Asynchronous Inputs
External inputs can change at any time
Might violate setup/hold time constraints
Can induce metastable state in a flipflop
0
1
0
Unbounded time to recover
May violate setup/hold time
of subsequent flipflop
1
k 2t
e
MTBF
k1 f f f 2
Digital Design — Chapter 4 — Sequential Basics
k 2 0
60
Verilog
Synchronizers
If input changes outside setup/hold window
If input changes during setup/hold window
Change is simply delayed by one cycle
First flipflop has a whole cycle to resolve
metastability
See data sheets for metastability parameters
Digital Design — Chapter 4 — Sequential Basics
61
Verilog
Switch Inputs and Debouncing
Switches and push-buttons suffer from
contact bounce
Takes up to 10ms to settle
Need to debounce to avoid false triggering
+V
R
S
Q
Requires two inputs
and two resistors
Must use a breakbefore-make doublethrow switch
Digital Design — Chapter 4 — Sequential Basics
62
Verilog
Switch Inputs and Debouncing
Alternative
Use a single-throw switch
Sample input at intervals longer than bounce time
Look for two successive samples with the same
value
Assumption
Extra circuitry inside the chip
is cheaper than extra
components and connections
outside
Digital Design — Chapter 4 — Sequential Basics
63
Verilog
Debouncing in Verilog
module debouncer ( output reg pb_debounced,
input pb,
input clk, reset );
reg [18:0] count500000; // values are in the range 0 to 499999
wire
clk_100Hz;
reg
pb_sampled;
always @(posedge clk or posedge reset)
if
(reset)
count500000 <= 499999;
else if (clk_100Hz) count500000 <= 499999;
else
count500000 <= count500000 - 1;
assign clk_100Hz = count500000 == 0;
always @(posedge clk)
if (clk_100Hz) begin
if (pb == pb_sampled) pb_debounced <= pb;
pb_sampled <= pb;
end
endmodule
Digital Design — Chapter 4 — Sequential Basics
64
Verilog
Verifying Sequential Circuits
Verification Testbench
Design Under
Verification
(DUV)
Apply
Test Cases
Checker
DUV may take multiple and varying number
of cycles to produce output
Checker needs to
synchronize with test generator
ensure DUV outputs occur when expected
ensure DUV outputs are correct
ensure no spurious outputs occur
Digital Design — Chapter 4 — Sequential Basics
65
Verilog
Example: Multiplier Testbench
`timescale 1ns/1ns
module multiplier_testbench;
parameter t_c = 50;
reg
reg
wire signed [3:-12]
wire signed [7:-24]
clk, reset;
input_rdy;
a_r, a_i, b_r, b_i;
p_r, p_i;
real real_a_r, real_a_i, real_b_r, real_b_i,
real_p_r, real_p_i, err_p_r, err_p_i;
task apply_test ( input real a_r_test, a_i_test,
b_r_test, b_i_test );
begin
real_a_r = a_r_test; real_a_i = a_i_test;
real_b_r = b_r_test; real_b_i = b_i_test;
input_rdy = 1'b1;
@(negedge clk) input_rdy = 1'b0;
repeat (5) @(negedge clk);
end
endtask
Digital Design — Chapter 4 — Sequential Basics
66
Verilog
Example: Multiplier Testbench
multiplier duv ( .clk(clk), .reset(reset),
.input_rdy(input_rdy),
.a_r(a_r), .a_i(a_i),
.b_r(b_r), .b_i(b_i),
.p_r(p_r), .p_i(p_i) );
always begin // Clock generator
#(t_c/2) clk = 1'b1;
#(t_c/2) clk = 1'b0;
end
initial begin // Reset generator
reset <= 1'b1;
#(2*t_c) reset = 1'b0;
end
Digital Design — Chapter 4 — Sequential Basics
67
Verilog
Example: Multiplier Testbench
initial begin // Apply test cases
@(negedge reset)
@(negedge clk)
apply_test(0.0, 0.0, 1.0, 2.0);
apply_test(1.0, 1.0, 1.0, 1.0);
// further test cases ...
$finish;
end
assign
assign
assign
assign
a_r
a_i
b_r
b_i
=
=
=
=
$rtoi(real_a_r
$rtoi(real_a_i
$rtoi(real_b_r
$rtoi(real_b_i
*
*
*
*
2**12);
2**12);
2**12);
2**12);
Digital Design — Chapter 4 — Sequential Basics
68
Verilog
Example: Multiplier Testbench
always @(posedge clk) // Check outputs
if (input_rdy) begin
real_p_r = real_a_r * real_b_r - real_a_i * real_b_i;
real_p_i = real_a_r * real_b_i + real_a_i * real_b_r;
repeat (5) @(negedge clk);
err_p_r = $itor(p_r)/2**(-24) - real_p_r;
err_p_i = $itor(p_i)/2**(-24) - real_p_i;
if (!( -(2.0**(-12)) < err_p_r && err_p_r < 2.0**(-12) &&
-(2.0**(-12)) < err_p_i && err_p_i < 2.0**(-12) ))
$display("Result precision requirement not met");
end
endmodule
Digital Design — Chapter 4 — Sequential Basics
69
Verilog
Asynchronous Timing
Clocked synchronous timing requires
Hard to achieve in complex multi-GHz systems
Globally asynch, local synch (GALS) systems
global clock distribution with minimal skew
path delay between registers < clock period
Divide the systems into local clock domains
Inter-domain signals treated as asynch inputs
Simplifies clock managements and constraints
Delays inter-domain communication
Delay-insensitive asynchronous systems
no clock signals
Digital Design — Chapter 4 — Sequential Basics
70
Verilog
Other Clock-Related Issues
Inter-chip clocking
In multi-PCB systems
Distributing high-speed clocks on PCBs is hard
Often use slower off-chip clock, with on-chip clock
a multiple of off-chip clock
Synchronize on-chip with phase-locked loop (PLL)
treat off-PCB signals as asynch inputs
Low power design
Continuous clocking wastes power
Clock gating: turn off clock to idle subsystems
Digital Design — Chapter 4 — Sequential Basics
71
Verilog
Summary
Registers for storing data
Latches: level-sensitive
synchronous and asynchronous control
clock enable, reset, preset
usually unintentional in Verilog
Counters
free-running dividers, terminal count,
reset, load, up/down
Digital Design — Chapter 4 — Sequential Basics
72
Verilog
Summary
RTL organization of digital systems
Finite-State Machine (FSM)
states, inputs, transition/output functions
Moore and Mealy FSMs
bubble diagrams
Clocked synch timing and constraints
datapath and control section
critical path and optimization
Asynch inputs, switch debouncing
Verification of sequential systems
Digital Design — Chapter 4 — Sequential Basics
73