← ASR题目解析——李锐博恩

推荐答案 测试一下

设计一个饮料售卖机,饮料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时序逻辑实现方法
  • 硬币投币找零的边界条件处理
← 上一题
登录后反馈错题
下一题 →