自动售货机设计报告

数字电子技术课程设计

——自动售货机

摘 要

自动售货机是一台机电一体化的自动化装置,在接收到货币已输入的前提下,靠触摸控制按钮输入信号使控制器启动相关位置的机械装置完成规定动作,将货物输出。当顾客按下需要买的商品所对应的按键时,数码管将显示出该商品的的价格,然后顾客需要将货币投入投币口,数码管上显示出所投币额。当按下确认键,则自动售货机将对投入的货币与商品的价格进行比较。如果投入的币额足够时,则自动送出商品,并且把多余的钱找回,在数码管上显示出来。如果两者币的相等,则直接送出商品。如果投入的币额不足时则报警,设计时可以设置报警时间。当顾客一旦按下确认键3秒后,自动售货机将自动恢复到初始状态,此时顾客才可以进行下一次购货操作。售货机还具有商家使用累加货币的功能,累加的货币在数码管上显示出,此累加器只能有商家可以控制清零。此售货机还有商家控制的整体复位功能。该售货机具有使用方便,结构简单,灵活通用等优点,因此在销售业,食品产业得到广泛的应用。本文设计的自动售货机,主要应用到Verilog 语言和Quartus II 软件,通过编写Verilog 语言子模块程序经过Quartus II仿真生成电路图,然后编写总体程序并调用各子程序,经过Quartus II 仿真反馈连接生成一个自动售货机模型,最后将其下载到FPGA 开发板内进行功能测试。

关键字:自动售货机、Verilog 语言、Quartus II软件、FPGA 开发板

目录

1.设计完成的功能…………………………………………………1

2.实验原理…………………………………………………………1

3.设计思路………………………………………………………1-2

4.程序代码段…………………………………………………2-9

5.Quartus II综合分析得各模块RTL 电路图………………9-12

6.Quartus II 仿真结果………………………………………13-15

7.FPGA 开发板管脚配置图………………………………………15

8.FPGA 开发板测试结果…………………………………………16

一、设计完成的功能

(1)设计一个自动售货机,此机能出售1元、2元、5元、10元的四种商品。出售哪种商品可有顾客按动相应的一个按键即可,并同时用数码管显示出此商品的价格。

(2)顾客投入硬币的钱数也是有1元、2元、5元、10元四种,但每次只能投入其中的一种硬币,此操作通过按动相应的一个按键来模拟,并同时用数码管将投币额显示出来。

(3)顾客投币后,按一次确认键,如果投币额不足时则报警,报警时间3秒(可用点阵模拟报警)。如果投币额足够时自动送出货物(送出的货物用相应不同的指示灯显示来模拟),同时多余的钱应找回,找回的钱数用数码管显示出来。

(4)顾客一旦按动确认键3秒后,自动售货机即可自动恢复到初始状态,此时才允许顾客进行下一次购货操作。

(5)售货机还应具有供商家使用的累加卖货额的功能,累加的钱数要用数码管显示,显示2位即可。此累加器只有商家可以控制清零。

(6)此售货机要设有一个由商家控制的整体复位控制。

二、实验原理

总的设计思想:首先用Verilog 语言编写各子模块程序代码,来实现各子模块设计要求功能。然后编写一个顶层模块,并在顶层模块中调用各子模块的程序代码,以使各子模块联系起来。编程完成以后通过Quartus II 调入程序进行综合分析仿真,得到总模块以及各子模块的RTL 电路图,最后将其下载到FPGA 开发板内进行功能测试。

具体流程:首先应搭建识别模块,将代表每种硬币的拨码开关信号转变为BCD 码进行累加。当累加完成后,将累加结果与代表商品的BCD 码相比较。如果大于售出商品并对两个BCD 码求差,求差的结果作为找钱信号;如果等于直接售出商品;小于则报警。至于统计卖钱额,则是对售出的商品进行累加。同时还要通过数码管显示模块进行显示。

三、设计思路

采用先部分再整体的设计思想,将总体设计分为以下模块

(1) 分频(fenpin )模块。

