推荐答案
测试一下
题目
设计一个饮料售卖机,饮料1块钱,硬币有5角,1元两种,并考虑找零。
参考答案与知识点
参考答案
设计一个饮料售卖机,硬币有5角和1元两种,饮料售价1元,需考虑找零。采用有限状态机(FSM)实现,定义两个状态:S0(当前余额0元)、S1(当前余额0.5元)。输入为投币信号:coin_5(5角)、coin_1(1元),每次只投一枚硬币。输出包括:drink(出饮料)、change(找零5角)。
状态转移与输出逻辑(Mealy型):
- 当前状态S0:若投5角,下一状态S1,输出drink=0, change=0;若投1元,下一状态S0,输出drink=1, change=0(刚好够)。
- 当前状态S1:若投5角,下一状态S0,输出drink=1, change=0(累计1元);若投1元,下一状态S0,输出drink=1, change=1(累计1.5元,需找零5角)。
注意:任何状态下累计金额超过1元时均出饮料并找零多余部分。此设计仅需两种状态,可避免多余状态。若采用Moore型,则状态需表示当前余额(0、0.5、1.5等),但1.5元后需找零回到0元,因此多余。
Verilog实现要点:采用同步时序逻辑,每个时钟上升沿采样投币信号,组合逻辑产生下一状态和输出。需考虑输入同步化、防抖(实际工程)。测试用例:连续投币序列如5角→5角应出饮料无找零;5角→1元应出饮料找零5角;1元直接出饮料无找零。
易错点:忽略找零条件,误将1元+5角输出为只出饮料;未考虑0元投1元时无需找零;状态机漏掉1.5元状态导致丢找零;输出与状态更新时序错误。
涉及知识点
- 有限状态机(FSM)设计
- Mealy与Moore状态机的区别
- 状态转移与输出逻辑
- Verilog时序逻辑实现方法
- 硬币投币找零的边界条件处理