Nand2Tetris - Week 1 依據基本原理構建現(xiàn)代計算機

第一周

cover

介紹

這是啥?

這是一個由希伯來大學的 Shimon Schocken與 Noam Nisan講授的課程。
教你從最簡單的與非門實現(xiàn)計算機辛润,并在計算機上實現(xiàn)操作系統(tǒng)锰霜,最后在構建的計算機上完成俄羅斯方塊的制作。

官網主頁:http://www.nand2tetris.org

Coursera課程主頁:https://www.coursera.org/learn/build-a-computer

我將它的視頻課程搬運到了B站磺送,方便大家學習:https://space.bilibili.com/69824765/#/channel/detail?cid=56426

如果能科學上網的話车份,也可以在youtube搜索Nand2Tetris谋减。

什么是Nand2Tetris

Nand就是與非門電路:

Nand

Tetris就是俄羅斯方塊。

我們知道計算機就是由各種門電路組成的躬充,所以作者的這個課程就是從最基礎的與非門電路開始逃顶,構建一個計算機,在計算機上實現(xiàn)操作系統(tǒng)充甚,然后在操作系統(tǒng)中玩俄羅斯方塊以政。是不是很有意思?

開始

開始之前伴找,要做點準備工作:

1. 下載初始代碼與測試工具
2. 下載JDK

作者給我們提供了一個硬件模擬工具盈蛮,我們通過編輯.hdl文件來描述一個門電路的邏輯,然后使用測試工具就可以測試我們設計的門電路是否正確技矮。由于測試工具是基于Java的抖誉,需要下載安裝JDk,怎么安裝請自行百度衰倦。

初始代碼與測試工具都在這里下載:https://www.nand2tetris.org/software

第一周01

其實第一周應該是00袒炉,但是00其實是作者為了讓學者熟悉環(huán)境用的,所以我就跳過了樊零。

.hdl文件

這個項目中我磁,門電路是由.hdl文件來實現(xiàn)的,就是下面這樣:

.hdl文件

在中間的注釋部分驻襟,告訴了你這個門的輸入輸出的關系夺艰,你需要完成PARTS。

下面的IN就是輸入端沉衣,OUT就是輸出端郁副。PARTS中寫上如何將信號a與b輸出即可(具體怎么寫繼續(xù)看下去)。

目標

這一周主要是完成四個門電路豌习,以及他們的多位復合電路:

1. Not  非門
2. And  與門
3. Or   或門
4. Xor  異或門
5. Mux  多路選擇器/多路開關
6. DMux 數據分配器
7. And16 16位的與門
8. DMux4Way 4通道的數據分配器
9. DMux8Way 8通道的數據分配器
10. Mux16 16位多路選擇器
11. Mux4Way16 4通道的16位多路選擇器
12. Mux8Way16 8通道的16位多路選擇器
13. Not16 16位的非門
14. Or16 16位的或門
15. Or8Way 8通道的或門

1. Not - 非門

我們現(xiàn)在只有一個門存谎,就是Nand門,看一下這個東西的真值表:

a b out
0 0 1
0 1 1
1 0 1
1 1 0

觀察第二行與第四行肥隆,b為1的時候愕贡,out總是等于非a。
所以就這樣實現(xiàn)非門了:

Not

然后來測試一下巷屿,打開Tools文件夾下的 HardwareSimulator.bat (macOS下打開HardwareSimulator.sh, 如果打開不了檢查java環(huán)境是否配好)

HardwareSimulator

點擊紅色旗子旁邊的腳本按鈕,選擇 nand2tetris > 01 > Not.tst墩虹,然后按左邊的第三個前進按鈕

image

然后腳本就會自動導入你寫的Not.hdl嘱巾,然后測試這個門到底正不正確憨琳,如果輸入1輸出也是1的話,肯定就會錯了旬昭。如果沒有問題篙螟,就會一直跑完,這樣:

成功

這樣就完成了一個門问拘,然后我們現(xiàn)在有兩個門了遍略,Nand與非門與Not非門,再用這兩個門來完成其他的門電路骤坐。

其他And绪杏、Or這幾個門就不多說了自己做吧,直接來說Mux纽绍。

Mux 多路選擇器

這個門有三個輸入蕾久,a,b拌夏,sel僧著。

當sel = false時,輸出a障簿,當sel=true時輸出b盹愚。

