当前位置:   article > 正文

22.状态机设计--可乐机设计(投币三元出一瓶可乐)

22.状态机设计--可乐机设计(投币三元出一瓶可乐)

理论知识:

(1)状态机简写为FSM(Finite State Machine),也称为同步有限状态机。同步是指状态的变化都是在时钟的边沿发送变化,有限值得是状态的个数是可数的。

(2)分类:Moore型状态机(摩尔型)、Mealy型状态机(米利型)

(3)在FPGA低速系统中,如果状态机的状态个数小于四个,可以用二进制码;如果个数大于4个小于24个,推荐使用独热码,如果个数大于24个,推荐使用格雷码。在FPGA高速系统中,一律推荐独热码。

(4)

设计一个基于状态机的可乐机,要求投币三元出一瓶可乐:

(1)Visio视图:

(2)Verilog代码:

  1. module fsm_cola(clk,reset_n,pi_money,po_cola);
  2. input clk;
  3. input reset_n;
  4. input pi_money;
  5. output reg po_cola;
  6. reg[2:0] state;
  7. parameter IDLE = 3'b001;
  8. parameter ONE = 3'b010;
  9. parameter TWO = 3'b100;
  10. //状态跳转设计:
  11. always@(posedge clk or negedge reset_n)
  12. if(!reset_n)
  13. state <= IDLE;
  14. else begin
  15. case(state)
  16. IDLE: begin
  17. if(pi_money)
  18. state <= ONE;
  19. else
  20. state <= state;
  21. end
  22. ONE: begin
  23. if(pi_money)
  24. state <= TWO;
  25. else
  26. state <= state;
  27. end
  28. TWO: begin
  29. if(pi_money)
  30. state <= IDLE;
  31. else
  32. state <= state;
  33. end
  34. default:begin
  35. state <= IDLE;
  36. end
  37. endcase
  38. end
  39. //输出信号设计
  40. always@(posedge clk or negedge reset_n)
  41. if(!reset_n)
  42. po_cola <= 1'd0;
  43. else if((state == TWO) && (pi_money))
  44. po_cola <= 1'd1;
  45. else
  46. po_cola <= 1'd0;
  47. endmodule

(3)仿真文件代码:

  1. `timescale 1ns / 1ps
  2. module fsm_cola_tb;
  3. reg clk;
  4. reg reset_n;
  5. reg pi_money;
  6. wire po_cola;
  7. fsm_cola fsm_cola_inst(
  8. .clk(clk),
  9. .reset_n(reset_n),
  10. .pi_money(pi_money),
  11. .po_cola(po_cola)
  12. );
  13. initial clk = 1'd1;
  14. always #10 clk = ~clk;
  15. initial begin
  16. reset_n <= 1'd0;
  17. pi_money <= 1'd0;
  18. #15;
  19. reset_n <= 1'd1;
  20. #1500;
  21. $stop;
  22. end
  23. always #200 pi_money <= ~ pi_money;
  24. endmodule

(4)仿真波形:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/805509
推荐阅读
相关标签
  

闽ICP备14008679号