资源描述:
《CPLDFPGA原理及应用课程上级实验报告六.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、《CPLD/FPGA原理及应用》课程上机实验报告(六)实验名称自动售货机的设计实验时间实验地点计算机房实验人姓名陈凯文合作者无学号20101185066实验小组第组实验性质□验证性□设计性□综合性□应用性实验成绩:评阅教师签名:一.实验要求1)设计一个自动售货机2)只能卖1.5,2,2.5三种商品只能投0.5,1,5元三种货币3)用modelsim仿真观察波形验证程序二.实验内容Sa,sb,sc分别表示1.5,2,2.5三种商品Ma,mb,mc分别表示0.515元三种钱Ch1,ch2,ch3分别表示
2、三种商品的出货Zl代表找零首先我这一次实验并不成功,由于对verilog语言不熟练很多语法规则都不知道,加之身体问题好吧这些都是我失败的借口吧。下面是我的状态图状态图:这个状态图画完我想可能我的设计可能存在很大的问题因为我从未在case你写过case编程如下`timescale1ns/1nsmodulezidong_tp;reg[3:0]c,t;regrst,clk;regsa,sb,sc,ma,mb,mc;wirech1,ch2,ch3,zl;parameterCYCLE=100;always#(
3、CYCLE/2)clk=~clk;initialclk=1;zidongu1(sa,sb,sc,ma,mb,mc,rst,zl,ch1,ch2,ch3,clk);initialbeginsa=1;sb=0;sc=0;rst=1;ma=0;mb=0;mc=0;#100sa=1;sb=0;sc=0;rst=0;mc=0;ma=0;mb=0;#10sa=0;sb=0;sc=0;rst=0;mc=1;ma=0;mb=0;#90sa=1;sb=0;sc=0;rst=1;mc=0;ma=0;mb=0;#10sa
4、=0;sb=0;sc=0;rst=0;mc=1;ma=0;mb=0;endinitial$monitor($time,,,"%d,%d,%d,%d,%d,%d,%d,%b,%d,%d,%d,%d",sa,sb,sc,ma,mb,mc,rst,zl,ch1,ch2,ch3,clk);endmodulemodulezidong(sa,sb,sc,ma,mb,mc,rst,zl,ch1,ch2,ch3,clk);inputsa,sb,sc,ma,mb,mc,rst,clk;outputzl,ch1,ch2
5、,ch3;reg[3:0]c,t;regzl,ch1,ch2,ch3;parameterc0=0,c1=1,c2=2,c3=3,t0=0,t1=1,t2=2,t3=3,t4=4;always@(posedgeclk)beginif(!rst)beginc<=c0;zl<=0;ch1<=0;ch2<=0;ch3<=0;t<=t0;endelseif(sa==1&&sb==0&&sc==0)c<=c1;elseif(sa==0&&sb==1&&sc==0)c<=c2;elseif(sa==0&&sb==
6、0&&sc==1)c<=c3;elsec<=c0;endalways@(maormbormcorrst)begincase(c)0:beginzl<=0;ch1<=0;ch2<=0;ch3<=0;t<=t0;end1:begincase(t)0:beginif(ma)begint<=t1;zl<=0;ch1<=0;endelseif(mb)begint<=t2;zl<=0;ch1<=0;endelseif(mc)begint<=t0;zl<=3.5;ch1<=1;endelsebegint<=t0;
7、zl<=0;ch1<=0;ch1<=1;endend1:beginif(!rst)begint<=t0;zl<=0.5;ch1<=0;endelseif(ma)begint<=t2;zl<=0;ch1<=0;endelseif(mb)begint<=t0;zl<=0;ch1<=1;endelseif(mc)begint<=t0;zl<=4;ch1<=1;endelsebegint<=t1;zl<=0;ch1<=0;endend2:beginif(!rst)begint<=t0;zl<=1;ch1<=
8、0;endelseif(ma)begint<=t0;zl<=0;ch1<=1;endelseif(mb)begint<=t0;zl<=0.5;ch1<=1;endelseif(mc)begint<=t0;zl<=4.5;ch1<=1;endelsebegint<=t2;zl<=0;ch1<=0;endenddefault:t<=t0;endcaseend2:begincase(t)0:beginif(ma)begint<=t1;zl<=0;ch2<=0;endelse