擲骰子游戲電路的設(shè)計(jì)與實(shí)現(xiàn)實(shí)驗(yàn)報(bào)告_第1頁
擲骰子游戲電路的設(shè)計(jì)與實(shí)現(xiàn)實(shí)驗(yàn)報(bào)告_第2頁
擲骰子游戲電路的設(shè)計(jì)與實(shí)現(xiàn)實(shí)驗(yàn)報(bào)告_第3頁
擲骰子游戲電路的設(shè)計(jì)與實(shí)現(xiàn)實(shí)驗(yàn)報(bào)告_第4頁
擲骰子游戲電路的設(shè)計(jì)與實(shí)現(xiàn)實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、數(shù)字電路與邏輯設(shè)計(jì)實(shí)驗(yàn)題目:擲骰子游戲電路的設(shè)計(jì)與實(shí)現(xiàn)學(xué)號:2012210554姓名:孫進(jìn)考班級:2012211119學(xué)院:信息與通信工程學(xué)院日期設(shè)計(jì)課題的任務(wù)要求設(shè)計(jì)并實(shí)現(xiàn)一個擲骰子游戲電路?;疽螅?、電路可供甲乙二人游戲,游戲者甲使用的按鍵為BTN0,游戲者乙使用的按鍵為BTN1。2、每按一次按鍵,代表擲一次骰子,可隨機(jī)得到 16 范圍內(nèi)的兩個數(shù)字。3、甲乙按鍵產(chǎn)生的隨機(jī)數(shù)字分別用數(shù)碼管DISP0-DISP1、DISP2-DISP3 顯示,并用DISP7 顯示比賽局?jǐn)?shù),比賽結(jié)束用88 點(diǎn)陣顯示獲勝方,并伴有聲音效果。4、具體游戲規(guī)則如下:(1) 第一局比賽,甲乙依次各按一次按鍵,按鍵所

2、得兩數(shù)之和為7 或11 者勝;若無人取勝,則進(jìn)行第二局比賽;(2) 第二局比賽,甲乙每人各按一次按鍵,按鍵所得二數(shù)之和與第一局比賽相同者獲勝,若無人獲勝,則進(jìn)行第三局比賽,重復(fù)進(jìn)行步驟(2),直到出現(xiàn)勝者為止。(3) 游戲局?jǐn)?shù)最多進(jìn)行六局。在第六局比賽時,若重復(fù)進(jìn)行步驟(2)仍未出現(xiàn)勝者,以按鍵所得兩數(shù)之和最大者為獲勝方。提高要求:1、增加多人游戲的功能,數(shù)碼管可分時記錄顯示每個游戲者的骰子點(diǎn)數(shù)。2、點(diǎn)陣顯示增加游戲開機(jī)動畫、結(jié)束動畫,并伴有樂曲播放。3、自擬其它功能。二、系統(tǒng)設(shè)計(jì)(包括設(shè)計(jì)思路、總體框圖、分塊設(shè)計(jì))1、整體設(shè)計(jì)思路將整個游戲電路分為時鐘分頻模塊、隨機(jī)數(shù)產(chǎn)生模塊、數(shù)碼管顯示模塊

3、、判斷控制模塊、點(diǎn)陣顯示模塊等五個模塊。其中,時鐘分頻模塊用于產(chǎn)生適合其他模塊使用的時鐘頻率;隨機(jī)數(shù)產(chǎn)生模塊接收來自按鍵的信號,產(chǎn)生1-6的隨機(jī)數(shù),其中按鍵帶有防抖功能;數(shù)碼管顯示產(chǎn)生的隨機(jī)數(shù)和局?jǐn)?shù);判斷控制模塊用于判斷勝負(fù),并控制點(diǎn)陣顯示;點(diǎn)陣顯示模塊用于顯示勝利的一方。2、系統(tǒng)框圖時鐘分頻模塊數(shù)碼管顯示模塊點(diǎn)陣顯示模塊判斷控制模塊隨機(jī)數(shù)產(chǎn)生模塊Btn0按鍵防抖 Btn1按鍵防抖reset3、分塊設(shè)計(jì) eq oac(,1)時鐘分頻模塊采用多級分頻的方法分別產(chǎn)生點(diǎn)陣掃描需要的1MHz的clk_dian頻率、數(shù)碼管掃描的10KHz的clk_shu頻率、產(chǎn)生第一位隨機(jī)數(shù)的2KHz的clk_x頻率、

