可程式邏輯裝置

**可程式化邏輯裝置**（英語：Programmable Logic Device，縮寫為 PLD）是一種電子零件、電子組件，簡而言之也是一種積體電路、晶片。PLD 晶片屬於數位型態的電路晶片，而非類比或混訊（同時具有數位電路與類比電路）晶片。

PLD 與一般數位晶片不同的是：PLD 內部的數位電路可以在出廠後才規劃決定，有些類型的 PLD 也允許在規劃決定後再次進行變更、改變，而一般數位晶片在出廠前就已經決定其內部電路，無法在出廠後再次改變，事實上與一般的類比晶片、混訊晶片一樣，在出廠後就無法再對其內部電路進行調修。

## 發明之前

在 PLD 還未被發明前，已有人將唯讀記憶體（ROM）晶片以 PLD 的概念來運用，用 ROM 晶片來充當一些輸入性的組合邏輯（combinatorial logic）函式。

首先一顆 ROM 晶片有 _m_ 個輸入（位址線，或稱：位址匯流排、定址線）以及 _n_ 個輸出（資料線，也稱：資料匯流排，在此也可稱：資料輸出線），當 ROM 被當成記憶體使用時，它就有 _$2^{m}$_ 個 _n_ bits 的記憶儲存空間。

輸入部分不再是個 _m_-bit 的位址線路，而被看成是有 _m_ 個相互無關連的獨立邏輯訊號線。且就理論而言一顆 ROM 晶片內可以放置 _$2^{m}$_ 個布林（Boolean）函式，且每個布林函式可以有 _m_ 個邏輯訊號。

但是這種用 ROM「喬裝」成的 PLD，礙於 ROM 自身原有的結構設計，使真正有效的函式數取決於輸出接腳（也稱：腳位、引腳）數，因此有 _n_ 個輸出就只能有 _n_ 個可用的有效函式。更簡單的說，這時候的 ROM 等同於 _n_ 組相互無關的獨立邏輯電路，每組電路的產生、形成，則取決於由 _m_ 個輸入所組成的邏輯函式。

使用 ROM 來當 PLD 的好處是：有幾個以 m 輸入方式表示的邏輯函式，就會有幾個對應的 n 輸出，且絕大多數一般性用途的組合邏輯裝置都可適用此種作法。同樣的，PROM（Programmable ROM）、EPROM（ultraviolet-Erasable PROM）、EEPROM（Electrically Erasable PROM）等也都可以用此種方式進行邏輯規劃、程式化，而且不需要特殊的軟硬體，只要用標準的 PROM 燒錄器即可實現程式化。然而，無論怎麼說，這種作法也有些缺點：

* 與真正專精的邏輯電路相比，在反應速度表現上慢了太多。
* 在非同步（也稱：異步）的邏輯狀態轉變下，無法提供安全性的狀態「防護，cover」。
* 過於耗電（同樣是與真正專精的邏輯電路相比）。
* 整個 ROM 中僅有小部分的記憶儲存空間能被有效使用，其餘都形同浪費。

此法也不易於用於序向邏輯電路（sequential logic）中，因為 ROM 裡頭並不具備正反器（flip-flop，簡稱：FF）。

對電路設計的業餘愛好者來說，有時也仍然用普遍型 EPROM 晶片來充當 PLD，這種用法有時也稱為「窮人的 PAL」（PAL 是 PLD 的一種）。

## 早期的可程式邏輯

第一個在商業化市場運用的 PLD，是由 Monolithic 記憶體公司（Monolithic Memories, Inc.，簡稱：MMI）所推出的可程式化陣列邏輯（Programmable Array Logic，簡稱 PAL） _（此點有爭議，詳見討論頁）_ ，雖然 IBM 公司在 1970 年代中也有研製類似的裝置（元件），但僅在該公司內部使用。[1]

