【正文】
CTURE main OF clk_div ISSIGNAL clk_out_2hz,clk_out_5hz:STD_LOGIC。BEGIN PROCESS(clk) VARIABLE count:integer range 0 to 99999。記數(shù)器,分為5Hz BEGIN if(rising_edge(clk)) then if(count = 99999) then count := 0。 clk_out_5hz = NOT clk_out_5hz。 else count := count + 1。 end if。 end if。 END PROCESS。 PROCESS(clk_out_5hz) BEGIN if(rising_edge(clk_out_5hz)) then clk_out_2hz = NOT clk_out_2hz。 end if。 END PROCESS。 WITH sel SELECT 選擇輸出時(shí)鐘 clk_out = clk_out_2hz when 39。039。, clk_out_5hz when 39。139。END ARCHITECTURE。// 程序名稱:// 程序作者:陳 梁// 最后修改日期:200932library ieee。use 。use 。use 。ENTITY total_stat IS port(p1total,p2total,reset,reset_all,ends: IN STD_LOGIC。總比分,清零,復(fù)位,結(jié)束標(biāo)志 total1,total2: OUT integer range 0 to 4)。END ENTITY。ARCHITECTURE main OF total_stat ISSIGNAL total_1,total_2:integer range 0 to 4。BEGIN PROCESS(p1total,reset,ends,reset_all) BEGIN if(reset_all = 39。139。) then 全局復(fù)位 total_1 = 0。比分清零 elsif(reset=39。139。) then 裁判按下開始鍵 if(ends=39。139。) then 判斷比賽是否全部結(jié)束 total_1 = 0。 比賽重新開始,總比分清零 end if。 elsif(rising_edge(p1total)) then total_1 = total_1 + 1。 end if。 END PROCESS。 PROCESS(p2total,reset,ends,reset_all) BEGIN if(reset_all = 39。139。) then total_2 =0。 elsif(reset=39。139。) then if(ends=39。139。) then total_2 = 0。 end if。 elsif(rising_edge(p2total)) then total_2 = total_2 + 1。 end if。 END PROCESS。 total1 = total_1。 total2 = total_2。END ARCHITECTURE。// 程序名稱:// 程序作者:陳 梁// 最后修改日期:200932library ieee。use 。use 。use 。ENTITY control IS PORT(clk,p1,p2,judge,who,sel,reset: IN STD_LOGIC。低頻時(shí)鐘,發(fā)球/擊球,裁判,當(dāng)前發(fā)球權(quán),首發(fā)權(quán)選擇,全局復(fù)位 score1,score2: IN integer range 0 to 11。當(dāng)前局比分 total: IN integer range 0 to 4。 總比分和 p1total,p2total,p1win,p2win,clear,first: OUT STD_LOGIC。p1/p2贏得該局或該球,清楚當(dāng)前比分,當(dāng)前首發(fā)權(quán)(輸出至發(fā)球權(quán)控制模塊) led_out: OUT STD_LOGIC_VECTOR(7 downto 0))。發(fā)光二極管的顯示END ENTITY。ARCHITECTURE main OF control ISSIGNAL led_pos:integer range 0 to 9。 表示當(dāng)前發(fā)光二極管被點(diǎn)亮的位置TYPE statetype IS (waiting,p1ready,p2ready,p1top2,p2top1,ends)。SIGNAL state : statetype。BEGIN PROCESS(clk,judge,reset) BEGIN if(reset=39。139。) then state = waiting。全局復(fù)位 elsif(rising_edge(clk)) then CASE state IS when waiting= p1win = 39。039。所有指示贏球的信號均為低電平 p2win = 39。039。 p1total = 39。039。 p2total = 39。039。 led_pos = 0。 if(judge = 39。139。) then clear = 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。= first=39。039。state=p1ready。 when 39。139。= first=39。139。state=p2ready。 END CASE。 elsif(total = 1 OR total = 3 OR total = 5) then CASE sel IS when 39。039。= first=39。139。state=p2ready。 when 39。139。= first=39。039。state=p1ready。以上控制首發(fā)權(quán) END CASE。 end if。 else state = waiting。 end if。 when p1ready= clear = 39。039。清除比分信號置為低電平 led_pos = 1??拷l(fā)球方的發(fā)光二極管被點(diǎn)亮(下同) if(p1 = 39。139。) then state = p1top2。發(fā)球,狀態(tài)發(fā)生轉(zhuǎn)移 else state = p1ready。 end if。 when p2ready= clear = 39。039。 led_pos = 8。 if(p2 = 39。139。) then state = p2top1。 else state = p2ready。 end if。 when p1top2= if(p2 = 39。139。) then檢測到對方擊球 if(led_pos = 7) then 判斷球的位置 state = p2top1。擊球成功 else p1win = 39。139。 擊球失誤,p1方得分 state = ends。 狀態(tài)轉(zhuǎn)移至一球結(jié)束 end if。 elsif(led_pos = 9) then 球“出界“ p1win = 39。139。 p1方得分 state = ends。 else led_pos = led_pos + 1。 球繼續(xù)移動(dòng) state = p1top2。狀態(tài)發(fā)生轉(zhuǎn)移 end if。 when p2top1= if(p1 = 39。139。) then if(led_pos = 2) then state = p1top2。 else p2win = 39。139。 state = ends。 end if。 elsif(led_pos = 0) then p2win = 39。139。 state = ends。 else led_pos = led_pos 1。 state = p2top1。 end if。 when ends= p1win = 39。039。 p2win = 39。039。 if(score1 = 11) then 一局比賽是否結(jié)否 p1total = 39。139。 總比分加1 state = waiting。 狀態(tài)轉(zhuǎn)移至等待裁判開始 elsif(score2 = 11) then p2total = 39。139。 state = waiting。 else CASE who IS 根據(jù)發(fā)球權(quán)選擇下一狀態(tài) when 39。039。= state = p1ready。 when 39。139。= state = p2ready。 END CASE。 end if。 END CASE。 end if。 END PROCESS。 以下為發(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。 END ARCHITECTURE。