4、產(chǎn)生第二位隨機(jī)數(shù)的3.3kHz的clk_y頻率和用于防抖的20hz的clk_dou頻率。 eq oac(,2)隨機(jī)數(shù)產(chǎn)生模塊隨機(jī)數(shù)產(chǎn)生模塊用于產(chǎn)生隨機(jī)數(shù)和局?jǐn)?shù)計(jì)數(shù)。reset用于使局?jǐn)?shù)歸零,重新開始游戲。btn0用于作為產(chǎn)生甲方隨機(jī)數(shù)的信號,btn1用于作為產(chǎn)生乙方隨機(jī)數(shù)的信號。clk_x和clk_y是用來產(chǎn)生兩位隨機(jī)數(shù)的時鐘信號。clk_dou為防抖時鐘。qout1-2是甲隨機(jī)數(shù)輸出信號,qout3-4是乙隨機(jī)數(shù)輸出信號,qout5是局?jǐn)?shù)信號。 eq oac(,3)數(shù)碼管顯示模塊數(shù)碼管顯示模塊用于顯示產(chǎn)生的隨機(jī)數(shù)和局?jǐn)?shù)。clk_shu接收10KHz的時鐘頻率。qin1-5分別接收隨機(jī)數(shù)產(chǎn)生模

5、塊的qout1-5信號。cat5.0和g6.0控制數(shù)碼管的位選和段選信號。 eq oac(,4)控制判斷模塊控制判斷模塊用于判斷勝負(fù)并控制點(diǎn)陣顯示。clk_dou為防抖時鐘頻率,btn1為乙方按完按鍵的信號,jia1-2和yi1-2為甲乙方的隨機(jī)數(shù),ju為比賽局?jǐn)?shù)。V是勝負(fù)結(jié)果,用于控制點(diǎn)陣顯示。 eq oac(,5)點(diǎn)陣顯示模塊 點(diǎn)陣顯示模塊用于顯示勝利的一方。clkin接1MHz的時鐘頻率,v是勝負(fù)結(jié)果。beep是蜂鳴器輸出信號,當(dāng)有一方勝利的時候就會輸出高電平信號;row和col分別是點(diǎn)陣的行輸入和列輸入。仿真波形及波形分析 eq oac(,1)分頻模塊由于分頻比例太高,仿真到1s需要花

6、費(fèi)大量時間,故只仿真到20ms,可觀察其中的clk_x和clk_y信號。 eq oac(,2)隨機(jī)數(shù)模塊如圖所示,當(dāng)btn0被按下,經(jīng)過防抖測試之后,產(chǎn)生隨機(jī)數(shù)1和4,btn1被按下,經(jīng)過防抖測試之后,產(chǎn)生隨機(jī)數(shù)3和6,reset撥上之后局?jǐn)?shù)歸零,重新開始(圓角方形所示)。 eq oac(,3)數(shù)碼管顯示模塊如圖所示,圓圈內(nèi)為位選輸出信號,其中cat4數(shù)碼管沒有使用。方框內(nèi)為段選輸出信號,以輸出1和5為例,顯示正確,其中的毛刺可以忽略,不影響顯示效果。 eq oac(,4)判斷控制模塊如圖,僅以第一局為例,設(shè)置甲方為5+2=7,乙方為1+1=2,如方框內(nèi)所示;btn1下降沿觸發(fā)比較,v的結(jié)果為

