過去一周多的時間,我認認真真翻閱了7、8本數電方面的書,這些教材的主線大同小異,一路讀完組合邏輯,差不多已經遍歷了整本書1/3左右的內容,但新的概念、要理解和記憶的東西實在太多,燒腦。

除了這幾本書,又補充了幾本,包括康老的教材
這些教材即便對我 - 一個有著十幾年研發經驗的老工程師來講,最大的感覺是 - 看著暈、吃力,雖然每本書都試圖講清楚每一個知識點的作用和前、后文的關聯,但作為一個被各種新概念和邏輯公式繞暈的讀者,確實已經無法get到這些點,進而理清楚由這些點構成的知識圖譜。
好在我從最初的二進制、各種門、布爾邏輯、卡諾圖到編碼/譯碼,已經學習完組合邏輯部分的內容,靜下心來理出了些許的頭緒,作為總結把這些點點滴滴的知識梳理一下,嘗試著用下面的這幅圖表達表達:

暫不管后面的時序邏輯,在這張圖里,組合邏輯位于頂層,各種教材里基本上都作為重點講述的一些邏輯功能 - 加法器、譯碼器等其實都是組合邏輯的一些典型案例而已,因為它們在某個年代因為是比較常用的數字功能塊,被做成了專用的中等規模(被稱之為MSI)的集成電路產品,比如74系列、CD4000系列中都有,做成專用的集成電路從實現的角度可以保證更高的可靠性、最佳的性能。
產業的發展,這些獨立的功能模塊IC已經很少被使用,當今一顆最小規模的FPGA就可以勝過幾十個各種MSI模塊的組合,而且更靈活、性價比高。它們當前存在的主要使命是用在教材里,用在有些實驗室的實驗平臺里。
我們要加強的,就是要理解這些被重點強調的功能模塊的實際應用場景,以及它們代表的一類產品的結構特點。
按照組合邏輯的定義,當前的2個或多個邏輯輸入通過某種邏輯功能得到需要的邏輯輸出,而這個輸出只依賴于當前的輸入。邏輯門是構成組合邏輯的基礎,組合邏輯包括了以下3個部分:
在所有的教材里,講述完“門”,緊接著就是一系列比數學公式還要抽象的布爾邏輯公式以及像極了數獨游戲的卡諾圖。多數的作業題都是給你一個用各種門構成的電路,讓你進行“邏輯化簡”;或者給你一個真值表,讓你做”邏輯分析”,即便化簡完、分析完,你面對的還是一個由多個門組成的電路圖,其實還是不知道它們是用來做什么的。
到這里我基本上弄明白我為啥會“暈”的原因,因為我不知道自己所學的東西、所做的東西到底都是做什么用的?我在生活中如何會用到這些知識來解決問題?
這些教材試圖讓我提升的能力:根據一系列抽象的公式和工具,對一系列抽象的圖做抽象的“簡化”和“分析”。
這些,在今天這個時代實際上已經嚴重不合適,因為這方面的能力對于大多數人幾乎無用武之地 - 我們要分析的對象已經被海量門陣列的FPGA代替,我們做的事情,EDA工具轉瞬就幫我們實現,永遠不再需要我們插手。
對于90%以上的同學,我們真正需要的能力其實是邏輯“表達”的能力,也就是對生活中、研發中遇到的任何一件事情,都能夠把這件事情用數字邏輯的方式表達清楚,比如將要處理的事情分解成:
哪幾個輸入變量 - 有哪幾種因素起作用?
哪幾個輸出變量 - 會得到哪幾種結果?
輸入變量和輸出變量之間千絲萬縷的關系是什么?
正確地分解成這三個部分,你完全可以借助EDA工具,無論是Verilog、VHDL甚至更高級的語言,都可以幫你完成您需要的邏輯。
即便從學習的角度,需要你去做底層的邏輯設計(IC設計)、需要你做邏輯化簡和邏輯分析,正確的邏輯表達也是第一位的,因為它是解決一切應用的起點。
而這點,恰恰是我們眾多的教材中欠缺的。
所以“組合邏輯”設計的邏輯應該是這么一個流程:
可以采用多種不同的簡化技巧以最小化布爾表達式,目的是減少門數,進而降低成本。這些技巧包括布爾算數理論、卡諾圖化簡,從硬件實現的角度,實現如下的目標:
如果基于以上的流程來理解教程中的知識點,就可以自上而下地理順了它們之間的定位和關聯,整個知識體系也就順理成章了。
后面幾節的內容,我們就來看看幾種典型功能模塊案例的實現方式,從原理圖到用FPGA來驗證。
淺談“數字電路”的學習(1)- 我們身處的“數字邏輯”世界
淺談“數字電路”的學習(2)- 在興趣和體驗中高效學習
淺談“數字電路”的學習(3)- 不需要安裝軟件、人人一學就會的FPGA學習板
淺談"數字電路"的學習 (4) - 學用FPGA從點燈開始