EDA課程設(shè)計(論文)基于VHDL的乒乓球游戲機設(shè)計_第1頁
EDA課程設(shè)計(論文)基于VHDL的乒乓球游戲機設(shè)計_第2頁
EDA課程設(shè)計(論文)基于VHDL的乒乓球游戲機設(shè)計_第3頁
EDA課程設(shè)計(論文)基于VHDL的乒乓球游戲機設(shè)計_第4頁
EDA課程設(shè)計(論文)基于VHDL的乒乓球游戲機設(shè)計_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1引言eda(electronic design automation,電子設(shè)計自動化)技術(shù)是現(xiàn)代電子工程領(lǐng)域的一門新技術(shù)。它提供了基于計算機和信息技術(shù)的電路系統(tǒng)設(shè)計方法。eda技術(shù)的發(fā)張和推廣應(yīng)用極大地推動了電子工業(yè)的發(fā)展。eda技術(shù)就是以計算機為工具,在eda軟件平臺上,對以硬件描述語言vhdl為系統(tǒng)邏輯描述手段完成的設(shè)計文件自動地完成邏輯編譯,邏輯化簡,邏輯分割,邏輯綜合及優(yōu)化,邏輯布局布線,邏輯仿真,直至對于特定目標芯片的適配編譯,邏輯映射和編程下載等工作。設(shè)計者的工作僅限于利用軟件的方式,即利用硬件描述語言來完成對系統(tǒng)硬件功能的描述,在eda工具的幫助下就可以得到最后的設(shè)計結(jié)果1。近

2、年來,集成電路制造技術(shù)的快速發(fā)展, 一方面促進了相應(yīng)設(shè)計技術(shù)的發(fā)展, 另一方面也對設(shè)計技術(shù)提出了更高的要求。當前集成電路設(shè)計, 面臨著功能強、性能好、規(guī)模大、成本低、設(shè)計周期短等一系列要求和挑戰(zhàn), 這些要求和挑戰(zhàn)引起了集成電路設(shè)計方法的全面革新。當今, 以行為設(shè)計為主要標志的新一代數(shù)字系統(tǒng)設(shè)計理論已形成并得到發(fā)展。在集成電路的數(shù)字系統(tǒng)的系統(tǒng)級設(shè)計中, vhdl 硬件描述語言構(gòu)造的描述模型優(yōu)化設(shè)計, 有利于高效利用設(shè)計空間, 實現(xiàn)設(shè)計結(jié)構(gòu)的精確分析, 使芯片資源得以充分利用。1.1課題的背景、目的20世紀末,電子技術(shù)獲得了飛速的發(fā)展,在其推動下,現(xiàn)代電子產(chǎn)品幾乎滲透了社會的各個領(lǐng)域,有力地推動了

3、社會生產(chǎn)力的發(fā)展和社會信息化程度的提高,同時也使現(xiàn)代電子產(chǎn)品性能進一步提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越來越快。而休閑時間越來越少的人們越來越?jīng)]太多的時間出去搞戶外活動,于是眾多電子游戲相應(yīng)而出,成為大家的娛樂節(jié)目。因此設(shè)計了這個兩人的乒乓球游戲。而電子信息類產(chǎn)品的開發(fā)明顯地出現(xiàn)了兩個特點:一是開發(fā)產(chǎn)品的復(fù)雜程度加深;二是開發(fā)產(chǎn)品的上市時限緊迫。而伴隨著如上兩個特點的產(chǎn)生,相應(yīng)的出現(xiàn)了設(shè)計上的兩個問題。其一,在電子系統(tǒng)日趨數(shù)字化、復(fù)雜化和大規(guī)模集成化的今天,電子廠商們越加迫切地追求電子產(chǎn)品的高功能、優(yōu)品質(zhì)、低成本、微功耗和微小封裝尺寸,從而使得電子設(shè)計日趨復(fù)雜。那么如何去完成這些高復(fù)雜度的電子設(shè)計呢

