袁 君,李治輝,姚 超
(中國電子科技集團公司第三十研究所,四川 成都 610041)
由于FPGA數(shù)據(jù)掉電丟失的問題,F(xiàn)PGA配置是系統(tǒng)設(shè)計中必不可少的部分[1]。隨著FPGA配置文件的增大,配置時間在系統(tǒng)啟動過程中所占的時間比例越來越不可忽視。如果FPGA設(shè)計中包含PCIE、SDIO等從設(shè)備,還必須在CPU啟動掃描設(shè)備前就配置完成并進入工作態(tài),這時FPGA配置的速度尤為關(guān)鍵。實際應用中,每個項目選用的FPGA型號不盡相同,配置的相關(guān)參數(shù)也不同,但是FPGA的從模式配置時序卻基本一致[1]。為了保證足夠的配置速率和配置模塊的快速移植,針對嵌入式系統(tǒng)中CPU+FPGA的典型應用[2],本文提出了一種基于CPLD+FLASH的通用、快速、全國產(chǎn)化的FPGA配置方案。該方案兼顧靈活性和通用性,對實際項目具有極大的參考價值。
方案的系統(tǒng)組成如圖1所示。CPU與CPLD通信一般對速率不敏感,可通過SPI、I2C、LocalBus以及GPIO等簡單接口交互,幾乎每個系統(tǒng)的CPU都滿足條件。CPU不僅可以和CPLD通信,實現(xiàn)接口轉(zhuǎn)換或數(shù)據(jù)處理等邏輯功能,還可以通過CPLD內(nèi)部的SPI FLASH控制器操作外部FLASH。CPLD讀取FLASH內(nèi)的配置參數(shù)和數(shù)據(jù),按照從模式配置接口的時序要求實現(xiàn)FPGA的配置。
圖1 方案原理架構(gòu)
本方案主要有3個優(yōu)點:
(1)通用性強。硬件設(shè)計和CPLD邏輯設(shè)計保持不變,CPU僅僅通過改變FLASH上存儲的數(shù)據(jù)格式,便可以實現(xiàn)不同F(xiàn)PGA芯片的程序配置,能夠快速應用于新項目,縮短項目開發(fā)調(diào)試周期。
(2)配置速度快。CPLD整個配置期間無需CPU干預,而且可以上電后立即啟動配置[3],能夠最大程度地減少配置時間。
(3)靈活性高。支持CPU在線更新FPGA配置文件和配置參數(shù),實時獲取配置狀態(tài)和結(jié)果,方便項目調(diào)試。
本著國產(chǎn)化的產(chǎn)品目標,兼顧成本和性能,設(shè)計中CPLD采用安路公司的ELF2L45。該器件具有4 500個LUT和700 kb的BRAM,足夠?qū)崿F(xiàn)本方案的邏輯功能。FLASH型號選擇兆易創(chuàng)新的GD25Q系列,時鐘頻率高達104 MHz,不同存儲大小的型號能做到設(shè)計兼容。
當前市面上的主流FPGA(Xilinx、intel、安路、高云等)都支持從串、從并的配置方式,且遵循如圖2所示的配置時序波形。
圖2 FPGA從模式配置典型時序
不同型號的FPGA配置主要有復位脈沖時間T1、等待初始化完成的時間T2、等待時鐘和數(shù)據(jù)輸出的時間T3、配置文件長度L、比特序bs、字節(jié)序Bs、文件加載后DONE拉高前額外需要的CCLK數(shù)量N1、DONE拉高后啟動完成前額外需要的CCLK數(shù)量N2、配置接口數(shù)據(jù)位寬W等變化因素。
根據(jù)上述配置變量,方案中FLASH內(nèi)部存儲的數(shù)據(jù)格式定義如圖3所示。第0個page用于存儲配置過程的變量,可隨著FPGA配置參數(shù)的變化靈活改變。其中,標記定義為常數(shù),用于識別配置參數(shù)起始位置,并預留校驗和字段,用于驗證配置參數(shù)的正確性;文件長度包括配置文件后面的填充數(shù)據(jù);CPLD在填充數(shù)據(jù)輸出期間繼續(xù)輸出時鐘和特定的數(shù)據(jù),保證DONE拉高前FPGA能夠正常進入啟動過程;填充數(shù)據(jù)的最小長度PL可按PL=([N1/8]+1)×W計算。配置接口數(shù)據(jù)位寬W支持1 bit和8 bit兩種,足夠滿足實際應用。
如圖4所示,CPLD主要完成與CPU的數(shù)據(jù)通信,實現(xiàn)SPI FLASH控制器和FPGA配置控制等功能。
圖3 FLASH數(shù)據(jù)存儲格式
圖4 CPLD內(nèi)部實現(xiàn)
主要有5個子模塊。第一,CPU通信接口。按照自定義協(xié)議與CPU進行數(shù)據(jù)收發(fā),并進行通道的分流和合流。第二,SPI FLASH控制器,實現(xiàn)CPU和CPLD對外部FLASH的各種命令操作。第三,寄存器讀寫,提供RAM讀寫操作接口。第四,配置控制模塊,負責主動發(fā)起FLASH的讀請求和處理讀返回數(shù)據(jù)。第五,從配置接口,完成FPGA從配置時序的控制。
SPI FLASH控制器支持兩個8 bit的FIFO通道訪問,按數(shù)據(jù)幀的方式仲裁和處理,實現(xiàn)過程如圖5所示。外部CPU實現(xiàn)FLASH的擦除、編程以及讀等操作。FLASH編程后置QE位,使能SPI接口的四線模式。CPLD實現(xiàn)配置期間FLASH數(shù)據(jù)的快速讀取。由于FLASH接口沒有流控,控制器輸入需要做整包處理,保證一幀寫數(shù)據(jù)能夠連續(xù)發(fā)往FLASH。控制器輸出緩存需預留足夠的空間,保證每次的讀數(shù)據(jù)完整不丟失。命令序列控制主要實現(xiàn)與FLASH交互的字節(jié)順序。SPI控制器完成并串轉(zhuǎn)換和SPI總線的時序控制。
圖5 SPI FLASH控制器實現(xiàn)
為優(yōu)化CPLD資源占用,控制器僅支持讀ID、寫使能、讀寫狀態(tài)寄存器、擦除(扇區(qū)擦除、塊擦除、芯片擦除)、單線/四線讀和頁編程[4]命令。圖6是用安路開發(fā)軟件抓取到的FLASH四線讀操作時序。波形中可以看到8 bit位寬檢測碼0xBB11220044、同步字0xAA995566等標志性字段,讀數(shù)據(jù)是四線傳輸,但是命令、地址和dummy都是單線傳輸??紤]到該部分時間開銷,一次操作讀取的數(shù)據(jù)越長效率越高。此外,F(xiàn)LASH的SPI接口時鐘頻率應滿足條件:
圖6 邏輯分析儀捕獲的FLASH四線讀操作波形
考慮到設(shè)計的靈活性和調(diào)試的便捷性,CPLD內(nèi)部定義以下5個和配置相關(guān)的通用寄存器。
寄存器1:讀FLASH起始page,默認page0。
寄存器2:配置啟動信號,CPLD自清零。
寄存器3:配置結(jié)束標志和配置結(jié)果,包含錯誤狀態(tài)。
寄存器4:配置文件長度,從FLASH中讀取的參數(shù)值。
寄存器5:當前配置已輸出的數(shù)據(jù)長度。
當FLASH上存儲多份配置數(shù)據(jù)時,可通過寄存器1選擇當前配置的版本。如果系統(tǒng)對FPGA上電配置時間有要求,可以修改寄存器2的默認值使能配置啟動。CPLD上電后會立即開始FPGA的配置,不占用CPU的啟動時間。CPU啟動后還可以寫寄存器2觸發(fā)在線配置。CPLD開始配置后自動清零該寄存器。配置過程中,CPLD實時更新寄存器5。CPU任意時刻都可以讀相應的寄存器判斷配置狀態(tài)和進度,實時獲取配置結(jié)果,定位配置失敗原因,在項目調(diào)試和問題排查中極為方便。
根據(jù)上述原理,CPLD的配置邏輯按照圖7的流程圖設(shè)計。上電自動啟動配置或者CPU命令啟動配置都會觸發(fā)該流程。每次配置CPLD先主動讀FLASH的控制參數(shù)page,獲取本次配置所需要的參數(shù),隨后只要緩存空間足夠,就繼續(xù)讀取FLASH的配置數(shù)據(jù),且地址依次遞增直到累計讀取長度達到配置參數(shù)L。讀返回數(shù)據(jù)寫入一個位寬8 bits、深度1 024 words的異步FIFO中。寫入前需根據(jù)bs進行比特序調(diào)整,根據(jù)W進行位寬轉(zhuǎn)換。從串模式下,F(xiàn)IFO中只有最低比特有效。異步FIFO采用showahead模式,初始化完成再等待T3時間后開始讀FIFO。只要FIFO非空即讀,同時將讀數(shù)據(jù)輸出到DATA。讀時鐘取反后輸出到DCLK,保證時鐘上升沿處于數(shù)據(jù)最佳采樣窗口。FIFO空時,DCLK和數(shù)據(jù)都輸出低電平。配置數(shù)據(jù)輸出完成后檢測到DONE拉高,再根據(jù)配置參數(shù)N2繼續(xù)輸出時鐘,然后結(jié)束本次配置。無論配置是否成功,CPLD都會將配置結(jié)果記錄在寄存器中。
圖7 CPLD內(nèi)部狀態(tài)跳轉(zhuǎn)示意
本文以FPGA型號為復旦微電子公司的JFM7K325T為例[5],配置文件約11 MB,F(xiàn)LASH接口的SPI時鐘頻率fQSPI為50 MHz,每幀讀取一頁,配置接口時鐘頻率fDCLK為25 MHz,數(shù)據(jù)位寬W為8 bit。
圖8 邏輯分析儀捕獲的CPLD配置過程波形
CPLD完成一次成功的配置需經(jīng)歷圖8中的5個步驟。其中,cfg_timer記錄配置FPGA所消耗的時間,波形中顯示的是十進制;計數(shù)的時鐘為25 MHz;CPLD從啟動配置到DONE管腳拉高大約需要522 ms;CPU完全能在BOIS階段掃描到FPGA實現(xiàn)的從設(shè)備,滿足項目對配置時間的要求。如果提高SPI時鐘速率、配置位寬、配置時鐘頻率和每幀從FLASH讀取的數(shù)據(jù)長度等,配置時間還可進一步縮短。
針對CPU+FPGA的應用架構(gòu),提出一種基于CPLD+FLASH的FPGA配置方案。該方案的硬件和邏輯設(shè)計通用性高,可以實現(xiàn)模塊化,便于項目移植且配置速率高,滿足系統(tǒng)啟動要求。CPU還可以靈活更新配置內(nèi)容,調(diào)試和升級方便。該方案具有可行性,已成功應用于多個實際項目,為工程實踐提供了良好的借鑒。