← eetop.cn_数字IC设计工程师笔试面试经典100题(大部分有答案)
推荐答案
测试一下
题目
设计一个自动售货机系统,卖 soda水的,只能投进三种硬币,要正确的找
参考答案与知识点
参考答案
自动售货机系统通常采用有限状态机(FSM)实现,核心模块包括投币控制、商品选择、找零计算和输出控制。假设饮料价格为S元,支持三种硬币面额:5角(A)、1元(B)、5元(C)。FSM状态表示当前累积投币总额,初始状态为0。每次投币触发状态转移:根据投币面额累加总额,若达到S元则进入“可出货”状态,同时计算找零(超出部分用硬币组合返回,优先使用大面额硬币)。若投币总额不足S元,则继续等待投币;若超出S元,先出货,然后进入找零子状态,逐枚输出硬币直至找零金额清零。关键设计点:1)找零算法需保证硬币充足(可预设硬币库存计数器);2)状态编码用独热码或格雷码避免竞争冒险;3)状态转移采用Moore或Mealy型FSM,Mealy型输出与输入组合有关,逻辑更紧凑。Verilog示例:定义状态变量[4:0] state,包括IDLE(空闲)、COLLECT(收集投币)、DISPENSE(出货)、CHANGE(找零)。在时钟上升沿采样输入coin(2位表示三种面额)和确认信号,组合逻辑计算next_state和输出(soda_out, change_out)。需注意异步复位和防抖处理。
考试常见陷阱:忽略找零时硬币库存限制;状态转移未考虑同时投多个硬币;未设计溢出保护(如投币总额超过最大允许值)。本题核心是考察FSM的完备性和边界条件处理。
涉及知识点
- 有限状态机FSM设计
- 状态转移图与状态编码
- 找零算法与硬币管理
- Verilog模块化设计
- 边界条件与防抖处理