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

下載本文檔

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

文檔簡(jiǎn)介

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

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

3、下,現(xiàn)代電子產(chǎn)品幾乎滲透了社會(huì)的各個(gè)領(lǐng)域,有力地推動(dòng)了社會(huì)生產(chǎn)力的發(fā)展和社會(huì)信息化程度的提高,同時(shí)也使現(xiàn)代電子產(chǎn)品性能進(jìn)一步提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越來(lái)越快。而休閑時(shí)間越來(lái)越少的人們?cè)絹?lái)越?jīng)]太多的時(shí)間出去搞戶外活動(dòng),于是眾多電子游戲相應(yīng)而出,成為大家的娛樂(lè)節(jié)目。因此設(shè)計(jì)了這個(gè)兩人的乒乓球游戲。而電子信息類產(chǎn)品的開(kāi)發(fā)明顯地出現(xiàn)了兩個(gè)特點(diǎn):一是開(kāi)發(fā)產(chǎn)品的復(fù)雜程度加深;二是開(kāi)發(fā)產(chǎn)品的上市時(shí)限緊迫。而伴隨著如上兩個(gè)特點(diǎn)的產(chǎn)生,相應(yīng)的出現(xiàn)了設(shè)計(jì)上的兩個(gè)問(wèn)題。其一,在電子系統(tǒng)日趨數(shù)字化、復(fù)雜化和大規(guī)模集成化的今天,電子廠商們?cè)郊悠惹械刈非箅娮赢a(chǎn)品的高功能、優(yōu)品質(zhì)、低成本、微功耗和微小封裝尺寸,從而使得電

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

5、后按照設(shè)計(jì)者規(guī)定的球位乙方就可以擊球。若乙方提前擊球或者未擊到球,則甲方得分。然后重新發(fā)球進(jìn)行比賽,知道一方記分達(dá)到21分為止,記分清零,重新開(kāi)始新一局比賽。2 開(kāi)發(fā)工具簡(jiǎn)介2.1eda技術(shù)eda2是電子設(shè)計(jì)自動(dòng)化(electronic design automation)縮寫,是90年代初從cad(計(jì)算機(jī)輔助設(shè)計(jì))、cam(計(jì)算機(jī)輔助制造)、cat(計(jì)算機(jī)輔助測(cè)試)和cae(計(jì)算機(jī)輔助工程)的概念發(fā)展而來(lái)的。eda技術(shù)是以計(jì)算機(jī)為工具,根據(jù)硬件描述語(yǔ)言hdl( hardware description language)完成的設(shè)計(jì)文件,自動(dòng)地完成邏輯編譯、化簡(jiǎn)、分割、綜合及優(yōu)化、布局布線、仿

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

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

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

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

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

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

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

13、以根據(jù)自己的實(shí)際情況靈活選擇使用。設(shè)計(jì)編譯max+plus ii編譯一個(gè)設(shè)計(jì)時(shí),compiler在設(shè)計(jì)文件中讀取信息并產(chǎn)生編程文件和仿真文件,message processor(信息處理程序)可自動(dòng)定位錯(cuò)誤。設(shè)計(jì)校驗(yàn)設(shè)計(jì)校驗(yàn)過(guò)程包括設(shè)計(jì)仿真和定時(shí)分析,仿真起的作用是測(cè)試邏輯操作和設(shè)計(jì)功能的完備性;timing analyzer(定時(shí)分析程序)可分析設(shè)計(jì)的定時(shí)和延時(shí)情況。器件編程 max+plus ii programmer是使用compiler生成的編程文件對(duì)altera器件進(jìn)行編程的。它可以用來(lái)對(duì)器件編程、校驗(yàn)和試驗(yàn),是對(duì)設(shè)計(jì)功能進(jìn)行的測(cè)試。altera公司器件的編程方法有許多種,可根據(jù)具體

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

