台 灣 大 學 資 訊 工 程 學 倐 ntu csie digital circuit laboratory 數...
TRANSCRIPT
台台台台 灣灣灣灣 大大大大 學學學學 資資資資 訊訊訊訊 工工工工 程程程程 學學學學 系系系系
NTU CSIE Digital Circuit Laboratory
數位電路實驗數位電路實驗數位電路實驗數位電路實驗
Final Project Project Name::::Shooting Bird(射小鳥射小鳥射小鳥射小鳥)
組別組別組別組別:9
組員組員組員組員:B97902019 蔡明驊
B97902028 王志勝
B97902030 林運生
B97902074 張洺偉
指導教授指導教授指導教授指導教授:甘宗左教授
指導助教指導助教指導助教指導助教:薛名雄助教
中華民國 100年 01 月
2
摘要摘要摘要摘要
這學期的數位電路實驗,我們開始接觸到一點硬體的東
西,從最原本的電壓、電阻和電流的量測,示波器的校準和
使用,最後摸到了 Altera DE2-70這塊板子,我們利用這塊板
子來操作一些邏輯閘的性質,實作加法、減法、多工器和簡
易 ALU。到了學期末,我們就被要求充分利用這塊板子,完
成我們無限的創意。
一開始我們進行討論,決定我們要做什麼?是要做實用
性目的,還是要做娛樂性目的。最後我們決定要做娛樂性目
的的射擊遊戲,接著我們便開始天馬行空地想像,把一切想
要的結果都歸納進來,緊接著是規劃期末時程表,按表操
課,過程中不斷遭遇各式各樣的難關,有些是可以解決的困
難,有些卻如同 P=NP般難題,雖不能說無解,但也是難度
頗高。最後,做的東西雖然和原本的設計理念有點不同,但
我們還是欣然接受,因為我們在過程中學到的東西遠比最後
呈現的簡單結果還多。
3
目錄目錄目錄目錄 摘要…………………………………………..………….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
4
第一章第一章第一章第一章 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可
供使用。
以下是這塊板子的外觀圖:
5
(圖 1)
裡面的功能介紹和下面這張圖顯示的一樣:
(圖 2)
6
1-2. 軟體介紹軟體介紹軟體介紹軟體介紹
Quartus II使用 VHDL。VHDL(Very High Speed Integrated
Circuit Hardware Descrption Language的縮寫),顧名思義就是
硬體描述語言,是用來敘述硬體的行為特徵的語言。相關的
語法在這裡不做闡述,想要研究的人可以上網找相關資料或
者相關書籍。
7
第二章第二章第二章第二章 遊戲介紹遊戲介紹遊戲介紹遊戲介紹
2-1. 設計動機設計動機設計動機設計動機
一開始我們四人不知道要做什麼好,所以決定每個人都
想一種,最後來投票,張洺偉想要做進階版的小朋友下樓
梯,就是會出現很多隨機的門,然後不知道走進去的門會通
到哪個門出來;蔡明驊想要做打磚塊,利用很多 OO 的概念;
王志勝則是上網找了很多影片來看,想要朝搖桿方面努力;
林運生則是想要做貓狗大戰的遊戲,就是一隻貓和一隻狗互
丟東西的遊戲。
最後我們評估了一點發展可能性,決定要做射擊類的遊
戲,並且結合類似 Wii 的紅外線控制手槍來射擊物體,那時
候也想到如果最後做不出紅外線,也許可以來改造 PS/2的滑
鼠,因為 DE2-70也支援 PS/2接頭的鍵盤或滑鼠。
於是乎我們的主題就這麼定下來了,但是要射擊什麼物
體還沒決定,一開始也隨便講講,說要射蔡明驊或射什麼之
類的,沒想到開始構思程式的時候,就畫了一隻鳥,在螢幕
上面飛來飛去,感覺蠻合理的,就沿用到最後的 project主
題,所以我們就朝著射小鳥邁進,不過可惜的是,不但手槍
沒弄出來,連滑鼠也沒研究出來,還好還有個鍵盤,所以只
好改用鍵盤來代替。
8
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 的結束畫面,接著就可以看分數,看你是不是
有進到我們的最高得分排行榜囉。
9
(流程圖)
10
第三章第三章第三章第三章 遊戲實作遊戲實作遊戲實作遊戲實作
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 種顏色,這感覺
相當不錯,原理也是平易近人,關鍵就是 X,代表十六進位
11
表示法。
3-2. 鍵盤鍵盤鍵盤鍵盤
實作部份只有一點需要注意,就是鍵盤的讀入很奇妙,
試從電路的角度來分析,當你按下一個按鍵時,會送出一個
signal,之後這個 signal就會一直持續下去,即使你把按鍵放
掉也是一樣。
要克服這個問題,就要利用另外一種訊息的讀取,break
code(F0),這是一種 signal,當你放掉鍵盤按鍵時,才會產生,
而我們要記得去讀取這個 signal,當讀取這個 signal時,取
消按下的 signal訊息。
3-3. 七段顯示器七段顯示器七段顯示器七段顯示器
最簡易的部份就是七段顯示器了,但是這裡也有一個地
方需要注意,就是宣告方式和最後 assign pin腳方式的差別,
0..6和 6..0是不一樣的。
3-4. 倒數計時器倒數計時器倒數計時器倒數計時器
一開始這部份搞了很久,都以為失敗了,但是其實是 clock
沒算好。以 50MHz 來說,它一秒震盪 50M 次,可以說是非
常快,所以如果沒算好,咻一下就結束了,人眼也看不出來,
12
我們可以設一個變數來紀錄,當它數到 50M,就代表已經過
了一秒。
13
第四章第四章第四章第四章 實作結果實作結果實作結果實作結果
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即可重新再來。
14
4-2. 遊戲畫面遊戲畫面遊戲畫面遊戲畫面
開始畫面(舊版,尚未新增螢幕上的時間倒數):
15
遊戲進行中畫面(時間倒數從 15 跑到 10):
遊戲結束的畫面:
16
DE2 板子的顯示畫面(時間設定為 15 秒,尚未開始,玩家試
玩,得分 26):
最後要正式開始時,只要 reset即可重置分數,然後按下 SW[2]
開始遊戲。
17
第五章第五章第五章第五章 工作分配工作分配工作分配工作分配
蔡明驊:時間倒數計時器,買早餐。
王志勝:鍵盤部份,買午餐。
林運生:VGA 部份,買晚餐。
張洺偉:VGA 部份,買宵夜。
共同部份:report和 wiki 和程式架構和音效(失敗)。
18
第六章第六章第六章第六章 討論與總結討論與總結討論與總結討論與總結
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 輸
出,殘念。
19
6-3. 心得心得心得心得
心路歷程:
1. 一開始不知道要做什麼主題好,於是組員們隨意開
spec,猶如初生之犢不畏虎,為日後的搞不出來埋下伏
筆。
2. 借的 DE2 板子似乎有點狀況,還好助教不畏辛勞,遠從
地球另一端伸出援手,即刻救援。
3. 第一次把雲和鳥印在上面,覺得世界非常奇妙,但是那
時候很陽春,配色也不全,正所謂鳥非鳥,雲是雲。
4. 把鍵盤和分數的部分搞定,可以控制十字瞄準器打鳥,
很是高興,猶如早起的鳥兒看到蟲兒般雀躍,開始瘋狂
打鳥。
5. 進入無窮迴圈,於是想到了沒有子彈或時間倒數的限
制;加上了時間倒數,但是一開始跑太快了^^”,一下
子就結束,很是挫折,簡直盪到谷底。
6. 修正了時間倒數,完成了基本版,剩下時間幾乎都在研
究音效,但是還是搞不出來,彷彿剛看完明天過後,充
滿了無限悲傷。
7. 完成了某一些東西,就會再多想可以再多弄些什麼,結
果就是有點無限上綱,弄完了上色還不滿足,又弄了噴
血的畫面,又把時間倒數印在螢幕上,又….,導致最後
天天跨年,天天看日出。
20
第七章第七章第七章第七章 參考資料參考資料參考資料參考資料
圖 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