【正文】
程設(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)題的能力。當(dāng)甲方按動(dòng)乒乓球開(kāi)關(guān)時(shí),靠近甲方的第一個(gè)發(fā)光二極管亮,然后發(fā)光二極管由甲方方向依次點(diǎn)亮,代表乒乓球的移動(dòng)。80年代為計(jì)算機(jī)輔助工程(CAE)階段。 硬件描述語(yǔ)言——VHDLVHDL的英文全名是VeryHighSpeed Integrated Circuit HardwareDescription Language,誕生于1982年。除了含有許多具有硬件特征的語(yǔ)句外,VHDL的語(yǔ)言形式和描述風(fēng)格與句法是十分類似于一般的計(jì)算機(jī)高級(jí)語(yǔ)言。 (3)VHDL語(yǔ)句的行為描述能力和程序結(jié)構(gòu)決定了他具有支持大規(guī)模設(shè)計(jì)的分解和已有設(shè)計(jì)的再利用功能。若發(fā)球后乙沒(méi)有提前擊球規(guī)定球移動(dòng)到對(duì)方第一個(gè)發(fā)光二極管時(shí)允許擊球,那么狀態(tài)機(jī)從“第一盞燈亮狀態(tài)”轉(zhuǎn)移到“球向乙移動(dòng)狀態(tài)”。首先考慮輸入端口,一般應(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í)鐘輸入端口clk。startbutton:int std_logic。乒乓球游戲機(jī)中有兩個(gè)計(jì)數(shù)器count1和count2,分別記憶甲和乙的得分,用發(fā)光二極管的輪流發(fā)光表示球的移動(dòng)軌跡。139。count2=00000。when others= i=0。end if。end if。else i=i1。state=allow2hit。i=0。i=0。所謂七段譯碼器,其實(shí)是由7段發(fā)光二極管組成的用于顯示數(shù)字的器件。 entity mudecoder isport(binaryin:int std_logic_vector(1 to 5)。when00001=bcdout1=1111110。when00101=bcdout1=1111110。when01001=bcdout1=1111110。when01100=bcdout1=0110000。when10001=bcdout1=0110000。when10101=bcdout1=1101101。 構(gòu)造體的設(shè)計(jì)該構(gòu)造體緊跟在實(shí)體設(shè)計(jì)之后,這樣就完成了數(shù)字乒乓球游戲機(jī)的VHDL源程序編寫。)。它是整個(gè)程序的核心,起到一個(gè)中心控制器的作用。 乒乓球游戲機(jī)波形仿真圖一 在這個(gè)仿真圖中,看到serve數(shù)組為1,代表乙發(fā)球。 乒乓球游戲機(jī)仿真波形圖二中的乒乓球移動(dòng)狀況下面仿真甲提前擊球的情況。此外,也學(xué)會(huì)了使用MAX+PLUS軟件。[3] 楊恒,盧飛成. FPGA/VHDL快速工程實(shí)踐入門與提高[M].[4][M].[5] 盧杰,賴毅. VHDL與數(shù)字電路設(shè)計(jì)[M]. 北京:科學(xué)出版社,2001[5] 劉建成,嚴(yán)婕. 電子技術(shù)實(shí)驗(yàn)與設(shè)計(jì)教程[M]. 北京:電子工業(yè)出版社,2007附錄:主要VHDL源程序// 程序名稱:// 程序作者:陳 梁// 最后修改日期:200932 library ieee。 總比分和 ends,who:OUT STD_LOGIC)。 when total1 = 4 OR total2 = 4 當(dāng)一方獲勝4局時(shí)比賽結(jié)束 else 39。use 。SIGNAL total1,total2 : integer range 0 to 4。 p1total,p2total,p1win,p2win,clear,first: OUT STD_LOGIC。END COMPONENT。 score1,score2: IN integer range 0 to 11。 U4: total_stat PORT MAP(p1total=p1total,p2total=p2total,total1=total1,total2=total2,reset=clear,reset_all=reset,ends=ends)。ARCHITECTURE main OF score_stat ISSIGNAL score_1,score_2:integer range 0 to 11。 END PROCESS。 END PROCESS。ENTITY score_show IS PORT(clk: IN STD_LOGIC。BEGIN PROCESS(score1,score2) BEGIN 以下為分?jǐn)?shù)譯碼進(jìn)程 CASE score1 IS when 0= d1 = 0000000。 when 4= d1 = 0000000。 when 8= d1 = 0000000。 END CASE。 d4 = 1111001。 d4 = 1110000。 d4 = 0110000。 END CASE。 PROCESS(clk) BEGIN if(rising_edge(clk)) then 掃描數(shù)碼管 if(count=6) then count = 0。digit = d4。 end if。clk為1MHz高頻時(shí)鐘輸入,sel為分頻輸出選擇 clk_out:OUT STD_LOGIC)。 end if。139。END ENTITY。139。) then total_2 =0。 end if。use 。 表示當(dāng)前發(fā)光二極管被點(diǎn)亮的位置TYPE statetype IS (waiting,p1ready,p2ready,p1top2,p2top1,ends)。039。) then clear = 39。139。139。 end if。) then state = p1top2。) then state = p2top1。 擊球失誤,p1方得分 state = ends。 when p2top1= if(p1 = 39。139。039。039。 end if。 以下為發(fā)光二極管組合譯碼電路,表示球的位置 WITH led_pos SELECT led_out = 00011000 when 0, 10011000 when 1, 01011000 when 2, 00111000 when 3, 00001000 when 4, 00010000 when 5, 00011100 when 6, 00011010 when 7, 00011001 when 8, 00011000 when 9。 when 39。139。 else led_pos = led_pos 1。) then if(led_pos = 2) then state = p1top2。 elsif(led_pos = 9) then 球“出界“ p1win = 39。 end if。 end if。 end if。 when 39。139。 送至分?jǐn)?shù)統(tǒng)計(jì)模塊,清除比分 if(total = 0 OR total = 2 OR total = 4 OR total = 6) then CASE sel IS when 39。039。BEGIN PROCESS(clk,judge,reset) BEGIN if(reset=39。低頻時(shí)鐘,發(fā)球/擊球,裁判,當(dāng)前發(fā)球權(quán),首發(fā)權(quán)選擇,全局復(fù)位 score1,score2: IN integer range 0 to 11。 total1 = total_1。139。 比賽重新開(kāi)始,總比分清零 end if。BEGIN PROCESS(p1total,reset,ends,reset_all) BEGIN if(reset_all = 39。// 程序名稱:// 程序作者:陳 梁// 最后修改日期:200932library ieee。 PROCESS(clk_out_5hz) BEGIN if(rising_edge(clk_out_5hz)) then clk_out_2hz = NOT clk_out_2hz。ARCHITECTURE main OF clk_div ISSIGNAL clk_out_2hz,clk_out_5hz:STD_LOGIC。END ARCHITECTURE。digit = d5。digit = d1。 when 1= d6 = 0110000。 END PROCESS。 d4 = 1111111。 d4 = 0110011。 d4 = 1111110。 when 9= d1 = 0000000。 when 5= d1 = 0000000。 when 1= d1 = 0000000。 total1,total2: IN integer range 0 to 4。 score2 = score_2。139。139。use 。 cat:OUT STD_LOGIC_VECTOR(5 downto 0)。 score1,score2: IN integer range 0 to 11。發(fā)光二極管的顯示END COMPONENT。COMPONENT clk_div IS PORT(clk,sel:IN STD_LOGIC。 led: OUT STD_LOGIC_VECTOR(7 downto 0)。 who_temp = first_temp when (temp=0 OR temp=1 OR temp=4 OR temp=5 OR temp=8 OR temp=9 OR temp=12 OR temp=13 OR temp=16 OR temp=17 OR temp=20) else NOT first_temp when (temp=2 OR temp=3 OR temp=6 OR temp=7 OR temp=10 OR temp=11 OR temp=14 OR temp=15 OR temp=18 OR temp=19) else who_temp。ARCHITECTURE main OF change ISSIGNAL who_temp,first_temp:STD_LOGIC。use 。但卻是我獨(dú)立自主的從設(shè)計(jì)電路到得出結(jié)論。 乒乓球游戲機(jī)波形仿真圖三 乒乓球游戲機(jī)仿真波形圖三中的