-
Verilog HDL
课程设计报告
实
验
名
称:基于
Verilog
HDL
的自动售货机
指
导
老
师
:
王
冠
军
班
级
:信科
12-1
姓
名
:吴涛
学
号
:
第一章
系统设计
1.1
系统设计
(1)
用四个发光二极管分别模拟售出价值为
5
角、
1
元、
1.5
元和
2
元的小商品,购买
者可以通过开关选择任意一
种标价中的小商品。
(2)
灯亮时表示该小商品售出。
<
/p>
(3)
用开关分别模拟
5
角、
1
元硬币和
5
元纸币投入,
可以用几只发光二极管
(
或数码管
)
分别代表找回剩余的硬币。
(4)
每次只能售出一种小商品,当所投硬币达
到或超过购买者所选面值时,售出货物并
找回剩余的硬币,回到初始状态;
(5)
当所投硬币值不足面值时,可通过一个复位
键退回所投硬币,回到初始状态。
第二章
详细设计
2.1
自动售货机状态描述
判断开关被按下
的个数
N
。若
N>=2
表示所选本次选择无效,返回初始状态;若
N=1
则显
示所选商品,并继续执行下面的流程。
3
个开关分别代表三种商
品。
4
个开关分别代表
投入
0.5
元,
1
元,
2
元,
5
元,统计投
入总额。投入总额与商品价格做比较,如果总额
<
商
品价格,退钱并返回初始状态如果总额
>=
商品价
格,则继续执行下面的程序。找零
=
总额
-
商品价格,数码管显示找零金额。状态图如图
2.1
所示:
2.2
详细状态描述
2.2.1
初始状态
各变量都设置为零,按下<
/p>
rst
键后,一切恢复到初始状态。
2.2.2
选商品状态
分别有价格为
0.5
元、
1
元、
1.5
元和
2
元的商
品,每次选择商品前,设置一个标志位
btn_sell
表示选
择商品状态。此自动售货机每一次售货时只能一次选择一种商品,当同时选
择两种以上时
,选择商品无效,数码管显示清零,重新进行商品选择。选择商品后,数码管
显示所选商
品价格。
2.2.3
投币状态
当选好商品后,开始投币。
同样有一标志位
btn_price
表示投币金额。投币口只接
受三
种面值的钱币
0.5
元、
1
元和
5
元,可以同时
投入多种面值钱币。投完币后,先有一个确认
买商品的过程,
若
投了币但又不购买商品了,
就将全部投币金额退回;
若确认购买
商品,则
进入下一状态——找零状态。
2.2.4
找零状态
投完币,
< br>并确认购买商品后,
进入找零状态。
首先要将所投的金额
与所选商品的价格做
比较,若所投金额小于商品价格,则退回所投钱币;若大于等于商品
价格,则两者做差,得
到需要找零的钱。
第三章
软件设计
3.1
程序总流程图
3.2
程序
module seller(clk,rst,dis_mony,btn_ok,b
tn_mon,btn_sell,led_warn,led,beep);
input clk,rst,btn_ok;
input
[2:0] btn_mon;//
选择放入的钱
input [3:0] btn_sell;//
选择商品<
/p>
bbt_5,gz_10,kqs_15,kl_20
output [3:0]
led;//led_5,led_10,led_15,led_20
output
led_warn;//
钱不足,指示灯
output [10:0] dis_mony;//
数码管
显示投入面值,
dia_mony[10:8]=com
位选<
/p>
,dis_mony[7:0]=
段
码<
/p>
output beep;
integer r;
reg clk_500Hz;
reg [3:0]
led;//led_5,led_10,led_15,led_20
reg
led_warn;//
警告放入钱不足
reg [10:0] dis_mony;
reg
[31:0] counter;
reg [9:0]
price,price_all;
reg [1:0] flag =
2'b00;//
数码管显示标志位
reg beep=0;
parameter COUNT1
= 25'd10000;
/*
分频使数码管显示稳定
*/
always @ (posedge clk)
begin
if(counter== 0)
begin
counter <= COUNT1;
clk_500Hz <=
~clk_500Hz;
end
else
counter <= counter-1;
end
always @(negedge rst or
posedge clk)
begin
if
(rst==0)
begin
led =
4'b0000;//LED
灭
price_all =
0;//
价格清零
led_warn = 0;
price = 0;
beep = 0;
end
else
begin/*
三种面值共
8
种组合
*/
case(btn_mon)
3'b001:begin price_all = 5;end
3'b010:begin
price_all = 10;end
3'b100:begin price_all = 50;end
3'b011:begin
price_all = 15;end
3'b101:begin price_all = 55;end
3'b110:begin
price_all = 60;end
3'b111:begin price_all = 65;end
default:begin
price_all = 0;end
endcase
case(btn_sell)
4'b0001:begin price = 5;
end
4'b0010:begin price = 10;
end
4'b0100:begin
price = 15;
-
-
-
-
-
-
-
-
-
上一篇:采购发票
下一篇:考研英语历年阅读理解真题精析--2000年part4