(2)计时(count )模块。用于控制确认键后到恢复初始化的3秒计时。

(3)识别(shibie)模块。将每种硬币、货品的拨码开关信号转变为编码 。

(4)清零(qingling)模块 。用于销售总额的清零。

(5)初始化(init)模块

(6)控制(control)模块。用于数据读入、投币不足、交易成功状态的控制及转化。

(7)显示(display)模块

四、程序代码段

(1)fenpin 模块程序代码:

module fenpin(clk,f_1m,f_1s);

input clk;

output f_1m,f_1s;

reg f_1m,f_1s;

integer a_temp1,a_temp2;

always@(posedge clk)

begin

if (a_temp2==24999)

begin

f_1m=~f_1m;

a_temp2

end

else

a_temp2

end

always@(posedge clk)

begin

if(a_temp1==24999999)

begin

f_1s=~f_1s;

a_temp1

end

else

a_temp1

end

endmodule

该模块设计目的是实现分频,以使后续模块能得到毫秒和秒级的动作。

(2)count 模块程序代码:

module count(f_1s,ret,a);

input f_1s;

input ret;

output a;

integer a;

always @ (posedge f_1s)

begin

if(ret!=0) //用于按确认键后的计时

begin

a=a+1;

end

else

begin

a=0;

end

end

endmodule

该模块的主要功能是计时,以使后续后续模块能够实现顾客一旦按动确认键3秒后,自动售货机即可自动恢复到初始状态,允许顾客进行下一次购货操作。

(3)shibie 模块程序代码:

module shibie(read,g,m,goods,money);

input[1:0] g,m;

input read;

output goods,money;

reg [3:0] goods,money;

always

begin

if(read!=0) //非商家读取模式(普通读写模式)

begin // 识别模块

case(g) //表每种货品的拨码开关信号转变为编码 4'b00:begin goods=1;end

4'b01:begin goods=2;end

4'b10:begin goods=5;end

4'b11:begin goods=10;end

default:begin goods=0;end

endcase

case(m) //表每种硬币的拨码开关信号转变为编码

4'b00:begin money=1;end

4'b01:begin money=2;end

4'b10:begin money=5;end

4'b11:begin money=10;end

default:begin money=0;end

endcase

end

end

endmodule

该模块的功能是识别是否是商家读取模式,如果是普通读写模式则将每种硬币、

货品的拨码开关信号转变为编码 。

(4)qingling 模块程序代码:

module qingling(f_1m,zero,count);

input f_1m,zero;

output count;

reg [9:0]count;

always @ (posedge f_1m)

begin

if(zero==0) //清零

begin

count=0;

end

end

endmodule

该模块的功能实现商家能够整体复位。

(5)init 模块程序代码:

module init(a,led,leda,ledb,x,ret);

input a;

output led,leda, ledb,x,ret;

reg[1:0] ret;

reg[3:0] led;

reg leda;

reg ledb;

reg x=1;

always

begin

if(a==3) //初始化

begin

ret=0;

led=4'b0000;

leda=1;

ledb=0;

x=0;

end

end

endmodule

该模块的功能是按确认键计时3秒后自动回到初始状态,以允许顾客进行下一次购货操作。

(6)control 模块程序代码:

module control(x,yes,money,goods,g_c,ret,leda,ledb,led,count); input[3:0] money,goods;

input yes,x;

output g_c,ret,leda,ledb,led,count;

reg [3:0] change,g_c,led;

reg leda;

reg ledb;

reg[9:0] count=0;

reg[1:0] ret;

always

begin

if(yes==0) //按确定键

begin

