← eetop.cn_数字IC设计工程师笔试面试经典100题(大部分有答案)
推荐答案
测试一下
题目
设计一个自动饮料售卖机, 饮料 10分钱, 硬币有 5分和 10分两种, 并考虑找零: ( 1)
参考答案与知识点
参考答案
设计一个自动饮料售卖机,饮料10分钱,硬币只有5分和10分两种,需考虑找零。可采用有限状态机(FSM)实现,状态定义为0分、5分、10分(投入足够)。初始状态S0(0分):投入5分→S5(5分),投入10分→S10(10分,出饮料且找零0分)。状态S5(5分):投入5分→S10(10分,出饮料且找零0分),投入10分→S15(15分,出饮料且找零5分)。状态S10(10分)或S15(15分)为临时状态,在时钟边沿输出饮料和找零后回到S0,并清零余额。注意输入硬币的边沿检测,每个时钟周期只能处理一枚硬币。输出信号:dispense(出饮料)、change_5(找零5分)。状态编码:S0=2'b00, S5=2'b01, S10=2'b10, S15=2'b11。转移逻辑组合产生下一状态,输出逻辑组合或时序输出。Verilog实现片段:always @(posedge clk or negedge rst_n) if(!rst_n) state <= S0; else case(state) S0: if(coin_5) state <= S5; else if(coin_10) state <= S10; S5: if(coin_5) state <= S10; else if(coin_10) state <= S15; S10: state <= S0; S15: state <= S0; default: state <= S0; endcase; assign dispense = (state==S10) | (state==S15); assign change_5 = (state==S15); 注意:S10和S15的下一状态立即回到S0,表示完成交易后清空余额。需确保硬币输入脉冲有效且仅持续一个周期。若考虑更安全的设计,可加入握手机制或超时处理。此FSM覆盖所有合法投币序列,且正确找零。
涉及知识点
- 有限状态机设计
- 边沿检测与同步输入
- 状态编码与输出逻辑
- 组合逻辑与时序逻辑分离
- 自动售货机建模