4、?其二,電子產(chǎn)品設(shè)計周期短和上市快是電子廠商們堅持不懈的追求,那么面對日趨復(fù)雜的設(shè)計,又如何能夠縮短開發(fā)時間呢?解決以上兩個問題的唯一途徑是電子設(shè)計自動化(eda),即用計算機幫助設(shè)計人員完成繁瑣的設(shè)計工作。1.2課題設(shè)計主要內(nèi)容 兩人乒乓球游戲機是用8個發(fā)光二級管代表乒乓球臺,中間兩個發(fā)光二極管兼做乒乓球網(wǎng),用點亮的發(fā)光二極管按一定方向移動來表示球的運動。在游戲機的兩側(cè)各設(shè)置發(fā)球和擊球開關(guān),甲乙雙方按乒乓球比賽規(guī)則來操作開關(guān)。當甲方按動發(fā)球開關(guān)時,靠近甲方的第一個發(fā)光二極管亮,然后發(fā)光二極管由甲方向乙方依次點亮,代表乒乓球的移動。當球過網(wǎng)后按照設(shè)計者規(guī)定的球位乙方就可以擊球。若乙方提前擊球或

5、者未擊到球,則甲方得分。然后重新發(fā)球進行比賽,知道一方記分達到21分為止,記分清零,重新開始新一局比賽。2 開發(fā)工具簡介2.1eda技術(shù)eda2是電子設(shè)計自動化(electronic design automation)縮寫,是90年代初從cad(計算機輔助設(shè)計)、cam(計算機輔助制造)、cat(計算機輔助測試)和cae(計算機輔助工程)的概念發(fā)展而來的。eda技術(shù)是以計算機為工具,根據(jù)硬件描述語言hdl( hardware description language)完成的設(shè)計文件,自動地完成邏輯編譯、化簡、分割、綜合及優(yōu)化、布局布線、仿真以及對于特定目標芯片的適配編譯和編程下載等工作。典型

6、的eda工具中必須包含兩個特殊的軟件包,即綜合器和適配器。綜合器的功能就是將設(shè)計者在eda平臺上完成的針對某個系統(tǒng)項目的hdl、原理圖或狀態(tài)圖形描述,針對給定的硬件系統(tǒng)組件,進行編譯、優(yōu)化、轉(zhuǎn)換和綜合,最終獲得我們欲實現(xiàn)功能的描述文件。綜合器在工作前,必須給定所要實現(xiàn)的硬件結(jié)構(gòu)參數(shù),它的功能就是將軟件描述與給定的硬件結(jié)構(gòu)用一定的方式聯(lián)系起來。也就是說,綜合器是軟件描述與硬件實現(xiàn)的一座橋梁。綜合過程就是將電路的高級語言描述轉(zhuǎn)換低級的、可與目標器件fpga/cpld相映射的網(wǎng)表文件。硬件描述語言hdl是相對于一般的計算機軟件語言,如:c、pascal而言的。hdl語言使用與設(shè)計硬件電子系統(tǒng)的計算機

7、語言,它能描述電子系統(tǒng)的邏輯功能、電路結(jié)構(gòu)和連接方式。設(shè)計者可利用hdl程序來描述所希望的電路系統(tǒng),規(guī)定器件結(jié)構(gòu)特征和電路的行為方式;然后利用綜合器和適配器將此程序編程能控制fpga和cpld內(nèi)部結(jié)構(gòu),并實現(xiàn)相應(yīng)邏輯功能的的門級或更底層的結(jié)構(gòu)網(wǎng)表文件或下載文件。目前,就fpga/cpld開發(fā)來說,比較常用和流行的hdl主要有abel-hdl、ahdl和vhdl。2.2硬件描述語言vhdlvhdl3的英文全名是very-high-speed integrated circuit hardware description language,誕生于1982年。1987年底,vhdl被ieee和美國國

