推荐答案
测试一下
题目
设计一个自动售货机系统,卖 soda水的,只能投进三种硬币,要正确的找回钱
参考答案与知识点
参考答案
该题目要求设计一个自动售货机系统,只接受三种硬币(假设为5分、10分、25分),出售soda水(假设单价15分),需正确处理投币、出货和找零。典型的实现方案是采用有限状态机(FSM),将投入总额作为状态(0,5,10,15,20,25,...),但需注意超过15分后需找零。状态机设计要点:1. 输入信号:投币检测(三个硬币传感器,边沿触发),时钟和复位。2. 状态定义:用变量表示总金额(例如0~30,因为25分投币可能使总额达30)。3. 状态转移:每次投币,根据硬币面额累加当前金额,若新金额≥15分,则进入“出货+找零”状态,输出soda并计算找零(新金额-15分),随后进入找零处理状态(可能需分多次找零,但简化可一次找零)。4. 输出:soda信号、找零金额(或找零硬币个数)。5. 时序:同步逻辑,每个时钟沿检测投币有效并更新状态。6. 复位:异步复位至0金额。易错点:1. 边沿检测:需对投币信号进行同步化并检测上升沿,避免误触发。2. 状态溢出:当总额已达30,再投25分会导致溢出,需限制最大状态(如30后不再累加,或设计为饱和)。3. 找零最小化:因只能投入三种硬币,找零需用5、10、25分组合,但本题未限制找零硬币种类(通常可输出任意组合)。4. 多投币并发:假设同一时刻仅一枚硬币投入(单投口)。测试时要覆盖:恰好15分、10+5分、25分(找零10分)、5+5+5分、10+10分(需找零5分)等。实现可用三段式状态机(时序状态转移、组合逻辑下一状态、组合逻辑输出)或一段式。推荐采用One-hot或二进制编码,注意避免Latch。最终输出信号需与时钟同步。
涉及知识点
- 有限状态机设计方法
- 边沿检测与同步化
- 状态编码与溢出处理
- 组合逻辑与时序逻辑分离
- 测试用例覆盖(正常、临界、异常)