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