自動售飲料機及多功能數字時鐘VerilogHDL數字設計實踐ppt課件_第1頁
自動售飲料機及多功能數字時鐘VerilogHDL數字設計實踐ppt課件_第2頁
自動售飲料機及多功能數字時鐘VerilogHDL數字設計實踐ppt課件_第3頁
自動售飲料機及多功能數字時鐘VerilogHDL數字設計實踐ppt課件_第4頁
自動售飲料機及多功能數字時鐘VerilogHDL數字設計實踐ppt課件_第5頁
已閱讀5頁,還剩39頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 設計一個自動售飲料機,設飲料售價2.5元,可運用5角和一元硬幣,有找零功能。8 8幣值顯示取飲料找零投幣孔1元5角n 設計思緒n 引入有限形狀機,利用5個形狀表示投入幣值的數目變化情況。【例9.38】自動售飲料機/* 信號定義clk: 時鐘輸入reset: 系統復位信號half_dollar: 投入5角硬幣one_dollar: 投入1元硬幣half_out: 找零信號dispense: 機器售出飲料collect: 提示取走飲料 */module sell( one_dollar, half_dollar, collect, half_out, dispense, reset, clk )

2、;parameter idle=0, half=1, one=2, two=3, three=4; / 幣值情況input one_dollar, half_dollar, reset, clk;output collect, half_out, dispense;reg collect, half_out, dispense;reg2:0 D; / 形狀量always ( posedge clk )beginif( reset )begindispense = 0;collect = 0;endcase( D )idle:if( half_dollar ) D = half;else if(

3、 one_dollar ) D = one;half:if( half_dollar ) D = one;else if( one_dollar ) D = two;one:if( half_dollar ) D = two;else if( one_dollar ) D = three;two:if( half_dollar ) D = three;else if( one_dollar )begindispense = 1; / 售出飲料collect = 1;D = idle;endthree: if( half_dollar )begin dispense = 1;collect =

4、1;D = idle;endelse if( one_dollar )begindispense = 1;collect = 1;half_out = 1; D = idle;endendcaseendendmodule 設計一個多功能數字鐘,具有計時、定時與鬧鐘、校時和整點報時功能。功能控制按鍵基準時鐘揚聲器時間顯示產生鬧鈴和報時音校時時、分、秒計時【例9.39】多功能數字鐘/* 信號定義clk 4Hz規范時鐘clk_1k 1KHz鬧鈴報時時鐘mode 功能選擇:0計時,1鬧鐘,2校時,接按鍵turn 手動校時,選擇調整小時還是分鐘,接按鍵; 長時間按住,清零秒鐘change 手動調整,每按

5、1次,計數器加1,接按鍵; 長時間按住,延續快速加1hour, min, sec 時、分、秒顯示信號, BCD碼,驅動數碼管alert 驅動揚聲器,產生鬧鈴和報時音; 鬧鈴音為20s急促音,按change可屏蔽; 整點報時音為四短一長音LD_alert 指示能否設置鬧鐘LD_hour 指示當前調整的是小時,接發光二極管LD_min 指示當前調整的是分鐘,接發光二極管 */module clock( clk, clk_1k, mode, change, turn, alert, hour, min, sec, LD_alert, LD_hour, LD_min );input clk, clk_

6、1k, mode, change, turn;output alert, LD_alert, LD_hour, LD_min;output7:0 hour, min, sec;reg7:0 hour, min, sec, hour1, min1, sec1, ahour, amin;reg1:0 m, fm, num1, num2, num3, num4;reg1:0 loop1, loop2, loop3, loop4, sound;reg LD_hour, LD_min;reg clk_1Hz, clk_2Hz, minclk, hclk;reg alert1, alert2, ear;r