7、01,即甲方獲勝,如圓圈內(nèi)所示,仿真結(jié)果正確。 eq oac(,5)點(diǎn)陣顯示模塊如圖,以顯示甲為例,輸入為v=01,行輸出和列輸出顯示結(jié)果為漢字甲,蜂鳴器輸出beep=1,符合預(yù)設(shè)結(jié)果。源程序分頻器模塊fenpinqi.vhdlibrary ieee;use ieee.std_logic_1164.all;entity fenpinqi is port( clkin:in std_logic; -時鐘信號輸入 clk_dian,clk_shu,clk_x,clk_y,clk_dou:out std_logic); -時鐘信號輸出end fenpinqi;architecture a of fe

8、npinqi is signal tmp1:integer range 0 to 24; signal tmp2:integer range 0 to 49; signal tmp3:integer range 0 to 4; signal tmp4:integer range 0 to 149; signal tmp5:integer range 0 to 499; signal clktmp1:std_logic; signal clktmp2:std_logic; signal clktmp3:std_logic; signal clktmp4:std_logic; signal clk

9、tmp5:std_logic; beginp1:process(clkin)-分頻到1MHz begin if clkinevent and clkin=1 then if tmp1=24 then tmp1=0; clktmp1=not clktmp1; else tmp1=tmp1+1; end if; end if;end process p1;p2:process(clktmp1)-二級分頻,分頻到10kHz begin if clktmp1event and clktmp1=1 then if tmp2=49 then tmp2=0; clktmp2=not clktmp2; els

10、e tmp2=tmp2+1; end if; end if;end process p2;p3:process(clktmp2)-分頻到1kHz begin if clktmp2event and clktmp2=1 then if tmp3=4 then tmp3=0; clktmp3=not clktmp3; else tmp3=tmp3+1; end if; end if;end process p3;p4:process(clktmp1)-分頻到3.333kHzbegin if clktmp1event and clktmp1=1 then if tmp4=149 then tmp4=

11、0; clktmp4=not clktmp4; else tmp4=tmp4+1; end if; end if;end process p4;p5:process(clktmp2)分頻到20hzbegin if clktmp2event and clktmp2=1 then if tmp5=499 then tmp5=0; clktmp5=not clktmp5; else tmp5=tmp5+1; end if; end if;end process p5;clk_dian=clktmp1;-點(diǎn)陣掃描頻率clk_shu=clktmp2;-數(shù)碼管掃描頻率clk_x=clktmp3;-產(chǎn)生第一

12、位隨機(jī)數(shù)頻率clk_y=clktmp4;-第二偽隨機(jī)數(shù)頻率clk_dou=clktmp5;-防抖掃描頻率end a;2、隨機(jī)數(shù)模塊 suijishu3.vhdlibrary ieee;use ieee.std_logic_1164.all;use ;use ; entity suijishu3 isport( reset:in std_logic;-復(fù)位信號 btn0:in std_logic;-甲按鍵信號 btn1:in std_logic;-乙按鍵信號 clk_x:in std_logic;-第一位隨機(jī)數(shù)頻率 clk_y:in std_logic;-第二位隨機(jī)數(shù)頻率 clk_dou:in

13、std_logic;-防抖頻率 qout1: out std_logic_vector(3 downto 0);-甲第一位隨機(jī)數(shù)輸出 qout2: out std_logic_vector(3 downto 0);-甲第二位隨機(jī)數(shù)輸出 qout3: out std_logic_vector(3 downto 0);-乙第一位隨機(jī)數(shù)輸出 qout4: out std_logic_vector(3 downto 0);-乙第二位隨機(jī)數(shù)輸出 qout5: out std_logic_vector(3 downto 0);-局?jǐn)?shù)輸出end suijishu3;architecture a of sui