if(money

begin

change=0;

ret=1;

end

else

begin//金钱足够

change=money-goods;

ret=2;

if(x==0) //交易成功销售总额增加

begin

count=count+goods;

end

g_c=goods;

end

endmodule

该模块的功能是用于数据读入、投币不足、交易成功状态的控制及转化。

(7)display 模块程序代码:

module display(g_c,money,read,count,com,led_seg,);

input [3:0]g_c,money;

input [9:0] count;

input read;

output com;

output led_seg;

reg [3:0]com;

reg [7:0]led_seg;

integer r,b;

reg i=0;

reg [1:0] state=0;

always

begin

if(read!=0)

begin

case(state)

//显示选择的货物

0:begin

r=g_c % 10;

com=4'b1110;

case(r)

0:begin led_seg=8'b1001_0000;end 1:begin led_seg=8'b1001_1111;end 2:begin led_seg=8'b0101_1000;end 3:begin led_seg=8'b0001_1001;end 4:begin led_seg=8'b0001_0111;end 5:begin led_seg=8'b0011_0001;end 6:begin led_seg=8'b0011_0000;end 7:begin led_seg=8'b1001_1101;end 8:begin led_seg=8'b0001_0000;end 9:begin led_seg=8'b0001_0101;end endcase

end

1:begin

r=g_c / 10;

com=4'b 1101;

case(r)

0:begin led_seg=8'b1001_0000;end 1:begin led_seg=8'b1001_1111;end 2:begin led_seg=8'b0101_1000;end 3:begin led_seg=8'b0001_1001;end 4:begin led_seg=8'b0001_0111;end 5:begin led_seg=8'b0011_0001;end 6:begin led_seg=8'b0011_0000;end 7:begin led_seg=8'b1001_1101;end 8:begin led_seg=8'b0001_0000;end 9:begin led_seg=8'b0001_0101;end endcase

end

//显示投入的钱数及余额

2:begin

r=money % 10;

com=4'b 1011;

case(r)

0:begin led_seg=8'b1001_0000;end 1:begin led_seg=8'b1001_1111;end 2:begin led_seg=8'b0101_1000;end 3:begin led_seg=8'b0001_1001;end 4:begin led_seg=8'b0001_0111;end 5:begin led_seg=8'b0011_0001;end 6:begin led_seg=8'b0011_0000;end

7:begin led_seg=8'b1001_1101;end 8:begin led_seg=8'b0001_0000;end 9:begin led_seg=8'b0001_0101;end endcase

end

3:begin

r=money / 10;

com=4'b 0111;

case(r)

0:begin led_seg=8'b1001_0000;end 1:begin led_seg=8'b1001_1111;end 2:begin led_seg=8'b0101_1000;end 3:begin led_seg=8'b0001_1001;end 4:begin led_seg=8'b0001_0111;end 5:begin led_seg=8'b0011_0001;end 6:begin led_seg=8'b0011_0000;end 7:begin led_seg=8'b1001_1101;end 8:begin led_seg=8'b0001_0000;end 9:begin led_seg=8'b0001_0101;end endcase

end

endcase

state=state+1;

end

if(read==0)//商家读取模式

begin

case(i) //显示销售总额

0:begin

b=count/10;

com=4'b 1110;

case(b)

0:begin led_seg=8'b1001_0000;end 1:begin led_seg=8'b1001_1111;end 2:begin led_seg=8'b0101_1000;end 3:begin led_seg=8'b0001_1001;end 4:begin led_seg=8'b0001_0111;end 5:begin led_seg=8'b0011_0001;end 6:begin led_seg=8'b0011_0000;end 7:begin led_seg=8'b1001_1101;end 8:begin led_seg=8'b0001_0000;end 9:begin led_seg=8'b0001_0101;end endcase

end

1:begin

b=count%10; com=4'b 1101; case(b)

0:begin led_seg=8'b1001_0000;end 1:begin led_seg=8'b1001_1111;end 2:begin led_seg=8'b0101_1000;end 3:begin led_seg=8'b0001_1001;end 4:begin led_seg=8'b0001_0111;end 5:begin led_seg=8'b0011_0001;end 6:begin led_seg=8'b0011_0000;end 7:begin led_seg=8'b1001_1101;end 8:begin led_seg=8'b0001_0000;end 9:begin led_seg=8'b0001_0101;end endcase end

endcase i=i+1; if(i==2) begin i=0; end end end

endmodule

该模块的功能是将顾客投入硬币的钱数、投币额足够送出货物、应找回的多余的钱数用数码管显示出来。

(8)总体顶层模块autoseller 程序代码: module

autoseller(f_1s,f_1m,g,m,yes,read,zero,com,led_seg,leda,ledb,led); input yes,read,zero;//确定键,商家读取键,清零键 input f_1s,f_1m;

input [1:0] g , m; //货品及投币选择键

output com,led_seg,leda,ledb,led;//数码管输出及点阵输出 wire leda;

wire leda1,leda2,ledb1,ledb2; wire [3:0]led1,led2; wire ledb; wire a;

wire [3:0] goods,money,led,change,g_c,com; integer r,b, a_tmp2,a_tmp1;

wire [1:0] ret=0;//用于控制各状态间的转换 wire [9:0]count; wire [7:0]led_seg;

wire [1:0]state=0; wire i=0; wire x;

//fenpin autoseller1(clk,f_1m,f_1s); count autoseller2(f_1s,ret,a);

init autoseller3(a,led1,leda1,ledb1,x,ret); qingling autoseller4(f_1m,zero,count); shibie autoseller5(read,g,m,goods,money);

control autoseller6(yes,money,goods,g_c,ret,leda2,ledb2,led2,count); display autoseller7(g_c,goods,money,read,com,led_seg,count); assign leda=(a==3)?leda1:leda2; assign ledb=(a==3)?ledb1:ledb2; assign led=(a==3)?led1:led2; endmodule

该模块的功能是将各子模块通过顶层模块联系在一起,以期实现整体设计功能。

五: Quartus II综合分析得各模块RTL 电路图

(1)autoseller 总模块RTL 电路图

:

(2)fenpin模块RTL 电路图:

(3)count 模块RTL 电路图:

(4)shibie 模块RTL 电路图:

(6)init 模块RTL 电路图:

(7)control模块RTL 电路图:

六:Quartus II仿真结果

(1)autoseller总模块仿真结果图:

(2)fenpin模块仿真结果图:

(3)count 模块仿真结果图:

(5)qingling 模块仿真结果图:

(6)init 模块仿真结果图:

(8)display 模块仿真结果图:

七:FPGA 开发板管脚配置图:

八:FPGA 开发板测试结果

数字电子技术课程设计

——自动售货机

摘 要

自动售货机是一台机电一体化的自动化装置,在接收到货币已输入的前提下,靠触摸控制按钮输入信号使控制器启动相关位置的机械装置完成规定动作,将货物输出。当顾客按下需要买的商品所对应的按键时,数码管将显示出该商品的的价格,然后顾客需要将货币投入投币口,数码管上显示出所投币额。当按下确认键,则自动售货机将对投入的货币与商品的价格进行比较。如果投入的币额足够时,则自动送出商品,并且把多余的钱找回,在数码管上显示出来。如果两者币的相等,则直接送出商品。如果投入的币额不足时则报警,设计时可以设置报警时间。当顾客一旦按下确认键3秒后,自动售货机将自动恢复到初始状态,此时顾客才可以进行下一次购货操作。售货机还具有商家使用累加货币的功能,累加的货币在数码管上显示出,此累加器只能有商家可以控制清零。此售货机还有商家控制的整体复位功能。该售货机具有使用方便,结构简单,灵活通用等优点,因此在销售业,食品产业得到广泛的应用。本文设计的自动售货机,主要应用到Verilog 语言和Quartus II 软件,通过编写Verilog 语言子模块程序经过Quartus II仿真生成电路图,然后编写总体程序并调用各子程序,经过Quartus II 仿真反馈连接生成一个自动售货机模型,最后将其下载到FPGA 开发板内进行功能测试。

关键字:自动售货机、Verilog 语言、Quartus II软件、FPGA 开发板

目录

1.设计完成的功能…………………………………………………1

2.实验原理…………………………………………………………1

3.设计思路………………………………………………………1-2

4.程序代码段…………………………………………………2-9

5.Quartus II综合分析得各模块RTL 电路图………………9-12

6.Quartus II 仿真结果………………………………………13-15

7.FPGA 开发板管脚配置图………………………………………15

8.FPGA 开发板测试结果…………………………………………16

一、设计完成的功能

(1)设计一个自动售货机,此机能出售1元、2元、5元、10元的四种商品。出售哪种商品可有顾客按动相应的一个按键即可,并同时用数码管显示出此商品的价格。

(2)顾客投入硬币的钱数也是有1元、2元、5元、10元四种,但每次只能投入其中的一种硬币,此操作通过按动相应的一个按键来模拟,并同时用数码管将投币额显示出来。

(3)顾客投币后,按一次确认键,如果投币额不足时则报警,报警时间3秒(可用点阵模拟报警)。如果投币额足够时自动送出货物(送出的货物用相应不同的指示灯显示来模拟),同时多余的钱应找回,找回的钱数用数码管显示出来。

(4)顾客一旦按动确认键3秒后,自动售货机即可自动恢复到初始状态,此时才允许顾客进行下一次购货操作。

(5)售货机还应具有供商家使用的累加卖货额的功能,累加的钱数要用数码管显示,显示2位即可。此累加器只有商家可以控制清零。

(6)此售货机要设有一个由商家控制的整体复位控制。

二、实验原理

总的设计思想:首先用Verilog 语言编写各子模块程序代码,来实现各子模块设计要求功能。然后编写一个顶层模块,并在顶层模块中调用各子模块的程序代码,以使各子模块联系起来。编程完成以后通过Quartus II 调入程序进行综合分析仿真,得到总模块以及各子模块的RTL 电路图,最后将其下载到FPGA 开发板内进行功能测试。

具体流程:首先应搭建识别模块,将代表每种硬币的拨码开关信号转变为BCD 码进行累加。当累加完成后,将累加结果与代表商品的BCD 码相比较。如果大于售出商品并对两个BCD 码求差,求差的结果作为找钱信号;如果等于直接售出商品;小于则报警。至于统计卖钱额,则是对售出的商品进行累加。同时还要通过数码管显示模块进行显示。

三、设计思路

采用先部分再整体的设计思想,将总体设计分为以下模块

(1) 分频(fenpin )模块。

(2)计时(count )模块。用于控制确认键后到恢复初始化的3秒计时。

(3)识别(shibie)模块。将每种硬币、货品的拨码开关信号转变为编码 。

(4)清零(qingling)模块 。用于销售总额的清零。

(5)初始化(init)模块

(6)控制(control)模块。用于数据读入、投币不足、交易成功状态的控制及转化。

(7)显示(display)模块

四、程序代码段

(1)fenpin 模块程序代码:

module fenpin(clk,f_1m,f_1s);

input clk;

output f_1m,f_1s;

reg f_1m,f_1s;

integer a_temp1,a_temp2;

always@(posedge clk)

begin

if (a_temp2==24999)

begin

f_1m=~f_1m;

a_temp2

end

else

a_temp2

end

always@(posedge clk)

begin

if(a_temp1==24999999)

begin

f_1s=~f_1s;

a_temp1

end

else

a_temp1

end

endmodule

该模块设计目的是实现分频,以使后续模块能得到毫秒和秒级的动作。

(2)count 模块程序代码:

module count(f_1s,ret,a);

input f_1s;

input ret;

output a;

integer a;

always @ (posedge f_1s)

begin

if(ret!=0) //用于按确认键后的计时

begin

a=a+1;

end

else

begin

a=0;

end

end

endmodule

该模块的主要功能是计时,以使后续后续模块能够实现顾客一旦按动确认键3秒后,自动售货机即可自动恢复到初始状态,允许顾客进行下一次购货操作。

(3)shibie 模块程序代码:

module shibie(read,g,m,goods,money);

input[1:0] g,m;

input read;

output goods,money;

reg [3:0] goods,money;

always

begin

if(read!=0) //非商家读取模式(普通读写模式)

begin // 识别模块

case(g) //表每种货品的拨码开关信号转变为编码 4'b00:begin goods=1;end

4'b01:begin goods=2;end

4'b10:begin goods=5;end

4'b11:begin goods=10;end

default:begin goods=0;end

endcase

case(m) //表每种硬币的拨码开关信号转变为编码

4'b00:begin money=1;end

4'b01:begin money=2;end

4'b10:begin money=5;end

4'b11:begin money=10;end

default:begin money=0;end

endcase

end

end

endmodule

该模块的功能是识别是否是商家读取模式,如果是普通读写模式则将每种硬币、

货品的拨码开关信号转变为编码 。

(4)qingling 模块程序代码:

module qingling(f_1m,zero,count);

input f_1m,zero;

output count;

reg [9:0]count;

always @ (posedge f_1m)

begin

if(zero==0) //清零

begin

count=0;

end

end

endmodule

该模块的功能实现商家能够整体复位。

(5)init 模块程序代码:

module init(a,led,leda,ledb,x,ret);

input a;

output led,leda, ledb,x,ret;

reg[1:0] ret;

reg[3:0] led;

reg leda;

reg ledb;

reg x=1;

always

begin

if(a==3) //初始化

begin

ret=0;

led=4'b0000;

leda=1;

ledb=0;

x=0;

end

end

endmodule

该模块的功能是按确认键计时3秒后自动回到初始状态,以允许顾客进行下一次购货操作。

(6)control 模块程序代码:

module control(x,yes,money,goods,g_c,ret,leda,ledb,led,count); input[3:0] money,goods;

input yes,x;

output g_c,ret,leda,ledb,led,count;

reg [3:0] change,g_c,led;

reg leda;

reg ledb;

reg[9:0] count=0;

reg[1:0] ret;

always

begin

if(yes==0) //按确定键

begin

if(money

begin

change=0;

ret=1;

end

else

begin//金钱足够

change=money-goods;

ret=2;

if(x==0) //交易成功销售总额增加

begin

count=count+goods;

end

g_c=goods;

end

endmodule

该模块的功能是用于数据读入、投币不足、交易成功状态的控制及转化。

(7)display 模块程序代码:

module display(g_c,money,read,count,com,led_seg,);

input [3:0]g_c,money;

input [9:0] count;

input read;

output com;

output led_seg;

reg [3:0]com;

reg [7:0]led_seg;

integer r,b;

reg i=0;

reg [1:0] state=0;

always

begin

if(read!=0)

begin

case(state)

//显示选择的货物

0:begin

r=g_c % 10;

com=4'b1110;

case(r)

0:begin led_seg=8'b1001_0000;end 1:begin led_seg=8'b1001_1111;end 2:begin led_seg=8'b0101_1000;end 3:begin led_seg=8'b0001_1001;end 4:begin led_seg=8'b0001_0111;end 5:begin led_seg=8'b0011_0001;end 6:begin led_seg=8'b0011_0000;end 7:begin led_seg=8'b1001_1101;end 8:begin led_seg=8'b0001_0000;end 9:begin led_seg=8'b0001_0101;end endcase

end

1:begin

r=g_c / 10;

com=4'b 1101;

case(r)

0:begin led_seg=8'b1001_0000;end 1:begin led_seg=8'b1001_1111;end 2:begin led_seg=8'b0101_1000;end 3:begin led_seg=8'b0001_1001;end 4:begin led_seg=8'b0001_0111;end 5:begin led_seg=8'b0011_0001;end 6:begin led_seg=8'b0011_0000;end 7:begin led_seg=8'b1001_1101;end 8:begin led_seg=8'b0001_0000;end 9:begin led_seg=8'b0001_0101;end endcase

end

//显示投入的钱数及余额

2:begin

r=money % 10;

com=4'b 1011;

case(r)

0:begin led_seg=8'b1001_0000;end 1:begin led_seg=8'b1001_1111;end 2:begin led_seg=8'b0101_1000;end 3:begin led_seg=8'b0001_1001;end 4:begin led_seg=8'b0001_0111;end 5:begin led_seg=8'b0011_0001;end 6:begin led_seg=8'b0011_0000;end

7:begin led_seg=8'b1001_1101;end 8:begin led_seg=8'b0001_0000;end 9:begin led_seg=8'b0001_0101;end endcase

end

3:begin

r=money / 10;

com=4'b 0111;

case(r)

0:begin led_seg=8'b1001_0000;end 1:begin led_seg=8'b1001_1111;end 2:begin led_seg=8'b0101_1000;end 3:begin led_seg=8'b0001_1001;end 4:begin led_seg=8'b0001_0111;end 5:begin led_seg=8'b0011_0001;end 6:begin led_seg=8'b0011_0000;end 7:begin led_seg=8'b1001_1101;end 8:begin led_seg=8'b0001_0000;end 9:begin led_seg=8'b0001_0101;end endcase

end

endcase

state=state+1;

end

if(read==0)//商家读取模式

begin

case(i) //显示销售总额

0:begin

b=count/10;

com=4'b 1110;

case(b)

0:begin led_seg=8'b1001_0000;end 1:begin led_seg=8'b1001_1111;end 2:begin led_seg=8'b0101_1000;end 3:begin led_seg=8'b0001_1001;end 4:begin led_seg=8'b0001_0111;end 5:begin led_seg=8'b0011_0001;end 6:begin led_seg=8'b0011_0000;end 7:begin led_seg=8'b1001_1101;end 8:begin led_seg=8'b0001_0000;end 9:begin led_seg=8'b0001_0101;end endcase

end

1:begin

b=count%10; com=4'b 1101; case(b)

0:begin led_seg=8'b1001_0000;end 1:begin led_seg=8'b1001_1111;end 2:begin led_seg=8'b0101_1000;end 3:begin led_seg=8'b0001_1001;end 4:begin led_seg=8'b0001_0111;end 5:begin led_seg=8'b0011_0001;end 6:begin led_seg=8'b0011_0000;end 7:begin led_seg=8'b1001_1101;end 8:begin led_seg=8'b0001_0000;end 9:begin led_seg=8'b0001_0101;end endcase end

endcase i=i+1; if(i==2) begin i=0; end end end

endmodule

该模块的功能是将顾客投入硬币的钱数、投币额足够送出货物、应找回的多余的钱数用数码管显示出来。

(8)总体顶层模块autoseller 程序代码: module

autoseller(f_1s,f_1m,g,m,yes,read,zero,com,led_seg,leda,ledb,led); input yes,read,zero;//确定键,商家读取键,清零键 input f_1s,f_1m;

input [1:0] g , m; //货品及投币选择键

output com,led_seg,leda,ledb,led;//数码管输出及点阵输出 wire leda;

wire leda1,leda2,ledb1,ledb2; wire [3:0]led1,led2; wire ledb; wire a;

wire [3:0] goods,money,led,change,g_c,com; integer r,b, a_tmp2,a_tmp1;

wire [1:0] ret=0;//用于控制各状态间的转换 wire [9:0]count; wire [7:0]led_seg;

wire [1:0]state=0; wire i=0; wire x;

//fenpin autoseller1(clk,f_1m,f_1s); count autoseller2(f_1s,ret,a);

init autoseller3(a,led1,leda1,ledb1,x,ret); qingling autoseller4(f_1m,zero,count); shibie autoseller5(read,g,m,goods,money);

control autoseller6(yes,money,goods,g_c,ret,leda2,ledb2,led2,count); display autoseller7(g_c,goods,money,read,com,led_seg,count); assign leda=(a==3)?leda1:leda2; assign ledb=(a==3)?ledb1:ledb2; assign led=(a==3)?led1:led2; endmodule

该模块的功能是将各子模块通过顶层模块联系在一起,以期实现整体设计功能。

五: Quartus II综合分析得各模块RTL 电路图

(1)autoseller 总模块RTL 电路图

:

(2)fenpin模块RTL 电路图:

(3)count 模块RTL 电路图:

(4)shibie 模块RTL 电路图:

(6)init 模块RTL 电路图:

(7)control模块RTL 电路图:

六:Quartus II仿真结果

(1)autoseller总模块仿真结果图:

(2)fenpin模块仿真结果图:

(3)count 模块仿真结果图:

(5)qingling 模块仿真结果图:

(6)init 模块仿真结果图:

(8)display 模块仿真结果图:

七:FPGA 开发板管脚配置图:

八:FPGA 开发板测试结果


相关文章

  • 如何设计全自动氧弹量热仪项目可行性研究报告(技术工艺+设备选型+财务概算+厂区规划)标准方案
  • 如何设计全自动氧弹量热仪项目可行性研究报告(技术工艺+设备选 型+财务概算+厂区规划)标准方案 [编制机构]:博思远略咨询公司(360投资情报研究中心) [研究思路]: [关键词识别]:1.全自动氧弹量热仪项目可研2.全自动氧弹量热仪市场前 ...查看


  • [水电企业档案分类方案]6-9大类
  • 6 产品(生产) 60 水库调度运行 600 调度方案.计划.总结等文件材料 包括调度方案的计划.总结.运行简报.运行分析. 总结等综合性文件材料 601 调度卡片.手册等基本资料 包括水库设计运行特性.调度图.水位与容积.面积 .泄洪曲线 ...查看


  • 关于推进化工企业自动化控制及安全联锁技术改造工作的意见15号
  • 山西省安全生产监督管理局 晋安监管三函„2010‟15号 山西省安全生产监督管理局 关于推进化工企业自动化控制及安全联锁技术改造 工作的意见 各市安全生产监督管理局,省重点监管危险化学品企业: 根据<国务院安委会办公室关于进一步加强危 ...查看


  • 电气自动化技术专业
  • 电气自动化技术专业毕业综合实训 电气工程系 班级:电气1407 组长:张旭29 组员:康磊30 前 言 <毕业综合实训>是教学过程的最后阶段采用的一种总结性的实践教学环节, 是"以服务为宗旨,以就业为导向,产学研相结合 ...查看


  • 2014版建设工程文件归档规范(建筑)
  • 表 A.0.1 建筑工程文件归档范围保存单位 类别 归档文件 建设单位 设计单位 施工单位 监理单位 城建档案馆 工程准备阶段文件(A)类 A1 1 2 3 4 A2 1 2 3 4 5 6 A3 1 2 3 立项文件 项目建议书批复文件及 ...查看


  • 自动售货机论文报告
  • 钦州学院 自动控制课程设计报告 设计题目:自动售货机 院 系: 专 业: 专业班级: 学生姓名: 学生学号: 指导教师: 2014年 10月 目录 一, 摘要--------------------------------2 二, 引言-- ...查看


  • 自动化专业导论报告
  • 成绩:__________ 2012-2013学年上半学期 电气信息类导论报告 自动化 姓名:张欢欢 2013 年1 月 摘要 随着社会的发展,自动化在我们的生活中运用得更为广泛.这篇文章就自动化专业的内容,发展趋势,还有就业情况作一定介绍 ...查看


  • 消防验收流程
  • 取得质监站验收报告之前应做的检测和验收 1.人防验收:人防站 2.强电检测:广安消防 3.电梯检测.验收 4.弱电检测 5.防雷检测 6.市政验收:水.电.暖.煤气.污水.中水.雨水.景观绿化.道路 消防检测验收全套资料 一消防产品检测申请 ...查看


  • 消防检测和原始记录
  • 消 防 检 测 和 原 始 记 录 消防检测报告是体现消防检测单位对单位工程自动消防设施使用功能是否正常的实验室报告,具备法律效应.因此,消防检测报告是否真实的反应了该单位工程自动消防设施的实际运行功能状态,起着严肃的判定作用. 翻开消防检 ...查看


  • 消防自检报告
  • 山东杭氧气体有限公司 62500Nm3/H(氧)带氩空分装置 消防自检报告 山东坚瑞消防安全有限公司 山东杭氧气体有限公司 报告日期:2015年 10月 18日 一. 工程概况: 本项目属于山东杭氧气体有限公司,建筑面积7905㎡,建筑层数 ...查看


热门内容