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

情感   科技互联网   2024-12-29 12:31   河北  

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


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


设计要求


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



设计架构



设计框架图:


设计代码


设计模块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;      //是否买到的标志位  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 endendmodule

测试仿真


测试模块sell_tb代码:
`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

福利】:QQ交流群173560979,进群备注名字+学校/企业。
淘宝店铺:https://shop588964188.taobao.com
论坛网址:www.sxznfpga.com
叁芯智能FPGA课程

往期精选 

 
 

【免费】FPGA工程师人才招聘平台

FPGA人才招聘,企业HR,看过来!

系统设计精选 | 基于FPGA的实时图像边缘检测系统设计(附代码)

基于原语的千兆以太网RGMII接口设计

时序分析理论和timequest使用_中文电子版

求职面试 | FPGA或IC面试题最新汇总篇

特惠 | FPGA图像处理专题课,Quartus、ISE、Vivado全涉及

特惠 | FPGA时序分析及约束专题课,Quartus、ISE、Vivado全涉及

资料汇总|FPGA软件安装包、书籍、源码、技术文档…(2024.11.14更新)

FPGA技术江湖广发江湖帖

无广告纯净模式,给技术交流一片净土,从初学小白到行业精英业界大佬等,从军工领域到民用企业等,从通信、图像处理到人工智能等各个方向应有尽有,QQ微信双选,FPGA技术江湖打造最纯净最专业的技术交流学习平台。


FPGA技术江湖微信交流群

加群主微信,备注姓名+学校/公司+专业/岗位进群


FPGA技术江湖QQ交流群

备注姓名+学校/公司+专业/岗位进群

FPGA技术江湖
任何技术的学习就好比一个江湖,对于每一位侠客都需要不断的历练,从初入江湖的小白到归隐山林的隐世高人,需要不断的自我感悟自己修炼,让我们一起仗剑闯FPGA乃至更大的江湖。
 最新文章