8、防部確認為標準硬件描述語言 。自ieee公布了vhdl的標準版本,ieee-1076(簡稱87版)之后,各eda公司相繼推出了自己的vhdl設(shè)計環(huán)境,或宣布自己的設(shè)計工具可以和vhdl接口。此后vhdl在電子設(shè)計領(lǐng)域得到了廣泛的接受,并逐步取代了原有的非標準的硬件描述語言。1993年,ieee對vhdl進行了修訂,從更高的抽象層次和系統(tǒng)描述能力上擴展vhdl的內(nèi)容,公布了新版本的vhdl,即ieee標準的1076-1993版本,(簡稱93版)?,F(xiàn)在,vhdl和verilog作為ieee的工業(yè)標準硬件描述語言,又得到眾多eda公司的支持,在電子工程領(lǐng)域,已成為事實上的通用硬件描述語言。有專家認為

9、,在新的世紀中,vhdl與verilog語言將承擔起大部分的數(shù)字系統(tǒng)設(shè)計任務(wù)。vhdl主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu),行為,功能和接口。除了含有許多具有硬件特征的語句外,vhdl的語言形式和描述風(fēng)格與句法是十分類似于一般的計算機高級語言。vhdl的程序結(jié)構(gòu)特點是將一項工程設(shè)計,或稱設(shè)計實體4(可以是一個元件,一個電路模塊或一個系統(tǒng))分成外部(或稱可是部分,及端口)和內(nèi)部(或稱不可視部分),既涉及實體的內(nèi)部功能和算法完成部分。在對一個設(shè)計實體定義了外部界面后,一旦其內(nèi)部開發(fā)完成后,其他的設(shè)計就可以直接調(diào)用這個實體。這種將設(shè)計實體分成內(nèi)外部分的概念是vhdl系統(tǒng)設(shè)計的基本點。應(yīng)用vhdl進行工程設(shè)計的

10、優(yōu)點是多方面的。 (1) 與其他的硬件描述語言相比,vhdl具有更強的行為描述能力,從而決定了他成為系統(tǒng)設(shè)計領(lǐng)域最佳的硬件描述語言。強大的行為描述能力是避開具體的器件結(jié)構(gòu),從邏輯行為上描述和設(shè)計大規(guī)模電子系統(tǒng)的重要保證。 (2) vhdl豐富的仿真語句和庫函數(shù),使得在任何大系統(tǒng)的設(shè)計早期就能查驗設(shè)計系統(tǒng)的功能可行性,隨時可對設(shè)計進行仿真模擬。 (3) vhdl語句的行為描述能力和程序結(jié)構(gòu)決定了他具有支持大規(guī)模設(shè)計的分解和已有設(shè)計的再利用功能。符合市場需求的大規(guī)模系統(tǒng)高效,高速的完成必須有多人甚至多個代發(fā)組共同并行工作才能實現(xiàn)。(4)對于用vhdl完成的一個確定的設(shè)計,可以利用eda工具進行邏輯

11、綜合和優(yōu)化,并自動的把vhdl描述設(shè)計轉(zhuǎn)變成門級網(wǎng)表。 (5) vhdl對設(shè)計的描述具有相對獨立性,設(shè)計者可以不懂硬件的結(jié)構(gòu),也不必管理最終設(shè)計實現(xiàn)的目標器件是什么,而進行獨立的設(shè)計。2.3 max+plus的介紹altera公司的max+plus5開發(fā)系統(tǒng)是一個完全集成化、易學(xué)易用的可編程邏輯設(shè)計環(huán)境,它可以在多種平臺上運用。它所提供的靈活性和高效性是無可比擬的。其豐富的圖形界面,輔之以完整的、可及時訪問的在線文檔,使學(xué)生能夠輕松掌握和使用max+plus軟件。max+plus軟件支持各種hdl設(shè)計輸入選項,包括vhdl、veriloghdl和altera自己的硬件描述語言ahdl,它允許設(shè)

