You are on page 1of 4

) *

!
) * #
! ! , * -
" # $%# ! &
, .
' !
, * / *0
" # $% ( )
" # $% * ) 1, . " *
) + *
2, # *

" #$ ( , * -

3 * 4 - *
% current next current
0
% 3 # # reset state input state output
% # # 0
A/0 B/0 1 A 0
1 0 A 0 A 0
0 A 1 B 0
reset
0 0 1 0 B 0 A 0
0 B 1 C 0
0 C 0 A 0
1 0 C 1 D 0
D/1 C/0 0 D 0 A 1
0 D 1 D 1
1

, . 5 , * 1, . " *
* ! .
78 78 9'8
'! - ! *
0 0 0 0 0 0 0 0 0 0 1 0
0 current next current
reset state input state output 0 1 1 1 1 0 1 1 0 0 1 0
0
A/0 B/0 1 00 0
1 0 00 0 00 0
0 00 1 01 0 MSB+ = LIn + MIn LSB+ = L'In + MIn Out+ = ML
reset
0 0 1 0 01 0 00 0
0 01 1 10 0
0 10 0 00 0 Notation
1 0 10 1 11 0 M := MSB
D/1 C/0 0 11 0 00 1 L := LSB
0 11 1 11 1 In := Input
1

2 6
2, # * 3 * " # $% *
MSB+ = LIn + MIn ; *2
AND2
* &
In
MSB 43
OR2 DFF # !#
PRN MSB
AND2
D Q * *
47
In
LSB 48
CLRN
41
AND2 ;
Reset Out
53
AND2
In
MSB 52
OR2 DFF Out+ = ML <
+ *
PRN # ;
D Q
AND2
44 LSB )
NOT In 3
LSB 51
CLRN
45
42
LSB+ = L'In + MIn Clock
Reset

&

, * -, ! - -
# (
Reset present inputs next present
& state D N state output
& 0 0 0 0 0
& S0 0 1 5 0
& N D 1 0 10 0
1 1
5 0 0 5 0
S1 S2
3 * N D
0 1 10 0
D N 1 0 15 0
%
S4 S5 S6
1 1
# $< 3 S3 [open] [open] [open] 10 0 0 10 0
# $# N D 0 1 15 0
1 0 15 0
S7 S8
[open] [open] 1 1
15 15 1

, . , *
; # -
< # ( ! present state inputs next state present
; Q0 Q1 D N P1 P0 output
1 $ 0 0 0 0 0 0 0
# - 0 1 0 1 0
& > 1- " 1 0 1 0 0
1 1
< & # 0 1 0 0 0 1 0
* 0 1 1 0 0
2> 3 1 0 1 1 0
% 3 # #
1 1
< 1 0 0 0 1 0 0
0 1 1 1 0
3 > 1 0 1 1 0
1 1
< 83 1 1 1 1 1
2>
?# @
1, . * 2, # *

K-map for P1 K-map for P0 K-map for Open


Q1Q0 Q1 Q1Q0 Q1 Q1Q0 Q1
DN 00 01 11 10 DN 00 01 11 10 DN 00 01 11 10
00 0 0 1 1 00 0 1 1 0 00 0 0 1 0
01 0 1 1 1 01 1 0 1 1 01 0 0 1 0
N N N
11 X X X X 11 X X X X 11 X X X X
D D D
10 1 1 1 1 10 0 1 1 1 10 0 0 1 0
Q0 Q0 Q0

P1 = Q1 + D + Q0N if FFs do not have a reset pin then


A BC 83 8C <
P0 = Q0'N + Q0N' + Q1N + Q1D P1 = reset'(Q1 + D + Q0N)
A BC D
< 8 C <D8 C < 8 C 3
OPEN = Q1Q0 P0 = reset'(Q0'N + Q0N' + Q1N + Q1D)
A < BC C

; * ! *
A < ! -!%<3 * C C
!-! * !
# * /
%<3 * 0 !
A < BC C B/
C 838C <0
/C D
<8C <D
8C <8C 30 Reset Reset

* 3 * ; 3 * 0 N'D' 0 N'D'/0
[0]
N N/0
D 5 N'D' D/0 5 N'D'/0
[0]
N N/0

D 10 N'D' D/1 10 N'D'/0


[0]
N+D N+D/1
15 15 /1
[1]

2 6

E 3 # * *
( * " #$ *-!
)# # ; ! * #
# & * *
! ,!
!
)
/
)) # - *0
.
- /! ( F 0 ?@ G
.
3 # B # /,
*,% 9 ?@

# 08 * G G
G* # ?@

* ?@
G

?@

:
+ *) ; " # + *) / 40
always @(in or state)

case (state) *
`define zero 0 `zero:
// last input was a zero #
`define one1 1 *
`define two1s 2 begin
if (in) next_state = `one1;
module reduce (clk, reset, in, out); else next_state = `zero;
input clk, reset, in; end
output out; . `one1: #
reg out; // we've seen one 1 # !
?@ begin
reg [2:1] state; // state variables
reg [2:1] next_state; if (in) next_state = `two1s;
else next_state = `zero;
always @(posedge clk) end
if (reset) state = `zero; `two1s: always @(state)
else state = next_state; ?@ // we've seen at least 2 ones case (state)
begin `zero: out = 0;
if (in) next_state = `two1s; `one1: out = 0;
else next_state = `zero; `two1s: out = 1;
end endcase
?@ endcase
endmodule

!+ *) ! !
module reduce (clk, reset, in, out);
module reduce (clk, reset, in, out);
input clk, reset, in;
output out;
input clk, reset, in;
reg out; output out;
reg state; // state variables reg out;
reg next_state; reg state; // state variables

always @(posedge clk) always @(posedge clk)


if (reset) state = `zero; if (reset) state = `zero;
else state = next_state; else
case (state)
always @(in or state) `zero: // last input was a zero
case (state) begin
`zero: // last input was a zero out = 0;
begin if (in) state = `one;
out = 0;
else state = `zero;
if (in) next_state = `one;
end
else next_state = `zero;
end
`one: // we've seen one 1
`one: // we've seen one 1 if (in) begin
if (in) begin state = `one; out = 1;
next_state = `one; out = 1; end else begin
end else begin state = `zero; out = 0;
next_state = `zero; out = 0; end
end endcase
endcase endmodule
endmodule

You might also like