← eetop.cn_数字IC设计工程师笔试面试经典100题(大部分有答案)

推荐答案 测试一下

设计一个自动饮料售卖机,饮料10分钱,硬币有5分和10分两种,并考虑找零:(1)画出fsm(有限状态机);(2)用verilog编程,语法要符合fpga设计的要求;(3)设计工程中可使用的工具及设计大致过程。(未知)(同25)

编程题 中等 笔试真题

参考答案

(1)FSM设计:定义状态表示当前已投入的金额,因为只有5分和10分两种硬币,且饮料10分,可能的状态有0分、5分、10分、15分(15分需找零5分)。状态转移:初始S0(0分),输入5分→S5(5分),输入10分→S10(10分,出货)。S5时输入5分→S10(出货),输入10分→S15(15分,需找零5分,同时出货)。S10时输入5分→S15(找零5分,出货),输入10分→S20?但设计可简化为S10时任何输入都视为超额,直接找零并回到S0或S5。更优设计:状态仅0,5,10,当投入总额≥10时出货并找零,新投入的硬币与当前余额相加,若≥10则找零差值。FSM状态图需清晰标注输入(coin=5或10)、输出(dispense, change)。 (2)Verilog实现要点:采用同步三段式状态机(状态寄存器、次态逻辑、输出逻辑)。输入时钟和复位,检测硬币输入有效(假设单脉冲)。定义状态参数:IDLE=2'b00, S5=2'b01, S10=2'b10。组合逻辑计算次态:case (state) IDLE: if(coin==5) next=S5; else if(coin==10) next=S10; else next=IDLE; S5: if(coin==5) next=S10; else if(coin==10) next=IDLE; else next=S5; S10: // 已经够10分,但若继续投币需处理,可设计为next=IDLE并输出找零。更合理:S10时若coin=5则next=S5且找零5分(出货已出),若coin=10则next=IDLE并找零10分(饮料已出,再投10分全退)。注意避免状态爆炸,可设计为只要总额≥10就出饮料并找零,新状态为总额-10。输出:dispense在到达S10或从S5接收10分时有效;change在应付超过10分时有效。时序逻辑中寄存输出,避免毛刺。 (3)设计工具与过程:常用工具包括Vivado(Xilinx)、Quartus(Intel)、ModelSim(仿真)、Synplify(综合)、ISE等。设计过程:①需求分析,明确功能与接口;②状态机设计与状态图绘制;③RTL编码(Verilog/VHDL);④功能仿真(ModelSim/VCS)验证正确性;⑤逻辑综合(Design Compiler/Synplify)生成网表;⑥布局布线(Vivado/Quartus)及时序分析;⑦比特流生成并下载到FPGA板级调试。重点注意:状态编码、同步设计、复位处理、边沿检测、输出寄存器化。

涉及知识点

  • 有限状态机(FSM)设计与状态转移
  • 三段式状态机Verilog实现
  • 硬币识别与找零逻辑建模
  • FPGA设计流程及常用工具
  • 同步电路与输出寄存器化
  • 单脉冲输入处理与状态编码
← 上一题
登录后反馈错题
下一题 →