自动售饮料机及多功能数字时钟VerilogHDL数字设计实践课件_第1页
自动售饮料机及多功能数字时钟VerilogHDL数字设计实践课件_第2页
自动售饮料机及多功能数字时钟VerilogHDL数字设计实践课件_第3页
自动售饮料机及多功能数字时钟VerilogHDL数字设计实践课件_第4页
自动售饮料机及多功能数字时钟VerilogHDL数字设计实践课件_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

9.9自动售饮料机设计一个自动售饮料机,设饮料售价2.5元,可使用5角和一元硬币,有找零功能。88币值显示取饮料找零投币孔1元5角设计思路

引入有限状态机,利用5个状态表示投入币值的数目变化情况。【例9.38】自动售饮料机/*信号定义clk: 时钟输入reset:系统复位信号half_dollar:

投入5角硬币one_dollar:

投入1元硬币half_out:

找零信号dispense:

机器售出饮料collect:

提示取走饮料*/always@(posedgeclk)begin if(reset) begin dispense=0; collect=0; end case(D) idle: if(half_dollar)D=half; elseif(one_dollar)D=one; half: if(half_dollar)D=one; 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) begin dispense=1;//售出饮料

collect=1; D=idle; end three: if(half_dollar) begin dispense=1; collect=1; D=idle; end elseif(one_dollar) begin dispense=1;

