計算機要素--第一章 布爾邏輯

計算機系統要素,從零開始構建現代計算機(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
公式如下:out=ab1out=\overline{\overline{ab}1}從公式來看使用兩個與非門即可實現,其中一個輸入是常量true。

and16

這個門是16位按位與門,對每個位執行與操作即可
輸入管腳:a[16], b[16]
輸出管腳:out[16];
僞碼:

for i = 0..15:
    out[i] = (a[i] and b[i])

not

非門,利用與非門實現
輸入管腳:in
輸出管腳:out
公式:out=in1out=\overline{\overline{in}1}

not16

16位按位非門,利用已經實現的非門對每位取非即可
輸入管腳:in[16]
輸出管腳:out[16]
僞碼:

for i= 0..15:
	out[i] = not in[i]

or

或門,利用與非門和已經實現的非門來實現
輸入管腳:a[16], b[16]
輸出管腳:out[16]
公式:out=about=\overline{\overline{a}\overline{b}}

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
公式:out=ab+about=\overline{a}b+a\overline{b}

mux

數據選擇器,又稱多路選擇器,根據選擇位,確定輸出那個值
輸入管腳:a, b, sel
輸出管腳:out
公式:(根據真值表得到公式)out=asel+bselout=a\overline{sel}+bsel

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
公式:a=insel,b=insela=in·\overline{sel},b=in·sel

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位進行指定確定的路。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章