推荐答案
测试一下
题目
设计一个自动饮料售卖机, 饮料 10分钱, 硬币有 5分和 10分两种, 并考虑找零: ( 1)
参考答案与知识点
参考答案
本题要求设计一个自动饮料售卖机,饮料10分钱,硬币面额5分和10分,需考虑找零。采用有限状态机(FSM)实现。定义三个状态:S0(余额0分)、S5(余额5分)、S10(余额10分,饮料已售出)。输入信号:coin_in(2位),表示投币类型:01=5分,10=10分,00=无投币。输出信号:dispense(出饮料)、change(找零5分)。复位后状态为S0。状态转移与输出:
- 当前状态S0:若输入5分,下一状态S5,输出dispense=0,change=0;若输入10分,下一状态S0,输出dispense=1,change=0(直接出饮料,不找零)。
- 当前状态S5:若输入5分,下一状态S0,输出dispense=1,change=0(累计10分);若输入10分,下一状态S0,输出dispense=1,change=1(累计15分,出饮料并找零5分)。
- 当前状态S10:实际上是一次性状态,出饮料后回到S0。但更合理的状态设计是S10仅作为临时状态,可在同一时钟周期内完成饮料输出并返回S0。或直接使用S0、S5两个状态,用组合逻辑处理S5收到10分时的找零。
典型实现采用三段式FSM(时序状态转移、组合次态逻辑、组合输出逻辑)。状态编码:S0=2'b00, S5=2'b01, S10=2'b10。输出逻辑:dispense = (state==S5 & coin==5分) | (state==S5 & coin==10分) | (state==S0 & coin==10分);change = (state==S5 & coin==10分)。注意:本题目未要求投币可累积多次,实际上每次投币后若余额满足则出饮料,找零后余额归零。易错点:忽略投入5分后再投10分需找零5分,或错误地在余额10分时再次投币。应确保每次投币后状态更新正确,且输出仅在一个周期有效。
涉及知识点
- 有限状态机(FSM)设计
- 三段式状态机写法
- 状态编码与状态图
- 组合逻辑与时序逻辑区别
- 找零逻辑的实现