【數位邏輯設計】Multiplexers, Decoders, and Programmable Logic Devices Part III

朱痕染跡璧有瑕
6 min readJun 30, 2022

--

https://pixabay.com/photos/louvre-architecture-buildings-5767708/

本文為清華大學開放式課程上課心得整理。

Programmable Logic Devises

可程式化邏輯元件有許多不同種類,這邊介紹 PLA 與 PAL 兩種。

PLA 是一個 2 Level 的邏輯電路,由一個 AND array 與一個 OR array 組成,PLA 中的 AND array 是可程式化的,因此不再是 2 ** n 條線, 可能會略少一點。

PLA 和 ROM 都是 SOP,差別為 ROM 是真值表的直接實現,而 PLA 的 AND array 可以有所變化。此處依然使用二極體來實現 AND Gate,二極體 AND Gate 串接方向與 OR Gate 相反,如此當輸入端是低電位時,電流便會從高電位處流過來,此時輸出端 Z 偵測到的結果便會是低電位(0),且只要有一個輸入端是低電位便成立;反之,當所有的輸入都是高電位時,二極體不會接通,I 和 V 都是 0,沒有任何電壓損耗,輸出等於 V+(1)。

https://www.youtube.com/watch?v=bAoPFE1lFig&list=PLS0SUwlYe8czJbz5-sRtbuTleObQE9mOa&index=54,0 分 14 秒截圖

PLA 不實現真值表,而是利用上述二極體的特性直接完成電路的輸入輸出判斷,參下圖。

同上,10 分 35 秒截圖

當然這些電路圖也會有前述過於複雜混亂的情形,所以可以簡化如下圖:

同上,14 分 25 秒截圖

PLA 電路設計的流程如下:

・根據 minterm/maxterm expansion 找出每個項的對應函式,根據函式畫出 PLA table(類似真值表)。

・根據 PLA table 畫出 AND Plain,黑點便是二極體連接的地方,因為是 AND Gate,所以負極會接在項這邊。

・根據 minterm/maxterm expansion 畫出 OR Plain,二極體接法與 AND Gate 相反。

同上,15 分 20 秒截圖
同上,17 分 40 秒截圖

PAL 是特殊型態的 PLA,LA 的全名是邏輯陣列(Logic Array),PAL 則剛好相反,意指 Array Logic。在 PLA 中,OR 與 AND Plan 都可以程式化,但在 PAL 中只有 AND Plan 可以程式化,由於 PAL 的 OR Plan 是固定的,所以在設計時要盡可能讓 product term 降到最低,以滿足 PAL 的條件限制。

https://www.youtube.com/watch?v=M9PAKKA54-Y&list=PLS0SUwlYe8czJbz5-sRtbuTleObQE9mOa&index=55,0 分 12 秒截圖

各種設備內的邏輯閘是否可以程式化的整理如下:

同上,5 分 49 秒截圖

Field Programmable Gate Arrays

現場可程式化閘陣列(Field Programmable Gate Array,FPGA)是一種由許多相同邏輯的元件所組成的巨大積體電路(Integrated Circuit,IC),裡面會搭配一些可以程式化的接線,下圖便是一個典型的 FPGA 架構圖。

https://www.youtube.com/watch?v=drduIJtQA8M&list=PLS0SUwlYe8czJbz5-sRtbuTleObQE9mOa&index=56,0 分 14 秒截圖

FPGA 是一塊實際的電路板,可以配合相應的程式將電路設計載入電路板中執行,觀察設計實際運行的狀況與模擬運行之間的落差(例如:電路延遲等模擬時可能忽略的情況),以降低實際下線生產之後成品的不良率。

當然程式有大有小,要如何在電路板上完整執行便需要一些 partition 與 mapping 的技巧,以下便介紹 FPGA 將程式放進電路板中以模仿實際運行的方法。

FPGA 裡面的每個小區塊稱為 CLB,每個 CLB 裡面都有一個 LUT(Lookup Table),以下圖為例,圖中的 LUT 可以實現任何有四個輸入的函式,中間的梯形符號是 MUX,打了星號的是可程式化的 MUX,可以根據需求改變判定行為。

同上,6 分 33 秒截圖

由於 LUT 的輸入只有四個,當出現五個以上的輸入時,就需要做一些修改讓 FPGA 可以執行。這時可以將函式做拆解(decomposition),這裡要使用 Shannon’s expansion theorem:

F(x1,x2,...xi, xi+1,...) = xi'F0 + xiF1

舉例來說,若有一個四個輸入的函式 F(x1, x2, x3, x4),現在要針對 x1 做拆解,則 x1 = x1・Fx1 + x1'・Fx1',其中 Fx1 與 Fx1' 稱為 cofactor,代表在原始函式中只要出現 x1 的都各自代入 1 以及 0 去做展開,例如函式為:

x1x2' + (x3 + x4)x1'

當 x1 代入 1 時會變成:

x1x2' # 當 x1 為 1 時 x1' 為 0,故後項消去,下同

x1 帶 0 時變成:

(x3 + x4)x1'

合起來依舊等於原函式。

Shannon’s expansion theorem 保證拆解之後原函式不變,也可以針對不同的變數執行,執行之後變數也會減少,正確操作就可以讓程式輸入符合 FPGA 的限制。

同上,9 分 01 秒截圖

如果拆解之後輸入依舊大於限制,那就要用 MUX expansion 處理,較小的 MUX 如何實現較大函式的方法前文已提及,不贅述。

同上,16 分 36 秒截圖

--

--