我從事Arduino系列(特別是Sanguino)的工作,構建了一些簡單的設備和一個簡單的照像鏡。因此,我對微控制器(特別是Atmel的)非常滿意。我很想知道FPGA與標準微控制器有何不同。我來自技術背景(C / C ++編程),因此喜歡技術解答。請記住,我是電子領域的新手(相對於我的軟件經驗)。 :)
我確實進行了此查詢,這很好,但是我正在尋找更詳細的信息。
謝謝!Sushrut。
我從事Arduino系列(特別是Sanguino)的工作,構建了一些簡單的設備和一個簡單的照像鏡。因此,我對微控制器(特別是Atmel的)非常滿意。我很想知道FPGA與標準微控制器有何不同。我來自技術背景(C / C ++編程),因此喜歡技術解答。請記住,我是電子領域的新手(相對於我的軟件經驗)。 :)
我確實進行了此查詢,這很好,但是我正在尋找更詳細的信息。
謝謝!Sushrut。
為FPGA設計需要硬件描述語言(HDL)。 HDL與C絕對沒有任何區別。C程序是一系列順序的指令,必須扭曲自身才能實現並行執行,而HDL描述了並發電路,並且必須扭曲自身才能實現順序執行。這是一個截然不同的世界,如果您試圖像軟件開發人員那樣在FPGA中構建電路,那會很受傷。
MCU是有時間限制的。為了完成更多的工作,您需要更多的處理器週期。時鐘對其頻率有非常嚴格的限制,因此很容易碰到計算壁壘。但是,FPGA受空間限制。為了完成更多工作,您只需添加更多電路。如果您的FPGA不夠大,您可以購買更大的FPGA。構建一個無法容納最大的FPGA的電路非常困難,即使您這樣做,也有應用筆記描述瞭如何將FPGA菊花鏈在一起。
FPGA更加註重並行執行。有時,您需要擔心您的MCU的ISR需要多長時間來處理該中斷,以及是否能夠達到硬實時限制。但是,在FPGA中,始終有很多有限狀態機(FSM)運行。它們就像“毫微微控制器”,就像控制邏輯的小雲。它們都同時運行,因此不必擔心會丟失中斷。您可能有一個FSM與ADC接口,另一個FSM與微控制器的地址/數據總線接口,另一個FSM將數據流傳輸到立體聲編解碼器,還有另一個FSM緩衝從ADC到編解碼器的數據流。需要使用模擬器來確保所有FSM和諧地唱歌。如果只有一個時鐘週期就關閉了任何控制邏輯(並且很容易犯此類錯誤),那麼您將陷入失敗的困境。
FPGA是PCB佈局設計師的夢想。它們是非常可配置的。您可以有許多不同的邏輯接口(LVTTL,LVCMOS,LVDS等),它們的電壓甚至驅動強度都可以變化(因此不需要串聯終端電阻)。引腳可以互換;您見過MCU地址總線,其中的引腳分散在芯片周圍嗎?您的PCB設計人員可能必須丟掉一堆通孔,才能將所有信號正確地綁在一起。借助FPGA,PCB設計人員可以以幾乎任何方便的順序將信號運入芯片,然後可以將設計回注到FPGA工具鏈。
FPGA也有很多好看的玩具。我最喜歡的之一是Xilinx芯片中的Digital Clock Manager。您將其饋入一個時鐘信號,然後使用各種各樣的倍頻器和分頻器可以從中獲得另外四個信號,所有這些信號均具有原始的50%佔空比和100%的相位...甚至可以解決時鐘偏斜問題
編輯(對附錄的答复):
您可以將“軟核”放入FPGA。您實際上是將微控制器電路連接在一起,或者可能是將其他人的電路放入設計中,例如Xilinx的PicoBlaze或MicroBlaze或Altera的Nios。但是,與使用C-> VHDL編譯器一樣,與使用FSM和數據路徑或實際的微控制器相比,這些內核往往有點腫且速度慢。開發工具還會給設計過程增加極大的複雜性,當FPGA已經是非常複雜的芯片時,這可能是一件壞事。
也有一些FPGA嵌入了“硬核”,例如Xilinx的Virtex4系列具有一個真正的專用IBM PowerPC,並帶有FPGA架構。
EDIT2(回複評論):
我想我現在看到了...您在問有關將分立MCU連接到FPGA的問題。即兩個單獨的芯片。有充分的理由這樣做;具有硬核的FPGA和足夠大以支持體面的軟核的FPGA通常是帶有數百個引腳的怪獸,這些引腳最終需要BGA封裝,這很容易使設計PCB的難度增加了10倍。 / p> C更容易得多,因此,MCU肯定可以與FPGA協同工作。由於編寫C更加容易,因此您可以在MCU中編寫“大腦”或中央算法,而FPGA可以實現可能需要加速的子算法。嘗試將可更改的內容放入C代碼,因為它更容易更改,而讓FPGA成為更專用的類型,不會經常更改。
MCU設計工具也更易於使用。設計工具需要花費幾分鐘來構建FPGA位文件,即使對於有些簡單的設計也是如此,但是複雜的MCU程序通常需要幾秒鐘。 MCU出錯的地方少得多,因此它們也更容易調試...我不能低估FPGA的複雜程度。您確實需要獲取所擁有的數據表,並且應該嘗試閱讀該表的每一頁。我知道,它有數百頁...仍然可以執行。
連接它們的最佳方法是使用帶有外部地址和數據總線的MCU。然後,您可以簡單地將FPGA電路映射到MCU中,並添加自己的“寄存器”,每個寄存器都有自己的地址。現在,FPGA可以添加自定義外設,例如32位定時器,當讀取第一個字節時可以立即鎖存所有4個字節,以防止8位讀取之間的溢出。您還可以將其用作粘合邏輯,以從其他芯片(例如單獨的ADC)中映射更多外設。
最後,某些MCU設計用於與FPGA之類的“外部主設備”一起使用。賽普拉斯製造了一些內部具有8051的USB MCU,但其目的是要通過以下方式產生/消耗USB數據: FPGA。
“現實世界中的示例...將FPGA與微控制器結合起來?”這樣做-可能是通過在FPGA內部實現軟CPU來實現的。實際上,給定的性能水平通常比單獨使用FPGA(或單獨使用MCU)使用FPGA加獨立的微控制器來實現更低的零件成本和更低的功耗。板載FPGA和微控制器的是一些比較著名的設備:
通常將FPGA專門用於執行微控制器無法高效完成的任務,例如高度並行或低延遲的操作,在多個時鐘域中運行或以硬件速度執行自定義邏輯。這樣一來,它們就會很繁重,而且您幾乎不需要MCU作為設計的核心-它們可能會移到管理位置,例如加載配置位流。一個例子是 Minimig中的PIC或ARM,它們實現了存儲接口。
但是,有一些產品模糊了這些界限。一些示例:
來自命令式編程背景技術,這是對硬件設計的一種調整,因為您需要獲得FPGA的優勢。但是,您也會在其他地方找到有用的經驗。
像AVR這樣的MCU與編程到FPGA中的MCU之間並沒有什麼區別。 OpenCores站點具有用於AVR的VHDL代碼,可在FPGA中使用。您可以研究它,看看它是如何工作的,甚至不用購買合適的FPGA板就可以在模擬器中親自嘗試。
微控制器是一種數字電路,它們依次從其程序存儲器中依次執行命令。微控制器的數字硬件電路是固定的,組成數字電路的不同柵極之間的互連是永久性的,並蝕刻在矽片上。FPGA可以看作是具有可編程互連功能的數字門(實際上雖然有luts)池的集合。現在,可以通過對互連編程來在fpga上製作任何數字電路(甚至是微控制器)。