summaryrefslogtreecommitdiff
path: root/21.md
blob: 078f449e1ef719e10112b9807278fbbbe451611f (plain)
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)