開放電腦計畫 - 從一顆最簡單的 mcu 談起
DESCRIPTION
金門大學 資訊工程系 陳鍾誠 2014 年 8 月 2 日於成功大學TRANSCRIPT
![Page 1: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/1.jpg)
開放電腦計畫
- 從一顆最簡單的 MCU 談起
金門大學 資訊工程系 陳鍾誠2014 年 8 月 2 日於成功大學
![Page 2: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/2.jpg)
話說
● 我在金門大學資訊工程系教書
![Page 3: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/3.jpg)
教甚麼呢?
![Page 4: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/4.jpg)
很多、像是
● 視窗程式● 系統程式● 網路程式● 動畫設計● 計算機結構● 機率統計● 人工智慧
![Page 5: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/5.jpg)
疑
● 好像哪裡怪怪的?
![Page 6: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/6.jpg)
哪裡怪?
![Page 7: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/7.jpg)
感覺
● 領域好像太分散了一點 !
![Page 8: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/8.jpg)
對阿、沒錯!
● 因為我們是小學校,老師比較少!
![Page 9: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/9.jpg)
所以
● 一個老師教的課程範圍就比較廣
![Page 10: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/10.jpg)
但是
● 通常也沒有這麼廣啦!
![Page 11: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/11.jpg)
一個老師
● 同時教「硬體、韌體、軟體、網路、多媒體」
![Page 12: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/12.jpg)
說真的
● 是有點不太正常啦!
![Page 13: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/13.jpg)
會這樣教
● 其實是我的一個心願
![Page 14: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/14.jpg)
那就是
● 想要了解整台電腦
● 從最底層到最上層
● 是怎麼設計出來的
![Page 15: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/15.jpg)
對我來說
● 這有點困難
![Page 16: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/16.jpg)
特別是
● 有關硬體的這部分
![Page 17: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/17.jpg)
話說
● 我大學念的是交大資訊科學系
![Page 18: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/18.jpg)
雖然有硬體方面的課
● 但我基本上都是低空飛過
● 或者是似懂非懂
![Page 19: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/19.jpg)
舉例而言
● 電子學我覺得自己從來沒懂過
● 特別跑去電子系修的電子實驗也只有 60分
![Page 20: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/20.jpg)
而對計算機結構
● 我在大學時根本就沒選● 研究所與博士用的好像都是右邊這本
● 我只記得,一直在計算速度、加快取、 ....
● 而且、一開始就教流水線pipeline
![Page 21: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/21.jpg)
但是
● 我連一顆最簡單的 MCU 都沒設計過啊
● 又怎麼會對這些「快取、流水線、MMU、平行」機制與公式有任何感覺呢?
![Page 22: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/22.jpg)
這種感覺
● 就好像我們在還不瞭解「萊特兄弟」的那種飛機構造之前
● 就被迫要研究設計「超音速渦輪噴射機」時會遇到甚麼問題一樣。
![Page 23: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/23.jpg)
於是
● 我們也只能夠「鴨子聽雷」,然後在考試的時候假裝自己已經懂了。
● 而且、假裝到最後,我們都覺得自己真的懂了!
![Page 24: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/24.jpg)
然後
● 在很久很久以後的某一天
![Page 25: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/25.jpg)
我變成老師了
![Page 26: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/26.jpg)
更幸運的是
● 我還教了「計算機結構」
![Page 27: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/27.jpg)
這時候
● 我也就把那套「自以為已經懂了」的課本
● 拿出來教給學生
![Page 28: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/28.jpg)
不過
● 我或許騙得了學生
● 但是卻騙不了自己
![Page 29: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/29.jpg)
對於
● 一個從來都沒有設計過任何處理器的老師
● 在上計算機結構課程的時候
– 也就只能講講理論罷了
![Page 30: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/30.jpg)
所以我決定要學習
● 如何設計一顆處理器
● 還有如何設計整台電腦
![Page 31: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/31.jpg)
但是
● 這真的很困難
![Page 32: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/32.jpg)
因為要設計一顆處理器
● 我得先問問張忠謀
● 看他願不願意幫我代工
![Page 33: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/33.jpg)
而且
● 代工費用是零
● 連材料與工本費都要幫我出
![Page 34: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/34.jpg)
當然
● 這件事情不需要問
● 我們都知道結果會怎麼樣!
![Page 35: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/35.jpg)
所以
● 我沒有去問張忠謀!
![Page 36: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/36.jpg)
還好
● 那時候系上有人申請國科會計畫
● 買了一堆 Altera DE2-70 的 FPGA 板子
![Page 37: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/37.jpg)
雖然
● 我沒有申請國科會計畫
● 但是、我知道一件事情
![Page 38: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/38.jpg)
那就是
● 國科會計畫買的東西
● 通常買來之後沒有多少人會去用
![Page 39: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/39.jpg)
所以
● 既然申請人沒在用
● 那一切都好商量
![Page 40: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/40.jpg)
於是
● 我就借了一塊 Altera DE2-70來玩
● 想要用這個玩意來設計 CPU
![Page 41: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/41.jpg)
可惜的是
● 那個學期我失敗了 !
![Page 42: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/42.jpg)
我可以設計出
● 算術邏輯單元 (ALU)● 暫存器單元● 記憶體單元
![Page 43: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/43.jpg)
但是
● 就是設計不出「控制單元」
![Page 44: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/44.jpg)
於是
● 那學期我又只能講講理論
● 然後就結束了!
![Page 45: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/45.jpg)
對不起
● 我又誤人子弟了!
![Page 46: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/46.jpg)
於是後來
● 我上網找了好久
● 終於發現華盛頓大學有個叫 Richard 的老師– 他設計了一顆簡單的 CPU
– 姑且讓我們稱之為理察一號
![Page 47: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/47.jpg)
而且我發現
● 他寫的 VHDL 程式我看得懂ㄟ!
![Page 48: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/48.jpg)
所以後來我就仿照他的做法
● 把 CPU0 簡化成只有六個指令,然後放上了FPGA。
![Page 49: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/49.jpg)
這應該算是
● 我所設計的第一顆 CPU
● 雖然、只有六個指令
![Page 50: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/50.jpg)
去年
● 我又教了「計算機結構」這門課
![Page 51: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/51.jpg)
於是
● 我在教完「數位電路、加法器、 ALU、暫存 器、記憶體」之後
● 就把 CPU0 拿出來教
![Page 52: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/52.jpg)
結果
● 沒想到很多同學還是聽不懂
![Page 53: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/53.jpg)
所以
● 後來我決定把程式再度簡化
● 於是就弄出了更簡單的 MCU0
![Page 54: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/54.jpg)
然後、在期末的時候
● 我要求每位同學都要設計一顆自己的 CPU
![Page 55: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/55.jpg)
當然、難度不拘
● 但是、必須是全世界獨一無二的
![Page 56: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/56.jpg)
結果
● 當然還是有人聽不懂
● 也有人聽懂了卻寫不出來
● 也有人寫出來了卻是「修改」別人的
● 當然也有人真的設計出簡易的 CPU 了。
![Page 57: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/57.jpg)
今年
● 我又要教計算機結構了!
![Page 58: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/58.jpg)
但是我知道
● 在這條無止境的道路上
● 我還有很多東西要學
![Page 59: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/59.jpg)
舉例而言
● 我們所設計的 CPU ,其實最多只能說是 MCU 等級的而已
● 而且、沒有快取、沒有流水線 (pipeline)、沒有 多核心、也沒有 MMU
![Page 60: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/60.jpg)
所以
● 這也是我今天為何來這裡的原因
![Page 61: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/61.jpg)
因為我知道
● 在場的所有人
● 都是我的老師
![Page 62: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/62.jpg)
我來這裡偷學
● 然後再回去教我們金大的學生
![Page 63: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/63.jpg)
因為、我知道
● 最好的學習方式、就是:
![Page 64: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/64.jpg)
現學現賣
● 邊學邊賣
![Page 65: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/65.jpg)
如果
● 您有甚麼東西學不會
![Page 66: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/66.jpg)
那麼
● 請您先找一個學生
● 然後對他說
– 下禮拜上課,我教你!
![Page 67: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/67.jpg)
只要您這樣做
● 相信在下個禮拜之前
![Page 68: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/68.jpg)
您應該就可以
● 學會那個東西了!
![Page 69: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/69.jpg)
如果
● 我們希望學生學會某個東西
![Page 70: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/70.jpg)
我認為
● 需要做的事情
![Page 71: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/71.jpg)
不是幫他們找老師
![Page 72: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/72.jpg)
而是
● 幫他們找幾個學生
![Page 73: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/73.jpg)
然後、讓他主動告訴學生們
![Page 74: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/74.jpg)
下禮拜、我教你!
![Page 75: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/75.jpg)
參考文獻
● 開放電腦計畫 -計算機硬體結構 ( 使用 Verilog 實作 )
– http://ccckmit.github.io/co/htm/book.html
● MCU0 – 的迷你版 mcu0m
– http://ccckmit.github.io/co/htm/mcu0m.html
● MCU0 – 的區塊式設計 MCU0bm.v
– http://ccckmit.github.io/co/htm/mcu0bm.html
![Page 76: 開放電腦計畫 - 從一顆最簡單的 MCU 談起](https://reader031.vdocuments.site/reader031/viewer/2022012308/5549c932b4c905e5048b5aa3/html5/thumbnails/76.jpg)
參考文獻 (續 )
● MCU0 完整版– http://ccckmit.github.io/co/htm/mcu0s.html
● 將 MCU0 放上 FPGA 執行– https://dl.dropboxusercontent.com/u/1015844
53/pmag/201408/htm/article0.html