- Linux設備驅動開發詳解:基于最新的Linux4.0內核
- 宋寶華
- 1258字
- 2018-12-31 20:25:22
2.4 CPLD和FPGA
CPLD(復雜可編程邏輯器件)由完全可編程的與或門陣列以及宏單元構成。
CPLD中的基本邏輯單元是宏單元,宏單元由一些“與或”陣列加上觸發器構成,其中“與或”陣列完成組合邏輯功能,觸發器完成時序邏輯功能。宏單元中與陣列的輸出稱為乘積項,其數量標示著CPLD的容量。乘積項陣列實際上就是一個“與或”陣列,每一個交叉點都是一個可編程熔絲,如果導通就是實現“與”邏輯。在“與”陣列后一般還有一個“或”陣列,用以完成最小邏輯表達式中的“或”關系。圖2.19所示為非常典型的CPLD的單個宏單元結構。
圖2.20給出了一個典型CPLD的整體結構。這個CPLD由LAB(邏輯陣列模塊,由多個宏單元組成)通過PIA(可編程互連陣列)互連組成,而CPLD與外部的接口則由I/O控制模塊提供。

圖2.19 典型的CPLD的單個宏單元結構

圖2.20 典型的CPLD整體架構
圖2.20中宏單元的輸出會經I/O控制塊送至I/O引腳,I/O控制塊控制每一個I/O引腳的工作模式,決定其為輸入、輸出還是雙向引腳,并決定其三態輸出的使能端控制。
與CPLD不同,FPGA(現場可編程門陣列)基于LUT(查找表)工藝。查找表本質上是一片RAM,當用戶通過原理圖或HDL(硬件描述語言)描述了一個邏輯電路以后,FPGA開發軟件會自動計算邏輯電路所有可能的結果,并把結果事先寫入RAM。這樣,輸入一組信號進行邏輯運算就等于輸入一個地址進行查表以輸出對應地址的內容。
圖2.21所示為一個典型FPGA的內部結構。這個FPGA由IOC(輸入/輸出控制模塊)、EAB(嵌入式陣列塊)、LAB和快速通道互連構成。

圖2.21 典型的FPGA內部結構
IOC是內部信號到I/O引腳的接口,它位于快速通道的行和列的末端,每個IOC包含一個雙向I/O緩沖器和一個既可作為輸入寄存器也可作為輸出寄存器的觸發器。
EAB(嵌入式存儲塊)是一種輸入輸出端帶有寄存器的非常靈活的RAM。EAB不僅可以用作存儲器,還可以事先寫入查表值以用來構成如乘法器、糾錯邏輯等電路。當用于RAM時,EAB可配制成8位、4位、2位和1位長度的數據格式。
LAB主要用于邏輯電路設計,一個LAB包括多個LE(邏輯單元),每個LE包括組合邏輯及一個可編程觸發器。一系列LAB構成的邏輯陣列可實現普通邏輯功能,如計數器、加法器、狀態機等。
器件內部信號的互連和器件引出端之間的信號互連由快速通道連線提供,快速通道遍布于整個FPGA器件中,是一系列水平和垂直走向的連續式布線通道。
表2.2所示為一個4輸入LUT的實際邏輯電路與LUT實現方式的對應關系。
表2.2 實際邏輯電路與查找表的實現

CPLD和FPGA的主要廠商有Altera、Xilinx和Lattice等,它們采用專門的開發流程,在設計階段使用HDL(如VHDL、Verilog HDL)編程。它們可以實現許多復雜的功能,如實現UART、I2C等I/O控制芯片、通信算法、音視頻編解碼算法等,甚至還可以直接集成ARM等CPU內核和外圍電路。
對于驅動工程師而言,我們只需要這樣看待CPLD和FPGA:如果它完成的是特定的接口和控制功能,我們就直接把它當成由很多邏輯門(與、非、或、D觸發器)組成的可完成一系列時序邏輯和組合邏輯的ASIC;如果它完成的是CPU的功能,我們就直接把它當成CPU。驅動工程師眼里的硬件比IC設計師要宏觀。
值得一提的是,Xilinx公司還推出了ZYNQ芯片,內部同時集成了兩個Cortex-A9ARM多處理器子系統和可編程邏輯FPGA,同時可編程邏輯可由用戶配置。
- Mastering ElasticSearch
- Linux操作系統基礎
- Learn Helm
- Instant Handlebars.js
- Alfresco 4 Enterprise Content Management Implementation
- Linux使用和管理指南:從云原生到可觀測性
- Windows Server 2012網絡操作系統項目教程(第4版)
- NetDevOps入門與實踐
- 跟老男孩學Linux運維:Shell編程實戰
- INSTANT Galleria Howto
- Linux網絡操作系統項目教程(RHEL 7.4/CentOS 7.4)(第3版)(微課版)
- Azure Resource Manager Templates Quick Start Guide
- Hadoop Operations and Cluster Management Cookbook
- Windows Azure實戰
- C#實用教程(第2版)