【正文】
= clear = 39。 when p2ready= clear = 39。 when p1top2= if(p2 = 39。139。 else p2win = 39。 state = p2top1。 總比分加 1 state = waiting。139。 END ARCHITECTURE。 END CASE。139。 when ends= p1win = 39。 state = ends。 else led_pos = led_pos + 1。) then檢測(cè)到對(duì)方擊球 if(led_pos = 7) then 判斷球的位置 state = p2top1。 led_pos = 8。清除比分信號(hào)置為低電平 led_pos = 1。039。 elsif(total = 1 OR total = 3 OR total = 5) then CASE sel IS when 39。039。 led_pos = 0。全局復(fù)位 elsif(rising_edge(clk)) then CASE state IS when waiting= p1win = 39。p1/p2贏得該局或該球 ,清楚當(dāng)前比分 ,當(dāng)前首發(fā)權(quán)(輸出至發(fā)球權(quán)控制模塊) led_out: OUT STD_LOGIC_VECTOR(7 downto 0))。 // 程序名稱: // 程序作者:陳 梁 // 最后修改日期: 20xx32 library ieee。) then total_2 = 0。 END PROCESS。比分清零 elsif(reset=39。 use 。 WITH sel SELECT 選擇輸出時(shí)鐘 clk_out = clk_out_2hz when 39。 clk_out_5hz = NOT clk_out_5hz。 use 。 END CASE。 when 2= cat = 111101。 when 4= d6 = 0110011。 when 2= d5 = 1101101。 when 10=d3 = 0110000。 when 6= d3 = 0000000。 when 2= d3 = 0000000。 d2 = 1111110。 d2 = 1011111。 d2 = 1101101。 數(shù)碼管顯示 END ENTITY。 use 。) then score_2 = 0。) then score_1 = 0。 ENTITY score_stat IS port(p1win,p2win,reset,reset_all: IN STD_LOGIC。 BEGIN U1: clk_div PORT MAP(clk = clk,clk_out = clk_temp,sel=speed_sel)。 ends,who:OUT STD_LOGIC)。 END COMPONENT。 COMPONENT control IS PORT(clk,p1,p2,judge,who,sel,reset: IN STD_LOGIC。 END ENTITY。 END ARCHITECTURE。 temp = score1 + score2。 首發(fā)是誰(shuí) score1,score2: IN integer range 0 to 11。在設(shè)計(jì)過(guò)程中。由于時(shí)間關(guān)系,系統(tǒng)功能實(shí)現(xiàn)不夠完善,這些都需要不斷的改進(jìn)和補(bǔ)充。 圖 乒乓球游戲機(jī)波形仿真圖二 甲在 state 為狀態(tài) 6 的時(shí)候擊球了,在圖上 hit1 在此時(shí)刻出現(xiàn)高電平,看到 state 轉(zhuǎn)移到了狀態(tài) 2。提示信息如圖 所示 。 從構(gòu)造體設(shè)計(jì)中可以看到,控制整個(gè)乒乓球游戲機(jī)運(yùn)轉(zhuǎn)的就是狀態(tài)機(jī)進(jìn)程,它隊(duì)各個(gè)外圍部分起控制作用。 bcdout2:out std_logic_vector(1 to 7)。 這個(gè)記分譯馬電路是針對(duì)乒乓球游戲機(jī)的特點(diǎn)進(jìn)行的特別設(shè)計(jì),采用的是全部列舉的方法。bcdout2=1111110。bcdout2=1011111。bcdout2=1101101。bcdout2=1111111。bcdout2=0110011。bcdout2=1111110。 use 。 記分譯碼器的設(shè)計(jì) 七段譯碼器是在數(shù)學(xué)電路設(shè)計(jì)中經(jīng)常用到的顯示電路。 else count1=count1+1。 else count2=count2+1。 elsif i=7 then i=8。 state=allow1hit。 else state=ballmoveto1。 else state=ballmoveto2。 when i1=i=0。count100000。event and clk=39。 在整個(gè)程序中,狀態(tài)機(jī)起的是中央控制器的作用,由它控制的信號(hào)來(lái)影響整個(gè)程序中的其他相關(guān)部分,如記分部分,發(fā)光二極管部分。 clk:int std_logic。 設(shè)計(jì)該乒乓球游戲機(jī)的輸入與輸出端口。 若發(fā)球后乙沒(méi)有提前擊球 規(guī)定球移動(dòng)到對(duì)方第一個(gè)發(fā)光二極管時(shí)允許擊球,那么狀態(tài)機(jī)從“第一盞燈亮狀 態(tài)”轉(zhuǎn)移到“球向乙移動(dòng)狀態(tài)”。 ( 3) VHDL 語(yǔ)句的行為描述能力和程序結(jié)構(gòu)決定了他具有支持大規(guī)模設(shè)計(jì)的分解和已有設(shè)計(jì)的再利用功能。除了 含有許多具有硬件特征的語(yǔ)句外, VHDL 的語(yǔ)言形式和描述風(fēng)格與句法是十分類似于一般的計(jì)算機(jī)高級(jí)語(yǔ)言。 硬件描述語(yǔ)言 —— VHDL VHDL 的英文全名是 VeryHighSpeed Integrated Circuit HardwareDescription Language,誕生于 1982 年。 80年代為計(jì)算機(jī)輔助工程 (CAE)階段。 當(dāng)甲方按動(dòng)乒乓球開(kāi)關(guān)時(shí),靠近甲方的第一個(gè)發(fā)光二極管亮,然后發(fā)光二極管由甲方方向依次點(diǎn)亮,代表乒乓球的移動(dòng)。 ( 2) 通過(guò)該課程設(shè) 計(jì)的學(xué)習(xí),總結(jié)計(jì)算機(jī)組成原理課程的學(xué)習(xí)內(nèi)容, 運(yùn)用所學(xué)的數(shù)字電路以及計(jì)算機(jī)組成和 狀態(tài)機(jī) 的基本原理、基本知識(shí)和基本技巧,解決某一個(gè)具體的實(shí)際問(wèn)題,培養(yǎng)綜合分析和解決問(wèn)題的能力。 乒乓球游戲機(jī)控制電路是有甲、乙雙方參賽,有裁判控制發(fā)“球”的三人乒乓球游戲機(jī);它能完成自動(dòng)裁判和自動(dòng)計(jì)分是一個(gè)帶數(shù)字顯示的模擬游戲機(jī)。課業(yè)繁重,但閑暇時(shí),總喜歡在校園中徜徉,每每看到跳動(dòng)的乒乓,就有種輕衫襯跳脫的輕松感。 系統(tǒng)開(kāi)發(fā)平臺(tái)為 MAX+PLUSII,程序設(shè)計(jì)語(yǔ)言為 VHDL。 本論文對(duì)系統(tǒng)的功能設(shè)計(jì) 、 實(shí)現(xiàn)流程及正確使用都做了詳細(xì)的描述。又一枚金牌歸我中華。 其中電子玩具的發(fā)展也是在日益成熟。 ( 1)通過(guò)該課程設(shè)計(jì),結(jié)合計(jì)算機(jī) 科學(xué)的理論、抽象和設(shè)計(jì)三種形態(tài),進(jìn)一步掌握計(jì)算機(jī)中各功能部件的工作原理和邏輯實(shí)現(xiàn),熟悉乒乓球游戲機(jī)的基本工作原理。 ( 3) 當(dāng) “球 ”(點(diǎn)亮的那只 LED)運(yùn)動(dòng)到某方的最后一位時(shí),參賽者應(yīng)能果斷地按下位于自己一方的按鈕開(kāi)關(guān),即表示啟 動(dòng)球拍擊球。 70 年代為計(jì)算機(jī)輔助設(shè)計(jì)(CAD)階段,人們開(kāi)始用進(jìn)行 IC 版圖編輯、 PCB 布局布線,取代了手工操作。目前,就 FPGA/CPLD 開(kāi)發(fā)來(lái)說(shuō),比較常用和流行的HDL 主要有 ABELHDL、 AHDL 和 VHDL[3]。 VHDL 主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu),行為,功能和接口。 ( 2) VHDL 豐富的仿真語(yǔ)句和庫(kù)函數(shù),使得在任何大系統(tǒng)的設(shè)計(jì)早期就能查驗(yàn)設(shè)計(jì)系統(tǒng)的功能可行性,隨時(shí)可對(duì)設(shè)計(jì)進(jìn)行仿真模擬。開(kāi)始的時(shí)候處于“等待發(fā)球狀態(tài)”,若甲發(fā)球則狀態(tài)轉(zhuǎn)移到“第一盞燈亮狀態(tài)”,若乙發(fā)球則轉(zhuǎn)移到“第八盞燈亮狀態(tài)”,具體說(shuō)明以甲球?yàn)槔R韵挛覀兙驮敿?xì)解析各個(gè)板快的設(shè)計(jì)與實(shí)現(xiàn)。 //引用 必要的庫(kù)函數(shù)和包集合 entity pingponggame is 實(shí)體名為 pingponggame port(reset:int std_logic。在波形模擬圖中是用數(shù)值來(lái)表示狀態(tài)的。 elsif clk39。 then i=0。state=light8on。state=waitserve。state=waitserve。 elsif i=2 then i=1。state=waitserve。 state=ballowto2。state=ballmoveto1。 end process。 use 。 case tembinaryin is 把 0到 9 的 5 位二進(jìn)制碼轉(zhuǎn)換成七段譯碼 when00000=bcdout1=1111110。 when00100=bcdout1=1111110。 when01000=bcdout1=1111110。 when00000=bcdout1=0110000。 when10000=bcdout1=0110000。 把 20 到 21的 5位二進(jìn)制碼轉(zhuǎn)換成七段譯碼 when10100=bcdout1=1101101。 end m。 bcdout1:out std_logic_vector(1 to 7)。 用七段 譯碼器顯示乙的分?jǐn)?shù) end game。 Score21(2)同理。 圖 乒乓球游戲機(jī)仿真波形圖一中的乒乓球移動(dòng)狀況 圖 是乙發(fā)球以后,甲在正確時(shí)刻接球的波形仿真圖。 在具體設(shè)計(jì)過(guò)程中還需要改進(jìn)的是控制系統(tǒng)的糾錯(cuò)功能。書本上的內(nèi)容第一次完完全全的綜合運(yùn)用。 ENTITY change IS PORT(first:IN STD_LOGIC。 BEGIN first_temp = first。 total = total1 + total2。 digit: OUT STD_LOGIC_VECTOR(6 downto 0))。 END COMPONENT。 score1,score2: OUT integer range 0 to 11)。 total: OUT integer range 0 to 7。 END COMPONENT。 use 。139。139。 // 程序名稱: // 程序作者:陳 梁 // 最后修改日期: 20xx32 library ieee。數(shù)碼管選通 digit:OUT STD_LOGIC_VECTOR(6 downto 0))。 when 2= d1 = 0000000。 when 6= d1 = 0000000。 when 10=d1 = 0110000。 d4 = 0110000。 d4 = 1011011。 d4 = 1111011。 when 1= d5 = 0110000。 when 3= d6 = 1111001。digit = d2。digit = d6。 use 。記數(shù)器,分為 5Hz BEGIN if(rising_edge(clk)) then if(count = 99999) then count := 0。 END PROCESS。 use 。) then 全局復(fù)位 total_1 = 0。 end if。139。 END ARCHITECTURE。 總比分和 p1total,p2total,p1win,p2win,clear,first: OUT STD_LOGIC。) then state = waiting。039。= first=39。 END CASE。= first=39。039。039。139。 p1方得分 state = ends。139。 end if。 狀態(tài)轉(zhuǎn)移至等待裁判開(kāi)始 elsif(score2 = 11) then p2total = 39。= state = p2ready。