這里我們可以自己想出一個公式,至于公式怎么出來的站故,可以百度一下卡諾圖化簡皆怕。

out = Or(
    And(
        Not(sel), a
    ),
    And(
        sel, a
    )
)

所以最后實現(xiàn)Mux:

Mux

基礎門

基礎門這里就詳細寫兩個,其他的And世蔗,Or端逼,Dmux都自己想辦法通過已經實現(xiàn)的門來實現(xiàn)吧。如果遇到問題污淋,可以在百度搜索卡諾圖化簡通過真值表化簡出公式顶滩,再不濟就去github上面搜索Nand2Tetris,看看別人都是怎么實現(xiàn)的寸爆。

復合多路門我這里也只詳細介紹And16與DMux4Way礁鲁,參考這兩個實現(xiàn)其他的就好。

And16

在And16.hdl中赁豆,它是這樣描述的:

And16

即: out[i] = And(a[i], b[i])

所以每個都寫一遍出來就好了仅醇,不要想循環(huán)啊啥的,現(xiàn)在你手頭只有Nand魔种,And析二,Not,Or這幾個門電路,所以只能手寫叶摄。

最后實現(xiàn)方案:

And16

DMux4Way

看看介紹:

DMux4Way - 介紹

前面已經實現(xiàn)了DMux属韧,當sel=0時輸出{in, 0}sel=1時輸出{0蛤吓, in}宵喂。也就是說是sel來決定in在左邊還是在右邊。

在4Way中会傲,可以看作兩次選擇:

PS: 在.hdl中锅棕,如果sel = 01,則sel[1] = 0淌山,sel[0] = 1裸燎,也就是倒序的。

sel[1]決定in出現(xiàn)在前兩個還是后兩個的位置中艾岂。

sel[0]決定in出現(xiàn)在兩個中的前一個還是后一個位置顺少。

我們把輸出{a, b, c, d}分成兩部分{a, b}{c, d}

先根據sel[1]將這兩部分的元素都置為相同的in或0

DMux(in=in, sel=sel[1], a=left1, b=right1); ①
DMux(in=in, sel=sel[1], a=left2, b=right2); ②

這樣的結果將會是{0, 0, in, in}{in, in, 0, 0}

left1和left2肯定是相同的王浴,right1和right2肯定是相同的脆炎。

然后根據sel[0]將前兩個和后兩個部分設置出來,:

DMux(in=left1,  sel=sel[0], a=a, b=b);
DMux(in=right1, sel=sel[0], a=c, b=d);

OK

基礎門和復合門都可以參照這幾個有代表性的來做氓辣,寫完之后使用工具測試一下寫的對不對秒裕,測試都通過,這一周的門電路就算全部完成了钞啸。

結語

這一周實現(xiàn)的這些基礎電路后面會再次封裝几蜻,變成功能更強大的工具。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末体斩,一起剝皮案震驚了整個濱河市梭稚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌絮吵,老刑警劉巖弧烤,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蹬敲,居然都是意外死亡暇昂,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門伴嗡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來急波,“玉大人,你說我怎么就攤上這事瘪校〕文海” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長赏寇。 經常有香客問我吉嫩,道長,這世上最難降的妖魔是什么嗅定? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮用踩,結果婚禮上渠退,老公的妹妹穿的比我還像新娘。我一直安慰自己脐彩,他們只是感情好碎乃,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惠奸,像睡著了一般梅誓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上佛南,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天梗掰,我揣著相機與錄音,去河邊找鬼嗅回。 笑死及穗,一個胖子當著我的面吹牛,可吹牛的內容都是我干的绵载。 我是一名探鬼主播埂陆,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼娃豹!你這毒婦竟也來了焚虱?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤懂版,失蹤者是張志新(化名)和其女友劉穎鹃栽,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體定续,經...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡践险,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年痘拆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡慎王,死狀恐怖,靈堂內的尸體忽然破棺而出特漩,到底是詐尸還是另有隱情纤怒,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站克滴,受9級特大地震影響逼争,放射性物質發(fā)生泄漏。R本人自食惡果不足惜劝赔,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一誓焦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧着帽,春花似錦杂伟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至予借,卻和暖如春越平,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背灵迫。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工秦叛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人龟再。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓书闸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親利凑。 傳聞我的和親對象是個殘疾皇子浆劲,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容