MMI 公司在 20-pin（20 支接腳、引腳、腳位）的 PAL 方面相當成功，之後超微（AMD）公司也推出了 22V10，22V10 也是顆 PAL，具有原先 PAL 所有的特性特點，但接腳數增至 24-pin。更之後 AMD 公司收併了 MMI 公司（約 1987 年，待查證），並將其納入自身的 PLD 部門，數年後 AMD 以百分之百轉投資的方式將 PLD 部門分立成獨立的威特信（Vantis）公司，到了 1999 年則由萊迪思半導體公司收購 AMD 公司手中的 Vantis 公司股份，自此收併 Vantis 公司。

## GAL

以 PAL（可程式陣列邏輯）為基礎的接續創新是通用陣列邏輯（Generic Array Logic, GAL），此是由萊迪思半導體公司所發明，GAL 的特性與 PAL 相同，不過 PAL 的電路組態、組態只能進行一次的程式燒錄，不能再有第二次，而 GAL 則是可以反覆對電路組態、組態進行燒錄、清除、再燒錄、再清除。[2]

GAL 這種可重複燒錄的特性在研發過程時的試製階段（prototyping stage）中特別好用，一旦在邏輯電路的設計上發現有任何程式錯誤，若是用 GAL 就能夠以重新燒錄的方式來修正錯誤。此外 GAL 也可以用 PAL 的燒錄器來進行燒錄及再燒錄，雖然現在已經有可線上燒錄（In-Circuit Programmable，有時也稱：In-System Programmable）的 ispGAL22V10。

另一個與 GAL 相類似的是 PEEL（Programmable Electrically Erasable Logic），是由 International CMOS Technology（簡稱：ICT）公司所提出。

## CPLD

PAL、GAL 僅適合用在約數百個邏輯閘所構成的小型電路，若要實現更大的電路則適合用 CPLD（Complex PLD，複雜型 PLD），一顆 CPLD 內等於包含了數顆的 PAL，各 PAL（邏輯區塊）間的互接連線也可以進行程式性的規劃、燒錄，CPLD 運用這種多合一（All-In-One）的整合作法，使其一顆就能實現數千個邏輯閘，甚至數十萬個邏輯閘才能構成的電路。

至於 CPLD 的程式燒錄方式，雖然有些 CPLD 可以用 PAL 的燒錄器來進行燒錄，但這種燒錄方式對經常有數百隻接腳的 CPLD 來說並不方便。另一種燒錄方式是 CPLD 已焊於印刷電路板上，之後透過額外的臨時外接，或原有線路的內接，使 CPLD 與個人電腦間能取得連線，由個人電腦以串列或並列方式將新的燒錄資料發送到 CPLD 上，而 CPLD 內部也具有解碼電路能對接收到的資料進行還原解析，之後再進行重新的燒錄，以此方式讓 CPLD 內的程式（也可稱：電路）獲得更新。

要注意的是，每家業者的 CPLD 晶片多具有焊接後再行傳輸、再次燒錄的技術，但各家的技術實現方式與名稱多不盡相同，例如萊迪思半導體公司就將此種燒錄技術稱為「in-system programming」。

各家獨創、專屬的作法也逐漸消失，朝共通的標準、一致的方向發展，如 IEEE 1532。

## FPGA

當 PAL 忙於進展成 GAL、CPLD 時，另一種「可程式化」的流派也逐漸成形，此稱之為場式可程式閘陣列（Field Programmable Gate Array，簡稱：FPGA）或現場可程式閘陣列，FPGA 是以閘陣列（Gate Array）技術為基礎所發展成的一種 PLD。

FPGA 早期的例子是 Signetics 公司在 1970 年代晚期所推出的 82S100（陣列）及 82S105（定序器、編序器），其中 82S100 為「與，AND」型的閘陣列，而 82S105 也相同，但再追加正反器（Flip Flop，cn 處也稱：觸發器）的功能。

FPGA 運用一種邏輯閘式的網格（Grid），這種網格與普通的「閘陣列」相類似，網格可以在 FPGA 晶片出廠後才進行組態組態的程式性規劃。至於為何要稱「場式可程式化」就有些難懂了，「場式，Field」對晶片生產廠以外的世界來說是個工程方面的專業術語，然而廠外也是晶片買主的所在處。（言下之意是：不應當以這種艱澀難懂的工程用詞來做為晶片產品的推行名稱）[3]

