台 台 台
台 灣 灣 灣 灣 大 大 大 大 學 學 學 學 資 資 資 資 訊 訊 訊 訊 工 工 工 工 程 程 程 程 學 學 學 學 系 系 系 系 NTU CSIE
Digital Circuit Laboratory 數位電路實驗
數位電路實驗 數位電路實驗 數位電路實驗
Final Project
Project Name: : :Shooting Bird(射小鳥 : 射小鳥 射小鳥) 射小鳥
組別 組別 組別
組別:9 組員
組員 組員
組員:B97902019 蔡明驊
B97902028 王志勝 B97902030 林運生 B97902074 張洺偉 指導教授
指導教授 指導教授
指導教授:甘宗左教授 指導助教
指導助教 指導助教
指導助教:薛名雄助教
中華民國 100 年 01 月
摘要 摘要 摘要 摘要
這學期的數位電路實驗,我們開始接觸到一點硬體的東 西,從最原本的電壓、電阻和電流的量測,示波器的校準和 使用,最後摸到了 Altera DE2-70 這塊板子,我們利用這塊板 子來操作一些邏輯閘的性質,實作加法、減法、多工器和簡 易 ALU。到了學期末,我們就被要求充分利用這塊板子,完 成我們無限的創意。
一開始我們進行討論,決定我們要做什麼?是要做實用 性目的,還是要做娛樂性目的。最後我們決定要做娛樂性目 的的射擊遊戲,接著我們便開始天馬行空地想像,把一切想 要的結果都歸納進來,緊接著是規劃期末時程表,按表操 課,過程中不斷遭遇各式各樣的難關,有些是可以解決的困 難,有些卻如同 P=NP 般難題,雖不能說無解,但也是難度 頗高。最後,做的東西雖然和原本的設計理念有點不同,但 我們還是欣然接受,因為我們在過程中學到的東西遠比最後 呈現的簡單結果還多。
目錄 目錄 目錄 目錄
摘要………..………….2
目錄………..….3
第一章 Altera DE2-70 介紹………4~6 1-1. 硬體介紹………4~5 1-2. 軟體介紹………6
第二章 遊戲介紹……….7~9 2-1. 設計動機……….7
2-2. 遊戲流程……….8~9 第三章 遊戲實作……….…….10~13 3-1. VGA……….……10~11 3-2. 鍵盤………...12
3-3. 七段顯示器………...12
3-4. 倒數計時器……….12~13 第四章 實作結果……….13~16 4-1. 操作說明………...13
4-2. 遊戲畫面……….14~16 第五章 工作分配………17
第六章 討論與總結………..18~19 6-1. 遇到的困難………18
6-2. 解決方法………18
6-3. 心得………19
第七章 參考資料……….20
第一章 第一章 第一章
第一章 Altera DE2-70 介紹 介紹 介紹 介紹
在這次的實作遊戲中,我們必須要先對所使用到的硬體 和軟體有其基本的認識,這樣我們才能充分利用我們所擁有 的條件,進一步達成目標。首先 DE2-70 繼承了 Altera 一系 列的開發軟體,如 Quartus II 和 Nios II 等。硬體方面,我們 這次使用的是 DE2-70 的這塊板子;軟體方面,我們使用 Quartus II 搭配 VHDL 語言,來控制我們的 DE2-70。
1-1. 硬體介紹 硬體介紹 硬體介紹 硬體介紹
DE2-70 發展板,其上有很多功能,例如:提供強大的多 媒體和網路、紅外線等連結點,可以供應使用者多元發展。
在板子上有 18 個 Switch,可以用來控制輸入訊號;有 4 個 按鈕的輸入控制,因為按下去訊號為 0,所以要利用負緣觸 發來偵測按下去的動作;本身也有 8MB 的 Flash memory 可 供使用。
以下是這塊板子的外觀圖:
(圖 1)
裡面的功能介紹和下面這張圖顯示的一樣:
(圖 2)
1-2. 軟體介紹 軟體介紹 軟體介紹 軟體介紹
Quartus II 使用 VHDL。VHDL(Very High Speed Integrated Circuit Hardware Descrption Language 的縮寫),顧名思義就是 硬體描述語言,是用來敘述硬體的行為特徵的語言。相關的 語法在這裡不做闡述,想要研究的人可以上網找相關資料或 者相關書籍。
第二章 第二章 第二章
第二章 遊戲介紹 遊戲介紹 遊戲介紹 遊戲介紹
2-1. 設計動機 設計動機 設計動機 設計動機
一開始我們四人不知道要做什麼好,所以決定每個人都 想一種,最後來投票,張洺偉想要做進階版的小朋友下樓 梯,就是會出現很多隨機的門,然後不知道走進去的門會通 到哪個門出來;蔡明驊想要做打磚塊,利用很多 OO 的概念;
王志勝則是上網找了很多影片來看,想要朝搖桿方面努力;
林運生則是想要做貓狗大戰的遊戲,就是一隻貓和一隻狗互 丟東西的遊戲。
最後我們評估了一點發展可能性,決定要做射擊類的遊 戲,並且結合類似 Wii 的紅外線控制手槍來射擊物體,那時 候也想到如果最後做不出紅外線,也許可以來改造 PS/2 的滑 鼠,因為 DE2-70 也支援 PS/2 接頭的鍵盤或滑鼠。
於是乎我們的主題就這麼定下來了,但是要射擊什麼物 體還沒決定,一開始也隨便講講,說要射蔡明驊或射什麼之 類的,沒想到開始構思程式的時候,就畫了一隻鳥,在螢幕 上面飛來飛去,感覺蠻合理的,就沿用到最後的 project 主 題,所以我們就朝著射小鳥邁進,不過可惜的是,不但手槍 沒弄出來,連滑鼠也沒研究出來,還好還有個鍵盤,所以只 好改用鍵盤來代替。
2-2. 遊戲流程 遊戲流程 遊戲流程 遊戲流程
首先把程式 compile 好,燒錄到 DE2-70 的板子上面,同 時板子要先連接好 PS/2 的鍵盤和螢幕,而且 SW[14]~SW[17]
先設定好計時器的時間,SW[0]~SW[3]設定為 logic 0,之後 就會看到螢幕上面顯示三朵雲和四隻鳥飛來飛去,一個十字 瞄準器代表手槍,以及時間倒數的時間顯示在螢幕中間。
接著就利用鍵盤的 ijkl(上左下右)和 A(射擊)來進行遊 戲,進行遊戲前,要先按一次 pushbutton[0](KEY[0])來 reset 全部環境因子(諸如分數或鳥、瞄準器的位置),再按下
SW[2](遊戲開始,時間開始倒數),就可以開始遊戲了。
遊戲過程中,時間不斷倒數,時間部份會顯示兩個地方,
第一是板子上面最左邊的兩個七段顯示器,第二是螢幕上 面,當時間剩下三秒時,會以紅字來提示,此外都是黑字;
分數部份也有差別,打中大隻鳥會得一分,因為大隻鳥比較 大隻,飛得比較慢,打中小隻鳥會得三分,因為小隻鳥比較 小隻,飛得比較慢,然後分數部份統一顯示在板子的中間部 份的兩個七段顯示器,在這裡要說明一下,打中鳥時,會有 鳥噴汁的畫面,有些同學試玩後都說我們有點血腥,但是我 們要澄清的是,那不是血跡,而是長得像血的紅色星星,不 過意思好像差不多。
最後時間倒數到零的時候,就會停止一切動作,只會秀 出 TIME UP 的結束畫面,接著就可以看分數,看你是不是 有進到我們的最高得分排行榜囉。
(流程圖)
第三章 第三章 第三章
第三章 遊戲實作 遊戲實作 遊戲實作 遊戲實作
3-1. VGA
裡面控制了螢幕的各項輸入內容,包括三朵雲、四隻鳥 和十字瞄準器,背景天空顏色,時間的倒數,還有分數的計 算及遊戲結束畫面,可以說是 code 部份最多的地方。
VGA 的畫面顯示原理,是它會利用我們 assign 的系統 clock(50MHz)來跑變數 hsync 和 vsync,分別為水平同步和垂 直同步,具體解釋就是一行行地掃描螢幕,這行的水平 x 掃 完,就把 y+1,掃下一行的 x,如此不斷重複下去,當掃到 最後一行時,再重頭開始,如此反覆下去,這裡的螢幕大小 是 640*480。
物體的移動可以分為靜態和動態,靜態物件例如:雲和 不會動的時間數字,我們只要控制要在什麼地方、什麼時候 秀出來即可;麻煩的是動態物件,例如:鳥和十字瞄準器,
我們要設兩個移動方向的變數,分別表示垂直和水平方向的 移動,變數值範圍為(-1), 0 和 1,(-1)代表此刻物件的座標 向左或向上移動,1 則相反,然後可以有個係數來做倍數擴 增,控制移動的速度。
最後值得一提的就是配色,一開始我們採用單純二進位 的 0 和 1 來表示顏色色彩,這樣的複雜度最多只有兩種顏色 可以提供一個物件使用,雖說已經要滿足了,但是效果不是 很好,剛好此時我們的革命同志陳彥豪同學出現,他說配色 可以有另一種方式,就是用 0~f 來表示 16 種顏色,這感覺
表示法。
3-2. 鍵盤 鍵盤 鍵盤 鍵盤
實作部份只有一點需要注意,就是鍵盤的讀入很奇妙,
試從電路的角度來分析,當你按下一個按鍵時,會送出一個 signal,之後這個 signal 就會一直持續下去,即使你把按鍵放 掉也是一樣。
要克服這個問題,就要利用另外一種訊息的讀取,break code(F0),這是一種 signal,當你放掉鍵盤按鍵時,才會產生,
而我們要記得去讀取這個 signal,當讀取這個 signal 時,取 消按下的 signal 訊息。
3-3. 七段顯示器 七段顯示器 七段顯示器 七段顯示器
最簡易的部份就是七段顯示器了,但是這裡也有一個地 方需要注意,就是宣告方式和最後 assign pin 腳方式的差別,
0..6 和 6..0 是不一樣的。
3-4. 倒數計時器 倒數計時器 倒數計時器 倒數計時器
一開始這部份搞了很久,都以為失敗了,但是其實是 clock 沒算好。以 50MHz 來說,它一秒震盪 50M 次,可以說是非
我們可以設一個變數來紀錄,當它數到 50M,就代表已經過 了一秒。
第四章 第四章 第四章
第四章 實作結果 實作結果 實作結果 實作結果
4-1. 操作說明 操作說明 操作說明 操作說明
KEY[0]是 reset all。
SW[2]是遊戲開始。
SW[3]是時間暫停。
SW[17]~SW[14]是設定時間,例如:1101 代表 13。
鍵盤 ijkl 代表上左下右 鍵盤 A 代表射擊。
當遊戲結束想要再玩一次時,先把 SW[2]調回 logic 0,再 按 KEY[0]reset 即可重新再來。
4-2. 遊戲畫面 遊戲畫面 遊戲畫面 遊戲畫面
開始畫面(舊版,尚未新增螢幕上的時間倒數):
遊戲進行中畫面(時間倒數從 15 跑到 10):
遊戲結束的畫面:
DE2 板子的顯示畫面(時間設定為 15 秒,尚未開始,玩家試 玩,得分 26):
最後要正式開始時,只要 reset 即可重置分數,然後按下 SW[2]
開始遊戲。
第五章 第五章 第五章
第五章 工作分配 工作分配 工作分配 工作分配
蔡明驊:時間倒數計時器,買早餐。
王志勝:鍵盤部份,買午餐。
林運生:VGA 部份,買晚餐。
張洺偉:VGA 部份,買宵夜。
共同部份:report 和 wiki 和程式架構和音效(失敗)。
第六章 第六章 第六章
第六章 討論與總結 討論與總結 討論與總結 討論與總結
6-1. 遇到的困難 遇到的困難 遇到的困難 遇到的困難
1. 一開始借到的 DE2 板子都怪怪的。
2. VGA 的 RGB 配色,是 10-bit 和外面常用的 8-bit 色不一 樣,差了四倍,同時也要注意陣列的元素宣告順序和 pin 腳 assign 的順序。
3. VGA 如何生圖。
4. 鍵盤的輸入會卡鍵。
5. 倒數計時器咻一下就跑完了,當下以為失敗了。
6. 音效弄不出來。
6-2. 解決方法 解決方法 解決方法 解決方法
1. 特別感謝助教的 DE2 板子救援,沒有昨日的助教,就沒 有今日的我們。
2. VGA 和鍵盤的 code,就是參考 DCL 網頁的範例 code。
3. 另外 co 了一個 program 去 run 小畫家畫出來的圖。
4. 因為 if 的判斷順序,導致鍵盤輸入有點卡。
5. 倒數計時器,深刻體會到 clock 的快速。
6. 音效部分,最後還是沒研究出來…,主要還是對於 AUD pin 腳的不認識,有想過把 wav 寫成死的,針對 DAC 輸 出,殘念。
6-3. 心得 心得 心得 心得
心路歷程:
1. 一開始不知道要做什麼主題好,於是組員們隨意開
spec,猶如初生之犢不畏虎,為日後的搞不出來埋下伏 筆。
2. 借的 DE2 板子似乎有點狀況,還好助教不畏辛勞,遠從 地球另一端伸出援手,即刻救援。
3. 第一次把雲和鳥印在上面,覺得世界非常奇妙,但是那 時候很陽春,配色也不全,正所謂鳥非鳥,雲是雲。
4. 把鍵盤和分數的部分搞定,可以控制十字瞄準器打鳥,
很是高興,猶如早起的鳥兒看到蟲兒般雀躍,開始瘋狂 打鳥。
5. 進入無窮迴圈,於是想到了沒有子彈或時間倒數的限 制;加上了時間倒數,但是一開始跑太快了^^”,一下 子就結束,很是挫折,簡直盪到谷底。
6. 修正了時間倒數,完成了基本版,剩下時間幾乎都在研 究音效,但是還是搞不出來,彷彿剛看完明天過後,充 滿了無限悲傷。
7. 完成了某一些東西,就會再多想可以再多弄些什麼,結 果就是有點無限上綱,弄完了上色還不滿足,又弄了噴 血的畫面,又把時間倒數印在螢幕上,又….,導致最後 天天跨年,天天看日出。
第七章 第七章 第七章
第七章 參考資料 參考資料 參考資料 參考資料
圖 1:
http://www.altera.com.cn/education/univ/materials/boards/unv-d e2-board.html
圖 2:
http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=E nglish&CategoryNo=53&No=226&PartNo=3
DCL 課程網:http://eraser.csie.ntu.edu.tw/courses/dcl/99/
DCL wiki:
http://eraser.csie.ntu.edu.tw/courses/dcl/99/wiki/doku.php