天天看點

FPGA Vs 單片機 -- 嵌入式設計的另一種方法

大多數工程師在嵌入式系統中使用微控制器開始他們的旅程。有了微控制器,人們可以在一個內建電路上得到一個完整的微型計算系統。CPU,RAM,ROM 和輸入/輸出外圍裝置都在一個單拇指大小的 SoC 上。這種非常流行的學習嵌入式設計和開發的方法實際上隻是整個圖檔的一面。使用微控制器(和微處理器)完全是基于軟體的嵌入式設計。微控制器有自己的指令集,這些指令集在大小和操作上都是固定的。在微控制器上工作時,工程師通過彙編語言或嵌入式 c 使用相同的指令集來解決現實應用程式中的某些計算任務。

使用微控制器是相當容易的。像 AVR,8051,PIC,ARM 等流行的微控制器很好地向工程師展示了嵌入式系統的軟體開發方面。但是還有另外一種嵌入式開發方法——基于硬體的嵌入式設計。不幸的是,微控制器缺乏讓工程師了解嵌入式開發這方面的能力。FPGA 來了。

現場可程式設計門陣列(Field Programmable Gate Arrays,FPGA)是 Xilinx 于1984年發明的。這些內建電路包含數以百萬計的邏輯門,可以通過電氣配置(例如這些門是現場可程式設計的)來執行某些任務。任何計算機,如微控制器、微處理器、圖形處理器或應用專用內建電路(ASIC) ,基本上都是一個數字電子電路,可以根據指令集執行某些任務。指令集包含機器代碼,這些機器代碼可以通過計算機的數字電路在某些資料上實作,這些資料存儲在寄存器或存儲晶片上。FPGA 将設計提升到硬體層次,工程師可以從體系結構層次設計一個(簡單的)計算裝置,這個簡單的計算機被設計和制造來執行特定的應用。

FPGA Vs 單片機 -- 嵌入式設計的另一種方法

圖1: 嵌入式系統的現場可程式設計門陣列(FPGA)

雖然 FPGA 可以用來設計算術邏輯單元和其他數字電路來執行簡單的計算任務,但它實際上在計算方面不能與微控制器或微處理器相比。微處理器或微控制器是一種具有複雜結構的真正的計算裝置。然而,FPGA 是相當可比的應用專用內建電路,其中任何 ASIC 功能都可以定制設計和制造在 FPGA 上。

微控制器讓工程師掌握進階語言或彙編語言來設計計算機軟體,而 FPGA 讓工程師自己設計計算機(一個簡單的計算裝置)。這種基于硬體的嵌入式設計需要對數字電路設計和計算機體系結構有詳細的了解。就像微控制器使用彙編語言或進階語言(如 c)程式設計一樣,FPGA 晶片使用 Verilog 或 VHDL 語言程式設計。就像 c 代碼或彙編代碼轉換成機器代碼在各自的 CPU 上執行一樣,VHDL 語言轉換成數字邏輯塊,然後在 FPGA 晶片上加工,為特定應用設計定制計算機。工程師使用 VHDL 或 Verilog 從根級設計資料路徑和 ALU 硬體。甚至一個微處理器或者微控制器都可以在 FPGA 上設計,隻要它有足夠的邏輯塊來支援這樣的設計。

FPGA-的優點

FPGA 不僅僅是學習數字設計和計算機體系結構的工具。FPGA 晶片在嵌入式系統工程中有一定的實際應用價值。FPGA 晶片為 asic 提供了真正的替代選擇。FPGA 具有以下優點,這些優點也說明了它在嵌入式系統中的應用

多線程 FPGA 可以同時處理多條指令。他們可以并行處理指令。在許多應用中,與微控制器相比,這是一個很大的優勢。微控制器一次隻能執行一條指令,并且隻能按順序執行指令。由于多線程的特點,在許多應用中,FPGA 可以比任何微控制器更快地處理任務。此外,由于程序在邏輯上編碼在硬體級别,FPGA 适合于嚴格專用的應用程式,不像微控制器有一個通用的架構和指令集可供他們處理,以解決一項任務。FPGA 能夠高速處理多種簡單的邏輯操作,這使得它非常适合于預處理傳感器資料、加密、邏輯電路設計、數字音頻應用、視訊流等多種任務。

雖然微控制器最擅長以較慢的速度解決可能需要标準接口的複雜計算任務,但當應用程式中需要處理的資料量通常較大時,FPGA 具有優勢。這都歸功于 FPGA 的多線程特性。即使現在很多 FPGA 闆都帶有内置的 CPU。是以,所有需要的就是為特定于應用程式的處理設計附加邏輯。

