電子綜合設(shè)計EDA課程設(shè)計-自動售票機.doc
《電子綜合設(shè)計EDA課程設(shè)計-自動售票機.doc》由會員分享,可在線閱讀,更多相關(guān)《電子綜合設(shè)計EDA課程設(shè)計-自動售票機.doc(27頁珍藏版)》請在裝配圖網(wǎng)上搜索。
自動售票機課程設(shè)計 23 課程設(shè)計報告 2015-2016學(xué)年第2學(xué)期 課程設(shè)計名稱: 電子綜合設(shè)計EDA課程設(shè)計 院 (系): 電子信息學(xué)院 專業(yè): 電子信息工程 班級: 電子1313 學(xué)生姓名: 吳限 學(xué)號: 26 綜合實驗時間: 2016/7/11-2016/7/15 指導(dǎo)教師: 鐘 旭 提交時間: 2016/7/15 上海電機學(xué)院課程設(shè)計任務(wù)書 課程名稱 電子綜合設(shè)計EDA課程設(shè)計 課程代碼 033117P1 課程設(shè)計 課題清單 1、數(shù)字式競賽搶答器 2、自動售票機 3、乒乓球比賽游戲機 4、電子密碼鎖 5、出租車自動計費器 6、洗衣機控制器 7、交通信號燈控制器 8、電梯控制器 設(shè)計時間 2016 年 7 月 11 日 —— 2016 年 7 月 15 日 一、課程設(shè)計任務(wù)匯總 設(shè)計任務(wù):自動售票機 功能要求: 1、 設(shè)計一個自動售票機,用開關(guān)電平信號模擬投幣過程,每次投一枚硬幣,但可以連續(xù)投入數(shù)枚硬幣; 2、 機器能自動識別硬幣金額,最大為 1 元,最小為 5 角。設(shè)定票價為 2.5 元,每次售一張票; 3、 購票時先投入硬幣,當(dāng)投入的硬幣總金額達到或超過票的面值時,機器發(fā)出指示,這時可以按取票鍵取出票; 4、 如果所投硬幣超過票的面值則會提示找零錢,取完票以后按找零鍵則可以取出零錢,并顯示零錢數(shù); 使用數(shù)碼管顯示當(dāng)前投入的金額。 二、對課程設(shè)計成果的要求(包括課程設(shè)計報告、圖紙、圖表、實物等軟硬件要求) 1.課程設(shè)計基本要求 課題分析、查閱資料、方案論證、方案實現(xiàn)、系統(tǒng)聯(lián)調(diào)、撰寫課程設(shè)計報告 2.成果要求 (1)系統(tǒng)方案 (2)電路RTL原理圖 (3)Verilog源程序和流程圖(或狀態(tài)機轉(zhuǎn)移圖) (4)Verilog測試程序 (5)設(shè)計說明書(課程設(shè)計報告) 三、課程設(shè)計工作進度計劃: 時間 安排內(nèi)容 星期一 下達任務(wù) 星期二 程序設(shè)計 星期三 程序調(diào)試 星期四 撰寫報告 星期五 考核答辯 四、主要參考資料: 指 導(dǎo) 書:《Verilog數(shù)字系統(tǒng)設(shè)計教程》 夏宇聞編著 北京航空航天大學(xué)出版社 參考資料:《EDA設(shè)計實驗教程》 艾明晶編著 清華大學(xué)出版社 目錄 一、 題目名稱 1 二、 內(nèi)容摘要 1 三、 設(shè)計任務(wù)和要求 1 四、 系統(tǒng)方案 2 五、 設(shè)計方法——硬件設(shè)計 3 六、 設(shè)計方法——軟件設(shè)計 4 七、 系統(tǒng)調(diào)試 5 7.1使用的主要儀器和儀表 5 7.2調(diào)試電路的方法和技巧 5 7.3整理性能測試數(shù)據(jù)和波形,并與計算結(jié)果比較分析 5 7.4調(diào)試中出現(xiàn)的故障、原因及排除方法 5 八、 設(shè)計成果 6 九、 設(shè)計結(jié)論 10 十、 收獲和體會 11 附件(源程序) 12 參考文獻 22 一、 題目名稱 自動售票機 二、 內(nèi)容摘要 自動售票機是為了實現(xiàn)機器根據(jù)輸入指令進行全自動出售票的目的。本設(shè)計是采用了幣值輸入相加模塊、主控模塊和幣值顯示這三個模塊實現(xiàn)的。在幣值輸入相加模塊中, 用兩個開關(guān)電平輸入按鈕分別代表 2 種硬幣輸入,每按一次,表示投入一枚硬幣。并設(shè)置控制電路,硬幣輸入的次數(shù)控制十進制加法器的加數(shù) A 和被加數(shù) B,使輸入的幣值實時相加。用兩位數(shù)碼管顯示當(dāng)前的投入幣值,在主控模塊中設(shè)置一個復(fù)位信號reset,用于中止交易(系統(tǒng)復(fù)位)。設(shè)置一個取票信號ok,一個票給出信號tout,tout 接 LED 顯示,燈亮則表示可以取票,否則取票鍵無效,按ok 鍵取票,燈滅。設(shè)置一個取零錢信號 charge,一個零錢輸出信號 mout,mout 接 LED 顯示,燈亮則表示有零錢,按 charge 取零錢,燈滅。主控模塊中是一個狀態(tài)機,當(dāng)幣值不同時分別實現(xiàn)不同的結(jié)果。 三、 設(shè)計任務(wù)和要求 設(shè)計一個自動售票機,用開關(guān)電平信號模擬投幣過程,每次投一枚硬幣,但可以連續(xù)投入數(shù)枚硬幣。機器能自動識別硬幣金額,最大為1元,最小為 5 角。設(shè)定票價為2.5元,每次售一張票。 購票時先投入硬幣,當(dāng)投入的硬幣總金額達到或超過票的面值時,機器發(fā)出指示,這時可以按取票鍵取出票。如果所投硬幣超過票的面值則會提示找零錢,取完票以后按找零鍵則可以取出零錢。 四、 系統(tǒng)方案 圖4-1 自動售票機系統(tǒng)框圖 表4-1 幣值相加模塊輸入狀態(tài)表 五、 設(shè)計方法——硬件設(shè)計 圖5-1 自動售票機硬件系統(tǒng)框圖 六、 設(shè)計方法——軟件設(shè)計 圖6-1 幣值判斷流程圖 圖6-2 系統(tǒng)流程圖 七、 系統(tǒng)調(diào)試 7.1使用的主要儀器和儀表 計算機一臺、ISE仿真設(shè)計軟件。 7.2調(diào)試電路的方法和技巧 分別運行每個模塊的程序,觀察是否通過檢測,最后通過仿真出來的測試波形圖,仔細(xì)的進行一步步運行,觀察運行結(jié)果是否和課題的設(shè)計要求相對應(yīng)。 7.3整理性能測試數(shù)據(jù)和波形,并與計算結(jié)果比較分析 實際的仿真結(jié)果圖能夠完美的實現(xiàn)課題的各項要求,最終的仿真測試圖如下圖8-4。 7.4調(diào)試中出現(xiàn)的故障、原因及排除方法 數(shù)碼管顯示不正確,原因是管腳的配置不對。 八、 設(shè)計成果 圖8-1 頂層模塊 clk:時鐘信號; reset:系統(tǒng)復(fù)位清零; half:5角硬幣模擬信號,為1時表示投幣5角,為0表示未投入; one:1元硬幣模擬信號,為1時表示投幣1元,為0表示未投入; mout:可找零錢輸出顯示,置1表示有零可找,置0表示無零錢可找; tout:有票輸出信號,置1表示有票可出,置0表示不能出票; charge:取零錢信號,置1檢查是否能出零錢; ok:取票,置1檢查是否可取票; ms1,ms2:輸出數(shù)碼管片選信號,01選中第2位數(shù)碼管,10選中第1位數(shù)碼管; a,b,c,d,e,f,g:數(shù)碼管輸出譯碼信號,分別驅(qū)動數(shù)碼管7個引腳。 圖8-2 主控模塊 mh:投入金額數(shù)碼顯示的高4位;ml: 投入金額數(shù)碼顯示的低4位。 圖8-3 數(shù)碼管模塊 in1,in2:分別表示高低位輸入金額; ms1,ms2:輸出數(shù)碼管片選信號。 a,b,c,d,e,f,g:數(shù)碼管輸出譯碼信號,分別驅(qū)動數(shù)碼管7個引腳。 圖8-4 模擬仿真圖 圖8-5 圖8-5為第一次交易此時投入一枚硬幣,此時金額顯示為10,譯碼后也就是1001111,0000001;此時按下ok鍵,由于金額不足,沒有任何反應(yīng)。隨后投入第二枚硬幣,金額顯示20,金額不足,依舊沒有反應(yīng)。 圖8-6 圖8-6表示此時又投入1元,此時總共已經(jīng)投入3元,數(shù)碼管顯示30,譯碼后就是0000110,0000001;此時,tout為1。按下ok,出票,tout為0。 圖8-7 圖8-7表示由于還有余額5毛,所以mout為1,按下charge,找零,mout清零,找零。 圖8-8 圖8-8為第二次交易,先按下half,金額為5毛,顯示05,譯碼后為0000001,0100100。由于金額不足按下ok后,沒有反應(yīng)。 圖8-9 圖8-9表示隨后按下one,再按one,此時金額達到2.5元,金額已滿,tout=1。然后按下ok,出票并且tout清零。 九、 設(shè)計結(jié)論 本自動售票機較好地采用了自頂向下的設(shè)計理念,利用層次化結(jié)構(gòu)化的方法將售票機系統(tǒng)分為三個模塊。自動售票機系統(tǒng)是由頂層模塊——負(fù)責(zé)連接各子模塊,主控模塊——設(shè)置各輸入輸出信號、時鐘信號及復(fù)位信號,并控制幣值的累加,數(shù)碼管顯示模塊——負(fù)責(zé)數(shù)碼管的動態(tài)顯示幣值組成。設(shè)計合理,層次清晰,仿真時能夠分別測試各個模塊從而盡早地排除錯誤。 在程序設(shè)計上頂層模塊調(diào)用主模塊及數(shù)碼管顯示模塊,實現(xiàn)對主控與數(shù)碼管的連接;主控模塊采用Mealy狀態(tài)機結(jié)構(gòu)主要對投幣情況及出票進行控制并送數(shù)碼管顯示;數(shù)碼管模塊采用動態(tài)掃描方法結(jié)合片選信號實現(xiàn)兩位數(shù)碼顯示。通過對著三個大模塊的設(shè)計,成功實現(xiàn)了自動售票的功能并進行仿真測試,即當(dāng)幣值等于 2.5 元時,tout指示燈亮,ok鍵有票給出,mout燈不亮,不找零錢;當(dāng)幣值為 3.0 元時,tout指示燈亮,ok鍵有票給出,mout指示燈亮,有零錢給出,charge鍵找零錢;其余情況下,既無票給出也不找零錢。測試結(jié)果顯示設(shè)計符合要求。 十、 收獲和體會 通過本次課程設(shè)計,我對Verilog HDL語言有了更深刻的了解,能夠比較靈活地運用它來實現(xiàn)我們所想要要其實現(xiàn)的功能。在實驗中,我也遇到了很多挫折,不過我都和同伴一一克服了,大家齊心協(xié)力解決了問題,使我明白了和他人共同合作的重要性。在以后的道路上我們也必須深刻認(rèn)識到團隊合作的精神,投入今后的發(fā)展之中。 日常生活中有很多各種不同的自動售票機,通過本次課程設(shè)計我終于了解到自動售票是如何實現(xiàn)的了,雖然我們設(shè)計的知識很簡單的一種售票機,但是原理是大同小異的,相信如果讓我設(shè)計更復(fù)雜點的功能,我也會研究出來。 成功就是在不斷摸索著前進中實現(xiàn)的,遇到問題我們不能灰心、煩躁,甚至放棄,而要靜下心來仔細(xì)思考,分部檢查,找出最終的原因進行改正,這樣才會有進步,才會一步步向自己的目標(biāo)靠近,才會取得自己所要追求的成功。 附件(源程序) 頂層模塊程序: module top(one,half,reset,clk,ok,charge,tout,mout,ms1,ms2,a,b,c,d,e,f,g); //頂層模塊,進行子模塊的連接 input one,half,reset,clk,ok,charge; output tout,mout,ms1,ms2,a,b,c,d,e,f,g; wire [3:0]mh,ml; ticket u1( //子模塊連接 .one(one), .half(half), .mh(mh), .ml(ml), .tout(tout), .mout(mout), .reset(reset), .clk(clk), .ok(ok), .charge(charge) ); sel u2( .in1(ml), .in2(mh), .clk(clk), .ms1(ms1), .ms2(ms2), .a(a), .b(b), .c(c), .d(d), .e(e), .f(f), .g(g) ); endmodule //主控模塊程序: //自動售票機 /*信號定義: clk:時鐘信號; reset:系統(tǒng)復(fù)位清零; half:5角硬幣模擬信號; one:1元硬幣模擬信號; mout:有找零錢輸出顯示; tout:有票輸出信號; charge:取零錢; ok:取票; mh:投入金額數(shù)碼顯示的高4位; ml: 投入金額數(shù)碼顯示的低4位。 */ module ticket(one,half,mh,ml,tout,mout,reset,clk,ok,charge); parameter a=0,b=1,c=2,d=3,e=4; //定義5個狀態(tài) input one,half,reset,clk,ok,charge; output tout,mout,mh,ml; reg mout,tout; reg[3:0] money; reg[3:0] mh; reg[3:0] ml; always@(posedge clk) begin if(reset) begin tout=0; mout=0; money=a; {mh,ml}=8b00000000; end case(money) a:if(half) begin money=b; {mh,ml}=8b00000101; end else if(one) begin money=c; {mh,ml}=8b00010000; end b:if(half) begin money=c; {mh,ml}=8b00010000; end else if(one) begin money=d; {mh,ml}=8b00010101; end c:if(half) begin money=d; {mh,ml}=8b00010101; end else if(one) begin money=e; {mh,ml}=8b00100000; end d:if(half) begin money=e; {mh,ml}=8b00100000; end else if(one) begin money=a; {mh,ml}=8b00100101; mout=0; tout=1; //sell end e:if(half) begin money=a; {mh,ml}=8b00100101; tout=1; //sell end else if(one) begin money=a; {mh,ml}=8b00110000; tout=1; end endcase if({mh,ml}==8b00100101) begin if(ok) begin tout=0; mout=0; {mh,ml}=8b00000000; end end if({mh,ml}==8b00110000) begin if(ok) begin tout=0; mout=1; {mh,ml}=8b00000101;end end if(charge&&mout==1) begin {mh,ml}=8b00000000; mout=0;end end endmodule //數(shù)碼管模塊: module sel(in1,in2,clk,ms1,ms2,a,b,c,d,e,f,g); input [3:0]in1,in2; //輸入金額 input clk; output reg ms1,ms2; //輸出數(shù)碼管片選信號 output reg a,b,c,d,e,f,g; //輸出譯碼信號 reg i=0; always@(posedge clk) begin case(i) 1d0:begin {ms1,ms2}=2b10; //對數(shù)碼管進行動態(tài)顯示 i<=i+1b1; case(in1) 4d0:{a,b,c,d,e,f,g}<=7b0000001; //進行數(shù)碼管譯碼輸出 4d1:{a,b,c,d,e,f,g}<=7b1001111; 4d2:{a,b,c,d,e,f,g}<=7b0010010; 4d3:{a,b,c,d,e,f,g}<=7b0000110; 4d4:{a,b,c,d,e,f,g}<=7b1001100; 4d5:{a,b,c,d,e,f,g}<=7b0100100; 4d6:{a,b,c,d,e,f,g}<=7b0100000; 4d7:{a,b,c,d,e,f,g}<=7b0001111; 4d8:{a,b,c,d,e,f,g}<=7b0000000; 4d9:{a,b,c,d,e,f,g}<=7b0000100; endcase end 1d1:begin {ms1,ms2}=2b01; //對數(shù)碼管進行動態(tài)掃描 i<=i+1b1; case(in2) 4d0:{a,b,c,d,e,f,g}<=7b0000001; //進行數(shù)碼管譯碼輸出 4d1:{a,b,c,d,e,f,g}<=7b1001111; 4d2:{a,b,c,d,e,f,g}<=7b0010010; 4d3:{a,b,c,d,e,f,g}<=7b0000110; 4d4:{a,b,c,d,e,f,g}<=7b1001100; 4d5:{a,b,c,d,e,f,g}<=7b0100100; 4d6:{a,b,c,d,e,f,g}<=7b0100000; 4d7:{a,b,c,d,e,f,g}<=7b0001111; 4d8:{a,b,c,d,e,f,g}<=7b0000000; 4d9:{a,b,c,d,e,f,g}<=7b0000100; endcase end endcase end endmodule 測試程序: module test_top; // Inputs reg one; reg half; reg reset; reg clk; reg ok; reg charge; // Outputs wire tout; wire mout; wire ms1; wire ms2; wire a; wire b; wire c; wire d; wire e; wire f; wire g; // Instantiate the Unit Under Test (UUT) top uut ( .one(one), .half(half), .reset(reset), .clk(clk), .ok(ok), .charge(charge), .tout(tout), .mout(mout), .ms1(ms1), .ms2(ms2), .a(a), .b(b), .c(c), .d(d), .e(e), .f(f), .g(g) ); initial begin // Initialize Inputs one = 0; half = 0; reset = 1; clk = 0; ok = 0; charge = 0; // Wait 100 ns for global reset to finish #100; reset=0; //系統(tǒng)開始運行 #2 //投入一枚1元硬幣 one=1; #2 one=0; #6 //按下ok鍵,取票,金額為1元,無效 ok=1; #2 ok=0; #6 one=1; //再投入一枚一元硬幣 #2 one=0; #6 one=1; //再投入一枚一元硬幣 #2 one=0; #6 //按下ok鍵,取票,金額為3元,可以取票 ok=1; #2 ok=0; #6 //按下charge鍵,找零,找零5角 charge=1; #2 charge=0; //第二次交易 #10 //投入一枚5角硬幣 half=1; #2 half=0; #6 //按下ok鍵,取票,金額為0.5元,無效 ok=1; #2 ok=0; #6 one=1; //再投入一枚一元硬幣 #2 one=0; #6 one=1; //再投入一枚一元硬幣 #2 one=0; #6 //按下ok鍵,取票,金額為2.5元,取票成功 ok=1; #2 ok=0; end always #1 clk=~clk; //產(chǎn)生時鐘信號 endmodule 參考文獻 [1].夏宇聞. Verilog數(shù)字系統(tǒng)設(shè)計教程.北京:北京航空航天大學(xué)出版社,2013 [2].艾明晶.EDA設(shè)計實驗教程.北京:清華大學(xué)出版社,2010 小組分工 資料搜集與整理 朱佳俊 Verilog HDL程序及仿真測試 吳限 Verilog HDL程序及仿真測試 謝煜 撰寫報告及PPT 蘇嘉明 23- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 電子 綜合 設(shè)計 EDA 課程設(shè)計 自動 售票
鏈接地址:http://kudomayuko.com/p-6723889.html