数字系统设计与Verilog HDL实验报告(五)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数字系统设计与Verilog HDL》
实验报告(五)
班级: 自动1003班
**: **
学号: ********
实验五、自动售饮料机系统设计
一、实验目的
1、了解及掌握状态机的基本构成用法;
二、通过ModelSim软件编写程序, 用状态机可以编程设计简
单的自动控制系统。
三、实验内容
四、设计一个自动售饮料机。
假定每瓶饮料售价为2.5元, 可使用
两种硬币, 即5角和1元, 机器有找零功能。
五、机器设计有2个投币孔, 可用2个按键来代替。
还设有2个输
出孔, 分别输出饮料和找零, 提示用户取走饮料和零钱。
六、实验步骤及源程序
新建工程及文件, 分别添加设计程序及测试程序, 进行编译及纠错, 编译通过后运行程序仿真进行调试得出结果。
设计模块:
module sell(yi_yuan,wu_jiao, get,half_out,sell_out,reset,clk);
parameter idle=0, half=1, one=2,two=3,three=4;
input yi_yuan,wu_jiao,reset,clk;
output get,half_out,sell_out;
reg get,half_out,sell_out;
reg[2:0] s;
always @(posedge clk)
begin
if(reset)
begin
sell_out=0; get=0; half_out=0; s=idle;
end
else
case(s)
idle: begin
sell_out=0; get=0; half_out=0;
if(wu_jiao) s=half;
else if(yi_yuan)s=one;
end
half: begin
if(wu_jiao) s=one;
else if(yi_yuan)
s=two;
end
one: begin
if(wu_jiao) s=two;
else if(yi_yuan)s=three;
end
two: begin
if(wu_jiao) s=three;
else if(yi_yuan)
begin
sell_out=1;get=1; s=idle;
end
end
three: begin
if(wu_jiao)
begin
sell_out=1; get=1; s=idle;
end
else if(yi_yuan)
begin
sell_out=1;get=1;half_out=1; s=idle;
end
end
default:begin
sell_out=0; get=0; half_out=0; s=idle; end
endcase
end
endmodule
测试模块:
`timescale 1ns/1ns
module sell_top;
reg yi_yuan,wu_jiao,reset,CLK;
wire get,half_out,sell_out;
always #50 CLK=~CLK;
initial
begin
CLK =0; reset=1;
#100 reset=0;
yi_yuan=0;
wu_jiao=0;
end
always@(posedge CLK)
begin
wu_jiao={$random}%2;#50 wu_jiao=0;
end
always@(posedge CLK)
begin
if(!wu_jiao)yi_yuan=1;#50 yi_yuan=0;
end
sell m(.yi_yuan(yi_yuan),.wu_jiao(wu_jiao), .get(get),
.half_out(half_out),.sell_out(sell_out),.reset(reset),.clk(CLK));
endmodule
七、实验结果
八、实验心得体会
由于老师在实验前已经很详细的为我们讲解了这次实验的要点和要注意的
问题, 所以这次实验我们完成的还是很成功的。
虽然实验中也遇到了一些问题, 但通过多次实验积累的经验, 我们已经可以很快的解决了。
这也是最后一次实验了, 通过这学期的学习, 我关于这门课有了很大的收获, 对我以后的学习和工作将会有巨大的帮助。