在現(xiàn)代電子設計中,FPGA(現(xiàn)場可編程門陣列)因其高度的靈活性和可配置性而得到廣泛應用。FPGA的靈活性主要來源于其內(nèi)部配置存儲器,這些配置信息通常以比特流的形式存儲和加載。本文將深入探討FPGA比特流的結構及其在Vivado開發(fā)環(huán)境中的重要性。
一、FPGA配置基礎
大多數(shù)現(xiàn)代FPGA都是基于SRAM(靜態(tài)隨機存取存儲器)的,包括Xilinx的Spartan和Virtex系列。在FPGA上電或重新配置期間,比特流從外部非易失性存儲器(如閃存)中讀取,通過FPGA配置控制器的處理,加載到內(nèi)部的配置SRAM中。SRAM保持了配置邏輯、IO、嵌入式存儲器、布線、時鐘、收發(fā)器和其他FPGA原語等所有的設計信息。
二、比特流結構
比特流是一個包含F(xiàn)PGA完整內(nèi)部配置狀態(tài)的文件,包括布線、邏輯資源和IO設置。Xilinx FPGA的比特流結構主要包括以下幾個部分:
填充(Padding):填充數(shù)據(jù)是全0或全1序列,被FPGA配置控制器忽略。填充數(shù)據(jù)用于在非易失性存儲器中分離比特流。一般使用全1填充較為方便,因為執(zhí)行擦除后閃存的狀態(tài)也是全1。
同步字(SYNC):同步字是一個特殊值(0xAA995566),通知FPGA配置控制器處理后續(xù)的比特流數(shù)據(jù)。同步字標志著比特流的開始或一個新的段的開始。
命令(Commands):命令用于讀和寫FPGA配置控制器寄存器。每個比特流中出現(xiàn)的一些命令,有的是ID-CODE,用于標識比特流屬于哪個FPGA器件。其他命令包括幀地址寄存器(FAR)、幀數(shù)據(jù)寄存器(FDRI)和無操作(NOOP)等。
存儲器幀(Memory Frames):存儲器幀是配置Xilinx FPGA的比特流基本單元。幀的大小與具體的FPGA系列有關,系列不同,幀的大小也不同。例如,Virtex-6器件的幀有2592位。每個Virtex-6器件具有的幀數(shù)不同,從最小7491(對于LX75T)到最大55548(對于LX550T)。幀用于多個邏輯片、IO、BRAM及其他FPGA的配置。每幀都有一個地址,對應于FPGA配置空間的位置。
解同步字(DESYNC):解同步字通知FPGA配置控制器比特流的末端位置。解同步字之后,所有的比特流數(shù)據(jù)被忽略,直到遇到下一個同步字。
三、Vivado中的比特流生成
Vivado是Xilinx提供的一款強大的FPGA開發(fā)軟件,支持從設計創(chuàng)建到比特流生成和燒錄的完整流程。在Vivado中,開發(fā)者通過添加設計文件、編譯、仿真、布局布線等步驟,最終生成比特流文件。
工程創(chuàng)建與文件添加:在Vivado中創(chuàng)建工程后,開發(fā)者需要添加Verilog設計文件,并進行編譯。編譯成功后,進行功能仿真,確保設計沒有語法和功能錯誤。
布局布線:在仿真通過后,進行布局布線,將具體的輸入、輸出映射到FPGA對應的引腳上。這一步驟完成后,Vivado會生成一個包含F(xiàn)PGA完整配置信息的布局布線后文件。
生成比特流:利用BITGEN工具,Vivado將布局布線后文件轉換為比特流文件。BITGEN是一個高度可配置的工具,具有多個命令行選項,用于確定比特流輸出格式、啟用壓縮處理減少比特流大小、提高FPGA配置速度、使用CRC來確保數(shù)據(jù)完整性、對比特流加密等。
燒錄:最后,通過Vivado的Hardware Manager,將比特流文件燒錄到FPGA中,進行實際測試。
四、比特流的安全性
由于比特流包含了FPGA的完整配置信息,因此其安全性至關重要。Xilinx FPGA提供了一個選項,用來加密在更高設計安全要求情況下的比特流。解密密鑰可以存儲在內(nèi)部的電池備份RAM(BBR)或eFuse中。BBR存儲器是易失性的,需要外部電池,而eFuse則是非易失性的,一旦編程后無法更改。
五、結論
FPGA比特流結構是FPGA配置和設計的核心。了解比特流的組成和生成過程,對于開發(fā)者來說至關重要。Vivado作為一款強大的FPGA開發(fā)軟件,提供了從設計到燒錄的完整流程支持,使得FPGA的開發(fā)更加高效和便捷。隨著技術的不斷發(fā)展,FPGA的應用領域將越來越廣泛,比特流結構的研究和優(yōu)化也將持續(xù)進行。





