圖2. FPGA的不同部分
FPGA資源規范通常包括可配置邏輯塊的數量,固定功能邏輯塊(例如乘法器)的數量以及存儲器資源(例如嵌入式Block RAM)的大小。在許多FPGA規范中,當為特定應用選擇和比較FPGA時,這些規范通常是最重要的。
可配置邏輯塊(CLB)是FPGA的基本邏輯單元。有時稱為切片或邏輯單元,CLB由兩個基本組件組成:觸發器和查找表(LUT)。各種FPGA系列在觸發器和LUT封裝在一起的方式上有所不同,因此了解觸發器和LUT非常重要。
人字拖
觸發器是二進制移位寄存器,用于在FPGA電路內的時鐘周期之間同步邏輯并保存邏輯狀態。在每個時鐘沿,觸發器會在其輸入上鎖存1或0(TRUE或FALSE)值,并將該值保持恒定,直到下一個時鐘沿為止。
圖3.觸發器符號
觸發器是二進制移位寄存器,用于在FPGA電路內的時鐘周期之間同步邏輯并保存邏輯狀態。在每個時鐘沿,觸發器會在其輸入上鎖存1或0(TRUE或FALSE)值,并將該值保持恒定,直到下一個時鐘沿為止。
查找表(LUT)
圖4.四輸入LUT
CLB中的許多邏輯都是使用少量LUT形式的RAM來實現的。很容易假設FPGA中的系統門數是指特定芯片中的NAND門和NOR門的數量。但是,實際上,所有組合邏輯(AND,OR,NAND,XOR等)都被實現為LUT存儲器中的真值表。真值表是每個輸入組合的預定義輸出列表。
這是數字邏輯課的快速入門。
例如,布爾AND操作如圖5所示:
圖5. NI LabVIEW布爾與運算
表2列出了與運算的兩個輸入對應的真值表。
表1.布爾“與”運算的真值表
乘法器和DSP Slice
圖6. NI LabVIEW乘函數
將兩個數字相乘的看似簡單的任務可能會占用大量資源,并且在數字電路中實現起來非常復雜。為了提供參考框架,圖6給出了使用組合邏輯實現4位乘4位乘法器的一種方法的示意圖。
圖7. 4位乘4位乘法器的示意圖
現在想象一下將兩個32位數字相乘,一次乘以2,000次運算。因此,FPGA預先構建了乘法器電路,以節省數學和信號處理應用中的LUT和觸發器使用。
許多信號處理算法都涉及保持連續的總數被相乘,因此,諸如Xilinx Virtex-5 FPGA之類的高性能FPGA已預先構建了乘法器累加電路。這些預構建的處理模塊(也稱為DSP48 Slice)將25位乘18位乘法器與加法器電路集成在一起。
塊RAM
存儲器資源是選擇FPGA時要考慮的另一個關鍵指標。用戶定義的RAM嵌入整個FPGA芯片,對于存儲數據集或在并行任務之間傳遞值很有用。根據FPGA系列的不同,您可以按16或36 kb的塊配置板載RAM。您仍然可以選擇使用觸發器將數據集實現為數組。但是,大型陣列對于FPGA邏輯資源而言很快變得昂貴。一個100個元素的32位數組可以占用Virtex-II 1000 FPGA中超過30%的觸發器,或占不到嵌入式Block RAM的1%。數字信號處理算法通常需要跟蹤整個數據塊或一個復雜方程式的系數,并且沒有板載存儲器,
FPGA固有的并行執行功能允許由不同的時鐘驅動獨立的硬件邏輯。在以不同速率運行的邏輯之間傳遞數據可能很棘手,板載內存通常用于使用先進先出(FIFO)內存緩沖區來平滑傳輸。
回到頂部將FPGA設計到系統中盡管FPGA有許多優勢,例如速度,可靠性和靈活性,但也存在與FPGA相關的折衷。FPGA沒有微處理器體系結構和OS具有的驅動程序生態系統和代碼/ IP基礎。此外,與操作系統結合的微處理器為文件結構以及與用于許多通常是必不可少的任務(例如將數據記錄到磁盤)的外圍設備進行通信提供了基礎。
結果,在過去的十年中,出現了一種混合架構,有時也稱為異構架構,其中微處理器與FPGA配對,然后將FPGA連接到I / O。現代FPGA通常將邏輯門與處理器結合到一個稱為片上系統(SoC)的芯片中,以提高計算性能。這種方法利用了這兩個目標所提供的好處。
圖8. NI提供了整個系列的FPGA支持的設備,包括封裝的和板級的,您可以基于結合微處理器和FPGA的理想混合架構,使用LabVIEW進行編程。
美國國家儀器公司(National Instruments)在其支持FPGA的設備中實現了這種功能強大的微處理器加FPGA體系結構。這些設備跨越多種不同的外形尺寸,從堅固到高性能的系統,都基于相同的體系結構。
回到頂部FPGA設計工具既然您知道了FPGA芯片的組成部分,您可能會問:“如何配置所有這數百萬個組件來構建需要執行的邏輯?”
答案是,您可以使用開發工具在軟件中定義數字計算任務,然后將其編譯為包含有關如何將組件連接在一起的信息的配置文件或位流。過去,FPGA技術面臨的挑戰是,只有對數字硬件設計有深刻理解的工程師才能使用低級FPGA設計工具。但是,諸如LabVIEW之類的高級綜合(HLS)設計工具的興起改變了FPGA編程的規則,并提供了將圖形框圖轉換為數字硬件電路的新技術。
傳統FPGA設計工具
在FPGA開發的前20年中,諸如VHDL和Verilog之類的硬件描述語言(HDL)演變為用于設計FPGA芯片上運行的算法的主要語言。這些低級語言集成了其他文本語言提供的一些優勢,并意識到在FPGA上您正在構建電路。產生的混合語法要求將信號從外部I / O端口映射或連接到內部信號,這些內部信號最終連接到包含算法的功能。這些功能按順序執行,并可以引用FPGA內的其他功能。但是,很難在連續的逐行流程中可視化FPGA上任務執行的真正并行性。HDL反映了其他文字語言的某些屬性,
為了驗證由FPGA程序員創建的邏輯,通常的做法是在HDL中編寫測試平臺,以通過斷言輸入和驗證輸出來環繞并執行FPGA設計。測試平臺和FPGA代碼在仿真環境中運行,該仿真環境對FPGA芯片的硬件時序行為進行建模,并將所有輸入和輸出信號顯示給設計人員以進行測試驗證。與創建原始FPGA HDL設計本身相比,創建HDL測試平臺和執行仿真的過程通常需要更多時間。
使用HDL創建FPGA設計并對其進行驗證后,需要將其饋入采用基于文本的邏輯的編譯工具,并通過幾個復雜的步驟將HDL合成為一個包含以下信息的配置文件或位流:組件應如何連接在一起。作為此多步驟手動過程的一部分,通常需要您指定信號名稱到所使用的FPGA芯片上的引腳的映射。
圖9. VHDL中的簡單計數器FPGA設計
最終,該設計流程中的挑戰在于,傳統HDL編程所需的專業知識并不廣泛,因此,絕大多數工程師和科學家都無法使用FPGA技術。
高級綜合設計 工具
圖形HLS設計工具(例如LabVIEW)的出現消除了傳統HDL設計過程中的一些主要障礙。LabVIEW編程環境非常適合FPGA編程,因為它清楚地表示了并行性和數據流,因此在傳統FPGA設計過程中經驗豐富和經驗不足的用戶都可以利用FPGA技術。此外,為了不丟失以前的知識產權(IP),您可以使用LabVIEW將現有的VHDL集成到LabVIEW FPGA設計中。由于LabVIEW FPGA與硬件高度集成,因此無需像許多HLS代碼生成器一樣,可以用VHDL重寫代碼來滿足時序或資源限制。
圖10.左側是LabVIEW,它是FPGA的高級設計工具。它為創建和擴展VHDL設計時經常發現的低級復雜性提供了抽象。
然后,為了仿真和驗證FPGA邏輯的行為,LabVIEW直接在開發環境中提供了功能。在不了解底層HDL語言的情況下,您可以創建測試平臺以行使設計邏輯。此外,LabVIEW環境的靈活性還可以通過導出到周期精確的仿真器(例如Xilinx ISim)來幫助更高級的用戶對設計的時序和邏輯進行建模。
LabVIEW FPGA編譯工具可自動執行編譯過程,因此您只需單擊一個按鈕即可啟動該過程,并在完成編譯階段時接收報告和錯誤(如果有)。如果由于您的FPGA設計而確實發生了時序錯誤,LabVIEW將以圖形方式突出顯示這些關鍵路徑,以加快調試過程。
結局
隨著諸如LabVIEW之類的高級工具使FPGA更加易于使用,FPGA技術的采用持續增長。但是,重要的是要查看FPGA內部并了解將框圖編譯為可在硅片中執行時實際上發生了多少事情。根據觸發器,LUT,乘法器和Block RAM比較和選擇硬件目標是為您的應用選擇合適的FPGA芯片的最佳方法。在開發期間,尤其是在優化大小和速度時,了解資源的使用非常有幫助。本文無意成為所有FPGA基本構建模塊的全面清單。您可以從下面的資源中了解有關FPGA和數字硬件設計的更多信息。
責任編輯:gt
評論
查看更多