collect=1; half_out=1; D=idle; end endcase endendmodule【例9.39】多功能数字钟/*信号定义clk 4Hz标准时钟clk_1k 1KHz闹铃报时时钟mode功能选择:0计时,1闹钟,2校时,接按键turn 手动校时,选择调整小时还是分钟,接按键;

长时间按住,清零秒钟change手动调整,每按1次,计数器加1,接按键;长时间按住,连续快速加1hour,min,sec时、分、秒显示信号,BCD码,驱动数码管alert 驱动扬声器,产生闹铃和报时音; 闹铃音为20s急促音,按change可屏蔽; 整点报时音为四短一长音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,ahour,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_2Hz)//产生1Hz的时基信号

clk_1Hz<=~clk_1Hz;always@(posedgemode)//mode信号选择功能begin if(m==2) m<=0; else m<=m+1;endalways@(negedgeturn)//选择调整小时还是分钟

fm<=~fm;always//产生count1,count2,counta,countb信号begincase(m) 2://校时

begin if(fm)//调整分钟

begin count1<=~change; {LD_min,LD_hour}<=2; end else//调整小时

begin counta<=~change; {LD_min,LD_hour}<=1; end end 1://闹钟 begin if(

fm

)//调整分钟 begin count2

<=

~change; {

LD_min,

LD_hour

}

<=

2; end else//调整小时 begin countb

<=

~change; {

LD_min,

LD_hour

}

<=

1; end end default://计时

{

count1,count2,counta,countb,LD_min,LD_hour

}

<=

0;

endcase endalways@(

negedgeclk

)//长按change,闹钟小时连续加1begin

if(

countb) begin if(

loop2==

3

)

num2<=

1;

//生成num2信号 else begin loop2<=

loop2+

1; num2<=

0; end end

else begin loop2<=

0; num2<=

0; endendalways@(

negedgeclk

)//长按change,校时分钟连续加1begin

if(

count1) begin if(

loop3==

3

)

num3<=

1;

//生成num3信号 else begin loop3<=

loop3+

1; num3<=

0; end end

else begin loop3<=

0; num3<=

0; endendalways@(

negedgeclk

)//长按change,校时小时连续加1begin

if(

counta) begin if(

loop4==

3

)

num4<=

1;

//生成num4信号 else begin loop4<=

loop4+

1; num4<=

0; end end

else begin loop4<=

0; num4<=

0; endendalways@(

posedgeclk_1Hz

)//秒计时和秒调整begin if(

!(

sec1

^

8‘h59

)

|

~turn

&

(

!m

)

)//长按turn,清零秒 begin sec1

<=

0; if(

!(

~turn

&

(

!m

)

)

)

minclk

<=

1; end else begin if(

sec1[3:0]

==

4'b1001

) begin sec1[3:0]

<=

4'b0000; sec1[7:4]

<=

sec1[7:4]

+

1; end else sec1[3:0]

<=

sec1[3:0]

+

1; minclk

<=

0; endendalways@(

posedgecta

)//小时计时和小时调整begin if(

hour1

==

8'h23

) hour1

<=

0; else if(

hour1[3:0]

==

4'b1001

) begin hour1[3:0]

<=

4'b0000; hour1[7:4]

<=

hour1[7:4]

+

1; end else hour1[3:0]

<=

hour1[3:0]

+

1;endalways@(

posedgect2

)//闹钟定时中的分钟调节begin if(

amin

==

8'h59

) amin

<=

0; else if(

amin[3:0]

==

4'b1001

) begin amin[3:0]

<=

4'b0000; amin[7:4]

<=

amin[7:4]

+

1; end else amin[3:0]

<=

amin[3:0]

+

1;endalways//闹铃begin//若按住change不放,可屏蔽闹铃音 if((min1==amin)&&(hour==ahour)&&(amin|ahour)&&(change))

if(sec1<8'h20) alert1<=1;//闹铃时间

else alert1<=0; else alert1<=0;endalways//时、分、秒的显示控制begin case(

m

) 2‘b00://计时状态 begin hour

<=

hour1; min

<=

min1; sec

<=

sec1; end 2‘b01://定时状态 begin hour

<=

ahour; min

<=

amin; sec

<=

8'hzz; end多功能数字钟端口图按键去抖电路modulekeystab(

keyout,

keyin,

clk1k

);outputkeyout;inputkeyin;inputclk1k;reg[3:0]delay;regkeyout;always@(posedgeclk1k)begin if(!keyin) begin if(delay==15)keyout<=1'b0; delay<=delay+1; end else begin delay<=0; keyout<=1'b1; endendendmodule9.11计费器设计一个IC卡电话计费器,能显示卡值余额,根据话务种类扣除话费。计费器卡插入信号接通信号时钟话务种类卡值余额写卡信号通话时间读卡信号告警信号切断通话功能要求卡值余额每分钟更新一次

计时与计费数据以十进制显示

话务分为三类:市话每分钟3角,长话每分钟6角,特话免费

卡上余额不足告警,几秒后切断通话【例9.40】电话计费器/*信号定义clk 时钟信号,1Hzcard 卡插入信号state 接通信号decide 话务种类:01市话,10长话,11特话dispmoney 显示卡内余额,单位为角,最大50元disptime 显示通话时间write 下降沿写卡read 上升沿读卡warn 余额过少告警,市话3角,长话6角cut 自动切断通话信号*/moduleaccount(state,clk,card,decide,disptime, dispmoney,write,read,warn,cut);outputwrite,read,warn,cut;inputstate,clk,card;input[2:1]decide;output[10:0]dispmoney;output[8:0]disptime;reg[10:0]money;//余额,BCD码reg[8:0]dtime;regwarn,cut,write,t1m;//分时钟regset,reset_ena;integernum1,temp;assigndispmoney=card?money:0;assigndisptime=dtime;assignread=card?1:0;/*********************产生分时钟*********************/always@(posedgeclk)begin if(num1==59) beginnum1<=0;t1m<=1;end else begin if(state)num1<=num1+1; elsenum1<=0; t1m<=0; endend/***********************电话计费**********************/always@(negedgeclk)beginif(!set) beginmoney<=11'h500;set<=1;endif(card&state) if(t1m) case({state,decide}) 3'b101://市话 if(money<3) begin warn<=1; write<=0; reset_ena<=1; endelsebegin if(money[3:0]<4'b0011)//市话计费

begin money[3:0]<=money[3:0]+7; if(money[7:4]!=0) money[7:4]<=money[7:4]-1; else begin money[7:4]<=9; money[10:8]<=money[10:8]-1; end end else money[3:0]<=money[3:0]-3;

if(

dtime[3:0]

==

9

)

//通话计时 begin

dtime[3:0]

<=

0; if(

dtime[7:4]

==

9

) begin dtime[7:4]

<=

0; dtime[8]

<=

dtime[8]

+

1;

end else dtime[7:4]

<=

dtime[7:4]

+

1; end

else dtime[3:0]

<=

dtime[3:0]

+

1;write<=1;warn

<=

0;

reset_ena

<=

0;end3'b110://长话

if(money<6) begin warn<=1; write<=0; reset_ena<=1; end

if(

dtime[3:0]

==

9

)

//通话计时 begin

dtime[3:0]

<=

0; if(

dtime[7:4]

==

9

) begin dtime[7:4]

<=

0; dtime[8]

<=

dtime[8]

+

1;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论