1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
[\<- 1-hot encoding and State machines in Verilog](20.md)
---
# Multiple control inputs
## Defining and starting the vending machine example
### Adding control inputs
- So far, we've seen just one control input
- Next example is a vending machine
- Items cost 15 cents and the machine accepts both nickles (N) and dimes (D)
- Need to track (via states) how much money has been put in, and whether there is change
- Every state needs to account for all feasible input combinations
- Doesn't necessarily mean a full enumeration of all possible input encodings, but solution space should be complete
### An arc for every input combo
- Start with state A, representing no money
- Stay in A as long as no money inserted
- N goes to a state (B) representing 5 cents
- D goes to a state (C), for 10 cents
- Note that N\*D can't happen, not in diagram
- N really means N\*!D, D really means D\*!N
![diagram](21.1.png)
---
## Thinking thru the rest of the vending machine state diagram
### Now evaluate state B
- Adding possibilities from B results in adding state D, which enables output
- Note that state C represents 10 cents, whether we got there from a dime or two nickels
![diagram](21.2.png)
### Evaluating state C
- A dime inserted in state C introduces an interesting question: what to do?
- Decision here: give them 5 cents credit
- Needs a new state (E) to keep track of this
![diagram](21.3.png)
### Finishing Up
- Once a selection is enabled (i.e., the output is asserted), we can unconditionally transition to the next state
- State A from state D
- State B from state E, to give 5 cents credit
---
## State table and next state equations for 1-hot encoding
### Alternate notation
- Different state names, but same function
- Different view of the uncoditional transfers
![diagram](21.4.png)
### The state table
- Without assignments, for now
- As a reminder: S1=0 cents, S2=10 cents, S3=5 cents, S4=15 cents, S5=20 cents
- Fully encoded states would need 3 flops
- 5 states -> need 3 bits to get 5 unique states
- 1-hot encoding would need 5 flops
![diagram](21.5.png)
### Next state equations
- State table starts to get hard to manage
- Next state is the sum of the arcs leading to the state
- With 1-hot encoding, not too bad:
- `D1 = Q1*!D*!N + Q4`
- `D2 = Q1*D + Q2*!D*!N + Q3*N`
- `D3 = Q1*N + Q3*!D*!N + Q5`
- `D4 = Q2*N + Q3*D`
- `D5 = Q2*D`
- Getting more complex than this is where Verilog really helps
---
[Mealy machines ->](22.md)
|