← 数字IC设计经典笔试题

推荐答案 测试一下

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

编程题 中等 笔试真题

参考答案

1. FSM设计:状态机有IDLE(0分)和S5(已投5分)两个状态。输入硬币:5分(5c)或10分(10c)。转移:IDLE+5c→S5;IDLE+10c→输出饮料(dispense=1),无找零;S5+5c→输出饮料,无找零;S5+10c→输出饮料并找零5分(change=1)。输出只在特定转移时产生(Mealy型),或设计为Moore型在S10状态输出。建议用Mealy减少状态。 2. Verilog代码(符合FPGA设计,同步复位,无latch): ```verilog module vending_machine( input clk, rst_n, input [1:0] coin, // 00:无, 01:5分, 10:10分 output reg dispense, change ); parameter IDLE = 2'b00, S5 = 2'b01; reg [1:0] state, next_state; always @(posedge clk or negedge rst_n) begin if(!rst_n) state <= IDLE; else state <= next_state; end always @(*) begin next_state = state; // 默认保持 dispense = 0; change = 0; case(state) IDLE: begin case(coin) 2'b01: next_state = S5; // 5分 2'b10: begin // 10分 next_state = IDLE; dispense = 1; end default: ; endcase end S5: begin case(coin) 2'b01: begin // 再投5分,共10分 next_state = IDLE; dispense = 1; end 2'b10: begin // 再投10分,共15分 next_state = IDLE; dispense = 1; change = 1; end default: ; endcase end endcase end endmodule ``` 注意:组合逻辑中赋初值避免latch,coin编码仅用两种有效组合,default保留。 3. 工具及设计过程:使用Vivado(Xilinx)或Quartus(Intel)作为综合与实现工具,ModelSim或Vivado Simulator进行仿真验证。设计过程:需求分析→状态机建模→编码→行为仿真→综合→布局布线→时序仿真→下载到FPGA。关键点:状态编码用二进制或格雷码,避免毛刺;输出逻辑同步或打一拍;复位信号处理。

涉及知识点

  • 状态机
  • verilog
  • fpga
  • Verilog
  • FPGA
← 上一题
登录后反馈错题
下一题 →