Академический Документы
Профессиональный Документы
Культура Документы
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
Moore / Mealy
asynchronous synchronous
register outputs
Reset
synchronous asynchronous
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
Asynchronous Mealy
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
Combinational circuit F1 en F2
Icurrent
Ocurrent
Snext
Scurrent
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
Asynchronous Moore
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
Combinational
Icurrent
circuit F1'
Combinational
Snext
Scurrent
circuit F2'
Ocurrent
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
. . . . .
Moore
Mealy
State variable: r r = /a (r + b) c = /r
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
Synchronous Mealy
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
It
Combinational circuit F1 en F2
Ot
Register
St+1
St
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
Synchronous Moore
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
It
Register
St+1
St
Ot
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
Synchronous Mealy (some) inputs may change (some) outputs directly.
. . . . .
Synchronous Moore Inputs never changes outputs directly. Outputs can only change after an active edge of the clock.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
. . . . .
Datapath
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
Register Outputs /2
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
It
Register
Ot+1
Ot
Register
St+1
St
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
10
Register Outputs /3
Advantage
output faster
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
Disadvantage
(often) more
more registers needed hardware needed? (maybe technology dependent, especially for programmable logic)
11
. . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
12
. . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY moore1 IS PORT (clk : IN std_logic; reset : IN std_logic; a, b : IN std_logic; q, r : OUT std_logic); END moore1;
13
. -- next state . . CASE state IS WHEN idle => IF a='1' THEN state:=init; END IF; WHEN init => IF b='1' THEN state:=oper; END IF; WHEN oper => state:=idle; WHEN OTHERS => state := idle; END CASE; -- output CASE state IS ARCHITECTURE asyn_reset_sol1 OF moore1 IS WHEN idle => q<='1'; r<='1'; WHEN init => q<='1'; r<='0'; BEGIN WHEN oper => q<='0'; r<='1'; PROCESS(reset,clk) WHEN OTHERS => q<='-'; r<='-'; TYPE states IS (idle, init, oper); END CASE; VARIABLE state : states; END IF; BEGIN END PROCESS; IF reset='0' THEN END asyn_reset_sol1; state := idle; q<='1'; r<='1'; ELSIF clk'event and clk='1' THEN Questions:
How are the states coded? Is the WHEN OTHERS needed? How many registers are expected?
. .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
14
. . . . .
Is the enumeration order of the type states important ? A way to prevent deadlock is to extend the number of literals of the enumeration type to a power of two (binary coding is assumed). Most synthesis tool will prevent deadlock automatically. This way of coding results in register outputs.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
clk reset
A X CK CL D Q XQ
15
. . . . .
IV1N0 a
FD1B0
A1 A2 B C X
AOA4I0
b
A1 CK CL A X D Q XQ A2 X CK D PR Q XQ
ND2N0
FD1C0
CK D PR Q XQ
IV1N0
FD1B0 r
FD1C0
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
16
. . . . .
clk reset
A X CK CL D Q XQ A1 A2 B X CK D PR Q XQ
IV1N0 a
FD1B0
OAI1A0
FD1C0
A1 A2 B1 B2 X
IV1N0
AO2I0
A1 A2 X
ND2N0
CK CL A X D Q XQ
CK D PR
Q XQ
FD1C0
CK D PR Q XQ
IV1N0
FD1B0
FD1C0
One-hot encoding
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
TYPE states IS (idle, init, oper); SIGNAL state : states;
PROCESS(reset,clk) BEGIN IF reset='0' THEN state <= idle; ELSIF clk'event and clk='1' THEN -- next state CASE state IS WHEN idle => IF a='1' THEN state<=init; END IF; WHEN init => IF b='1' THEN state<=oper; END IF; WHEN oper => state <= idle; WHEN OTHERS => state <= idle; END CASE; END IF; END PROCESS;
17
. . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
18
. . . . .
A N2T0
CK CL D
Q XQ
reset clk
FD1B 0
A1 CK Q XQ A2 X
r q
A1 A2
CL D
ND2N0
ND2N0 b
A B S X
FD1B 0
M X 2L0
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
The
19
. . . . .
Example: output q and r and all states have different outputs. => type of states is std_logic_vector(1 DOWNTO 0); q r idle 1 1 init 1 0 oper 0 1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
1989-2012 E. Molenkamp, University of Twente, the Netherlands, Finite State Machines
20
10
. . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
A1
21
. . . . .
ND3N0
A1 A2 B1 B2 X
CK D PR
Q XQ
FD1C0
CK Q XQ
FD1C0
I V 1N0
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
22
11
. . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
signal STATE : STATES := REQ_WAIT; begin SET_OUTPUT: process begin ... case STATE is when REQ_WAIT => In this example two registers are used. State ACK_SET is coded with 11. Enum_encoding can be used for (sub)types.
23
. . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
24
12
. . . . .
Note: - synplify use(d) the attribute syn_enum_encoding - Quartus use(d) the attribute syn_encoding
In this example four registers are used. State ACK_SET is coded with 0100.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
25
. . . . .
The IEEE Std. 1076.6-2004 added FSM_STATE Can be used for (sub)types, signals and variables Can be used similar as enum_encoding. But also binary, gray, one_hot, one_cold and auto Attribute FSM_COMPLETE then no deadlock in FSM
26
13
. . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
A A1 A2 X A1 A2 A3 A4 A X X A1 A2 A3 X X
27
. . . . .
IV1N0
reset a
B C
AOA4I0
CK A1 A2 X D
Q XQ
ND4N0
NR3R0
IV1N0
FD1A0
CK D Q XQ
OR2T0 q
b clk
CK D EN Q XQ
CK A1 A2 X A X D EN
Q XQ
FD1A0
IV1N0
ND2N0
FD1H0
A X
FD1H0
IV1N0
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
28
14
Synchronous Mealy
Reset
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
idle ab / qr 11 / 10 01 / 01 init
-0 / 00
-0 / 00
-1 / 10
oper
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . -- / 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
29
. . . . .
30
15
. . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
b
A1 A2 X
31
. . . . .
ND2N0
A B S X
MX2L0 clk
CK CL D Q XQ A1 A2 X
CK CL D
Q XQ
FD1B0
A B S X
reset a
FD1B0
IV1N0
AN2T0
A1 A X A2 B C X
MX2T0 r
IV1N0
OAOI0
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
32
16
. . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
. . . . .
34
17
. . . . .
ND2N0
A B S X
MX2L0 clk
CK CL D Q XQ A1 A2 X
CK CL D
Q XQ
FD1B0
A B S X
reset a
FD1B0
IV1N0
AN2T0
A1 A X A2 B C X
MX2T0 r
IV1N0
OAOI0
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . .
35
18