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