7、eg count1, count2, counta, countb;wire ct1, ct2, cta, ctb, m_clk, h_clk;always ( posedge clk ) / ear決議整點報時的長短音beginclk_2Hz = clk_2Hz;if( sound = 3 )beginsound = 0;ear = 1;endelsebeginsound = sound + 1;ear = 0;endendalways ( posedge clk_2Hz ) / 產生1Hz的時基信號clk_1Hz = clk_1Hz;always ( posedge mode ) / mo

8、de信號選擇功能beginif( m = 2 )m = 0;elsem = m + 1;endalways ( negedge turn ) / 選擇調整小時還是分鐘fm = fm;always / 產生count1,count2,counta,countb信號begin case( m )2: / 校時beginif( fm ) / 調整分鐘begincount1 = change; LD_min, LD_hour = 2;endelse / 調整小時begincounta = change; LD_min, LD_hour = 1;endend1: / 鬧鐘beginif( fm ) /

9、調整分鐘begincount2 = change; LD_min, LD_hour = 2;endelse / 調整小時begincountb = change; LD_min, LD_hour = 1;endenddefault: / 計時 count1,count2,counta,countb,LD_min,LD_hour = 0; endcaseendalways ( negedge clk ) / 長按change,鬧鐘分鐘延續加1begin if( count2 )beginif( loop1 = 3 ) num1 = 1; / 生成num1信號elsebeginloop1 = lo

10、op1 + 1;num1 = 0;endend elsebeginloop1 = 0;num1 = 0;endendalways ( negedge clk ) / 長按change,鬧鐘小時延續加1begin if( countb )beginif( loop2 = 3 ) num2 = 1; / 生成num2信號elsebeginloop2 = loop2 + 1;num2 = 0;endend elsebeginloop2 = 0;num2 = 0;endendalways ( negedge clk ) / 長按change,校時分鐘延續加1begin if( count1 )begi

11、nif( loop3 = 3 ) num3 = 1; / 生成num3信號elsebeginloop3 = loop3 + 1;num3 = 0;endend elsebeginloop3 = 0;num3 = 0;endendalways ( negedge clk ) / 長按change,校時小時延續加1begin if( counta )beginif( loop4 = 3 ) num4 = 1; / 生成num4信號elsebeginloop4 = loop4 + 1;num4 = 0;endend elsebeginloop4 = 0;num4 = 0;endend/ ct1用于計

12、時、校時中的分鐘計數assign ct1 = ( num3 & clk ) | ( !num3 & m_clk ); / ct2用于鬧鐘定時中的分鐘調理assign ct2 = ( num1 & clk ) | ( !num1 & count2 );/ cta用于計時、校時中的小時計數assign cta = ( num4 & clk ) | ( !num4 & h_clk );/ ctb用于鬧鐘定時中的小時調理assign ctb = ( num2 & clk ) | ( !num2 & countb );assign m_cl

13、k = minclk | count1;assign h_clk = hclk | counta;always ( posedge clk_1Hz ) / 秒計時和秒調整beginif( !( sec1 8h59 ) | turn & ( !m ) ) / 長按turn,清零秒beginsec1 = 0;if( !( turn & ( !m ) ) ) minclk = 1;endelsebeginif( sec13:0 = 4b1001 )beginsec13:0 = 4b0000;sec17:4 = sec17:4 + 1;endelsesec13:0 = sec13:0

14、+ 1;minclk = 0;endendalways ( posedge cta ) / 小時計時和小時調整beginif( hour1 = 8h23 ) hour1 = 0;elseif( hour13:0 = 4b1001 )beginhour13:0 = 4b0000;hour17:4 = hour17:4 + 1;endelsehour13:0 = hour13:0 + 1;endalways ( posedge ct2 ) / 鬧鐘定時中的分鐘調理beginif( amin = 8h59 )amin = 0;elseif( amin3:0 = 4b1001 )beginamin3:

