资源描述:
《自动售饮料机及多功能数字时钟VerilogHDL数字设计实践》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、9.9自动售饮料机设计一个自动售饮料机,设饮料售价2.5元,可使用5角和一元硬币,有找零功能。88币值显示取饮料找零投币孔1元5角设计思路引入有限状态机,利用5个状态表示投入币值的数目变化情况。【例9.38】自动售饮料机/*信号定义clk:时钟输入reset:系统复位信号half_dollar:投入5角硬币one_dollar:投入1元硬币half_out:找零信号dispense:机器售出饮料collect:提示取走饮料*/modulesell(one_dollar,half_dollar,collect,half_out,dispense,reset,clk);parameterid
2、le=0,half=1,one=2,two=3,three=4;//币值情况inputone_dollar,half_dollar,reset,clk;outputcollect,half_out,dispense;regcollect,half_out,dispense;reg[2:0]D;//状态量always@(posedgeclk)beginif(reset)begindispense=0;collect=0;endcase(D)idle:if(half_dollar)D=half;elseif(one_dollar)D=one;half:if(half_dollar)D=one
3、;elseif(one_dollar)D=two;one:if(half_dollar)D=two;elseif(one_dollar)D=three;two:if(half_dollar)D=three;elseif(one_dollar)begindispense=1;//售出饮料collect=1;D=idle;endthree:if(half_dollar)begindispense=1;collect=1;D=idle;endelseif(one_dollar)begindispense=1;collect=1;half_out=1;D=idle;endendcaseenden
4、dmodule9.10实用多功能数字钟设计一个多功能数字钟,具有计时、定时与闹钟、校时和整点报时功能。功能控制按键基准时钟扬声器时间显示产生闹铃和报时音校时时、分、秒计时【例9.39】多功能数字钟/*信号定义clk4Hz标准时钟clk_1k1KHz闹铃报时时钟mode功能选择:0计时,1闹钟,2校时,接按键turn手动校时,选择调整小时还是分钟,接按键;长时间按住,清零秒钟change手动调整,每按1次,计数器加1,接按键;长时间按住,连续快速加1hour,min,sec时、分、秒显示信号,BCD码,驱动数码管alert驱动扬声器,产生闹铃和报时音;闹铃音为20s急促音,按change可
5、屏蔽;整点报时音为四短一长音LD_alert指示是否设置闹钟LD_hour指示当前调整的是小时,接发光二极管LD_min指示当前调整的是分钟,接发光二极管*/moduleclock(clk,clk_1k,mode,change,turn,alert,hour,min,sec,LD_alert,LD_hour,LD_min);inputclk,clk_1k,mode,change,turn;outputalert,LD_alert,LD_hour,LD_min;output[7:0]hour,min,sec;reg[7:0]hour,min,sec,hour1,min1,sec1,ahou
6、r,amin;reg[1:0]m,fm,num1,num2,num3,num4;reg[1:0]loop1,loop2,loop3,loop4,sound;regLD_hour,LD_min;regclk_1Hz,clk_2Hz,minclk,hclk;regalert1,alert2,ear;regcount1,count2,counta,countb;wirect1,ct2,cta,ctb,m_clk,h_clk;always@(posedgeclk)//ear决定整点报时的长短音beginclk_2Hz<=~clk_2Hz;if(sound==3)beginsound<=0;ear
7、<=1;endelsebeginsound<=sound+1;ear<=0;endendalways@(posedgeclk_2Hz)//产生1Hz的时基信号clk_1Hz<=~clk_1Hz;always@(posedgemode)//mode信号选择功能beginif(m==2)m<=0;elsem<=m+1;endalways@(negedgeturn)//选择调整小时还是分钟fm<=~fm;always//产生count1,