12、計人員添加自己認為有價值的宏函數(shù)。 max+plus系統(tǒng)的核心compiler支持altera公司的flex10k、flex8000、flex6 000、max9000、max7000、max5000和classic可編程邏輯器件系列,提供了商業(yè)界唯一真正與結(jié)構(gòu)無關(guān)的可編程邏輯設(shè)計環(huán)境。max+plus的編譯器還提供了強大的邏輯綜合與優(yōu)化功能,使用戶比較容易地將設(shè)計集成到器件中。設(shè)計輸入max+plus ii軟件的設(shè)計輸入方式有多種,主要包括原理圖輸入方式、文本輸入方式、波形設(shè)計輸入方式、層次設(shè)計輸入方式和底層設(shè)計輸入方式。因此,設(shè)計人員可以根據(jù)自己的實際情況靈活選擇使用。設(shè)計編譯max+pl

13、us ii編譯一個設(shè)計時,compiler在設(shè)計文件中讀取信息并產(chǎn)生編程文件和仿真文件,message processor(信息處理程序)可自動定位錯誤。設(shè)計校驗設(shè)計校驗過程包括設(shè)計仿真和定時分析,仿真起的作用是測試邏輯操作和設(shè)計功能的完備性;timing analyzer(定時分析程序)可分析設(shè)計的定時和延時情況。器件編程 max+plus ii programmer是使用compiler生成的編程文件對altera器件進行編程的。它可以用來對器件編程、校驗和試驗,是對設(shè)計功能進行的測試。altera公司器件的編程方法有許多種,可根據(jù)具體情況選擇使用。編譯生成的配置文件經(jīng)計算機并行通信口接到

14、altera專用編程電纜上,再接到器件的編程接口6,利用應(yīng)用軟件提供的編程軟件,programmer即可對器件進行配置。這種方法的優(yōu)點是配置方便、迅速,便于修改。max+plus2在windows 2000/xp上一旦安裝完畢,經(jīng)過設(shè)置即可使用硬件下載功能。在windows 2000上除了安裝軟件外,為了使用byteblaster(mv)下載功能,還必須安裝硬件驅(qū)動(drivers)以支持max+plus2對pc機并行口的操作。3設(shè)計方案3.1狀態(tài)機的設(shè)計思路狀態(tài)機設(shè)置了7個狀態(tài),分別是“等待發(fā)球狀態(tài)”,第一盞燈亮狀態(tài)“,第八盞燈亮狀態(tài)”,“球向乙移動狀態(tài)”,“球向甲移動狀態(tài)”,“允許甲擊球狀

15、態(tài)”,“允許乙擊球狀態(tài)”。這是該程序中起作用的7個狀態(tài)。開始的時候處于“等待發(fā)球狀態(tài)”,若甲發(fā)球則狀態(tài)轉(zhuǎn)移到“第一盞燈亮狀態(tài),若乙發(fā)球則轉(zhuǎn)移到”第八盞燈亮狀態(tài)“,具體說明以甲發(fā)球為例。若發(fā)球后乙沒有提前擊球規(guī)定球移動到對方第一個發(fā)光二極管時允許擊球,那么狀態(tài)機從“第一盞燈亮狀態(tài)”轉(zhuǎn)移到“球向乙移動狀態(tài)”。若在“球向乙移動狀態(tài)”乙仍然沒有提前擊球,狀態(tài)就轉(zhuǎn)移到“允許乙擊球狀態(tài)”,在此狀態(tài)下,如果乙擊球了,那么狀態(tài)就轉(zhuǎn)移到“球向甲移動狀態(tài)”。在“第一盞燈亮狀態(tài)”,“球向乙移動狀態(tài)”中,如果乙擊球了,就算提前擊球,這樣甲得分,狀態(tài)轉(zhuǎn)移到“等待發(fā)球狀態(tài)”等待發(fā)球。“球向甲移動狀態(tài)”之后的過程和前面的過