14、jishu3 is signal q5,q6,q7,q8:std_logic; signal q1,q2,q3,q4:std_logic; signal x:integer range 0 to 100; signal y:integer range 100 to 200; signal xx:integer range 0 to 6; signal yy:integer range 0 to 6; signal xx1:integer range 0 to 6; signal yy1:integer range 0 to 6; signal ju:integer range 0 to 6;b

15、egin p1:process(clk_x,clk_y) begin if clk_xevent and clk_x=1 then-利用clk_x從0到100計(jì)數(shù) if x=100 then x=0; else x=x+1; end if; end if; if clk_yevent and clk_y=1 then-利用clk_x從100到200計(jì)數(shù) if y=200 then y=100; else y=y+1; end if; end if; end process p1; p2:process(btn0,clk_dou)-btn0鍵防抖 begin if clk_douevent an

16、d clk_dou=1 then q3=q2; q2=q1; q1=btn0; q4=q1 and q2 and q3;-經(jīng)過三個防抖信號周期(1.5ms),q4變?yōu)?,作為按鍵信號輸出 end if;end process p2;p3:process(btn1,clk_dou)-btn1鍵防抖 begin if clk_douevent and clk_dou=1 then q7=q6; q6=q5; q5=btn1; q8=q5 and q6 and q7; end if;end process p3; p4:process(q4,reset) begin if reset=1 then-

17、如果復(fù)位信號為1,局?jǐn)?shù)歸零 ju=0; elsif q4event and q4=1 then-q4為甲按鍵防抖后輸出信號 xx=(x rem 6)+1;- 產(chǎn)生第一位隨機(jī)數(shù) yy=(y rem 6)+1;-產(chǎn)生第二位隨機(jī)數(shù) if ju=6 then-局?jǐn)?shù)統(tǒng)計(jì) ju=1; else juqout1qout1qout1qout1qout1qout1qout1qout2qout2qout2qout2qout2qout2qout2qout5qout5qout5qout5qout5qout5qout5qout5=0000; end case; end process p4; p5:process(q8

18、)-產(chǎn)生乙方的隨機(jī)數(shù) begin if q8event and q8=1 then xx1=(x rem 6)+1; yy1qout3qout3qout3qout3qout3qout3qout3qout4qout4qout4qout4qout4qout4qout4=0001; end case;end process p5;end a;3、數(shù)碼管模塊shumaguan.vhdlibrary ieee;use ieee.std_logic_1164.all;ENTITY shumaguan IS PORT( clk_shu:in std_logic; -數(shù)碼管掃描頻率 qin1,qin2,qin

19、3,qin4,qin5:IN STD_LOGIC_VECTOR(3 DOWNTO 0);-隨機(jī)數(shù)輸入信號 g:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);-段選輸出信號 cat:OUT STD_LOGIC_VECTOR(5 DOWNTO 0); -位選輸出信號 END shumaguan; ARCHITECTURE a OF shumaguan IS SIGNAL tmpg:STD_LOGIC_VECTOR(6 DOWNTO 0); SIGNAL tmpn:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL tmpc:INTEGER RANGE 0

20、TO 4; BEGIN p1:PROCESS(clk_shu) -0到4計(jì)數(shù)器 BEGIN if(clk_shuevent and clk_shu=1)then if tmpc = 4 then tmpc=0; else tmpc tmpn=qin1;cat tmpn=qin2;cat tmpn=qin3;cat tmpn=qin4;cat tmpn=qin5;cat tmpg tmpg tmpg tmpg tmpg tmpg tmpg tmpg=0000000; END CASE; END PROCESS p3;g=tmpg; END a;4、控制判斷模塊control3.vhdlibrar

