• 正文
    • 設(shè)計(jì)要求
    • 設(shè)計(jì)架構(gòu)
    • 設(shè)計(jì)代碼
    • 測(cè)試仿真
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

源碼系列:基于FPGA的自動(dòng)售貨機(jī)設(shè)計(jì)(附源工程)

2024/12/30
2144
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

大俠好,歡迎來到FPGA技術(shù)江湖,江湖偌大,相見即是緣分。大俠可以關(guān)注FPGA技術(shù)江湖,在“闖蕩江湖”、"行俠仗義"欄里獲取其他感興趣的資源,或者一起煮酒言歡。

今天給大俠帶來基于FPGA的自動(dòng)售貨機(jī)設(shè)計(jì),附源碼,獲取源碼,請(qǐng)?jiān)凇癋PGA技術(shù)江湖”公眾號(hào)內(nèi)回復(fù)“?自動(dòng)售貨機(jī)設(shè)計(jì)源碼”,可獲取源碼文件。話不多說,上貨。

設(shè)計(jì)要求

一聽飲料需要2.5美元,規(guī)定只能投入一美元,0.5美元的硬幣。

設(shè)計(jì)架構(gòu)

設(shè)計(jì)框架圖:

設(shè)計(jì)代碼

設(shè)計(jì)模塊sell代碼:

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;      //是否買到的標(biāo)志位  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          //判斷和商品的價(jià)格是否一樣          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)    //判斷輸入的錢數(shù)                begin                  back_money <= 3'b0;                  descense <= 1'b0;                  end              else                //找回的錢和買到的標(biāo)志位                begin                  back_money <= money - 25;                    descense <= 1'b1;                  state_s <= s1;                end            end          s1: begin              descense <= 1'b0;              state_s <= s0;            end        endcase      endendmodule 

測(cè)試仿真

測(cè)試模塊sell_tb代碼:

`timescale 1ns/1ps    //時(shí)間精度
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;            //模擬輸入的錢數(shù)            #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 

仿真圖:

我們從仿真中可以看到當(dāng)我們的錢數(shù)投夠的時(shí)候,就給一個(gè)買到的標(biāo)志位,如果投的超過商品的價(jià)格,那么我們就給一個(gè)買的標(biāo)志位,然后找回我們投的多的錢。

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計(jì)資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

任何技術(shù)的學(xué)習(xí)就好比一個(gè)江湖,對(duì)于每一位俠客都需要不斷的歷練,從初入江湖的小白到歸隱山林的隱世高人,需要不斷的自我感悟自己修煉,讓我們一起仗劍闖FPGA乃至更大的江湖。