計算機系統要素,從零開始構建現代計算機(nand2tetris)
如果完成了本書所有的項目 你將會獲得以下成就
- 構建出一臺計算機(在模擬器上運行)
- 實現一門語言和相應的語言標準庫
- 實現一個簡單的編譯器
而且,這本書的門檻非常低,只要你能熟練運用一門編程語言即可。本課程綜合了數字電路,計算機組成原理,計算機體系架構,操作系統,編譯原理,數據結構等的主要內容,搭建了計算機平臺的構建的框架,並未深入細節,如果需要了解細節,可由本書作爲主線,逐步完善的知識體系。
QQ交流羣(含資料):289682057
課程連接
項目地址Github
本章要實現的邏輯門電路
- and and16 (與門,16位按位與)
- or or16 or8way (或門,16位按位或,8位全或)
- not not16 (非門,16位按位非)
- xor (異或)
- mux mux16 mux4way16 mux8way16 (2選1選擇器,16位2選1選擇器,16位4選1選擇器,16位8選1選擇器)
- dmux dmux4way dmux8way (解複用器,解4路複用,解8路複用)
實現總結
項目從最原始的Nand門出發,其他的門電路能夠通過這個門電路構建得到。所以本章中所有的門電路都是基於Nand門來實現的,需要具備的基礎是根據真值表設計門電路,需要會進行公式化簡,當然這並不是必須的。
and門
輸入管腳:a,b
輸出管腳:out
公式如下:從公式來看使用兩個與非門即可實現,其中一個輸入是常量true。
and16
這個門是16位按位與門,對每個位執行與操作即可
輸入管腳:a[16], b[16]
輸出管腳:out[16];
僞碼:
for i = 0..15:
out[i] = (a[i] and b[i])
not
非門,利用與非門實現
輸入管腳:in
輸出管腳:out
公式:
not16
16位按位非門,利用已經實現的非門對每位取非即可
輸入管腳:in[16]
輸出管腳:out[16]
僞碼:
for i= 0..15:
out[i] = not in[i]
or
或門,利用與非門和已經實現的非門來實現
輸入管腳:a[16], b[16]
輸出管腳:out[16]
公式:
or16
16位按位或
輸入管腳:a[16], b[16]
輸出管腳:out[16]
僞碼:
for i = 0..15:
out[i] = (a[i] or b[i])
or8way
8位全或
輸入管腳:in[8]
輸出管腳:out
僞碼:
out = (in[0] or in[1] or ... or in[7])
xor
異或門,使用非門,與門,或門來實現,到最底層都是通過與非門實現的
輸入管腳:a, b
輸出管腳:out
公式:
mux
數據選擇器,又稱多路選擇器,根據選擇位,確定輸出那個值
輸入管腳:a, b, sel
輸出管腳:out
公式:(根據真值表得到公式)
mux16
16位按位選擇,只需對每一位分別進行選擇即可
輸入管腳:a[16], b[16],sel
輸出管腳:out[16]
僞碼:
for i = 0..15:
if sel == 0
out[i] = a[i]
if sel == 1
out[i] = b[i]
mux4way16
16爲四選一選擇器,類似分治的方法,先兩兩進行選擇,然後再從選出的內容中進行選擇
輸入管腳:a[16], b[16], c[16], d[16], sel[2];
輸出管腳:out[16]
僞碼:
先根據,sel[0]進行選擇,再根據sel[1]進行選擇即可
out = a if sel == 00
b if sel == 01
c if sel == 10
d if sel == 11
mux8way16
16爲八選一選擇器,類似分治的方法,先四四進行選擇,然後再從選出的兩個中進行選擇
輸入管腳:a[16], b[16], c[16], d[16], e[16], f[16], g[16], h[16], sel[3]
輸出管腳:out[16]
僞碼:
先根據,sel[0…1]進行選擇,再根據sel[2]進行選擇即可
out = a if sel == 000
b if sel == 001
etc.
h if sel == 111
dmux
真值表
in | sel | a | b |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 1 | 0 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
輸入管腳:in, sel
輸出管腳:a, b
公式:
dmux4way
解4路複用,先根據sel的第一位進行解複用,然後根據剩餘的sel位,進行解複用
輸入管腳:in, sel[2]
輸出管腳:a, b, c, d
dmux8way
解8路複用,先根據sel的前兩位進行解4路複用,然後根據剩餘的sel位,進行解複用
輸入管腳:in, sel[3]
輸出管腳:a, b, c, d, e, f, g, h
實際上:解複用器,就相當於由sel指定信號的輸出路,由其中兩路能確定4劃分,每種劃分中還包含兩路,所以,根據剩餘的sel位進行指定確定的路。