nand2tetris_選擇器和分配器

柠檬水请加冰發表於2024-03-10

布林函式

基礎布林運算子

And Or Not

布林函式


布林函式類比數學裡的方程,可以認為自變數的取值只有0和1兩種,也就是說,布林函式是可以列舉的,即真值表。布林函式(可能需要化簡)可以認為是等價於真值表。更多時候,往往需要從真值表(結果,或者說需求)推匯出布林函式,再化簡設計出最優電路

函式推導


思路是,找到真值表中結果為1的進行組合。因為子項是與的關係,所以只會有這一條滿足需求;又因為不同子項是或的關係,保證了只有這幾條是1,其餘都是0

化簡公式


這裡更多是一些基本運算規則,我想若真正實現化簡,還是需要有對真值表足夠的觀察,排除掉一些干擾項(下面複用器例子裡可以看到)。這裡貼一下課堂上老師給的例子,至寫文的現在,我還沒有看懂,當然 我也不準備看懂了

選擇器

這很像我們的if else分支判斷

如果根據上文推導方法,我們很容易得出一個較長的函式

(a And Not(b) And Not(sel)) Or (a And b) Or (Not(a) And b And sel)

標準實現是這樣的

(a And Not(sel)) Or (b And sel)

恕我愚鈍,我實在是不知道怎麼能化簡成這樣的。也許有方法,但是這裡如果認真觀察真值表,out依賴sel的值,sel的值決定選擇a還是b。那麼sel=0的時候考慮a就好 a And Not(sel);同理sel=1的時候考慮b就好;然後兩種情況相加,也就是Or

分配器


這裡實現就很簡單了,因為輸出是分為了a和b兩個變數

a = in And Not(sel)
b = in And sel

網路通訊中的應用


這張圖理解老師想表達的意思就好,大概是通道的複用與解複用。我感覺這裡畫的並不好,很容易迷惑sel狀態的影響,貼一下論壇裡使用者的諮詢

總結

週五聽說了這門課,週六就迫不及待聽了前兩個章節,這裡必須要誇一下Coursera可以旁聽課程!課程給我的期望值很高,從零實現一個電腦啊,這哪個程式設計師能抵抗住!!布林函式這章已經有了基本的邏輯閘,加油 加油。

Coursera課程頁
作者網站

相關文章