設計的靈活性和範圍-任何複雜的數字電路都可以在 FPGA 晶片上設計,隻要晶片包含足夠數量的邏輯塊來仿真設計。它可以用來設計任何外圍裝置和執行任何計算任務。微控制器沒有這樣的靈活性。微控制器帶有一個通用的計算單元和内置的外圍裝置,如定時器、 GPIO、中斷和串行接口。在微控制器的情況下,沒有辦法改變晶片以适應專門的應用程式。然而,一個 FPGA 可以程式設計有像30個定時器或20通道 UART 或50通道 PWM 發生器或任何東西。設計自己選擇和要求的晶片的這種靈活性給了嵌入式工程師很大的權力,在這種情況下,應用程式中的計算晶片應該有一個專門的設計。

模拟因素-一般來說,在任何嵌入式系統中,控制器或處理器與提供模拟輸入的傳感器或需要從控制器或處理器輸出模拟信号的執行器耦合。有現場可程式設計模拟陣列(FPAA) ,可程式設計進行模拟值。許多 FPGA 晶片是 FPGA 和 FPAA 的組合,其中晶片不僅可以程式設計到數字電路,而且可以程式設計到處理模拟信号。這些混合信号晶片包含 ADC (模數轉換器)或 DAC (數模轉換器)外圍裝置與模拟信号調理子產品。在這種情況下,輸出引腳,可以程式設計有驅動強度和轉換率的負載在該引腳的要求。是以,FPGA 晶片不僅可以為模拟應用程式程式設計,而且還提供了靈活的設計,以适應專用傳感器為基礎的應用程式。

可重用性-FPGA 晶片可以重新程式設計,以模拟其他任何數字(以及模拟)電路。這并不是說一旦一個電路被裝配在晶片上,它就會保持固定。當晶片接通電源後,數字設計作為配置資料加載到晶片上。每次晶片啟動時都會發生這種情況。這個設計一直保留在晶片上,直到它繼續啟動為止。這些配置資料可以在下一次啟動時更改,是以下一次可以在晶片上仿真一個全新的數字設計。由于該晶片可重複使用,嵌入式工程師可以在同一晶片上進行無數次不同數字設計的實驗。

單晶片解決方案-該 FPGA 晶片提供單晶片解決方案的應用。在使用微控制器時,可能需要與其他外圍裝置(可能不是微控制器内置的)、接口或在 FPGA 上的 asic 連接配接,所有所需的外圍裝置以及處理器或控制器都可以在單個晶片上設計。

實時處理-FPGA 晶片不是一般的計算內建電路。它們用于在晶片上制造一個專用的計算裝置。與運作程式(機器碼)的微控制器不同,資料通路和 ALU 是在 FPGA 上構造的,用于解決特定的計算任務。是以,與其運作一個程式,FPGA 本身被程式設計來運作一個特定的計算任務。這種硬體級的邏輯執行允許對資料和資訊進行實時處理。這就是為什麼,FPGA 通常用于高速關鍵應用,其中微控制器可能會失敗,由于其通用架構和代碼的依賴性,以運作在固定架構和有限的指令集。

有了上述優點,FPGA 最适合于高速并行處理,要麼需要處理的資料量很大,要麼處理晶片需要定制外圍裝置、可配置的模拟輸出或執行時間關鍵的專用應用程式(否則在一般的 CPU 上是不可能的)。FPGA 使嵌入式工程師能夠通路複雜的內建設計,否則這些設計隻能以高工程成本獲得。FPGA 就像一個迷你半導體代工廠在一個信用卡大小的董事會得到一個良好的開端,在內建數字設計。

在現實世界中,FPGA 可以在生産量不高的特定垂直領域找到應用。它也被廣泛地用于原型 ASIC 設計,以最短的時間上市,避免了 ASIC 設計的長制作方法的麻煩。FPGA 的常見應用包括數字信号處理、圖像處理、生物資訊學、密碼學、軟體設計的無線電、醫學成像、語音識别、電信、資料中心、航空航天電子和安全系統等垂直領域。另一方面,微控制器廣泛應用于消費電子、汽車、工業電子、通信系統等垂直領域的一般嵌入式應用。

FPGA-的缺點

FPGA 具有所有的優點和應用,但缺點很少。這些缺點是由經濟性、設計和開發等因素造成的。目前的 FPGA 技術存在以下缺點:

成本-FPGA 闆并不便宜。FPGA 闆通常價格在50美元或以上。這是許多倍高比任何微控制器闆。許多微控制器闆可用,甚至在不到10美元。FPGA 闆的高成本是使用數字設計和 FPGA 開設嵌入式課程不受歡迎的原因之一。然而,由于 FPGA 闆是可重複使用的,并且可以使用數百次,是以它們的高成本對于長期使用來說隻是一個象征性的數字。是以,一塊 FPGA 闆的成本是物有所值的,用于研究和開發目的或原型目的。但是,考慮到 FPGA 闆的生産,其高成本可能證明是一個昂貴的項目遙不可及。在這種情況下,盡管微控制器速度很慢,架構通用,缺乏多線程和實時處理,但對于制造商來說是可行的選擇。