16、程只不過是甲乙角色的調(diào)換而已。狀態(tài)轉(zhuǎn)移規(guī)則都是一樣。圖3-1給出了乒乓游戲機的狀態(tài)轉(zhuǎn)移圖。第一盞燈亮第一盞燈亮第一盞燈亮第一盞燈亮第一盞燈亮第一盞燈亮第一盞燈亮圖3-13.2乒乓球游戲機實體的設(shè)計設(shè)計該乒乓球游戲機的輸入/輸出端口。首先考慮輸入端口,一般都應(yīng)該設(shè)置一個異步置位端口reset,用于在系統(tǒng)不正常時回到初始狀態(tài);兩個發(fā)球輸入端serve1和serve2,邏輯1分別表示甲方和乙方的發(fā)球;兩個擊球輸入端hit1和hit2,邏輯1分別表示甲擊球和乙擊球;一個開始游戲按鈕startbutton,處于邏輯1表示可以游戲;還得有一個時鐘輸入端口clk。其次考慮輸出端口,芯片應(yīng)該有8個輸出端口來控

17、制8個發(fā)光二極管,輸出邏輯1即輸出一個高電平,可以使發(fā)光二極管點亮;另外,要直觀地表示雙方的得分,就得用到七段譯碼器,每方用到2個,可以表示021的數(shù)字,每個七段譯碼器需要芯片的7個輸出端口來控制,總共需要28個輸出端口。實體的設(shè)計如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity pingponggame is port(reset: in std_logic;clk: in std_logic;startbutton:

18、in std_logic;serve: in std_logic_vector(1 to 2);hit1,hit2: in std_logic;light: out std_logic_vector(1 to 8);score11,score12,score21,score22: out std_logic_vector(1 to 7);end pingponggame;3.3狀態(tài)機編程實現(xiàn)狀態(tài)機設(shè)置了7個狀態(tài),分別是等待發(fā)球狀態(tài)(waitserve)、第一盞燈亮狀態(tài)(light1on)、第八盞燈亮狀態(tài)(light8on)、球向乙移動狀態(tài)(ballmoveto2)、球向甲移動狀態(tài)(ballmo

19、veto1)、允許甲擊球狀態(tài)(allow1hit)和允許乙擊球狀態(tài)(allow2hit)。狀態(tài)waitserve,light1on,ballmoveto2,allow2hit,light8on,ballmoveto1和allow1hit代表的具體數(shù)值依次是0到6.在波形模擬圖中是用數(shù)值來表示狀態(tài)的。乒乓球游戲機中有兩個計數(shù)器count1和count2,分別記憶甲的得分和乙的得分;一個i信號,用它的數(shù)值來控制狀態(tài)機外8個發(fā)光二極管的亮和暗,比如當i=1時表示第一個發(fā)光二極管亮,用發(fā)光二級管的輪流發(fā)光表示球的移動軌跡。輸入狀態(tài)機的信號有游戲開關(guān)startbutton信號,它是1位二進制信號,數(shù)值為

20、1表示可以進入游戲;serve信號,是一個2位二進制向量,“01”表示甲發(fā)球;兩個二進制信號hit1和hit2分別表示甲乙是否擊球,若數(shù)值為1,表示擊球,不為1表示不擊球。以下是狀態(tài)機進程代碼。process(clk)beginif reset=1 theni=0;count1=00000;count2=00000;elsif clkevent and clk=1thenif count1=10101 or count2=10101then i=0;count1=00000;count2=00000; elsif startbutton=0 then i=0;count1=00000;coun

21、t2case serve iswhen 00 = i i=1;state i=8;state i i i=2;if hit2=1 then i=0;count1=count1+1;state=waitserve;elsestate i=7;if hit1=1 then i=0;count2=count2+1;state=waitserve;elsestateif hit1=1 then i=0;count2=count2+1;state=waitserve;elsif i=2 then i=1;state=allow1hit;else iif hit2=1 then i=0;count1=co

22、unt1+1;state=waitserve;elsif i=7 then i=8;state=allow2hit;else iif hit1=1 then i=2;state=ballmoveto2;else count2=count2+1;i=0;stateif hit2=1 then i=7;state=ballmoveto1;else count1=count1+1;i=0;state=waitserve;end if;end case;end if;end if;end process;3.4記分譯碼器的設(shè)計七段譯碼器是在數(shù)字電路設(shè)計中經(jīng)常用到的顯示電路。所謂七段譯碼器,其實是由7段

23、發(fā)光二極管組成的用于顯示數(shù)字的器件。如圖3-2所示。圖3-2 其中的a,b,c,d,e,f,g飛奔為7段發(fā)光二極管,通過控制每個發(fā)光二極管的亮和暗,可以分別顯示09十個數(shù)字。例如,b和c兩段發(fā)光二極管亮,其他發(fā)光二極管暗,則表示數(shù)字“1”;a,b,g,e和d五段發(fā)光二極管亮,其他發(fā)光二極管暗,則表示數(shù)字“2”。七段譯碼器有7個輸入端,分別控制ag七段發(fā)光二極管。記分譯碼器(mydecoder):由于記分需要顯示出來,所以要使用七段譯碼器。而狀態(tài)機中的記分是由5位二進制碼來表示的,即count1和count2.以下程序就是實現(xiàn)從5位二進制碼轉(zhuǎn)換成七段譯碼顯示。bcout1(1)和bcout2(1

24、)表示a段,bcout1(2)和bcout2(2)表示b段,以此類推,bcout1(7)和bcout2(7)表示g段。這個記分譯碼器電路是針對乒乓球游戲機的特點進行的特別設(shè)計,采用的是全部列舉的方法,代碼如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity mydecoder isport(binaryin: in std_logic_vector(1 to 5);bcdout1: out std_logic_vector(1

25、 to 7);bcdout2: out std_logic_vector(1 to 7);end mydecoder;architecture m of mydecoder issignal tembinaryin:std_logic_vector(1 to 5);beginprocess(binaryin)begintembinaryin bcdout1=1111110;bcdout2 bcdout1=1111110;bcdout2 bcdout1=1111110;bcdout2 bcdout1=1111110;bcdout2 bcdout1=1111110;bcdout2 bcdout1=

26、1111110;bcdout2 bcdout1=1111110;bcdout2 bcdout1=1111110;bcdout2 bcdout1=1111110;bcdout2 bcdout1=1111110;bcdout2bcdout1=0110000;bcdout2bcdout1=0110000;bcdout2bcdout1=0110000;bcdout2bcdout1=0110000;bcdout2bcdout1=0110000;bcdout2bcdout1=0110000;bcdout2bcdout1=0110000;bcdout2bcdout1=0110000;bcdout2bcdou

27、t1=0110000;bcdout2bcdout1=0110000;bcdout2bcdout1=1101101;bcdout2bcdout1=1101101;bcdout2bcdout1=1101101;bcdout2=1111110;end case;end process;end m;3.5構(gòu)造體的設(shè)計 構(gòu)造體代碼如下:architecture game of pingponggame is type pingpong is (waitserve,light1on,ballmoveto2,allow2hit,light8on,ballmoveto1,allow1hit);signal s

28、tate:pingpong;signal i:integer range 0 to 8;signal count1,count2:std_logic_vector(1 to 5):=00000;component mydecoder isport(binaryin: in std_logic_vector(1 to 5);bcdout1: out std_logic_vector(1 to 7);bcdout2: out std_logic_vector(1 to 7);end component;beginprocess(clk)begin.end process;light=1000000

29、0 when (i=1) else 01000000 when (i=2) else 00100000 when (i=3) else00010000 when (i=4) else00001000 when (i=5) else00000100 when (i=6) else00000010 when (i=7) else00000001 when (i=8) else00000000;u0: mydecoder port map(count1,score11,score12);u1: mydecoder port map(count2,score21,score22);end game;

30、該構(gòu)造體緊跟在實體設(shè)計之后,這樣就完成了數(shù)字乒乓游戲機的vhdl源程序編寫。從構(gòu)造體設(shè)計中可以看到,控制整個乒乓球游戲機運轉(zhuǎn)的就是狀態(tài)機進程,它對各個外圍部分起控制作用。它是整個程序的核心,起到一個中心控制器的作用。而外圍的部分,比如分數(shù)顯示,球的軌跡,都是通過狀態(tài)機傳出的信號來控制,這就是狀態(tài)機的功能和作用。程序中的球的軌跡,即發(fā)光二極管的亮暗是通過狀態(tài)機中傳出的i信號來控制的,而分數(shù)顯示則是通過狀態(tài)機中傳出的count1和count2信號來控制的。而狀態(tài)機中i信號和count1,count2信號的變化同時就可以影響到外圍的顯示部分發(fā)光二極管和七段譯碼器,從而表現(xiàn)出當時的乒乓球位置和雙方分數(shù)

31、情況。3.6編譯和波形仿真 圖3-3所示代表乙發(fā)球,由light端口輸出的高電平會驅(qū)動芯片以外的發(fā)光二極管使之點亮,這樣就可以通過發(fā)光二極管模擬乒乓球的運動軌跡。可以看到,在甲該擊球的時候沒有擊球,也就是hit1在state狀態(tài)6(allow1hit,允許甲擊球狀態(tài))的時候沒有高電平1輸入,則算乙得分,count2由0變到1,score22的值隨之變化,“30”代表了二進制的“0110000”,就是七段譯碼器顯示1,之后state回到狀態(tài)0(waitserve,等待發(fā)球狀態(tài))。從最后一行state值的變化,可以清楚地分析狀態(tài)轉(zhuǎn)移。圖3-3i從8開始依次遞減計數(shù),控制發(fā)光二極管亮暗的light信

32、號也隨著i的數(shù)值而變化,如圖3-4所示: 圖3-4 圖3-5是在乙發(fā)球以后,甲子正確時刻擊球的波形仿真圖。甲在state為狀態(tài)6(allow1hit,允許甲擊球狀態(tài))的時候擊球了,在圖上hit1在此時刻出現(xiàn)高電平,看到state轉(zhuǎn)移了狀態(tài)2(ballmoveto2,球向乙移動狀態(tài))當?shù)搅藸顟B(tài)3(allow2hit,允許乙擊球狀態(tài))乙沒有擊球,所以甲得分了,count1由0變到1,而七段譯碼器隨之改變。圖3-5圖3-6為上圖的球的移動軌跡:圖3-6 圖3-7是仿真甲提早擊球的情況,在不允許甲擊球的狀態(tài)下,即state處于狀態(tài)5(ballmoveto1,球向甲移動狀態(tài))時,hit1輸入邏輯1,表示

33、甲擊球了,所以乙得分。圖3-7圖3-8為上圖的球的移動軌跡:圖3-8結(jié)束語在這個設(shè)計中,初步體現(xiàn)了狀態(tài)機的中心控制作用。通過狀態(tài)機進程傳出的信號,驅(qū)動了發(fā)光二極管以及七段譯碼器等外圍設(shè)備。狀態(tài)機進程傳出的i信號,控制了發(fā)光二極管的狀態(tài),狀態(tài)機進程傳出的count1和count2信號,控制了七段譯碼器的顯示。如果要用實際電路來實現(xiàn)乒乓球游戲機,就還要將設(shè)計下載到芯片中去,并且加上外圍電路,這些外圍電路包括七段譯碼器,按鍵,即便如此,上面的設(shè)計還是不夠的,還存在兩個問題,一個是時鐘頻率問題,一個是按鍵問題,但由于本人時間及能力有限,就沒多加研究,深感遺憾。致謝本次設(shè)計是在指導(dǎo)老師黃敏的指導(dǎo)下完成的

34、。在設(shè)計的過程中,黃老師給予了指導(dǎo),并提供了很多與該設(shè)計相關(guān)的重要信息,培養(yǎng)了我們對課程設(shè)計的興趣,豐富了我們的知識。這都將非常有利于我們今后的學(xué)習(xí)和工作。在此表示衷心的感謝!在這里還要感謝一位老師,很抱歉我不知道他的名字,他是帶我們進入vhdl世界的人,僅僅兩次課讓我們了解vhdl的世界,這是我這次課程設(shè)計能成功的最主要原因,在這深深表示感謝。另外,在課程設(shè)計過程中,我更深刻的了解到計算機是一門很精深的課程,同時也是一個硬件與軟件相通的課程,要想很好的學(xué)好它,還必須投入更多時間與熱情。也了解到很多內(nèi)容不是光看可不就能學(xué)到的,必須高強度的提高動手能力,多去嘗試。這些都對我以后的學(xué)習(xí)有很大的幫助

35、。還有,班上同學(xué)同樣給與我不少幫助,這里一并表示感謝。參考文獻1潘松,王國棟vhdl實用教程四川:電子科技大學(xué)出版社,2006年,7月2李國洪,沈明山,胡輝可編程器件eda技術(shù)與實踐m北京:機械工業(yè)出版社,2004年,7月3趙俊超集成電路設(shè)計vhdl教程m北京:希望電子出版社,2002年,8月4李宜達數(shù)字邏輯電路設(shè)計與實現(xiàn)m北京:科學(xué)出版社,2004年,3月5付家才eda工程實踐技術(shù)m北京:工業(yè)出版社,2005年,1月6侯樹文數(shù)字邏輯與vhdl設(shè)計m北京:中國水利水電出版社,2004年,1月附錄:基于vhdl數(shù)字電子鐘設(shè)計與實現(xiàn)源程序代碼(1) 頂層文件(文件名為pingponggame.vh

36、d)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity pingponggame is port(reset: in std_logic;clk: in std_logic;startbutton: in std_logic;serve: in std_logic_vector(1 to 2);hit1,hit2: in std_logic;light: out std_logic_vector(1 to 8);score11,s

37、core12,score21,score22: out std_logic_vector(1 to 7);end pingponggame;architecture game of pingponggame is type pingpong is (waitserve,light1on,ballmoveto2,allow2hit,light8on,ballmoveto1,allow1hit);signal state:pingpong;signal i:integer range 0 to 8;signal count1,count2:std_logic_vector(1 to 5):=000

38、00;component mydecoder isport(binaryin: in std_logic_vector(1 to 5);bcdout1: out std_logic_vector(1 to 7);bcdout2: out std_logic_vector(1 to 7);end component;beginprocess(clk)beginif reset=1 theni=0;count1=00000;count2=00000;elsif clkevent and clk=1thenif count1=10101 or count2=10101then i=0;count1=

39、00000;count2=00000; elsif startbutton=0 then i=0;count1=00000;count2case serve iswhen 00 = i i=1;state i=8;state i i i=2;if hit2=1 then i=0;count1=count1+1;state=waitserve;elsestate i=7;if hit1=1 then i=0;count2=count2+1;state=waitserve;elsestateif hit1=1 then i=0;count2=count2+1;state=waitserve;elsif i=2 then i=1;state=allow1hit;else iif hit2=1 then i=0;count1=count1+1;state=waitserve;elsif i=7 then i=8;state=allow2hit;else iif hit1=1 then i=2;state=ballmoveto2;else count2=count2+1;i=0;stateif hit2=1 then i=7;state=ballmoveto1;else count1=count1+1;i=0;state=wai

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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

提交評論