前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >源码系列:基于FPGA的自动售货机设计(附源工程)

源码系列:基于FPGA的自动售货机设计(附源工程)

作者头像
FPGA技术江湖
发布2020-12-29 17:49:23
1.5K0
发布2020-12-29 17:49:23
举报
文章被收录于专栏:FPGA技术江湖FPGA技术江湖

大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。

今天给大侠带来基于FPGA的自动售货机设计,附源码,获取源码,请在“FPGA技术江湖”公众号内回复“ 自动售货机设计源码”,可获取源码文件。话不多说,上货。

设计要求

一听饮料需要2.5美元,规定只能投入一美元,0.5美元的硬币。

设计架构

设计框架图:

设计代码

设计模块sell代码:

代码语言:javascript
复制
module sell(clk,rst_n,one_dole,half_dole,descense,back_money);
  input clk;
  input rst_n;
  input one_dole;      //输入1美元
  input half_dole;    //输入0.5美元
  
  output reg descense;      //是否买到的标志位
  output reg [2:0] back_money;    //找回的钱

  parameter s0 = 2'b00,s1 = 2'b01,s2 = 2'b10;
  
  reg [1:0] state;
  reg [4:0] money;
  
  reg [1:0] state_x;
  always @ (posedge clk or negedge rst_n)    
    if(!rst_n)
      begin
        state_x <= s0;
      end
    else
      begin
        state_x <= state;
      end
      
  always @ (posedge clk or negedge rst_n)
    if(!rst_n)
      begin
        money <= 5'b0;  
        state <= s0;
      end
    else
      begin
        case (state)
          s0:begin
              //判断投入的钱是多少
              if(one_dole)    
                begin
                  money <= money + 10;
                  state <= s1;
                end
              else if(half_dole)
                begin
                  money <= money + 5;
                  state <= s1;
                end
              else  
                begin
                  state <= s0;
                  money <= money;
                end
            end
          //判断和商品的价格是否一样
          s1:begin
              if(money < 25)
                begin
                  state <= s0;
                end
              else
                begin
                  state <= s0;
                  money <= 5'b0;
                end
            end
        endcase
      end
  
  reg [1:0] state_s;
  always @ (posedge clk or negedge rst_n )
    if(!rst_n)
      begin
        descense <= 1'b0;
        back_money <= 3'b0;
        state_s <= s0;
      end
    else
      begin
        case (state_s)
          s0: begin
              if(money < 25)    //判断输入的钱数
                begin
                  back_money <= 3'b0;
                  descense <= 1'b0;  
                end
              else
                //找回的钱和买到的标志位
                begin
                  back_money <= money - 25;  
                  descense <= 1'b1;
                  state_s <= s1;
                end
            end
          s1: begin
              descense <= 1'b0;
              state_s <= s0;
            end
        endcase
      end
endmodule 

测试仿真

测试模块sell_tb代码:

代码语言:javascript
复制
`timescale 1ns/1ps    //时间精度

module sell_tb();
  
  //定义我们的端口
  reg clk;
  reg rst_n;
  reg one_dole;    
  reg half_dole;

  wire descense;
  wire [2:0] back_money;
  
  initial begin
      clk = 1'b1;
      rst_n = 1'b0;
      one_dole = 1'b0;
      half_dole = 1'b0;
      #200.1 rst_n = 1'b1;
      
      //模拟输入的钱数
      
      #200   one_dole = 1'b1;
      #20  one_dole = 1'b0;
      
      #200  one_dole = 1'b1;
      #20  one_dole = 1'b0;
      
      #200   one_dole = 1'b1;
      #20  one_dole = 1'b0;
      
      #1000.1
      #200   half_dole = 1'b1;
      #20  half_dole = 1'b0;
      
      #200   one_dole = 1'b1;
      #20  one_dole = 1'b0;
      
      #200  one_dole = 1'b1;
      #20  one_dole = 1'b0;
      
      # 1000 $stop;    //停止仿真
    end
    
    always #10 clk = ~ clk; 
  
  sell sell_dut(    //例化端口
      .clk(clk),
      .rst_n(rst_n),
      .one_dole(one_dole),
      .half_dole(half_dole),
      .descense(descense),
      .back_money(back_money)
    );
endmodule 

仿真图:

我们从仿真中可以看到当我们的钱数投够的时候,就给一个买到的标志位,如果投的超过商品的价格,那么我们就给一个买的标志位,然后找回我们投的多的钱。

END

后续会持续更新,带来Vivado、 ISE、Quartus II 、candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。

大侠们,江湖偌大,继续闯荡,愿一切安好,有缘再见!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FPGA技术江湖 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档