FPGA 通常也可以在焊接後再進行程式燒錄、變更的工作，此在某種程度與大型的 CPLD 相似。而絕大多數的 FPGA，其內部的程式組態組態是屬於揮發性的，即是無持續電力供應後組態組態的內容就會消失，所以在裝置（也指：元件、晶片）重新獲得電力後，就必須將組態組態內容重新載入（re-load）到 FPGA 中，或者期望改變 FPGA 內的組態組態時，也必須進行重新載入的動作。

而關於組態組態的內容，就一般來說會存放在非揮發性的記憶體中，如 PROM 或 EEPROM，若是用 EEPROM，則或許也能用線上燒錄（In-System Programmable，ISP）的方式來再次改變組態組態的內容（一般來說是透過 JTAG 介面來進行 ISP）。

FPGA 與 CPLD 都很適合用在特殊、特定的工作上，這是以此類晶片的技術本質來做為合適性的考量，然而有時在以經濟性為主的權衡評估下也適合使用 FPGA、CPLD，或者有時也會以工程師的個人偏好與經驗來決定。

## 其他型態的 PLD

除上述外，也有許多可再組態組態的系統（多指「晶片」）。例如：有些微處理器內除了一些固定性功效的電路外，其他部分的電路則可以依據微處理器所執行的程式碼而改變其功效。要想設計這種半變動式的系統，工程師需要學習新方法，甚至可能要用新的軟體工具才能夠開發。

另外，現在銷售的 PLD 中，有的也會在晶片內提供一個具固定性功效的微處理器，然後微處理器的四周位置則設有許多可供組態組態的可程式邏輯（也因為處理器位在其中，所以也被稱為_核心_），此種作法的好處是可以讓設計者更專注在為他的設計增加新的功能特點，而少去擔心「如何讓微處理器運作」之類的基礎性設計。

## 維持 PLD 的電路組態與組態

在一個 PLD 內有邏輯部分也有記憶部分，記憶部分是用來儲存組態組態的程式內容，而儲存的方式多是存放在可供 PLD 使用的積體電路（也稱：積體電路）中，這包括：

* Silicon antifuses（矽反熔絲）
* SRAM（靜態隨機存取記憶體）
* EPROM or EEPROM cells（EPROM 或 EEPROM 的記憶晶格）
* Flash memory（快閃記憶體，也稱：閃存）

矽反熔絲主要是用於 PAL 內，方式上是在 PAL 內部可程式化的矩陣中，若期望矩陣中的某處、某一位置能夠形成連接連線，則對該位置的行、列兩端施壓一個燒錄燒寫電壓（此電壓通常高於一般運作時的電壓），如此該位置就會形成連接的短路、閉路（short）狀態，相反的未施加電壓的地方則保持開路（open）狀態，由這開路、閉路來形成邏輯的 0、1 儲存。不過一旦某位置被施加燒寫電壓而形成短路後，就無法在恢復成開路狀態，但其他仍保持開路的位置，仍可施壓電壓使其短路，不過整體來說矽反熔絲僅適合一次性的組態組態燒錄，一旦燒寫的內容有錯誤，該顆 PAL 即宣佈報廢。此外，之所以稱為「反熔絲」，理由是它的特性原理恰巧與一般日常所用的熔絲、保險絲相反，保險絲平時為短路，而被施加較高電壓時便會燒斷，成為永久性的斷路、開路，反熔絲卻是平常為斷開，施加電壓後反成為連接的短路、閉路。

SRAM 屬於揮發性的記憶體，這表示它在每次失去供電後就無法儲存資料，若有 PLD 使用 SRAM 做為其組態組態的儲存記憶（多數為 FPGA），則每一次重新供電後就必須再次將組態組態資料載入（load，用意等同於將程式燒錄燒寫到 PLD 內）到 PLD 的 SRAM 中，不過此一送電後重新載入的程式，通常是交由另一部份的電路以自動化方式來執行，此一「啟動後自動將程式載入到 PLD 內」的電路，過去是在 PLD 外部另行設計，但現在也有整合（也稱：整合）到 PLD 內部的作法。

