HDLVerilog課程設計報告自動售貨機_第1頁
HDLVerilog課程設計報告自動售貨機_第2頁
HDLVerilog課程設計報告自動售貨機_第3頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Verilog HDL課程設計報告實驗名稱:基于Verilog HDL的自動售貨機指導老師:王冠軍班級:信科12-1姓名:吳濤號:06122485第一章 系統(tǒng)設計1.1 系統(tǒng)設計(1) 用四個發(fā)光二極管分別模擬售出價值為 5角、1元、1.5 元和 2 元的小商品, 購買者可以通過開關選擇任意一種標價中的小商品。(2) 燈亮時表示該小商品售出。(3) 用開關分別模擬 5角、1 元硬幣和 5元紙幣投入,可以用幾只發(fā)光二極管 (或 數(shù)碼管 )分別代表找回剩余的硬幣。(4) 每次只能售出一種小商品,當所投硬幣達到或超過購買者所選面值時,售 出貨物并找回剩余的硬幣,回到初始狀態(tài);(5) 當所投硬幣值不足

2、面值時, 可通過一個復位鍵退回所投硬幣, 回到初始狀 態(tài)。第二章 詳細設計2.1 自動售貨機狀態(tài)描述判斷開關被按下的個數(shù) N 。若 N>=2 表示所選本次選擇無效,返回初始狀態(tài); 若 N=1 則顯示所選商品,并繼續(xù)執(zhí)行下面的流程。 3 個開關分別代表三種商品。 4 個開關分別代表投入 0.5 元, 1元, 2元, 5 元,統(tǒng)計投入總額。投入總額與商品 價格做比較, 如果總額 <商品價格,退錢并返回初始狀態(tài)如果總額 >= 商品價格, 則 繼續(xù)執(zhí)行下面的程序。找零 =總額 -商品價格,數(shù)碼管顯示找零金額。狀態(tài)圖如圖2.1 所示:2.2 詳細狀態(tài)描述2.2.1 初始狀態(tài)各變量都設置

3、為零,按下 rst 鍵后,一切恢復到初始狀態(tài)。2.2.2 選商品狀態(tài)分別有價格為 0.5元、 1元、 1.5元和 2 元的商品,每次選擇商品前,設置一 個標志位 btn_sell 表示選擇商品狀態(tài)。 此自動售貨機每一次售貨時只能一次選擇一 種商品,當同時選擇兩種以上時,選擇商品無效,數(shù)碼管顯示清零,重新進行商 品選擇。選擇商品后,數(shù)碼管顯示所選商品價格。2.2.3 投幣狀態(tài)當選好商品后,開始投幣。同樣有一標志位 btn_price 表示投幣金額。投幣口 只接受三種面值的錢幣 0.5元、 1元和 5元,可以同時投入多種面值錢幣。投完幣 后,先有一個確認買商品的過程,若投了幣但又不購買商品了,就將

4、全部投幣金 額退回;若確認購買商品,則進入下一狀態(tài)找零狀態(tài)。2.2.4 找零狀態(tài) 投完幣,并確認購買商品后,進入找零狀態(tài)。首先要將所投的金額與所選商品 的價格做比較,若所投金額小于商品價格,則退回所投錢幣;若大于等于商品價 格,則兩者做差,得到需要找零的錢。第三章 軟件設計3.1 程序總流程圖3.2 程序module seller(clk,rst,dis_mony,btn_ok,btn_mon,btn_sell,led_warn,led,beep);input clk,rst,btn_ok;input 2:0 btn_mon;/ 選擇放入的錢input 3:0 btn_sell;/ 選擇商品

5、bbt_5,gz_10,kqs_15,kl_20output 3:0 led;/led_5,led_10,led_15,led_20output led_warn;/ 錢不足,指示燈output 10:0 dis_mony;/ 數(shù)碼管顯示投入面值, dia_mony10:8=com 位選,dis_ mon y7:0=段碼output beep;integer r;reg clk_500Hz;reg 3:0 led;/led_5,led_10,led_15,led_20reg led_warn;/ 警告放入錢不足reg 10:0 dis_mony;reg 31:0 counter;reg 9:0

6、 price,price_all;reg 1:0 flag = 2'b00;數(shù)碼管顯示標志位reg beep=0;parameter COUNT1 = 25'd10000;/* 分頻使數(shù)碼管顯示穩(wěn)定 */always (posedge clk)beginif(counter= 0)begincounter <= COUNT1;clk_500Hz <= clk_500Hz;endelsecounter <= counter-1;endalways (negedge rst or posedge clk)beginif (rst=0)beginled = 4

7、9;b0000;/LED 滅price_all = 0;/ 價格清零 led_warn = 0;price = 0;beep = 0;endelsebeg in/*三種面值共8種組合*/case(btn_mon)3'b001:begin price_all = 5;end3'b010:begin price_all = 10;end3'b100:begin price_all = 50;end3'b011:begin price_all = 15;end3'b101:begin price_all = 55;end3'b110:begin pri