21、y ieee;use ieee.std_logic_1164.all;use ;entity control3 is port( clk_dou:in std_logic;-防抖頻率 btn1:in std_logic;-乙按鍵信號 jia1:in std_logic_vector(3 downto 0); jia2:in std_logic_vector(3 downto 0); yi1:in std_logic_vector(3 downto 0); yi2:in std_logic_vector(3 downto 0);-甲乙隨機(jī)數(shù) ju:in std_logic_vector(3 do

22、wnto 0);-局?jǐn)?shù) v:out std_logic_vector(1 downto 0);-輸出end control3;architecture a of control3 is signal q11,q12,q13,q14:std_logic; signal jia:std_logic_vector(3 downto 0); signal yi: std_logic_vector(3 downto 0); signal jia_temp:std_logic_vector(3 downto 0); signal yi_temp:std_logic_vector(3 downto 0);

23、signal v_temp:std_logic_vector(1 downto 0);beginp1:process(clk_dou,btn1)-乙按鍵防抖 begin if clk_douevent and clk_dou=1 then q13=q12; q12=q11; q11=btn1; q14=q11 and q12 and q13; end if;end process p1; jia=jia1 + jia2;-甲兩位隨機(jī)數(shù)相加 yi= yi1+ yi2; -乙兩位隨機(jī)數(shù)相加process(q14,jia,yi,ju) begin if q14event and q14=0then

24、-乙按鍵的下降沿觸發(fā) if ju=0001 then-判斷局?jǐn)?shù) jia_temp=jia; yi_temp=yi;-如果是第一局,將甲乙結(jié)果寄存 if ( jia = 0111or jia=1011 ) and (yi/=0111 and yi/=1011)then-甲勝利 v_temp=01; elsif(jia/=0111 and jia/=1011) and (yi=0111 or yi=1011)then-乙勝利 v_temp=10; else v_tempyi)then v_temp=01; elsif(jiayi)then v_temp=10; else v_temp=11; en

25、d if; else-第二到第五局 if(jia=jia_temp)and(yi/=yi_temp)then v_temp=01; elsif(jia/=jia_temp)and(yi=yi_temp)then v_temp=10; else v_temp=11; end if; end if; end if; end process; v=v_temp;end a;5、點(diǎn)陣模塊dianzhen.vhdlibrary ieee;use ieee.std_logic_1164.all;use ;ENTITY dianzhen is PORT( clkin: IN STD_LOGIC;-掃描時鐘

26、beep:out std_logic; -蜂鳴器輸出 v: IN STD_LOGIC_vector(1 downto 0);-控制輸入 row: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -行 col: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -列 END dianzhen; ARCHITECTURE a OF dianzhen IS signal tmp:integer range 0 to 7; SIGNAL tmp_row:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL tmp_col:STD_LOGIC_V

27、ECTOR(7 DOWNTO 0); beginp1:process(clkin)-0-7計(jì)數(shù)器 begin if clkinevent and clkin=1 then if tmp=7 then tmp=0; else tmptmp_col=01111111;tmp_rowtmp_col=10111111;tmp_rowtmp_col=11011111;tmp_rowtmp_col=11101111;tmp_rowtmp_col=11110111;tmp_rowtmp_col=11111011;tmp_rowtmp_col=11111101;tmp_rowtmp_col=11111110;

28、tmp_rowtmp_col=01111111;tmp_rowtmp_col=10111111;tmp_rowtmp_col=11011111;tmp_rowtmp_col=11101111;tmp_rowtmp_col=11110111;tmp_rowtmp_col=11111011;tmp_rowtmp_col=11111101;tmp_rowtmp_col=11111110;tmp_row=00000110; end case; else tmp_col=11111111; -不顯示 end if; end process p2; p3:process(v) begin if v=10 or v=01then beep=1;-有人獲勝,輸出高電平,蜂鳴器發(fā)聲 else beep=0; end if; end process p3; row=tmp_col; col=tmp_row;end a;功能說明及資源利用情況實(shí)際電路框圖:功能說明:事先約定,甲方先按按鍵,乙方后按。當(dāng)程序初始化之后,在c

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論