EPROM 的記憶晶格是一種 MOS（metal-oxide-semiconductor，金屬氧化半導體）型的電晶體，若對該電晶體的閘極進行充電，則該充電後的狀態就會成為一個記憶留存，之後無論晶片有無供電都可以持續維持著該狀態，直到數年後充電狀態才會消退消失，而透過對各記憶晶格的充電有無就能夠儲存 0、1 的組態組態。至於記憶資料當如何抹除（也稱：拭除、擦除），這必須用強烈的紫外線對 EPROM 進行照射，以此強迫各閘極將原有的充電加以釋放，且時間必須長達數十分鐘才能全部抹除，否則會有抹除不完整的情形，此一抹除程式多是用所謂的「紫外線 EPROM 抹除盒」，英文稱 EPROM eraser，即是一個小盒子內設有紫外線燈管，之後將 EPROM 放入盒內，再將盒子的電源開啟並點亮紫外線燈管，讓紫外線照射 EPROM，以此來進行清除，也因為紫外線對人體有害，所以才要在密閉不透光的小盒子內進行照射，此外為了方便工程師使用，抹除盒通常還設有定時裝置，時間到後會自動提醒工程師已經達當初設定的照射時間。

快閃記憶體具有非揮發性，即是斷電後仍可儲存記憶內容，且需要時它也隨時能再清除抹除（erase）、再燒錄燒寫（program、reprogram）。

時至 2005 年，多數的 CPLD 都已使用電氣方式燒寫與電氣方式抹除，並以非揮發性方式來記憶。因為經過事實驗證，在太小的邏輯運用中用 SRAM 來儲存邏輯組態組態，則每次重新送電啟動就必須再次進行載入燒寫，如此實在過於麻煩，所以才會改成以非揮發方式來進行記憶儲存。此外，若是用 EPROM 方式進行儲存，且為了能夠再次抹除與再次燒寫，則 PLD 在其晶片封裝上就必須使用陶瓷材質的封裝，並在 EPROM 裸晶（Die）位置的上端設立石英材質的透光窗，好讓紫外線能夠照射入內，如此才能抹除 EPROM 裸晶上所儲存的組態組態資料，而這種封裝方式遠貴於一般的塑膠材質封裝。

## PLD 的程式語言

以手工的方式來產生 JEDEC 檔過於複雜，所以多半改用電腦程式來產生，這種程式稱為「邏輯編譯器」（logic compiler），它與程式開發撰寫時所用的軟體編譯器相類似，而要編譯之前的原始程式碼也得用特定的程式語言來撰寫，此稱之為硬體描述語言（hardware description language, HDL）。

硬體描述語言並非僅有一種，如 ABEL、AHDL、Confluence、CUPL、HDCaml、JHDL、Lava、Lola、MyHDL、PALASM、RHDL 等，但目前最具知名也最普遍使用的是 VHDL 與 Verilog HDL。

 

## 附註

1. **^** - 就理論發展過程而言，在 ROM 類還歷經了一小段 PLA（Programmable Loigic Array）發展，之後才有 PAL，ROM、PLA 三者的主要差別是：ROM 僅在輸出的 OR（或）陣列可進行組態組態的規劃，而 PAL 僅能在輸入的 AND（與）陣列進行規劃，而 PLA 兩者皆可。
2. **^** - 事實上除了可覆寫（Rewritable）外，GAL 與 PAL 間的更大差別在於 GAL 的輸出端追加了輸出巨集晶格（Ouput Logic Macrocell，簡稱：OLMC）的設計，使邏輯輸出有更多的控制方式，使 GAL 比 PAL 更方便用在與序向邏輯電路的搭配上。（「巨集」也稱為「宏」）
3. **^** - 相對於「Field-Programmable，場燒錄」一詞的是「Mask-Programmable，遮罩、遮蓋式刻錄」，即是指用光罩（Mask，也稱：掩膜）方式曝光後蝕刻而成的電路，也就是 ASIC 的製程方式，只能在晶圓廠使用的程式燒錄法，更正確的說是：（積體、整合）電路的製造法。

## 外部連結

* Lattice 半導體公司的 GAL：ispGAL22V10（PDF 格式）
* FPGA 的中部：賣方，論壇的 IP , 網播新聞