8、ce_all = 60;end3'b111:begin price_all = 65;end default:begin price_all = 0;end endcasecase(btn_sell)4'b0001:begin price = 5;end4'b0010:begin price = 10;end4'b0100:begin price = 15;end4'b1000:begin price = 20;enddefault:begin price = 0;endif(btn_ok = 1)beginif(price_all < price

9、) / 放入錢不足begin led_warn = 1; price = 0;endelsebegin /金錢足夠price_all = price_all-price;beep = 1;case(price) /LED 燈顯示貨物賣出5: begin led = 4'b0001;end10:begin led = 4'b0010;end15:begin led = 4'b0100;end20:begin led = 4'b1000;end endcaseendend else beep = 0;endend/* 分頻后將時鐘給數(shù)碼管,數(shù)碼管分別顯示放入錢的多少

10、、商品價格*/always (posedge clk_500Hz)begincase(flag)2'b00:beginr=price_all%10;case(r)0:begin dis_mony=11'b111_0011_1111;end 1:begin dis_mony=11'b111_0000_0110;end 2:begin dis_mony=11'b111_0101_1011;end 3:begin dis_mony=11'b111_0100_1111;end 4:begin dis_mony=11'b111_0110_0110;end

11、5:begin dis_mony=11'b111_0110_1101;end 6:begin dis_mony=11'b111_0111_1101;end 7:begin dis_mony=11'b111_0000_0111;end 8:begin dis_mony=11'b111_0111_1111;end 9:begin dis_mony=11'b111_0110_1111;end endcaseflag = 2'b01; end 2'b01: beginr=price_all/10;case(r)0:begin dis_mony=1

12、1'b110_1011_1111;end 1:begin dis_mony=11'b110_1000_0110;end 2:begin dis_mony=11'b110_1101_1011;end 3:begin dis_mony=11'b110_1100_1111;end 4:begin dis_mony=11'b110_1110_0110;end 5:begin dis_mony=11'b110_1110_1101;end 6:begin dis_mony=11'b110_1111_1101;end 7:begin dis_mony=

13、11'b110_1000_0111;end 8:begin dis_mony=11'b110_1111_1111;end 9:begin dis_mony=11'b110_1110_1111;endflag = 2'b00;endendcaseend/* 數(shù)碼管段碼表 */function 7:0 led7;input 3:0 dis_input;begincase (dis_input)0 : led7 = 8'b0011_1111;1 : led7 = 8'b0000_0110;2 : led7 = 8'b0101_1011;3 :

14、led7 = 8'b0100_1111;4 : led7 = 8'b0110_0110;5 : led7 = 8'b0110_1101;6 : led7 = 8'b0111_1101;7 : led7 = 8'b0000_0111;8 : led7 = 8'b0111_1111;9 : led7 = 8'b0110_1111;default : led7 = 8'b0011_1111;endcaseendendfunctionendmodule第四章 結(jié)果與討論4.1 實驗調(diào)試4.1.1 調(diào)試步驟 運行 Quartus II 軟件

15、,新建工程 建立文本文件 Verilog HDL File 。在文件中寫入程序。保存,編譯。 分配管腳。保存,編譯。 將生成的 .sof 文件寫入 FPGA 試驗箱中。 根據(jù)要求選擇幾種買東西的可能情況,在實驗箱上實驗,觀察記錄結(jié)果。4.1.2 實驗現(xiàn)象選擇買 0.5 元的商品,投 5 元的金額,調(diào)試現(xiàn)象如下: 選擇 0.5 元商品數(shù)碼管顯示 0.5,再選擇一種商品,數(shù)碼管顯示清零, 重新進行商品選擇。 按下 5 元投幣鍵,對應數(shù)碼管顯示 5.0。 按下確認購買幵關,找零時,對應數(shù)碼管顯示4.5,蜂鳴器響,對應0.5 元商品的 LED 燈亮。選擇 1.5元的商品,投 1元的金額,調(diào)試現(xiàn)象如下:

16、 選擇 1.5 元的商品,對應數(shù)碼管顯示 1.5。 按下 1 元的投幣鍵,對應數(shù)碼管顯示 1。 找零顯示 1 元,退回所投的錢,表示警告的 LED 燈亮(交易不成功)。4.2 結(jié)果與分析 調(diào)試過程中出現(xiàn)的問題及原因:(1) 本程序 定義了函數(shù), 注意函數(shù)結(jié)構(gòu)的定義以及函數(shù)的調(diào)用 (函數(shù)不能作 為單獨的語句進行調(diào)用)。(2) 在編寫完程序之后,編譯運行成功后,注意數(shù)碼管管腳的連接,參考實 驗指導書。(3) 后面一切正常后, 但是仍然出不了正確的結(jié)果, 經(jīng)過和同學的相互討論,才發(fā)現(xiàn)按鈕按下是 0,懸空是 1。最后及時發(fā)現(xiàn)并得出了正確的實驗結(jié)果。第五章 總結(jié)經(jīng)過幾次實驗,讓我對 Verilog HDL 有了很深刻的認識,從剛開始接觸 EDA 到現(xiàn)在的Verilog HDL 的學習,讓我對這些硬件描述語言有了進一步的理

溫馨提示

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

評論

0/150

提交評論