15、0 = 4b0000;amin7:4 = amin7:4 + 1;endelseamin3:0 = amin3:0 + 1;endalways ( posedge ctb ) / 鬧鐘定時中的小時調理beginif( ahour = 8h23 ) ahour = 0;elseif(ahour3:0 = 4b1001)beginahour3:0 = 4b0000;ahour7:4 = ahour7:4 + 1;endelseahour3:0 = ahour3:0 + 1;endalways / 鬧鈴begin / 假設按住change不放,可屏蔽鬧鈴音if( ( min1 = amin ) &a

16、mp; ( hour = ahour ) & ( amin | ahour ) & ( change ) )if( sec1 8h20 )alert1 = 1; / 鬧鈴時間elsealert1=0;elsealert1 = 0;endalways / 時、分、秒的顯示控制begincase( m )2b00: / 計時形狀beginhour = hour1;min = min1;sec = sec1;end2b01: / 定時形狀beginhour = ahour;min = amin;sec = 8hzz;end2b10: / 計時形狀beginhour = hour1;m

17、in = min1;sec 8h54 ) | ( ! ( min1 | sec1 ) ) )if( sec1 8h54 )alert2 = ear & clk_1k; / 產生短音elsealert2 = !ear & clk_1k; / 產生長音 else alert2 = 0;endendmodule多功能數字鐘端口圖按鍵去抖電路module keystab( keyout, keyin, clk1k );output keyout;input keyin;input clk1k;reg3:0 delay;reg keyout;always ( posedge clk1k

18、)beginif( !keyin )beginif( delay = 15) keyout = 1b0;delay = delay + 1;endelsebegindelay = 0;keyout = 1b1;endendendmodule 設計一個IC卡計費器,能顯示卡值余額,根據話務種類扣除話費。計費器卡插入信號接通訊號時鐘話務種類卡值余額寫卡信號通話時間讀卡信號告警信號切斷通話n 功能要求n 卡值余額每分鐘更新一次n 計時與計費數據以十進制顯示n 話務分為三類:市話每分鐘3角,長話每分鐘6角,特話免費n 卡上余額缺乏告警,幾秒后切斷通話【例9.40】計費器/* 信號定義clk時鐘信號,1

19、Hzcard卡插入信號state接通訊號decide話務種類:01市話,10長話,11特話dispmoney顯示卡內余額,單位為角,最大50元disptime顯示通話時間write下降沿寫卡read上升沿讀卡warn余額過少告警,市話3角,長話6角cut自動切斷通話信號 */module account( state, clk, card, decide, disptime,dispmoney, write, read, warn, cut );output write, read, warn, cut;input state, clk, card;input2:1 decide;output

20、10:0 dispmoney;output8:0 disptime;reg10:0 money; / 余額,BCD碼reg8:0 dtime;reg warn, cut, write, t1m; / 分時鐘reg set, reset_ena;integer num1, temp;assign dispmoney = card ? money : 0;assign disptime = dtime;assign read = card ? 1 : 0;/* 產生分時鐘 */always ( posedge clk )beginif( num1 = 59 )begin num1 = 0; t1m

21、 = 1; endelsebeginif( state ) num1 = num1 + 1;else num1 = 0;t1m = 0;endend/* 計費 */always ( negedge clk )begin if( !set )begin money = 11h500; set = 1; end if( card & state )if( t1m ) case( state, decide )3b101: / 市話if( money 3 )beginwarn = 1;write = 0;reset_ena = 1;endelse beginif( money3:0 4b00

22、11 ) / 市話計費 beginmoney3:0 = money3:0 + 7;if( money7:4 != 0 ) money7:4 = money7:4 - 1;else beginmoney7:4 = 9;money10:8 = money10:8 - 1; end endelse money3:0 = money3:0 - 3; if( dtime3:0 = 9 ) / 通話計時begindtime3:0 = 0;if( dtime7:4 = 9 )begindtime7:4 = 0;dtime8 = dtime8 + 1; endelsedtime7:4 = dtime7:4 + 1; end elsedtime3:0 = dtime3:0 + 1; write = 1; warn = 0; reset

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論