FPGA Vs 單片機 -- 嵌入式設計的另一種方法

圖2: FPGA 開發闆

高功耗要求-大多數 FPGA 闆由48v 背闆提供動力。FPGA 闆的高功耗和高功耗使得其不适用于許多嵌入式應用。另一方面,大多數的微控制器闆需要5v 或3.3 v 的電源來運作。這使得微控制器成為設計任何電池供電的便攜式嵌入式裝置的顯而易見的選擇。

波動性——數字設計作為配置資料傳遞給 FPGA 闆。當電路闆通電時,電路闆就會相應地配置,然後開始運作。配置資料要麼以主模式存儲在閃存中,要麼以從模式通過邊界掃描(JTAG)接口由處理器傳遞。一旦電路闆斷電,配置資料就會丢失。在大多數 FPGA 闆中,這種不穩定的特性使得它們不适用于闆可能受到電源中斷或遭受電源損耗的應用。

啟動時間-FPGA 闆載入配置資料時,每次他們是加電。這就增加了重要的啟動時間。然而,一旦配置資料被加載,FPGA 闆可以比微控制器更快地運作。但是,在使用 FPGA 闆的情況下,啟動時間會導緻應用程式的失敗,而這些應用程式需要在嵌入式裝置啟動後立即執行時間關鍵操作。由于啟動時間和配置資料的波動性,FPGA 闆不适合嵌入式裝置頻繁開關的應用。此外,它不可能保持一個 FPGA 闆總是在一個嵌入式裝置的電源,由于其高功耗的要求。

高引腳計數-FPGA 晶片通常有高數量的引腳。這就是為什麼,FPGA 不适用于大小受限的嵌入式應用程式,在這些應用程式中,計算處理器或控制器應該盡可能緊湊,引腳數量最少。相比之下,有許多微控制器有8個或更少的插腳,是以可以很容易地用在一個小工具或裝置上。

複雜度——在 FPGA 上工作不像在微控制器上那麼容易。年以前,從 FPGA 開始,工程師必須具備詳細的數字設計和計算機體系結構知識。然後,VHDL 或 Verilog 比任何用于軟體開發甚至彙編語言的進階程式設計語言都要複雜得多。雖然大多數在 FPGA 中開發所需的工具都是免費提供的,而且有許多 FPGA 闆可以以合理的價格(約50美元)提供,但是這些工具使用起來很複雜,在可用的 FPGA 闆中仍然很難做出選擇。數字化設計還存在許多複雜性、陷阱和注意事項,隻有通過實踐經驗才能掌握。

設計局限性——使用 FPGA,隻能為數字設計互連邏輯塊。但是,在門級沒有控制,通常的綜合是非标準的。然而,在測試體系結構或 ASIC 設計的早期階段,FPGA 是非常有用的。

耐久性——與微控制器相比,FPGA 內建電路的使用壽命較短。雖然微控制器可以在一個裝置中使用幾十年,但是嵌入式裝置中的 FPGA 晶片可能需要在2到5年内更換。

由于 FPGA 的高成本、易變性、啟動時間長、功耗高、引腳數量多、使用壽命短以及設計上的局限性,使得 FPGA 晶片的應用越來越少。它們隻出現在需要專用架構、定制外圍裝置和通過并行處理執行關鍵機器代碼的高功率裝置中。

結語 -

與微控制器相比,FPGA 晶片有其自身的優缺點。FPGA 可能不适合用于一般的或普通的嵌入式應用程式,但是 FPGA 可以通路和探索內建電路設計的世界,這是微控制器永遠不可能做到的。一個嵌入式工程師必須在 FPGA 上工作,在微控制器和微處理器方面有豐富的經驗。它将讓工程師探索數字世界的内外。在使用微控制器和處理器之前,工程師隻能用軟體的方式思考問題,但在使用 FPGA 之後,他也可以用硬體的方式思考問題。通過在 FPGA 上工作,工程師獲得了軟體在處理器和控制器上如何工作的實際知識。

就像從頭開始建構代碼之後,軟體開發透視圖中的 api (應用程式程式設計接口)開始感覺像是程式設計的簡單搖桿。彙編語言或者在 VHDL 和 Verilog 之後的嵌入式 c 也是一樣的情況。用于嵌入式開發的彙編語言和進階語言将開始感覺像是曾經使用過 VHDL 和 Verilog 的 api。是以,實際上,FPGA 等類似的 CPLD 技術完善和補充了嵌入式工程學科。

白紀龍老師從事電子行業已經有15個年頭

到目前為止已開發過的産品超上百款,目前大部分都已經量産上市

從2018年開始花了5年的時間

潛心錄制了上千集的實戰級電子工程師系列課程

擷取更多幹貨知識,好文閱讀

可微信搜尋“紀客老白”公衆号、視訊号