15、“球向乙移動(dòng)狀態(tài)”,“球向甲移動(dòng)狀態(tài)”,“允許甲擊球狀態(tài)”,“允許乙擊球狀態(tài)”。這是該程序中起作用的7個(gè)狀態(tài)。開(kāi)始的時(shí)候處于“等待發(fā)球狀態(tài)”,若甲發(fā)球則狀態(tài)轉(zhuǎn)移到“第一盞燈亮狀態(tài),若乙發(fā)球則轉(zhuǎn)移到”第八盞燈亮狀態(tài)“,具體說(shuō)明以甲發(fā)球?yàn)槔H舭l(fā)球后乙沒(méi)有提前擊球規(guī)定球移動(dòng)到對(duì)方第一個(gè)發(fā)光二極管時(shí)允許擊球,那么狀態(tài)機(jī)從“第一盞燈亮狀態(tài)”轉(zhuǎn)移到“球向乙移動(dòng)狀態(tài)”。若在“球向乙移動(dòng)狀態(tài)”乙仍然沒(méi)有提前擊球,狀態(tài)就轉(zhuǎn)移到“允許乙擊球狀態(tài)”,在此狀態(tài)下,如果乙擊球了,那么狀態(tài)就轉(zhuǎn)移到“球向甲移動(dòng)狀態(tài)”。在“第一盞燈亮狀態(tài)”,“球向乙移動(dòng)狀態(tài)”中,如果乙擊球了,就算提前擊球,這樣甲得分,狀態(tài)轉(zhuǎn)移到“等待發(fā)球

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

17、口clk。其次考慮輸出端口,芯片應(yīng)該有8個(gè)輸出端口來(lái)控制8個(gè)發(fā)光二極管,輸出邏輯1即輸出一個(gè)高電平,可以使發(fā)光二極管點(diǎn)亮;另外,要直觀地表示雙方的得分,就得用到七段譯碼器,每方用到2個(gè),可以表示021的數(shù)字,每個(gè)七段譯碼器需要芯片的7個(gè)輸出端口來(lái)控制,總共需要28個(gè)輸出端口。實(shí)體的設(shè)計(jì)如下: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:

18、 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,score12,score21,score22: out std_logic_vector(1 to 7);end pingponggame;3.3狀態(tài)機(jī)編程實(shí)現(xiàn)狀態(tài)機(jī)設(shè)置了7個(gè)狀態(tài),分別是等待發(fā)球狀態(tài)(waitserve)、第一盞燈亮狀態(tài)(light1on)、第八盞燈亮狀態(tài)(light8on)、球向乙移動(dòng)狀態(tài)(

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

20、startbutton信號(hào),它是1位二進(jìn)制信號(hào),數(shù)值為1表示可以進(jìn)入游戲;serve信號(hào),是一個(gè)2位二進(jìn)制向量,“01”表示甲發(fā)球;兩個(gè)二進(jìn)制信號(hào)hit1和hit2分別表示甲乙是否擊球,若數(shù)值為1,表示擊球,不為1表示不擊球。以下是狀態(tài)機(jī)進(jìn)程代碼。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

21、 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 ii

22、f 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=waitserve;end if;end case;end if;end if;end process;3.4記分譯碼器的設(shè)計(jì)七段譯碼器是在數(shù)字電路

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

24、換成七段譯碼顯示。bcout1(1)和bcout2(1)表示a段,bcout1(2)和bcout2(2)表示b段,以此類推,bcout1(7)和bcout2(7)表示g段。這個(gè)記分譯碼器電路是針對(duì)乒乓球游戲機(jī)的特點(diǎn)進(jìn)行的特別設(shè)計(jì),采用的是全部列舉的方法,代碼如下: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);bcdo

25、ut1: out std_logic_vector(1 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 bcdou

26、t1=1111110;bcdout2 bcdout1=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;bcdout2b

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

28、moveto1,allow1hit);signal state: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)begi

29、n.end process;light=10000000 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,

30、score21,score22);end game; 該構(gòu)造體緊跟在實(shí)體設(shè)計(jì)之后,這樣就完成了數(shù)字乒乓游戲機(jī)的vhdl源程序編寫。從構(gòu)造體設(shè)計(jì)中可以看到,控制整個(gè)乒乓球游戲機(jī)運(yùn)轉(zhuǎn)的就是狀態(tài)機(jī)進(jìn)程,它對(duì)各個(gè)外圍部分起控制作用。它是整個(gè)程序的核心,起到一個(gè)中心控制器的作用。而外圍的部分,比如分?jǐn)?shù)顯示,球的軌跡,都是通過(guò)狀態(tài)機(jī)傳出的信號(hào)來(lái)控制,這就是狀態(tài)機(jī)的功能和作用。程序中的球的軌跡,即發(fā)光二極管的亮暗是通過(guò)狀態(tài)機(jī)中傳出的i信號(hào)來(lái)控制的,而分?jǐn)?shù)顯示則是通過(guò)狀態(tài)機(jī)中傳出的count1和count2信號(hào)來(lái)控制的。而狀態(tài)機(jī)中i信號(hào)和count1,count2信號(hào)的變化同時(shí)就可以影響到外圍的顯示部分發(fā)光二

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

