The functional requirements of the state machine are given below, where “a” means that a is true (in VHDL: equal to ’1’) and “!a” means that a is false (in VHDL: not equal to ’1’): Functional requirements:
1. The inputs are: a, b, j, k, m, and n.
2. The outputs are: y and z.
3. The initial state is S0.
4. If (the current state is S0) and a, then in the current clock cycle assign j to y.
5. If (the current state is S0) and !a, then in the current clock cycle assign k to y.
6. If (the current state is S0) and b, then in the next clock cycle assign m to z.
7. If (the current state is S0) and !b, then in the next clock cycle assign n to z.
8. If (the current state is S0) and b, then the next state shall be S1.
9. If (the current state is S0) and !b, then the next state shall be S2.
10. If the current state is S1, then the next state shall be S2.
11. If the current state is S2, then the next state shall be S0.
1. You may choose y and z to be either registered or combinational. Both may be combinational, both registered, or one combinational and one registered. One of the optimization goals below is to minimize the number of registers.
2. Your design shall satisfy the functional requirements
3. Your goals, in order of decreasing importance are
(a) minimum number of clocked (i.e., real) states
(b) minimum number of edges
(c) minimum number of transient states
(d) minimum number of registers