diff options
author | lshprung <lshprung@yahoo.com> | 2020-11-13 09:04:07 -0800 |
---|---|---|
committer | lshprung <lshprung@yahoo.com> | 2020-11-13 09:04:07 -0800 |
commit | 6faa702d45de56ee6b17520b71af4f0946c23e60 (patch) | |
tree | 56ecfbef859b13551171bb9f568318e062259bc2 /21.md | |
parent | 457736ac0157559aadc6368140d90009e237af7e (diff) |
Post-class 11/13
Diffstat (limited to '21.md')
-rw-r--r-- | 21.md | 85 |
1 files changed, 85 insertions, 0 deletions
@@ -0,0 +1,85 @@ +[\<- 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 |