32、從8開(kāi)始依次遞減計(jì)數(shù),控制發(fā)光二極管亮暗的light信號(hào)也隨著i的數(shù)值而變化,如圖3-4所示: 圖3-4 圖3-5是在乙發(fā)球以后,甲子正確時(shí)刻擊球的波形仿真圖。甲在state為狀態(tài)6(allow1hit,允許甲擊球狀態(tài))的時(shí)候擊球了,在圖上hit1在此時(shí)刻出現(xiàn)高電平,看到state轉(zhuǎn)移了狀態(tài)2(ballmoveto2,球向乙移動(dòng)狀態(tài))當(dāng)?shù)搅藸顟B(tài)3(allow2hit,允許乙擊球狀態(tài))乙沒(méi)有擊球,所以甲得分了,count1由0變到1,而七段譯碼器隨之改變。圖3-5圖3-6為上圖的球的移動(dòng)軌跡:圖3-6 圖3-7是仿真甲提早擊球的情況,在不允許甲擊球的狀態(tài)下,即state處于狀態(tài)5(ballmov

33、eto1,球向甲移動(dòng)狀態(tài))時(shí),hit1輸入邏輯1,表示甲擊球了,所以乙得分。圖3-7圖3-8為上圖的球的移動(dòng)軌跡:圖3-8結(jié)束語(yǔ)在這個(gè)設(shè)計(jì)中,初步體現(xiàn)了狀態(tài)機(jī)的中心控制作用。通過(guò)狀態(tài)機(jī)進(jìn)程傳出的信號(hào),驅(qū)動(dòng)了發(fā)光二極管以及七段譯碼器等外圍設(shè)備。狀態(tài)機(jī)進(jìn)程傳出的i信號(hào),控制了發(fā)光二極管的狀態(tài),狀態(tài)機(jī)進(jìn)程傳出的count1和count2信號(hào),控制了七段譯碼器的顯示。如果要用實(shí)際電路來(lái)實(shí)現(xiàn)乒乓球游戲機(jī),就還要將設(shè)計(jì)下載到芯片中去,并且加上外圍電路,這些外圍電路包括七段譯碼器,按鍵,即便如此,上面的設(shè)計(jì)還是不夠的,還存在兩個(gè)問(wèn)題,一個(gè)是時(shí)鐘頻率問(wèn)題,一個(gè)是按鍵問(wèn)題,但由于本人時(shí)間及能力有限,就沒(méi)多加研究

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

35、高動(dòng)手能力,多去嘗試。這些都對(duì)我以后的學(xué)習(xí)有很大的幫助。還有,班上同學(xué)同樣給與我不少幫助,這里一并表示感謝。參考文獻(xiàn)1潘松,王國(guó)棟vhdl實(shí)用教程四川:電子科技大學(xué)出版社,2006年,7月2李國(guó)洪,沈明山,胡輝可編程器件eda技術(shù)與實(shí)踐m北京:機(jī)械工業(yè)出版社,2004年,7月3趙俊超集成電路設(shè)計(jì)vhdl教程m北京:希望電子出版社,2002年,8月4李宜達(dá)數(shù)字邏輯電路設(shè)計(jì)與實(shí)現(xiàn)m北京:科學(xué)出版社,2004年,3月5付家才eda工程實(shí)踐技術(shù)m北京:工業(yè)出版社,2005年,1月6侯樹(shù)文數(shù)字邏輯與vhdl設(shè)計(jì)m北京:中國(guó)水利水電出版社,2004年,1月附錄:基于vhdl數(shù)字電子鐘設(shè)計(jì)與實(shí)現(xiàn)源程序代碼(

36、1) 頂層文件(文件名為pingponggame.vhd)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_log

37、ic_vector(1 to 8);score11,score12,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:st

38、d_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)beginif reset=1 theni=0;count1=00000;count2=00000;elsif clkevent and clk=1thenif count1=10101 or c

39、ount2=10101then i=0;count1=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=

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論