剛開始的時候,這門課介紹了電腦的整體架構,從最底層的邏輯閘開始(在更底層就是邏輯閘怎麼實現的,這個就跟CS相對比較遠了),接著是用邏輯閘造出ALU,儲存裝置,再來是OS,與軟體。
這門課有自己專用的教科書,內容除了介紹各種課程相關的知識之外,也偏向科普,簡單的介紹相關知識,另外這門課有用Java實現hardwave simulation。
第一週的課程內容在我看來最重要的除了對於邏輯閘,真值表的認識之外,只有一個定理,那就是Nand Gate可以實現各種真值表這個定理
By wiki: https://en.wikipedia.org/wiki/NAND_logic
The NAND Boolean function has the property of functional completeness. This means that any Boolean expression can be re-expressed by an equivalent expression utilizing only NAND operations.
For example, the function NOT(x) may be equivalently expressed as NAND(x,x). In the field of digital electronic circuits,
this implies that it is possible to implement any Boolean function using just NAND gates.
至於project01,則是讓你自己用Nand為基底去實現各種基礎的gate, 像是And, Or, Xor, Mux, DMux, 還有多個位元的版本。不過不確定為什麼課程在HDL語法方面不提供for, 寫16位元的Or要寫16次是挺麻煩的。在做這個project的時候很自然的會想到兩個問題
- 較為複雜的Gate可以用簡單的Gate去串出來,像是Mux4Way是由Mux串出來的,Mux又是由Nand串出來的,那如果我直接從Nand串接是否有可能得到更為精簡的結果呢?
2.這門課教授其實刻意的避開關於怎麼樣設計gate才是好的標準,只有說希望大家盡量精簡。詢問過做硬體的朋友發現,gate的設計其實會跟功耗有關,不能只考量效能,另外有時候複雜的邏輯閘可能帶來更快的速度,這點就留著以後有機會在研究了。